Malbolgeとは
Malbolgeは、1998年にBen Olmsteadによって作成された
難解プログラミング言語です。この言語の名称は、ダンテの『
神曲』の地獄編に登場する第8圏「マーレボルジェ」に由来しています。
言語の特徴
Malbolgeは
チューリング完全な言語として知られていますが、実際にはその使い方が非常に困難で、一般的なプログラミング言語としての実用性はありません。設計時から情報の難解さを追求する意図があり、これはINTERCALや
Brainfuckといった他の難解言語からの影響を受けた結果とも言われています。実際に、最初に書かれたMalbolgeのプログラムが登場するまでには約2年がかかりました。このプログラムは人間ではなく、LISPで実装されたビーム探索アルゴリズムによって生成されたものです。
プログラム作成の難しさ
Malbolgeでプログラムを書くことは非常に難しく、実用的なコードを書くには専門の技術や時間が求められます。2000年にはAnthony YouhasがブログでMalbolgeに対する新たな解法を示し、特定の語句を出力するプログラムを提示しましたが、使用した手法については詳しく明かされませんでした。その後、Lou SchefferはMalbolgeが
暗号システムのような性質を持っていることを指摘し、いくつかの
脆弱性があることを明らかにしました。このことにより、入力をそのまま出力するプログラムを書く手法が提案されました。
プログラム例
以下がMalbolgeで作成されたサンプルプログラムです。
Hello World プログラム
```
(=<`:9876Z4321UT.-Q+)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk
hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<
```
日本語出力プログラム
```
(&BA:""][<;:9876543210/.-,+)('&%$#"Raw<uz:x7YYtFVTj/Am,+jMhgJe$$bamYB]?>=S;QuONrp^JOH10K-g+AecDa`A@#>J}YkWWVTTu3QrN/Ln&lH#F'Ef|edyxa={]:8wvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+)(<`^?>=<;:9876543210/.-,+*)
```
言語の実行環境
Malbolgeは三進仮想マシンに基づいており、標準の
インタプリタと公式仕様の間にはいくつかの不一致があります。言語には三つの基本的なレジスタがあり、各命令の実行後には特殊な処理が行われます。これにより
暗号化が行われ、同じ命令に戻ってきても異なる結果が得られるように設計されています。
結論
Malbolgeはその独特な設計によって不条理なまでに複雑なプログラミング体験を提供します。エキセントリックな設計の背後には、数学的な考察や
暗号技術があり、開発者にとって挑戦的で魅力的な課題を提供してくれます。