May 12th, 2012

2019

Об расширение языка программирования

Я уже писал, чем мне больше всего Forth, а потом, на волне ностальгии -- Factor, мне нравился: понятностью способа расширения языка (http://ailev.livejournal.com/833956.html). Для многих современных языков эта расширяемость уже общее место, но реализуемое по-разному. Оставив в стороне конкатенативные (а хоть и функциональные, как Factor) языки, возьмём в качестве примера Nemerle и Haskell.

Как я понимаю, люди в массе своей почему-то легко научаются пользоваться для расширения языка макросами, как в Nemerle. Но с трудом научаются ленивостью, как в Haskell. Ленивость изящней макросов, спору нет. Но только после метанойи выворота мозга наизнанку, что не с каждым может произойти (пока не придумано технологии обучения: набора правильных упражнений для восьмилетних деток. А эта технология, как показывает пример даже с процедурными языками, может появиться еще только через пару десятков лет -- и что, столько ждать?!).

Вообще, бодания немерлистов (по определению мультипрадигмальных) с хардкорными хаскелоидами весьма показательны -- http://stdray.livejournal.com/65441.html (собственно, там можно найти и все необходимые ссылки на литературу, приплетание в эту дискуссию Clojure и много чего ещё).

Мне почему-то кажется, что устаканивание общепринятого способа расширения языка принципиален. Равно как и определение того, что и как из этих расширений должно поддерживаться IDE (в том числе дискуссия о том, насколько IDE и язык одно и то же, длящаяся со времен Smalltalk).

В любом случае, все эти языки не слишком-то обсуждают проблемы programming-in-the-large, когда много-много самых разных библиотек самых разных авторов, и много-много самых разных программ обработки на самых разных вычислительных узлах. И мало какие конструкции языка (а хоть и расширяемого) помогают в этой ситуации.

Ну, и можно ещё вспомнить, что побеждают не идеи, а их реализации. Вот сделали ТурбоПаскаль, включая вставки на ассемблере -- и на много-много лет Паскаль стал из теоретического языка вполне практическим. К Немерле и Хаскелю, равно как и Фактору (включая их IDE, библиотеки, совместимость с legacy окружением) это всё относится в полной мере: победит, скорее всего, удачный инструмент, а не собственно язык с его идеями...