Скриптовые языки
Главная особенность этих языков (scripting language), называемых также
языками сценариев, в том, что тексты программ на них (скрипты, сценарии)
используются, как правило, непосредственно, без этапа компиляции,
т.е. это интерпретирующиеся языки. Вторая особенность
скриптовых языков, отличающая их от таких языков как классический бэйсик, ---
это их ориентированность на интеграцию всевозможных программных средств, а
также часто их легкая встраиваимость в другие системы программирования.
Скриптовые языки широко используются в Internet и как
языки командных файлов. Наиболее широко используются следующие универсальные
языки скриптов: Ruby, Tcl, Perl, JavaScript, Python, PHP, Haskell, VBScript.
В среде Linux широко используется язык оболочки Bash, в DOS --- язык BATCH-файлов.
Все языки скриптов предназначены для быстрой разработки ПО.
Первым скриптовым языком можно считать язык JCL (Job Control Language)
фирмы IBM для систем OS/360 начала 1960-х.
Операционная оболочка Bash (Bourne Again Shell) представляет собой итог
более 20-летнего развития оболочек Unix. Bash мобильна и существует также для
ОС Microsoft DOS и Windows. Применяется в основном для интерактивного
текстового взаимодействия ОС с пользователем и написания командных файлов.
Для всех рассматриваемых далее языков приводится пример --- определение
рекурсивной функции-факториала.
Один из популярных в Internet для создания CGI-скриптов (Common
Gate Interface) язык перл (Perl --- Practical Extraction and Report Language)
разрабатывается Лэрри Уоллом (Larry Wall) с конца 1980-х. Perl объединил в
себе многие средства языка си и популярных в Unix программ для обработки
текстов: bash, sed, awk. Недостатки перл: программы трудны для понимания (у
подпрограмм, например, нет явных формальных параметров), наличие избыточных
точки-с-запятой и фигурных скобок, путанность терминологии (указатели называют
ссылками), малопригоден для встраивания в другие приложения. Одна из лучших
среди прочих ЯП поддержка регулярных выражений.
@ sub fact {
@ my $n = shift;
@ if ($n < 2) {return 1;}
@ return $n*fact($n-1);
@ }
Язык Tcl (Tools Command Language, произносится tickle) создан в конце
1980-х Джоном Остерхаутом (John Ousterhout), как встраиваемый язык для
интерактивных средств. Фактически является расширенным языком оболочки.
Tcl во многом похож на язык оболочек Unix. В начале
1990-х к Tcl был добавлен пакет Tk (Toolkit) для быстрой разработки
графических интерфейсов. Tk не превязан жестко к Tcl и используется, в
частности, с перл (Perl/Tk), питоном, рубином. Tcl используется для разработки
CGI-скриптов, а Tk --- это наипростейшее средство для создания графических
приложений для всевозможных вариантов Unix. Tcl/Tk можно также использовать
для приложений стороны клиента в WWW (World Wide Web), однако, в этом
качестве он поддерживается значительно менее, чем яваскрипт. Сильными
сторонами Tcl являются хорошая поддержка ситуационного подхода в
программировании и простота основ. Слабой стороной --- трудность
разработки больших программ.
@ proc fact n {
@ if $n<2 {return 1}
@ expr $n*[fact [expr $n - 1]]
@ }
Яваскрипт (JavaScript) создан в середине 1990-х Netscape Corp. для WWW-браузеров,
как язык встраиваемый в HTML-документы. Этот язык --- фактический стандарт для
программ стороны клиента в WWW. Он только незначительно связан с языком
ява (Java) фирмы Sun Microsystems. На основе яваскрипт создан стандарт ECMAScript
(European Computer Manufacturers Association). Выделяется существованием нескольких
плохосовместимых разновидностей, что требует поддержки каждой из них в www-страницах, ---
стандарт DOM направлен на устранение этих несовместимостей.
@ function fact(n) {
@ if (n < 2)
@ return 1;
@ return n*fact(n-1);
@ }
Язык питон (Python), созданный в начале 1990-х Гвидо ван Россумом (Guido van
Rossum) в Штихтингском Математическом Центре (Stichting Mathematisch Centrum)
в Амстердаме для преодоления разрыва между программированием на языке
оболочек и си, является объектно-ориентированным, простым для изучения,
поддерживающим высокоуровневые типы данных, мобильным, легко расширяемым и
встраиваемым языком. Используется для написания CGI-скриптов, программ с
графическим интерфейсом (Python/Tk, Python/wxWidgets), СУБД. Выделяется
требованием к структурной записи операторов, поддержкой множественного
наследования и функционального программирования. Недостатки: громоздкость
синтаксиса для работы с данными, сложности с автоматическим освобождением
динамической памяти ("уборщиком мусора") --- введение "слабых ссылок" (weak
references).
@ def fact(n):
@ if n<2: return 1
@ return n*fact(n-1)
VBScript (VBS) фирмы Microsoft является вариантом (наряду с VBA и VB.NET)
языка Visual Basic, популярным с начала 1990-х, и предоставляет
простейший путь для создания графических приложений для Microsoft Windows.
Его недостатки: немобильность, отсутствие поддержки многих средств
программирования, трудность встраивания в другие программные системы.
Скрипты на VBScript можно встраивать в HTML-файлы --- они исполняются,
подобно яваскрипт, на компьютере пользователя. Их также можно использовать
как командные файлы.
@ function fact(n)
@ if n<2 then
@ fact=1
@ else
@ fact=n*fact(n-1)
@ end if
@ end function
Язык ПХП (PHP, Personal Home Pages или PHP: Hypertext Preprocessor, вторая половина
1990-х) используется в основном в Internet как встраеваемый, подобно яваскрипт,
в HTML язык, который в отличие от яваскрипт выполняется
на сервере. Выделяется отсутствием поддержки обычных массивов (все --- ассоциативные),
наличием двух явных присваиваний, по ссылке и по значению, си-синтаксисом операторов.
Недостатки: необходимость точки-с-запятой; необходимость знака доллара перед переменными.
@ function fact ($n) {
@ if ($n < 2) return 1;
@ return $n*fact($n - 1);
@ }
Рубин (Ruby) разрабатывается с 1993 Юкихиро Мацумото (Matz). Стал основой
революционной среды web-разработки Ruby on Rails (Рубин на рельцах).
Отличается хорошей поддержкой ООП, хотя и без множественного наследования,
хорошей читабильностью программ, достигаемой применением очевидных соглашений
по умолчанию, поддержкой функционального программирования. Недостаток --
сложности с деструкторами.
@ def fact(n)
@ if n<2
@ 1
@ else
@ n*fact(n-1)
@ end
@ end
Язык Хаскелл (Haskell) считается наиболее ``чистым'' функциональным
языком. Отличается, наряду с VBS, частичной поддержкой работы с типами, а также
наиболее эффектным синтаксисом определения функций. В нем реализованы
так называемые "ленивые вычисления", т.е. вычисления в этом языке откладываются
до последнего возможного момента, что позволяет, в частности, работать с
псевдобесконечными структурами. Пространства имен типов и переменных разделены.
@ fact 0 = 1
@ fact n = n*fact(n-1)
Луа (Lua) --- самый маленький (если сравнивать размеры описаний грамматик)
язык сценариев. Основной тип данных -- таблицы. Отличается тесной интеграцией
с Си и ориентированностью на встраивания в приложения. Нет поразрядных
операций.
@ function fact(n)
@ if n < 2 then
@ return 1
@ else
@ return n*fact(n - 1)
@ end
@ end