Наверх

Языки программирования, понятные только машинам (и безумцам)

Когда код выглядит как магическое заклинание: путеводитель по эзотерическим языкам

06.08.2025
12:21
Языки программирования, понятные только машинам (и безумцам)

Некоторые языки программирования помогли отправить людей на Луну, некоторые используются для разработки новых лекарств от лейкемии, а некоторые существуют только для того, чтобы вас позлить. Brainfuck — это минималистичный «эзотерический язык», или «эзоланг», состоящий всего из восьми неалфавитных символов. Эзоланги — это экспериментальные, шутливые и намеренно сложные в использовании языки, созданные для того, чтобы раздвинуть границы кода (и ваших возможностей). В языке Brainfuck часть базовой программы «Привет, мир!» выглядит так .<-.<.+++.——.—, из-за чего любому нормальному человеку захочется сказать «Пока, мир!».

Большинство эсолангов вообще не похожи на компьютерный код. Вот один из способов вывести «Привет» на языке программирования Шекспира:

Весь мир — это программа.

Гамлет, меланхоличный принц.Офелия, голос машины.

Акт: 1. Сцена: 1.

[Входят Гамлет и Офелия]

Офелия: Ты так же прекрасен, как сочетание в одном лице красивого, честного, храброго, миролюбивого, благородного лорда и счастливого, доброго, золотого короля. Выскажи своё мнение!

Гамлет: Ты прекрасна, как цветущий, милый, прекрасный, прелестный, солнечный летний день и восхитительная, сладкая, вкусная роза. Ты прекрасна, как сочетание тебя самой и цветка. Выскажи своё мнение!

[Exeunt]

По сути, Гамлет и Офелия — это «переменные», которым присваиваются числовые значения. Существительные «лорд» и «король» имеют значение +1, а такие прилагательные, как «милый» и «красивый», выступают в роли множителей, производя числа, соответствующие символам ASCII: «H» для Гамлета и «I» для Офелии. «Говори, что думаешь!» выводит их на экран.

Видео от DGL.RU

Машиночитаемый
Обычная колонка о программировании. Потому что, если/когда машины возьмут верх, мы должны хотя бы говорить на их языке.

Эзоланги могут быть ещё более безумными. На вики-странице Esolang вы найдёте список из как минимум 6000 таких странных языков, и их число продолжает расти. Меня, как корейца, забавляет !한국어, эзоланг, который требует, чтобы программы были написаны на грамматически правильном корейском языке. Ещё есть Whitespace, невидимый язык, состоящий из пробелов и табуляции. Если вам хочется больше цвета, есть Пьет (как у Мондриана), чей «код» состоит из 20 цветов, расположенных в виде сетки, и создаёт программы, похожие на абстрактные картины. Некоторые эзоязыки даже «полны по Тьюрингу», то есть теоретически могут делать всё то же, что и более «ответственные» языки, такие как C++ или Python (примерно так же, как вы теоретически можете использовать нож для писем вместо ножа для суши, чтобы приготовить омакасе из 12 блюд).

Но в совокупности всё это заставляет задуматься, для чего нужны все эти мозговыносительные штуки. Экспериментировать с ними одновременно забавно и раздражающе, ведь вас окружают бесчисленные клоны, незначительные вариации правил существующих языков (например, Whitespace, но с круглыми скобками) и языки, созданные просто ради забавы. В своей книге «Теория уловки» литературный критик Сианн Нгай говорит, что уловки — от «Фонтана» Дюшана до Google Glass — «работают слишком мало, но в то же время слишком много». Они прилагают минимум усилий, но при этом жаждут, чтобы их заметили. В целом уловки могут быть «трудосберегающими» хитростями, которые позволяют избежать тяжёлой работы, необходимой для создания чего-то действительно стоящего.

Итак, являются ли эсоланги уловкой?

Мы, программисты, всегда были извращенцами, поэтому неудивительно, что эзоязыки появились в самом начале нашей истории. В 1972 году два студента из Принстона, Дональд Вудс и Джеймс Лайон, создали язык программирования без произносимой аббревиатуры, или INTERCAL (естественно). Он остаётся одним из наиболее проработанных эзоязыков с 20-страничным справочным руководством — пародией на документацию IBM, наполненной юмором и садизмом. INTERCAL выдаёт ошибку, если вы не используете достаточное количество ключевых слов PLEASE, но он также отклоняет программы, в которых вы используете это слово слишком часто. Вы завершаете программу фразой PLEASE GIVE UP.

