В мире программирования периодически появляются и существуют необычные, экспериментальные языки, которые выходят за рамки классических текстовых синтаксисов и лексиконов. Одним из таких ярких представителей является Schoenberg — эзотерический язык программирования, обладающий особенностью записи своих программ в формате MIDI-файлов. MIDI — это не просто музыкальный формат. Он представляет собой цифровое «нотное письмо», описывающее, какие ноты, когда и с какой силой следует воспроизводить. Schoenberg превращает этот музыкальный язык в средство программирования, связывая музыкальные параметры с командами, управляющими памятью и потоком управления программы.
Schoenberg впервые привлек к себе внимание благодаря тому, что он моделирует по функциональному смыслу один из самых известных минималистичных языков программирования — brainfuck. Brainfuck славится своей сложной компактностью и полной универсальностью как модель вычислений. Язык Schoenberg наследует эту полноту, реализуя основные команды brainfuck через музыкальные средства. В частности, программа работает с массивом ячеек памяти, изначально заполненных нулями, и отдельным указателем, который может смещаться по этим ячейкам, изменять их содержимое, выводить данные и работать с условными циклами. Но в отличие от обычного кода на текстовом языке, здесь команды выражаются через музыкальные нюансы — расстояния по полутоновым ступеням (pitch class distance), силу удара (velocity) и перекрытие нот.
Интересно, что ритм практически не влияет на выполнение программы, за исключением случаев наложения нот друг на друга, что служит для управления циклами. Каждая команда в Schoenberg связана с изменением высоты следующей ноты относительно предыдущей. Например, играя ноту на один полутон выше, можно декрементировать значение в текущей ячейке памяти, а на два полутончика вверх — инкрементировать. Передвижение указателя осуществляется, если следующая нота отличается от предыдущей на три или четыре полутонов. Вывод и ввод соотнесены с интервалами в пять и шесть полутонов.
Особое место отведено зацикливанию: начало и конец цикла «закреплены» наложением нот — когда заметное перекрытие появляющейся ноты с предыдущей запускает цикл, а прекращение игры соответствующей «зацикленной» ноты закрывает его. Это новаторское использование музыкальной формы для выражения структурных элементов программы делает Schoenberg уникальным явлением в программировании. История создания Schoenberg восходит к идее авторства Томера Абэрбаха, который был вдохновлен Piet — esolang-программой, где коды выглядели как абстрактные картины. Желание соединить искусство и программирование посредством музыкальной формы привело к появлению Schoenberg. Его название отсылает к известному композитору Арнольду Шёнбергу, первопроходцу атональной музыки, что символизирует сложности и особенности языка.
Программы на Schoenberg чаще всего выходят за рамки традиционной гармонии и тональности, так как требования к смене нот не укладываются в «ключевые» гаммы, делая композиции по сути атональными. Несмотря на эффективность и универсальность, такой способ программирования остается в большей мере экспериментом и своеобразным мемом среди разработчиков. Применения Schoenberg в практика очень специфичны и ограничены, однако раскрывают потенциал использования цифровой музыки для стеганографии, скрытия и маскировки программной логики внутри музыкальных композиций. Все написанные программы на Schoenberg доступны на GitHub, включая набор стандартных алгоритмов и программы с разными видами сортировок, подсчета слов и даже интерпретатор brainfuck, реализованный как MIDI-композиция. Это позволяет любителям программирования и музыки перенять и изучить необычный способ написания кода, а также вдохновиться гранями искусства и технологии.
Schoenberg написан на языке программирования Rust, что обеспечивает высокую производительность и удобство обработки MIDI-файлов. Сам интерфейс разработки — любое MIDI-приложение. Такой подход к созданию кода значительно расширяет горизонты восприятия программирования и демонстрирует, что программирование — не просто набор сухих символов, но и форма искусства, выразить которую можно через музыку. Подытоживая, Schoenberg — это не просто экзотический язык программирования, а концептуальный мост между музыкой и вычислительными науками. Он показывает, как музыкальные особенности, такие как высота звука, сила игры и наложение, могут быть использованы для управления программным состоянием и логикой.
Уникальный подход делает Schoenberg интересной платформой для экспериментов, исследований в области искусственного интеллекта, творческого кодинга и цифровых искусств. Проникновение в его устройство открывает новые перспективы в объединении дисциплин, ранее казавшихся несовместимыми — музыки и программирования. Такой язык расширяет понимание программной выразительности и демонстрирует многогранность человеческого творчества, где код и ноты становятся единым целым.