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