<<
>>

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

Традиционные языки программирования предназначены прежде всего для создания автономных приложений: программ, которые принимают входные данные, обрабатывают их определенным образом и генерируют соответствующие результаты.
Однако в большинстве компьютерных приложений требуется координация множества программ. В большой платежной системе, например, должны обрабатываться данные от устройств чтения кредитных карточек, сканируемых бумажных форм а также данные, вводимые вручную с клавиатуры. Здесь выполняются тысячи запросов к базе данных; реализуются сотни юридических и корпоративных правил; создается обширная документация для сохраняемых записей, аудита, налоговых отчислений; распечатываются ведомости по зарплате; поддерживается связь с серверами по всему миру для обеспечения депозитов в режиме «онлайн», налогового обслуживания, изъятия накоплений, медицинского страхования и т. д. Эти задачи, вероятно, требуют применения сотен отдельных программ. Координация этих программ бесспорно потребует разнообразных проверок и логических решений, циклов, переменных и типов, подпрограмм и абстракций — тех же видов логических утилит, которые традиционные языки предоставляют внутри приложения.

В гораздо меньших масштабах художник-график или фотокорреспондент загружает изображения из цифровой камеры, конвертирует их в любимый формат, вращает изображения для выбора оптимальной ориентации, индексирует их по времени, теме и цветовой гамме, перемещает в удаленный архив, а затем повторно инициализирует память камеры. Ручное выполнение этих шагов, вероятно, будет и утомительно, и подвержено ошибкам. В подобном стиле создание динамической веб-страницы может требовать идентификации и авторизации, поиска в базе данных, отображения манипуляций, удаленного взаимодействия, чтения и записи текста HTML.

Сценарии подобных действий принято называть скриптами. Все эти сценарии обосновывают потребность в программах, которые координируют другие программы.

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

79

Конечно, можно написать программный код координации на Java, C или некотором другом традиционном языке, но это не всегда просто. Традиционные языки повышают эффективность, сопровождаемость, мобильность и возможность статического обнаружения ошибок. Их системы типизации создаются на основе таких понятий аппаратного уровня, как целые числа фиксированного размера, числа с плавающей запятой, символы и массивы. Напротив, скриптовые языки ориентированы на повышение гибкости, скорости разработки, локализацию и динамическую проверку (в период выполнения). Их системы типизации включают в себя такие понятия высокого уровня, как таблицы, шаблоны, списки и файлы.

Универсальные скриптовые языки, такие как Perl и Python, иногда называют склеивающими языками, поскольку они создавались для «склеивания» существующих программ в интересах создания большой системы. С ростом Всемирной паутины скриптовые языки получили новый толчок в направлении генерации динамического информационного наполнения сети. Они также широко используются как языки расширения, которые позволяют пользователю настраивать или расширять функциональные возможности «скриптовых» утилит.

Современные скриптовые языки происходят от предков двух категорий. В одной категории находятся командные интерпретаторы или «оболочки» традиционных пакетных или «терминальных» вычислений (в режиме командной строки). В другой категории — различные утилиты для обработки текста и генерации отчетов.

Примеры из первой категории предков включают в себя язык управления заданиями IBM, интерпретатор команд операционной системы MS-DOS, оболочки SH (от слова оболочка — shell) и CSH семейства Unix.

Ранние языки данной категории предлагали занести список команд, называемый скриптом (сценарием), в файл, который нужно интерпретировать. Язык SH начинался с небольшой коллекции команд, которые интерпретировались как вызовы системных подпрограмм, выполняющих вспомогательные функции (управление файлами, простая фильтрация файлов). К коллекции были добавлены переменные, операторы управления порядком вычислений, функции и другие возможности; в результате появился полный язык программирования. Одним из самых мощных и широко известных в этой категории был язык KSH (Bolsky и Korn, 1995), разработанный Дэвидом Корном в Bell Laboratories.

Примерами из второй категории предков являются генератор отчетов IBM, а также SED (потоковый редактор — stream editor) и язык AWK для Unix (назван в честь своих авторов — Альфреда Ахо (Alfred Aho), Питера Вейнбергера (Peter Weinberger) и Брайана Кернигана (Brian Kernighan)). AWK стартовал как язык генерации отчетов, но позднее превратился в язык более широкого назначения. От них развился язык Perl, первоначально разработанный Ларри Уоллом (Larry Wall) в 1986 году, а теперь ставший наиболее широко используемым универсальным скриптовым языком. Другими универсальными скриптовыми языками являются Tcl (Tickle), Python, Ruby, VBScript (для Windows) и AppleScript (для Mac).

