Архивы: по дате | по разделам | по авторам

Улыбка без кота

АрхивКомментарий дня
автор : Евгений Золотов   03.04.2003

В традиционных языках программирования "пробел", "табуляция" и "перевод строки" либо не значат вообще ничего, либо - в лучшем случае - разделяют команды. Язык Whitespace, созданный британскими студентами, напротив, основан на использовании только этих трех символов-невидимок.

Будучи поверхностно знакомым едва ли с десятком языков программирования, сложно утверждать наверняка, но всё же вряд ли будет большим преувеличением сказать: большинство компьютерных языков схожи в своём отношении к "невидимым" символам или, говоря иначе, символам, отображающимся в тексте программы в виде пустого места. Если быть совсем точным, то символом можно назвать лишь один их них - "пробел" (код 32 в кодировке ASCII). Два других именуются управляющими символами и отвечают за перемещение курсора в нужном направлении. Это табуляция, изображаемая несколькими пробелами (код 9), и перевод строки (код 10). Впрочем, как бы их ни называли, суть не меняется, и особого значения в языках программирования им не придаётся. В лучшем случае они разделяют команды (BASIC), в худшем не значат вообще ничего (C). Вот почему с таким недоверием было встречено пару дней назад сообщение о создании языка, который не только придаёт значение трём вышеозначенным символам, но и основывает на них свой синтаксис. Это язык Whitespace - замечательная первоапрельская шутка британских студентов, воплощённая в машинный код.

Для того чтобы лучше понять идею, положенную в основу Whitespace, отрешитесь на минутку от всего что вы знаете из программирования - ибо отличия нового языка разительны. Впрочем, что тут говорить, взгляните лучше на отрывок программы, написанной на нём самом:

---------------------





---------------------

То, что вы видите - не издевательство. Просто единственные символы, которые что-то значат для интерпретатора Whitespace, это те самые "невидимки": пробел, TAB и перевод строки. Естественно, такой язык существенно проще по функциональности, нежели языки традиционные, но всё же он умеет многое - работает с целыми числами и текстом, стеком, наделён метками, подпрограммами, условными и безусловными переходами, вводом/выводом. Любая команда записывается комбинацией из двух и более символов, а все параметры представляются в двоичной форме. К примеру, такая комбинация - "[пробел][ пробел][ пробел][TAB][перевод строки]" - означает команду записи на вершину стека числа "1", а "[пробел][перевод каретки][пробел]" передаёт на вывод текущее обрабатываемое значение. Использование "нормальных" символов (буквы, цифры и т.п.) разрешено, но на работу программ они никакого влияния не оказывают, поскольку воспринимаются виртуальной машиной Whitespace в качестве комментариев.

Как было сказано выше, Whitespace обрёл свою известность как первоапрельская шутка: сообщение, впервые привлекшее к проекту внимание сетевой общественности, было опубликовано в международный День дураков. Но язык этот действительно существует. Сам он написан на малоизвестном функциональном языке Haskell для операционной системы Linux, но силами энтузиастов за последние дни реализован также в версиях для Ruby и Perl, а также обзавёлся добрым десятком забавных примеров (включающих и классическую программку "Hello, world"). Зачем это всё нужно никто точно не знает. На замену обычным языкам программирования Whitespace явно не годится. Однако, он очень неплох для разного рода экспериментов в информатике и может быть найдёт себе поклонников среди скучающих любителей электронных диковинок.

© ООО "Компьютерра-Онлайн", 1997-2024
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.