- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF138:DrBrown1
Материал из Linuxformat.
Мы языки-малютки
- «Языки-малютки» – те, что «заточены» под конкретную задачу. В Linux таких полно.
Linux поддерживает массу языков программирования общего назначения: C, C++, Java, Perl, PHP, Python и многие другие. Они – не «малютки», хотя я подозреваю, что некоторые из них начинали именно в этом качестве. Языки-малютки жестко настроены на определенную цель. Обычно это интерпретируемые языки с усеченным синтаксисом.
Два классических, и старейших, языка-малютки – bc и dc. Оба они – «языки числовых расчетов с произвольной точностью», и различаются тем, что в bc используется «инфиксная» нотация – можно, например, задать такое выражение:
2 + 2
dc, напротив, применяет стек и польскую инверсную запись. Чтобы сложить два и два и вывести ответ, нужно набрать
2 2 + p
А как насчет Sed, потокового редактора? Он ведь служит только для выполнения автоматических замен в текстовых файлах, да? Ну, на самом деле нет. Познакомившись с пространством для хранения, шаблонами и освоив еще пару команд, кроме s, вы откроете для себя новый мир. Программы Sed отчасти похожи на программы на Awk.
Есть штуки, до гордого звания языка не дотягивающие – например, регулярные выражения. Их синтаксис весьма богат, это правда, но существует формальный «критерий полноты по Тьюрингу», на основании которого устанавливается принадлежность к семье языков программирования. При всех своих достоинствах и недостатках регулярные выражения не отвечают этому критерию. С другой стороны, некоторые языки чересчур велики, чтобы считать их малютками. Так, Awk предназначался для решения узкого класса задач, и его можно было бы отнести к мини-языкам, но более поздние версии вроде Gawk расширили его границы.
Еще из маленьких языков на ум приходят Tcl (язык быстрого создания прототипов и написания тестов) и такие утилиты, как Lex и Bison, которые помогают в написании лексических и синтаксических анализаторов, но по сути являются мини-языками.
Языки файлов настройки
Обычно мы не считаем файлы в /etc программами, но некоторые приближаются к ним. Вспомните о файлах настройки для PAM или Upstart или о синтаксисе команды Iptables. Везде встречаются проверки условий, позволяющие управлять логическим потоком. Многие другие, такие как конфигурационные файлы Postfix, файлы makefile и даже файл sudoers, поддерживают использование переменных. Наконец, есть ужасный конфигурационный файл Sendmail, который к тому же и чрезмерно запутан. Долго ли кому-то доказать, что тот или иной из этих файлов отвечает критерию Тьюринга?