nuclight: (Default)
[personal profile] nuclight
Интересная статья: 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 бутылок...»), и операция + инкрементирует значение внутренней переменной (а просто так, доступа к ней все равно нет).

Стоит, однако, прочитать статью целиком (я привел совсем немного) - там описано гораздо больше интересного (и смешного).
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

February 2017

S M T W T F S
   1 234
567891011
12131415161718
19202122232425
262728    

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 23rd, 2025 03:22 pm
Powered by Dreamwidth Studios