Скриптовые языки

Главная особенность этих языков (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