Судьба языка APL за авторством Кеннета Айверсона (того самого, что написал «Notation as a Tool of Thought») сложилась более счастливо по крайней мере, «Тьюринга» Айверсону дали. Язык, который расширял привычную математическую нотацию для работы с массивами (все его операторы были одно-двухсимвольными комбинациями, APL требовал особой клавиатуры со спецсимволами), иногда считался «издевательством» и «write-only» языком. Тем не менее «нотация» Айверсона показала свою мощь на задачах, для которых предназначалась (сложные операции с массивами данных); годы спустя появились языки-наследники J (1990, создан Айверсоном как более простая и логичная версия APL) и K (1993, создан учеником Айверсона Артуром Уитни как более простая и логичная версия J), имеющие ограниченную, но устойчивую популярность. На K, к слову, написана коммерческая РСУБД kdb, вроде как являющаяся самой быстрой в мире; по слухам, код ее составляет 26 файлов с однобуквенными именами [Отгадать, какие именно буквы использованы, оставляем как домашнее задание внимательному читателю], в каждом из которых всего одна страница.
И наконец, для полноты картины упомянем язык Forth, который стоит несколько особняком по «глобальности задумки» (есть только стек и ничего кроме стека) он находится на уровне Лиспа (по странности внешнего вида тоже), а по «локальности последствий» где-то в районе Snobol и APL. Сегодняшнее использование Forth смахивает на «развлечение для понимающих»; языки, на которые повлияли концепции Форта, несколько экспериментальных гибридов (Kevo, Joy, Factor) да PostScript, язык описания страниц для печатающих устройств.
Программируя на Лиспе, просто невозможно зайти в тупик: язык будет поддерживать тот стиль программирования,
который вы сами для себя выберете или придумаете. Понятно, что такой подход требует от программиста самых свежих знаний для правильной и лаконичной реализации своих идей, но никто еще не жаловался на то, что ему приходится развиваться.
Те, кто хорошо знают и умеют применять Лисп, никогда не скажут, что какой-то язык может его полностью заменить, что Лисп устарел. Даже если такой программист использует в повседневной практике другой язык, значит, этот язык лучше подходит для решаемых задач или хорошо реализует полюбившуюся программисту парадигму.
Роман Клюйков
«Оторванность от реальности», свойственная «модернистским идеям», всегда мешала их выходу на «широкую публику» как напрямую (непонятность), так и косвенно, через вопросы производительности («если язык программирования не естествен для архитектуры компьютера, то чего будет стоить их взаимодействие?»), взаимодействия («как использовать библиотеки на более традиционных языках, коих уже есть много и отказываться от них не хочется?»), наличия программистов («если язык немэйнстримовый, а нам понадобится еще один программист в команду, где мы его возьмем?») [Интересно, что мэйнстрим часто и с удовольствием принимает побочные продукты развития «модернизма» как технологические решения, вроде сборщика мусора (Lisp и другие) и компиляции в байткод (Smalltalk), так и организационные (популярные понятия рефакторинга, экстремального программирования родились в сообществе Smalltalk)]. Здесь можно провести параллель с судьбой мэйнфреймов и прочих специализированных компьютеров: есть случаи, в которых «вроде бы все понимают», что случай сложный и нужно использовать специальные мощные решения, но «стоимость» этих решений (включая затраты по внедрению, подбору соответствующих специалистов, интеграции со «стандартными частями») такова, что «мы уж сделаем как обычно».
Но и у «как обычно» есть свои пределы. При попытке эти пределы раздвинуть (а она неизбежна, прогресс-то не удержать) немэйнстримовым странным идеям, как драгоценным винам, настанет свой черед. О чем далее.
Золотая рыбка в мутной воде: Экзотика становится повседневностью Автор: Виктор Шепелев
После двух полновесных тарелок как бы истории («как бы» потому что большинство описанных языков используются и в наше время) перейдем-таки к десерту изменению мира, современным трендам и прочим взглядам в будущее. Только прикинем для начала, откуда это будущее (активное перемешивание старых структурных идей и нестандартных идей модернизма) берется.За многие годы развития и усложнения традиционные языки отдалились от компьютера; да и сами компьютеры и их производительность стали несколько абстрактным понятием. Автоматическая сборка мусора, которая во времена Lisp была недостатком (по сравнению с ручным управлением памятью), во времена Java и C# стала достоинством, повышающим степень абстракции и надежность программ и обеспечивающим истинную компонентность [Я говорю не о неких мистических «объективных фактах», а о восприятии «средним индустриальным программистом»]. Множество возражений из серии «концептуально хороший язык, но производительность его навсегда ниже допустимого» постепенно отступило.
Вспомним, откуда в принципе растут ноги у структурной, императивной парадигмы: из «естественного» воплощения архитектуры компьютера. Но уже в рамках одного компьютера и одного пользователя сегодняшняя архитектура подразумевает множество «частностей», вроде распараллеливания, многопроцессорных систем, многоуровневых кэшей или, в случае карманных ПК, отсутствия деления на оперативную и постоянную память. То есть языки с моделью «последовательные инструкции, изменяющие ячейки памяти» уже не вполне «соответствуют». Что уж тут говорить о веб- и вообще сетевых приложениях, для которых «один процессор, один поток ввода/вывода, одна память» вообще малозначимая