Malbolge

Malbolge

Malbolgeэзотерический язык программирования, придуманный Беном Олмстедом в 1998 году. Язык разработан с целью быть максимально сложным для написания программ.

Получил своё название от Malebolge, восьмого круга ада Данте.

Содержание

Программирование на Malbolge

Код первой программы, выводящей «HEllO WORld», сгенерировала другая программа на языке Lisp, использовавшая поиск в множестве всех возможных программ, через два года после появления самого языка Malbolge. [1]

24 августа 2000 года Энтони Юхас в своём блоге анонсировал[2] 3 работающих программы на языке Malbolge, выводящих фразы «Hello, world.», «Malbolge sucks.» и «antwon.com rules!».

Позже Лу Шеффер произвел криптоанализ языка.

17 августа 2004 года Томаш Вегжановски написал генератор программ, выводящих заданные строки. Однако программы, полученные этим путем, длиннее программ Юхаса.

Hello world

Эта программа на Malbolge отображает «Hello, world.»:

(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<

Другой вариант:

('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#"`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>

Виртуальная машина

Malbolge — это машинный язык для виртуальной машины (интерпретатора), работающей в троичной системе счисления.

Регистры

В виртуальной машине Malbolge есть три регистра: a, c и d. Регистр c – регистр кода, используемый в качестве указателя на текущую команду. Регистр d – регистр данных, используемый для управления данными. Регистр a – аккумулятор, также используемый некоторыми командами для манипуляции данными. При запуске программы все регистры равны нулю.

Память

Размер памяти виртуальной машины — 59049 (310) ячеек с числами из 10 троичных цифр. Все ячейки с адресами от 0 до 59048 имеют значения от 0 до 59048. Все изменения происходят по модулю 59049 (mod 59049). При запуске программы начало памяти заполняется ASCII-кодами символов её исходного текста. Символы пустого пространства (пробелы, табуляция, переносы строк и пр.) игнорируются, а остальные символы должны быть командами Malbolge (см. ниже). Остаток памяти заполняется с использованием операции crazy (см. ниже): [m] = crz [m-2], [m-1].

Команды

В Malbolge есть 8 команд. Виртуальная машина определяет, какую команду выполнять, следующим образом: к значению ячейки с адресом c ([c]) прибавляется значение c, а в качестве команды выступает остаток от деления этого числа на 94 (поскольку во входном алфавите языка 94 символа, ASCII-коды которых с 33-го по 126-й). Таблица действий интерпретатора:

Команды
Значение
([c] + c) % 94
Инструкция Пояснение
4 mov c, [d] Переход к ячейке с номером [d].
5 out a Вывод значения ASCII-символа с кодом a % 256 на экран.
23 in a Ввод ASCII-символа в a. Разделитель строк имеет код 10. Конец файла — 59048.
39 rotr [d]
mov a, [d]
Сдвигает значение [d] на одну троичную цифру вправо (0002111112 превращается в 2000211111). Результат сохраняется в [d] и в a.
40 mov d, [d] Копирование значения из [d] в d.
62 crz [d], a
mov a, [d]
Произвести операцию crazy (см. ниже) со значениями [d] и a. Результат сохраняется в [d] и в a.
68 nop Ничего не делает.
81 end Конец программы.
Любые другие значения ничего не делают. Они не разрешены при загрузке программы, но разрешены после этого.

После выполнения каждой инструкции она шифруется операцией Crazy. После этого значения c и d увеличиваются на 1 и выполнение продолжается со следующей инструкции.

Операция crazy

Операция является аналогом побитовых операций — она применяется к двум соответствующим цифрам.

Операция crazy
crz 2-я цифра
0 1 2
1-я цифра 0 1 0 0
1 1 0 2
2 2 2 1

Шифрование

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

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
5z]&gqtyfr$(we4{WP)H-Zn,[%\3dL+Q;>U!pJS72FhOA1CB6v^=I_0/8|jsb9m<.TVac`uY*MK'X~xDl}REokN:#?G"i@

то есть ! становится 5 и т. д.

В популярной культуре

В 10-м эпизоде первого сезона сериала «Элементарно» ключевой уликой в разгадке преступления послужил клочок бумаги, на одной из сторон которого был распечатан код программы на malbolge (являющийся неточной копией программы "Hello World" выше), а на другой записан заказ кофе.

Примеры

Примечания


Wikimedia Foundation. 2010.

Игры ⚽ Нужен реферат?

Полезное


Смотреть что такое "Malbolge" в других словарях:

  • Malbolge — est un langage de programmation du domaine public inventé par Ben Olmstead en 1998, nommé d après le huitième cercle de l enfer dans L Enfer de Dante, le Malebolge. La particularité de Malbolge est qu il a été conçu pour être le pire (le plus… …   Wikipédia en Français

  • Malbolge — ist eine esoterische Programmiersprache, 1998 entwickelt von Ben Olmstead. Benannt wurde sie nach dem achten Kreis der Hölle aus Dantes Divina Commedia. Malbolge ist gemeinfrei. Die Besonderheit von Malbolge besteht darin, dass sie als… …   Deutsch Wikipedia

  • Malbolge — es un lenguaje de programación esotérico de dominio público desarrollado por Ben Olmstead en 1998. Se llamó así por el octavo círculo del infierno en La Divina Comedia, escrito por Dante. Malbolge es peculiar porque se diseñó para ser el lenguaje …   Wikipedia Español

  • Malbolge — es un lenguaje de programación esotérico de dominio público desarrollado por Ben Olmstead en 1998. Se llamó así por el octavo círculo del infierno en La Divina Comedia, escrito por Dante. Malbolge es peculiar porque se diseñó para ser el lenguaje …   Enciclopedia Universal

  • Malbolge — This article is about the programming language. For the eighth circle of hell, which this language is named after, see Malebolge. Malbolge is a public domain esoteric programming language invented by Ben Olmstead in 1998, named after the eighth… …   Wikipedia

  • Baator — For the capital of Mongolia, see Ulaanbaatar. In the Dungeons Dragons fantasy role playing game, Baator, also known as the Nine Hells of Baator or the Nine Hells, is a lawful evil aligned plane of existence. It is one of a number of alignment… …   Wikipedia

  • Lords of the Nine Hells — The Lords of the Nine Hells are fictional characters in the Dungeons Dragons roleplaying game. The lords outlined in this article are the highest ranking devils in the Nine Hells of Baator. They include the Dark Eight the eight generals of the… …   Wikipedia

  • Hag Countess — Game background Title(s) Former Lord of the Sixth Home plane Nine Hells Power level Archdevil Alignment Lawful Evil Superior Asmodeus …   Wikipedia

  • Baator — Neuf Enfers de Baator Dans le jeu de rôle médiéval fantastique Donjons et dragons, Baator, (aussi appelé les Neuf Enfers de Baator ou les Neuf Enfers) est un plan extérieur d alignement loyal mauvais. C est l un des nombreux plans extérieurs… …   Wikipédia en Français

  • Neuf Enfers De Baator — Dans le jeu de rôle médiéval fantastique Donjons et dragons, Baator, (aussi appelé les Neuf Enfers de Baator ou les Neuf Enfers) est un plan extérieur d alignement loyal mauvais. C est l un des nombreux plans extérieurs faisant partie de la… …   Wikipédia en Français


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»