Whitespace — 空白に想いを乗せて
Whitespaceとは
自分が紹介する難解プログラミング言語はWhitespaceです。オリジナル言語ではありません。開発されたのは2003年です。
その名の通り「空白」を使って記述するプログラミング言語です。例えば以下にFizzBuzzの例を示します。
見ての通り、たいへん美しいソースコードですね。空白というのは、具体的には半角スペースとタブと改行(LF)です。ちなみに、Whitespaceを試してみたいという方はideoneでも可能ですので、例えばこのコードを貼り付けたりして試してみましょう。ideoneにおいては、Whitespaceは言語一覧の一番最後を飾るというたいへん名誉な立ち位置にいます。ただ、空白はわりと適当に扱われているのか、たまに貼り付けるとソースコードが変化してしまうことがあるので注意しましょう。
Whitespaceは難解プログラミング言語の中ではわりと高度なほうで、負の数も扱えるスタックの他、ヒープ領域にも数値を保存できるので値の保存には困りません。
ループなどはラベルとGOTOのようなものを利用し、分岐は条件を満たしたときのみラベルにジャンプするやつを使います。なんと条件もわざわざ2種類用意されており、スタックの一番上を取り出して、「0かどうか」「負かどうか」の2つを利用できます。
さらにラベルを利用してのサブルーチンもあります(自分はHSPをやったことがあるのでサブルーチンと言われてもピンときますが、最近は他の言語であまりサブルーチンという言葉を聞きませんね。Perlとか?)
さて、なんといってもWhitespaceの一番の特徴は空白しか使わないことです。空白以外の文字は全て無視(コメント扱い)されます。
一見してプログラムであると分かりにくいというその性質から、次のような用途があります(公式ページから引用)。
Whitespace is a particularly useful language for spies. Imagine you have a top secret program that you don't want anyone to see. What do you do? Simply print it out and delete the file, ready to type in at a later date. Nobody will know that your blank piece of paper is actually vital computer code!
(Whitespaceは特にスパイに有用な言語である。誰にも見られたくない最高機密のプログラムを持っているとしよう。どうすればいい?そういうときはプログラムを印刷してファイルは消去して、後で入力し直すことにしよう。そうすればあなたの持っている真っ白な紙が実は極めて重要なソースコードであろうとは、誰にも分からないのだ!)
皆さんも機会があれば、重要なメッセージはWhitespaceソースコード化して渡してみましょう。Whitespaceなら、郵送途中のアクシデントなど心配無用です。お手軽ながら絶対に秘密が漏れません。
そこで今回は、好きなメッセージを表示するWhitespaceコードを生成するプログラムを用意してみました。これさえあれば、深くWhitespaceについて知らなくてもその便利さが味わえます。
どうでしょうか。これでどんなメッセージでも安全に持ち運べること間違いなしです。
ただし、マルチバイト文字にも一応対応したつもりですが、インタプリタのほうは対応状況がよく分かりません。メッセージはASCII文字のみに留めておくのが無難でしょう。
実用を目指して
分かったと思いますが、印刷して持ち運べなどというのははっきりいってジョークでしょう。自分はこういうのは大好きです。
そこで、実用的な用途を探してみましょう。
Whitespaceの特徴は、スペース、タブ、改行しか使わないことでした。それ以外の文字は全て無視されます。
実はこれが重要なことで、言い換えれば、関係ない文字が混ざっていてもいいということです。
一方、そもそもこれこそがWhitespaceのコンセプトの元になったことでもありますが、多くのプログラミング言語においてはスペースは無視されます(ただし最近はPythonとか、CoffeeScriptなどそうはいかないのもある上、JavaScriptも改行のあるなしで意味が変わる場面があるなどします)。
すなわち、これらのプログラミング言語とWhitespaceは、まるで水とエタノールのように自由に混ざり合うことができるわけです。
言いたいことが分かったと思います。他の文書の中にWhitespaceコードを混ぜ込んでしまおうということです。そうすれば、簡単にメッセージを隠すことができます。
そこで今回選んだのが、プログラミング言語ではないですが、HTMLです。HTMLでは、改行も含めて空白はどれだけ空けてもいいですから、1つでも空白が空いていればそこにWhitespaceコードを好きなだけねじ込むことができるわけです。
また、日本語だと空白が空くのはタグの属性の間とかあとは改行のときくらいですが、英語圏とかだと単語の間にも空白があるので隙間には困りませんね。Whitespaceはイギリスの人が開発しましたから当然そういう発想もあったことでしょう。WhitespaceをHTMLに混ぜ込むという発想は公式サイトでも具体化されています。
そこで今回、HTMLにWhitespaceを混ぜられるスクリプトを用意しました。以下で試すことができます。
ちなみに生成したコードを動かす方法は、ideoneなどがありますが、貼り付け時にたまにタブがスペースに変化したりしてプログラムが変化してしまいます。他の実行方法としては、Linuxとかなら公式ページからインタプリタをダウンロードできます。Windowsの場合面倒なので、拙作のWhitespaceエディタに読み込ませても一応実行できます。よかったら試してみましょう。
注意:既にWhitespaceコードが埋め込まれているページに適用すると消えてしまいます
注意:JavaScriptを含むページの場合JavaScriptが動かなる可能性があります
注意:このスクリプトはたぶんIEでは動きません
どうでしょうか。これを利用して大切なメッセージを伝えてみるのはどうでしょう。例えば"I love you"とか…。
実際にやってみた(ソースを確認してみましょう)