На протяжении многих лет интервьюеры пытались выведать у Вудса, что за грандиозное видение или высокая концепция вдохновили его на создание INTERCAL, но он всегда настаивал на том, что ничего подобного не было. Они с Лайоном сделали это ради забавы. Но некоторые программисты всё же поддаются желанию приукрасить свою работу. Они склонны создавать предложения вроде тех, что можно найти в «Журнале беспредметного искусства», где разработчик эсоланга, назвав эсоланги «формой искусства», описывает их как «языки программирования [так в оригинале], которые “переключают внимание с управления и контроля на культурное самовыражение и отказ от чего-либо”». В качестве примера он приводит Brainfuck, который «дестабилизирует власть машины, предоставляя программисту доступ к компьютерной логике в очень простой форме, но при этом не стирая границу между человеческим самовыражением и ассемблерным кодом и тем самым отправляя нас в нелепое логическое путешествие».

Языки программирования, понятные только машинам (и безумцам) фото
Профили WIRED — люди, которые создают проблемы: мошенничество, торговля наркотиками, даже убийства, — а иногда и спасают положение.

Это всего лишь теоретическая болтовня — даже не из тех, что запоминаются. Такие фразы, как «алгоритмическое бессознательное» и «навязчивые паттерны чуждой логики», которые встречаются в том же эссе, — это помоспейк, выдаваемый за проницательность. Я немного скептически отношусь к тем, кто слишком много теоретизирует об эстетике кода или называет себя программистами-художниками — не потому, что я отвергаю эту концепцию, а потому, что планка слишком низка. На этом рынке цифровых 1em0ns полно легкомысленных работ.

Мне кажется, что эзоланги рождаются из своего рода мономании. Эта своеобразная болезнь в контролируемых условиях может породить «Поминки по Финнегану» или безумные эксперименты группы писателей и математиков «Улипо». Но при неправильном применении мономания превращается в то, что философ Дэниел Деннет назвал «chmess» — игру, идентичную шахматам, за исключением того, что король ходит на два поля в любом направлении, а не на одно. Как и шахматы, chmess может порождать бесконечные диссертации и научные статьи. В ней есть все признаки интеллектуальной глубины, но в какой-то момент вы должны задаться вопросом: почему я думаю об игре, в которую на самом деле никто не играет? Есть ли в ней что-то по-настоящему новое или это просто предсказуемая вариация на тему?

Многие новые эзоязыки, вдохновлённые изобретательной странностью INTERCAL или Piet, пытаются достичь эзотеричности путём подражания, но в итоге создают лишь бесцельную техническую обструкцию. Одним из самых выдающихся достижений Oulipo является роман Жоржа Перека La Disparition, полностью написанный без буквы e — формального ограничения, которое в менее умелых руках могло бы привести к нелепой бессмыслице, но вместо этого породило удивительно трогательный шедевр. Эзоланги, которые кажутся вялыми и безжизненными, похожи на поддельные липограмматические романы, в которых пропущена какая-то буква.

Тем не менее, время от времени вы натыкаетесь на эсоланг, который напоминает вам, что не каждое экспериментальное предприятие основано на одной лишь изобретательности. Среди недавних находок — Alice Мартина Эндера, в котором направление выполнения меняется в зависимости от слэшей — / и \ — которые ведут себя как зеркала, преломляя поток логики, подобно лучам света, и направляя выполнение программы в разные стороны. Удивительно элегантно, но это работает, когда не должно.

Ещё одно оригинальное предложение — Hexagony от Ender, 2D-эсоланг, в котором код выполняется на шестиугольной сетке. Вдохновлённый более ранней классикой под названием Befunge (первым 2D-эсолангом с прямоугольной сеткой), Hexagony — это не просто вариация с косметическими изменениями. Он решает сложную техническую задачу, связанную с обеспечением согласованности потока управления и памяти в исходном коде с шестиугольной структурой.

Пока я играл на завораживающей онлайн-площадке Hexagony, мне вспомнилось, что Роджер Эберт, который не был поклонником ранних фильмов Дэвида Линча, сказал о «Малхолланд Драйв»: «Наконец-то его эксперимент не разбивает пробирки». Время от времени среди обломков разбитых колб в лаборатории esolang какой-нибудь хакер направляет свою мономанию на поиск новых способов взломать компилятор. Уловка? Возможно. Но я с радостью подчинюсь, хотя бы ради того, чтобы получить извращённое удовольствие от наблюдения за тем, как гений-извращенец с радостью издевается над компьютером.

ИИ не справится: 9 задач программирования, где человек вне конкуренции

Источник: Wired
Подпишитесь на наши новости:
Нажимая кнопку «Подписаться», вы принимаете «Пользовательское соглашение» и даёте согласие с «Политикой обработки персональных данных»