Попытки использования «компонентного» стиля без смены языка (COM/OLE, CORBA) выявили некоторые концептуальные трудности; собственно, попытка создать целостное решение этих трудностей и породила платформы Java и .Net [История Java, впрочем, довольно извилиста; в разное время у Sun было множество разных версий насчет «что это мы делаем и зачем оно надо». Тем не менее на сегодняшний день платформа Java - более или менее прямой конкурент и аналог .Net.]. Их свойства (богатая стандартная библиотека, автоматическое управление временем жизни объектов, наличие виртуальной машины и т. п.) - прямой ответ на те вызовы, которые бросает компонентность. Что же касается языков Java и C# [Заметим, что платформа .Net принципиально многоязычна; Java, изначально бывшая «платформой для одного языка», сегодня движется в том же направлении. Тем не менее мы-то здесь рассматриваем в первую очередь историю языков программирования], то их архитектура и дала мне основания назвать происшедшее «второй большой чисткой»: как в свое время C, эти языки стремились вобрать в себя все «хорошие идеи» своего времени, но вдобавок избавиться от наследственной сложности, неоднозначности и других проблем, свойственных C++/Delphi/Visual Basic. Первые версии обоих новых языков таки были проще предшественников, но дальнейшее развитие снова пошло по спирали накопления возможностей и впитывания концепций. Сегодняшний C# - сложный, лаконичный и мультиконцептуальный язык; Java - консервативнее в своем стремлении к простоте и однозначности, но постепенно подбирается к той же планке.
Перечисленные языки - неотъемлемая часть истории развития средств написания программ; тем не менее всеобщая популярность обошла их стороной.
Линейка Pascal. Дело в том, что тот Паскаль, который стал популярным в руках фирмы Borland и который многие из нас учили в школе, от изначальной концептуально-чистой разработки Никлауса Вирта отличается довольно сильно, причем одни считают суть этого отличия «практичностью», другие - концептуальной грязью. Сам Вирт придерживается последнего мнения; будучи невысокого мнения о целостности и чистоте вообще всех широко используемых языков, Вирт и его ученики разработали несколько своих, «чистых и красивых» (Oberon, Modula, Zonnon).
Eiffel. Судьба Эйфелей и их создателя Бертрана Мейерса похожа на судьбу «настоящих Паскалей». Мейерс, как и Вирт, достаточно амбициозен в продвижении своих идей (в основном - об объектно-ориентированном программировании), называя их «единственно правильными»; распространен Eiffel нешироко, влияние его огромно.
Ada. Наконец, создатели самых разных языков программирования среди «вдохновляющих» называют язык Ada, разработанный в 80-х под руководством Пентагона. В каком-то смысле он был аналогом PL/I (не слишком удачная попытка собрать все возможные концепции в одном языке), но некоторые элементы Ada (в частности, ее система типов) оказали большое влияние на мышление авторов других языков.
Во-первых, это юниксовский sh и его производные (bash, ksh, csh и далее со всеми остановками). Первые оболочки *nix-систем ведут свой род от Алгола; юниксовский подход к объединению маленьких самостоятельных утилит считается одним из первых примеров компонентно-ориентированного программирования. Среди отдаленных потомков sh - как постмодернистский Perl (о нем мы еще поговорим), так и безусловно классицистический Tcl (а о нем не будем).
Во-вторых, язык веб-программирования PHP - тоже вполне популярен и вполне классицистичен. Его часто называют среди наследников Perl, но от последнего PHP перенял в основном способ именования переменных и область применения; в остальном первые PHP - это почти чистый C (вплоть до имен библиотечных функций). Небывалый успех PHP - это успех не языка программирования (часто критикуемого за концептуальную уродливость), а успех утилиты для легкой разработки веб-приложений. Так и повелось.
Хроники чистого разума
Автор: Виктор ШепелевИмперативная парадигма программирования («сделай то; потом сделай это; если А, сделай Б») не только наиболее естественна для современного компьютера, но и легко воспринимается человеком: простые программы на языках вроде Паскаля без труда пишут и читают пятиклассники. Но такая «естественность» совершенно не значит, что императивный способ - единственно возможный.
Любая большая система на C или Fortran содержит медленную, плохо продуманную, с кучей ошибок реализацию половины Common Lisp.
Десятое [Других нет] правило Гринспуна
включая сам Common Lisp.
Следствие Морриса
Практически во всех областях человеческого знания существует некий «естественный», «самоочевидный» подход (от уже неоднократно помянутого литературного классицизма до летательного аппарата, машущего крыльями). Но по мере развития и взросления человеческого подхода к этой области появлялись альтернативные варианты «как это делать», жертвующие «естественностью и понятностью» ради «чистого искусства», или «идеологической стройности», или «практической необходимости». Зачастую новые подходы оказывались даже единственно верными («аппарат, летающий как птица» так и не был построен, а «противоестественные» самолеты, вертолеты и дирижабли - пожалуйста).