Комментарии 20
Первый компилятор, который Мюллер разработал сам, тянул всего на 296 байт.
Именно компилятор? Не интерпретатор?
Смотря как оценивать сложность. Все эти языки можно перевести в набор команд типа ассемблерных, тогда они перестанут быть сложными. Но на мой взгляд сложность правильней оценивать по богатству синтаксического разнообразия, системе типов, подводным камням. Примерами таковых могут быть C++, Agda.
Программа, печатающая «Hello, World!»: (отображается форматирование не правильно — в Википедии немного не так она выглядит :)
> v
@,,,,,,,,,,,,"Hello World!"<
esolangs.org/wiki/Befunge
P.S. Однo из интересных решений в дизайне «языка», что последовательность программы укладывается в двумерной размерности и командами коротких переходов вверх, вниз, влево, вправо осуществляется переход на этом двумерном поле (типа движение известной игры — змейка нужно запрограммировать с максимальным использованием коротких переходов и выбора из минималистичных-простых команд)
Как-то немного странно писать отдельно о COW, который фактически является препроцессором для brainfuck.
Где Perl?
use re 'eval';
''=~('('.'?'
.'{'.( '`'|'%').("\["^
'-').('`'| '!').('`'|',').'"'
.'#'."\!". "\/".( '['^'.').('['^'(').(
'['^')').'/'.(('`')| '"').('`'|')').(('`')|
'.').'/'.('['^"\+").( '`'|'%').('['^')').('`'
|',').('!'^('+')).( '!'^'+').('['^'+').(('[')^
')').('`'|')') .('`'|'.').('['^'/').('{'^'['
)."'".('`'^'(' ).('`'|'%').('`'|',').('`'|',').
('`'|'/').','.( '{'^'[').('['^',').('`'|'/').("\["^
')').('`'|','). ('`'|'$').'!'."'".';'.('!'^'+').('"').
'}'.')');$:='.' ^'~';$~='@'|'(';$^=')'^'[';$/='`'|'.';$,
='('^('}');$\= '`'|'!';$:=')'^'}';$~='*'|'`';$^='+'^'_';
$/='&'|'@';$,= '['&'~';$\=','^'|';$:='.'^'~';$~='@'|"\(";
$^=')'^'[';$/='`'|'.';$,='('^'}';$\='`'|'!';$:=')'^'}';$~=
'*'|'`';$^='+'^'_';$/='&'|'@';$,='['&'~';$\=','^'|';$:='.'^
'~';$~='@'|'(';$^=')'^'[';$/='`'|'.';$,='('^'}';$\='`'|'!'
;$:=')'^'}';$~='*'|'`';$^='+'^'_';$/='&'|'@';$,='['&'~';$\=
','^'|';$:='.'^'~';$~='@'|'(';$^=')'^'[';$/='`'|'.';$,='('^
'}';$\='`'|'!';$:=')'^'}';$~='*'|'`';$^='+'^'_';$/='&'|'@'
;$,='['&'~';$\=','^'|';$:='.'^'~';$~='@'|'(';$^="\)"^ '['
;$/='`'|'.';$,='('^'}';$\='`'|'!';$:=')'^'}';$~='*' |((
'`'));$^='+'^'_';$/='&'|'@';$,='['&'~';$\ =','^'|' ;$:
='.'^'~';$~='@'|'(';$^=')'^'[';$/='`'| '.';$,= '('
^'}'; $\='`'|'!';$:=')'^'}';$~="\*"| '`';$^= '+'
^'_';$/='&'|'@';$,='['&'~';$\ =(',')^ '|'
;$:='.'^ '~';$~='@' |"\("; $^=')' ^+
'[';$/= '`'|'.'; $,='(' ^"\}"; $\
=('`')| "\!";$:= "\)"^ "\}"; (
($~))= '*'|'`'; ($^) ='+'
^"\_"; $/=('&')| '@'; ($,)
='['& "\~";$\= ','^ '|';
($:)= '.'^'~' ;$~= '@'|
'('; $^=')' ^'[' ;$/=
'`'| '.' ;$,= '('^
'}'; $\= '`' |((
'!' )); $:= ')'
^(( '}' )); $~=
'*' |(( '`' ))
;( ($^))= ((
(( '+')) ))
^+ "\_";$/= ((
'&' ))|+ "\@"; $,
=(( '['))& '~'; $\=
','^ "\|";$:= '.' ^'~'
;($~)= ('@')|
"\(";$^= ')'^'['
echo "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
(I x) = x
(K x y) = x
(S x y z) = (x z (y z))
Все остальное можно выразить через эти три.
Unlambda это минимальный функциональный Тьюринг-полный язык программирования.
Hello World на Unlambda выглядит следующим образом:
`r```````````.H.e.l.l.o. .w.o.r.l.di
Есть ещё JSFuck, похожий на BrainFuck, но являющийся совместимым с JavaScript. Используются только символы ()+[]! "Hello World" на нём занимает 8218 символов.
Это фигня, а не "самые сложные языки".
Самые жлобские языки — да. Которые специально сделаны так, чтобы простые вещи пришлось делать не сложно, но мучительно.
Фантазии у авторов не хватает идти дальше машины Тьюринга или, например, комбинаторной логики с минимальным базисом.
Типа: а вот у нас есть процессор с одной командой, а давайте заставим программистов писать в машкодах к нему.
(Тогда программист берёт макроассемблер и фигачит систему макросов, потом ещё немножко, автокод, транслятор с фортрана, спеку в ллвм, бекенд к гусю и шлангу, и пишет на обычных сях и фортране, выдавая скомпилированный машкод за троды своих плудов).
По-настоящему сложные языки — это те, которые позволяют оперировать по-настоящему сложными предметами.
Какие-нибудь там автоматические доказыватели теорем, CLP поверх пролога, система типов хаскелла, языки со встроенными метаязыками и макросами...
Даже если ядро языка крошечное, как у форта или лиспа, но поверх нахлобучен DSL — например, на форте лисп-машина, а на лиспе — пролог-машина, и дальше — писать на прологе прямо на форте.
Пять самых сложных языков программирования на свете