Открыть сервис

Язык SQUARE

Square (также известный как ESQUARED) — это эзотерический язык программирования, основанный на стековой архитектуре и использующий в качестве единственного синтаксического элемента символ пробела. Относится к категории языков, где код состоит исключительно из пробельных символов (whitespace languages), и предназначен для написания программ, чей исходный код визуально неотличим от пустого текста. Square был создан в 2012 году программистом под псевдонимом «Cat» как шуточный и одновременно исследовательский проект, демонстрирующий крайнюю степень сокрытия логики программы.

История

Язык Square был впервые опубликован в 2012 году на форуме esolangs.org, посвящённом эзотерическим языкам программирования. Его создатель, известный под ником «Cat», поставил цель разработать язык, который был бы ещё более нечитаемым, чем предшествующие whitespace-языки, такие как Whitespace (2003 год) и его модификации. В отличие от Whitespace, где используются три символа (пробел, табуляция, перевод строки), Square свёл синтаксис к одному-единственному символу — пробелу. Это сделало код полностью невидимым в стандартных текстовых редакторах.

Первая реализация интерпретатора была написана на Python и распространялась под лицензией MIT. В 2013 году появилась вторая версия языка (Square 2.0), в которой была добавлена поддержка подпрограмм и улучшена обработка ошибок. В 2015 году энтузиасты создали компилятор Square в Brainfuck, что позволило запускать Square-программы на платформах, не имеющих нативного интерпретатора. На 2024 год язык остаётся нишевым и используется преимущественно в соревнованиях по обфускации кода и как учебный пример для демонстрации принципов стековых машин.

Синтаксис и принцип работы

Square использует исключительно пробелы (код ASCII 32) для записи инструкций. Любые другие символы (буквы, цифры, знаки препинания) игнорируются интерпретатором и могут использоваться как комментарии. Программа представляет собой последовательность пробелов, сгруппированных в «слова» — блоки пробелов, разделённые любыми непробельными символами (например, буквами). Длина каждого блока пробелов кодирует определённую команду.

Система команд

Всего в Square определено 8 базовых инструкций, каждая из которых задаётся количеством пробелов в блоке:

Количество пробеловКомандаОписание
1PUSHПомещает на стек число 0
2DUPКопирует верхний элемент стека
3SWAPМеняет местами два верхних элемента
4POPУдаляет верхний элемент стека
5ADDСкладывает два верхних элемента
6SUBВычитает из верхнего второй сверху
7PRINTВыводит верхний элемент как число
8HALTЗавершает программу

Числа в Square кодируются не напрямую, а через последовательность команд PUSH и арифметических операций. Например, чтобы получить число 5, программист должен выполнить PUSH (1 пробел), затем ещё один PUSH, затем ADD (5 пробелов) — после чего на стеке окажется значение 2. Для получения произвольных чисел используются более сложные комбинации.

Пример программы

Программа, выводящая число 3, может выглядеть так (пробелы обозначены символом _, непробельные символы — буквами):

`` _a_b_c_d_e_f_g_h_i_j_k_l_m_n_o_p_q_r_s_t_u_v_w_x_y_z ``

Здесь каждый блок пробелов между буквами кодирует команду. Интерпретатор игнорирует буквы и выполняет последовательность: PUSH (1), PUSH (1), ADD (5), PUSH (1), ADD (5), PRINT (7), HALT (8). В результате на стеке формируется число 3, которое выводится на экран.

Реализации

Первая реализация Square была написана на Python и представляла собой интерпретатор, читающий файл с программой и выполняющий команды. Позднее появились реализации на других языках:

Все реализации являются открытыми и доступны на GitHub. На 2024 год существует не менее 10 различных интерпретаторов Square, написанных на разных языках программирования.

Применение

Square не предназначен для практического программирования и не используется в промышленной разработке. Основные области применения:

Известен случай 2018 года, когда участник конференции DEF CON представил программу на Square, которая, будучи вставленной в текстовый документ, вычисляла контрольную сумму файла. Программа занимала менее 1 килобайта и была полностью невидима для стандартных средств проверки.

Критика

Square подвергается критике по нескольким причинам:

Сторонники Square, напротив, отмечают его элегантность и минимализм: язык использует всего один символ, но является полным по Тьюрингу, то есть способен вычислять любую вычислимую функцию. Это делает Square интересным объектом для изучения в рамках теории формальных языков.

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →