Whitespace — необычный язык программирования, где код состоит только из пробелов, табуляций и переводов строк. Видимые символы — буквы, цифры, знаки — интерпретатор игнорирует, воспринимая их как комментарии. То есть программы, написанные на Whitespace, невидимы. Они выглядят как пустые файлы, но при этом работают как обычно. С их помощью можно выполнять сложные задачи — от вывода текста до вычислений. В статье разберем, как устроен этот язык, кто его создал, для чего он нужен и почему стал относительно популярным среди энтузиастов.

Как работает Whitespace: синтаксис и возможности
Whitespace — стековый императивный язык, где применяется всего три символа: пробел (S), табуляция (T) и перевод строки (L). Эти элементы формируют команды, которые управляют стеком, выполняют арифметику, работают с кучей (динамической памятью), обрабатывают ввод-вывод и поддерживают управление потоком через метки и подпрограммы. Язык Тьюринг-полный, это значит, что на нем можно написать любую программу, которая в принципе реализуется с помощью компьютера. Теперь давайте посмотрим, как работать на этом ЯП.
Команды кодируются последовательностями S, T и L. Примеры:
S S S — помещает число на стек.
T S S — складывает два верхних числа на стеке.
T S T S — сохраняет значение в куче по адресу.
S L S S — задает метку для перехода.
L L — завершает программу.
Все это записывается в двоичном формате. Первый символ определяет знак: S — положительное число, T — отрицательное. Далее идет двоичное представление, где S — 0, T — 1, завершаемое L. Например, число 72 (ASCII-код буквы «H», в двоичной системе 1001000) кодируется как S T S S T T S S L, где S — знак плюс, а T S S T T S S — двоичный код.
Работа с кучей позволяет хранить данные по адресам, а метки и подпрограммы обеспечивают гибкость. Например, S L T S вызывает подпрограмму, а S L S T выполняет переход к метке. Это делает Whitespace мощным, несмотря на минималистичный синтаксис.

Писать код на Whitespace вручную трудно из-за его невидимого синтаксиса, поэтому энтузиасты создали компиляторы и отладчики, которые позволяют писать команды в читаемом виде, автоматически преобразуя их в последовательности пробелов, табуляций и переводов строк. Это упрощает разработку и помогает избежать ошибок.
История создания и контекст эзотерических языков
Whitespace создали в 2002 году Эдвин Брейди и Крис Моррис, студенты Университета Дарема. Брейди позже стал известен созданием функционального языка Idris. Анонсировали Whitespace 1 апреля, из-за чего многие приняли его за шутку. Но нет, это не первоапрельский обман, а интересный эксперимент, где проверялись возможности нестандартного синтаксиса.
В целом же, эзотерические языки, такие как Brainfuck, Whitespace или Malbolge, создаются для творчества, а не для практики. Вот примеры:
Brainfuck, появившийся в 1993 году, использует всего восемь символов (+ - > < [ ] . ,). Синтаксис минималистичный, но код сложно воспринимать из-за сжатости и отсутствия интуитивных конструкций.
Malbolge, созданный в 1998 году, еще сложнее: его синтаксис намеренно запутан, а команды меняют свое поведение после выполнения, что делает программирование почти невозможным без специальных инструментов.
INTERCAL — ЯП из 1972 года, созданный как пародия на ранние языки. В нем используются команды вроде PLEASE и DO NOT, а интерпретатор отказывается выполнять код, если в нем слишком мало или слишком много вежливости.

Языки вроде Whitespace позволяют по-новому взглянуть на программирование и поэкспериментировать с тем, каким может быть код. Whitespace занял в этом движении свое особое место.
Сообщество активно делилось идеями на Esolang Wiki и GitHub. Выкладывались примеры программ — от простых вычислений до алгоритмов сортировки и чисел Фибоначчи. Whitespace превратился в площадку для демонстрации креативности и мастерства.
Пример Hello, world!
Рассмотрим программу, которая выводит Hello, world! Она состоит из последовательностей S, T и L, кодирующих ASCII-символы и команды вывода. Вот фрагмент для буквы «H» (ASCII-код 72):
S T T S S T T S S L
T L
Здесь S S S — команда для помещения числа на стек, S T T S S T T S S L — число 72 (знак S, двоичный код T S S T T S S), а T L — вывод символа. Остальные буквы кодируются аналогично. Полная программа — длинная цепочка невидимых символов, которую невозможно разобрать без интерпретатора.
Компиляторы, преобразующие человекочитаемые инструкции в Whitespace-код, упрощают разработку. Они помогают избежать ошибок в последовательностях символов, что критично для работы программы.
Полиглоты и стеганография: скрытая сила Whitespace
Whitespace позволяет создавать полиглоты — файлы, которые остаются корректными для нескольких языков и выполняют разные действия в зависимости от того, в каком интерпретаторе они запущены. Поскольку он игнорирует видимые символы, код можно встроить в пробелы файлов на других языках. Например, в HTML-документе:
<body>
<p>Hello</p>
</body>
Пробелы перед <body> или <p> в HTML не влияют на отображение страницы, но могут содержать команды Whitespace, если такой файл открыть в соответствующем интерпретаторе. Это позволяет использовать язык для стеганографии — скрытия данных в местах, где их не ожидают. Такие вставки могут работать как «пасхалки» или служить нестандартным способом хранения информации. Полиглоты на основе Whitespace интересны тем, что один и тот же файл интерпретируется по-разному в зависимости от среды. Например, Python-скрипт с определенными отступами может оставаться рабочим, а при запуске через интерпретатор Whitespace — выполнять другую задачу. Это открывает простор для экспериментов: Whitespace-код можно прятать в комментариях C++ или структуре отступов в языках с чувствительным форматированием.
Зачем нужен Whitespace: эксперименты и влияние
Whitespace почти не используется в практических проектах, но он полезен в образовательной и исследовательской сфере. Чем? Помогает понять работу стековых машин, низкоуровневые операции и основы синтаксиса. Из‑за того, что он крайне чувствителен, даже один лишний пробел ломает программу. Тут требуется максимальная внимательность при написании кода.
Энтузиасты создают на Whitespace сложные проекты: игры, интерпретаторы других языков, алгоритмы сортировки. А еще этот язык вдохновил разработчиков на создание новых эзотерических ЯП и инструментов. Например, появилась среда Whitelips — визуальный редактор и отладчик для Whitespace и ему подобных.
Если вдруг вы уже пытались создать что-то на Whitespace, расскажите о своем опыте в комментариях.