A+, J, Joy, Closure и другие
Oct. 13th, 2010 06:57 pmНесколько интересных языков программирования, на которые меня "натолкнул" APL.
A+ -- "живая" реализация APL, о котором я писал вчера. Поддерживает в том числе и ASCII нотацию. Хотя при этом теряется вся красота греческих букв. Очень мощный инструмент для работы с векторами и матрицами, плюс есть встроенные средства визуализации. Вероятно, все же не такой мощный, как MatLab, поскольку A+ в настоящее время явно потерял позиции.
J -- разработан создателем APL. Использует ту же идею, но более простой и понятный синтаксис. Вероятно, используется практически для анализа данных даже сейчас. Во всяком случае комьюнити выглядит вполне живым, есть много библиотек.
Вот пример программы, которая "рисует" пирамидку числа-пи:
Joy -- "стековый" язык, наследник идей языка Forth. Особенностью языков такого типа является полное отсутствие переменных и формальных параметров функций. Все происходит на стеке. Жив Joy или нет, неясно, скорее -- нет. Но есть еще несколько стековых языков, таких как Factor или Cat, которые выглядят более живыми. Впрочем, зачем далеко ходить, сам Forth никто в утиль не списывает, он остается живым языком, несмотря на почтенный возраст. Не знаю насчет современных языков, но Форт еще отличался тем, что на нем практически очень трудно было допускать ошибки. Программа на Форте состоит из определения некоторых термов через известные термы. Причем в интерактивном режиме. Поэтому любой терм при определении, во-первых, сразу же проверяется интерпретатором, а во-вторых, проще простого его вызвать и проверить. В Форте можно программировать снизу вверх и сверху вниз, как угодно. Абсолютная гибкость.
Closure -- это достаточно распространенный диалект Лиспа, особенностью которого является интероперабельность с Java: он компилируется в JVM байт-код. Похожим свойством обладает другой функциональный язык -- Scala -- основной мой "инструмент" в настоящее время. Я всегда очень живо реагирую на Лисп, это замечательный язык, позволяющий программировать красиво минимумом средств.
И напоследок -- пример простенькой программки, реализованный на более чем 1300 языках: http://www.99-bottles-of-beer.net
A+ -- "живая" реализация APL, о котором я писал вчера. Поддерживает в том числе и ASCII нотацию. Хотя при этом теряется вся красота греческих букв. Очень мощный инструмент для работы с векторами и матрицами, плюс есть встроенные средства визуализации. Вероятно, все же не такой мощный, как MatLab, поскольку A+ в настоящее время явно потерял позиции.
J -- разработан создателем APL. Использует ту же идею, но более простой и понятный синтаксис. Вероятно, используется практически для анализа данных даже сейчас. Во всяком случае комьюнити выглядит вполне живым, есть много библиотек.
Вот пример программы, которая "рисует" пирамидку числа-пи:
Число уровней, понятно, может быть любым.
pi=: [: ": [: <.@o. 10x"_^]
PiList=: [: pi [: <: [: *: ]
PiTriangle=: ([: #~ odd) ,/. PiList
odd=: 1: + 2: * i.
PiTree=: ([: - [: i. -@]) |."0 1 PiTriangle
PiTree 10
3
141
59265
3589793
238462643
38327950288
4197169399375
105820974944592
30781640628620899
8628034825342117067
Joy -- "стековый" язык, наследник идей языка Forth. Особенностью языков такого типа является полное отсутствие переменных и формальных параметров функций. Все происходит на стеке. Жив Joy или нет, неясно, скорее -- нет. Но есть еще несколько стековых языков, таких как Factor или Cat, которые выглядят более живыми. Впрочем, зачем далеко ходить, сам Forth никто в утиль не списывает, он остается живым языком, несмотря на почтенный возраст. Не знаю насчет современных языков, но Форт еще отличался тем, что на нем практически очень трудно было допускать ошибки. Программа на Форте состоит из определения некоторых термов через известные термы. Причем в интерактивном режиме. Поэтому любой терм при определении, во-первых, сразу же проверяется интерпретатором, а во-вторых, проще простого его вызвать и проверить. В Форте можно программировать снизу вверх и сверху вниз, как угодно. Абсолютная гибкость.
Closure -- это достаточно распространенный диалект Лиспа, особенностью которого является интероперабельность с Java: он компилируется в JVM байт-код. Похожим свойством обладает другой функциональный язык -- Scala -- основной мой "инструмент" в настоящее время. Я всегда очень живо реагирую на Лисп, это замечательный язык, позволяющий программировать красиво минимумом средств.
И напоследок -- пример простенькой программки, реализованный на более чем 1300 языках: http://www.99-bottles-of-beer.net