С ростом Всемирной паутины в конце 90-х язык Perl был сильно адаптирован для создания веб-скриптов серверной стороны, на которой веб-сервер выполняет программу (на машине сервера) для генерации страницы. Одним из энтузиастов веб-скриптов был Расмус Лердорф (Rasmus Lerdorf), который создал коллекцию сценариев для трассировки обращений к его персональной домашней странице.

80

Глава 3. Виды языков программирования

Первоначально написанные на языке Perl, но вскоре переписанные в виде законченного и независимого языка, эти сценарии развились в PHP, очень популярный теперь инструмент для описания скриптов веб-серверной стороны.
Конкурентами PHP являются JSP (Серверные Страницы Java) и VBScript (на платформе Microsoft). Для создания скриптов на клиентском компьютере все основные браузеры реализуют язык JavaScript, разработанный корпорацией Netscape в середине 90-х и стандартизированный Европейской ассоциацией производителей компьютеров в 1999 году.

В своей классической работе по созданию скриптов [77] Джон Аустерхут (John Ousterhout) отмечает: «В скриптовых языках предполагается, что уже существует коллекция полезных компонентов, написанных на других языках. Скриптовые языки предназначены не для того, чтобы писать приложения с нуля, а скорее для того, чтобы объединять компоненты». Дж. Аустерхут прогнозирует будущее, в котором программисты активно применяют скриптовые языки для создания высокоуровневых системных структур, где крайне важны ясность, повторное использование и простота разработки. Традиционные языки, такие как C, C++ или Java, считает он, будут использоваться для модульных, повторно используемых системных компонентов, где важна сложность алгоритмов или скорость выполнения. Общее эмпирическое правило, по его словам, имеет вид: программный код на языке скриптов может быть разработан в 5-10 раз быстрее, но выполняться будет в 10-20 раз быстрее, если написан на традиционном языке программирования.

Некоторые авторы резервируют термин «создание скрипта» для склеивающих языков, используемых для координации множества программ. В общем случае, однако, создание скрипта (сценария) — более широкое и более неопределенное понятие. Нет никаких сомнений, что оно включает в себя создание веб-скриптов. Кроме того, большинство авторов распространяет его и на языки расширения.

Одни пользователи знакомы с «макросами» на Visual Basic для Microsoft Office. Другим пользователям известен текстовый редактор Emacs, написанный на языке, являющемся расширением языка LISP. Несколько языков (Tcl, Python, Guile и Elk), созданных как диалекты языка Scheme, имеют реализации, ориентированные на расширение больших программных приложений. Расширение считается основной целью языка Tcl. Некоторые широко используемые коммерческие приложения предоставляют свои собственные языки расширения. Например, инструментарий Tk, первоначально созданный для использования с Tcl, был включен в несколько скриптовых языков (Perl, Python, Ruby) для программирования графического интерфейса пользователя GUI.

В качестве языка скриптов можно рассматривать и расширяемый язык стилей для преобразований XSLT. XSLT — это часть растущего семейства утилит для расширенного языка разметки XML.

<< | >>

Еще по теме Скриптовые языки:

  1. О. Л. Голицына, Т. Л. Партыка, И. И. Попов. ЯЗЫКИ ПРОГРАММИРОВАНИЯ, 2008
  2. Перевод и иностранные языки
  3. Предложение №35 Осваивай новые Языки
  4. III. 1. 6. Лингвистические описания систем.
  5. ГИПОТЕЗА ОТНОСИТЕЛЬНОСТИ ЛИНГВИСТИЧЕСКОЙ
  6. § 3. Государственный язык
  7. ГЛАВА 1. ВОСПИТАНИЕ В СОВЕТСКОЙ СЕМЬЕ
  8. Инсценировка на телевидении
  9. Заявление на получение лицензии на вещание
  10. Юпитер во II доме
  11. Сергей Александрович Орлов. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения, 2013