Почему-то наиболее активно пишущими блоггерами в области языков программирования и computer science в моей rss читалке последнее время оказываются авторы двух стековых языков -- Cat и Factor. Если пробежаться по ссылкам — оказалось в этой области происходит много интересного.
* * *
Наиболее известным и распространенным стековым языком до сих пор является Forth, а в 80-е он вообще очень широко использовался в embedded системах. Чуть ли не каждый третий девайс программировался на Форте.
Основной плюс — синтаксис практически отсутствует, все просто как три рубля — есть данные на стеке, есть "слова" которые совершают операции над ними и результат опять же кладут на стек. Есть еще второй стек для хранения адресов возврата из функций.
Вот функция которая возводит аргумент в квадрат
SQUARE ( a -- b ) DUP * ;
В скобочках это комментарий (обозначает что на входе одно число, на выходе одно), DUP клонирует значение на вершине стека, * берет со стека два значения, умножает, и кладет результат на стек.
Затем году в 2001-м появился чисто функциональный стековый язык Joy. Состояния, как и полагается в функциональном языке — нету, абстракций (формальных параметров у функций) нету тоже, в целом все весьма похоже на point-free стиль в Хаскеле. Функции рассматриваются как пробразования Stack -> Stack. Есть higher-order функции и прочие замечательные вещи.
Joy в свою очередь вдохновил еще нескольких товарищей на создание еще нескольких интересных вариантов стековых языков.
Во-первых, Factor — динамически типизированый стековый язык, с функциями высшего порядка, сборкой мусора. Портированый на приличное количество платформ и динамично развивающийся.
Во-вторых, Cat — чисто функциональный стековый язык со статической типизацией и мощным выводом типов. Причем с последней версии типы автоматически выводятся вроде как для любой валидной программы на Cat.1
И, в-третьих — Enchilada, тоже чисто функциональный язык, предназначенный для параллельных вычислений. Замечателен тем, что строго статически типизирован, но тип в нем всего один — это список. То есть, скажем, число 3 считается эквивалентным списку, содержащему три пустых значения. В общем почитать очень интересно, например, умножение чисел там реализовано через декартово произведение таких списков, а по дизайну Enchilada очень напоминает APL-подобные языки, только с более человеческим лицом.
Ссылки:
Ну и про форт немного интересного до кучи:
- Микропроцессоры с поддержкой Forth
- Питерская контора, разрабатывающая различные девайсы и софт к ним на форте.
1Получается это вроде как засчет использования equirecursive типов. Почему в Хаскеле/ML используются isorecursive типы я еще не осознал, если кто объяснит -- буду очень благодарен :)