Эзотерические языки программирования

Dec 31, 2005 11:30

Интересная статья: http://rsdn.ru/article/philosophy/languages.xml
Повествует об эзотерических языках программирования, т.е. о языках, предназначенных не для написания полезных практически программ, а скорее наоборот, ставящих целью это всячески затруднить, в общем, народ развлекается, попутно исследуя возникающие интересные проблемы. При этом, естественно, почти все такие языки - Тьюринг-полные.

Началось это в 72 году созданием языка INTERCAL, но расцвело по-настоящему буйным цветом после создания в 93 году языка BrainFuck, состоящего всего из 8 инструкций. Вот "Hello world!" на нём:
++++++++++[>+++++++>++++++++++>+++>+<
<<<-]>++.>+.+++++++..+++.>++.<<++++++
+++++++++.>.+++.------.--------.>+.>.

Собственно, он практически полностью саму машину Тьюринга и моделирует. Зато компилятор размером всего в 240 (!) байт :) Энтузиасты даже создали для него IDE и компьютер, нативно исполняющий brainfuck-код (см. иллюстрации к статье).

Создавались языки самые разные, и графически моделирующие, и поэтические (вроде Shakespeare, где надо написать пьесу, или Haifu - программа выгялдит как хокку). Но и цель "затруднить написание программы до невозможности" не оставалась в стороне, а скорее стала идеалом, в результате чего появился язык Malbolge (от Malebolge, название восьмого круга Ада Данте - автор так и говорит, что хотел сделать максимально Infernal язык программирования). Задача удалась - первая программа на этом языке (разумеется, "Hello World") появилась спустя всего каких-то 2 (!) года. Причем она была не написана, а найдена с помщью специальной исследовательской программы на Лиспе. Вот код:
(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**
hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<

Эта цель была не единственной, создавались и просто пародии. Например, стремление языка Ada к максимальной безопасности доведено до смешного в языке paranoid - вот пример кода с синхронным переводом:
//типы данных:
х: сомнительное целое;
а: мало_похоже_на массив [x..y а_может_быть z] каких_нибудь символов;
L: безнадежно_поврежденный список слишком_маленьких целых;
//присвоение значения переменной:
x ТОЧНО 3;
x ЧЕСТНОЕ_СЛОВО 3;
x МАМОЙ_КЛЯНУСЬ 3;
//условия:
ЕСЛИ y ЧТО_ТО_ОКОЛО 8 ...
ПРИ_МАЛЕЙШЕМ_ПОДОЗРЕНИИ_ЧТО x < 100...
//вызов процедуры:
СБЕГАЙ_КА_ПОИЩИ имяпроцедуры;

Однако не все такие языки - Тьюринг-полные. Например, язык HQ9+ имеет всего 4 инструкции, соответствующие стандартным тестам, предъявляемым к языкам: H печатает "Hello, World!", Q реализует тест Квайна (программа, печатающая свой собственный исходник), 9 реализует "99-бутылочный тест" (на арифметику и циклы, должно печатать «99 бутылок пива стоят на стене. Одна упала. 98 бутылок пива стоят на стене. Одна упала. 97 бутылок...»), и операция + инкрементирует значение внутренней переменной (а просто так, доступа к ней все равно нет).

Стоит, однако, прочитать статью целиком (я привел совсем немного) - там описано гораздо больше интересного (и смешного).

программирование

Previous post Next post
Up