絵文字プログラム言語 chu 構想はじめ

実は構想だけは10年前ぐらいからあるのだけど(言語名自体は一発ネタだし)、今朝方、円城塔「文字渦」を読んで絵文字≒表意文字1文字という縛りでこだわってみてもいいのでは?と思って思考実験してみる。

もともとの発想として関数言語を絵文字であらわすというのある。

let x = 10 ;

これを

😇🍎👈10

のようにする。

print x ;

💋🍎

のように変換する。

if x = 10 then "ok" else "ng"

🤔🍎🤝10🙆ok🙅ng

になる。

単語や数字は面倒なので、英数字をそのまま使って、文法はすべて絵文字の1文字であらわす。1文字しかないので、単語の区切りとかで半角スペースはいらない。print あるいは console.log が💋なのは、chu 言語だから。

プログラム言語の意味論を考え直す

絵文字1文字縛りにするのは、構文解析が楽というのもあるけど、制御文なので使われる「if」や「for」などの単語は、ひとつの単語がひとつの意味を成している(この場合は何らかの制御をするという意味で)と考えられる。例外としては、for … in のように2つの単語でひとつの制御を示すこともあるが「繰り返し処理」という制御の拡張(inが補助的なもの)と考えることもできる。

となれば、ひとつの制御そのものは、ひとつの単語すなわちひとつの表意文字=絵文字に対応させることが可能で、いわゆる予約語といわれるものは、すべてひとつの絵文字に置き換えられるのではないか?というのがある。

さらに、変数とは何を指している(特に変更できない immutable な変数)というかというと、文字列や数字、長い文章などのひとつのまとまりを、ひとつの単語(変数)としてあらわしていることになる。これは、構文解析の制限にもよるのだろうが、変数はひとつの単語としてあらわすようになっている。例えば「hello」という変数は作れるが「hello world」という空白を含んだ変数を作ることはできず「hello_world」のようにアンダーバーをつけることでひとつの単語にする。例外としては「’hello world’」のようにシングルクォートなどを使いひとまとまりにすることも可能ではあるのだが、これはシングルクォートに囲まれた範囲が、ひとつの単語に相当する、と考えられる。

また、ラムダ式を変数に保存するとき(C# だけどこんな感じ)

let func = () => {} ;

これは func という変数に、ラムダ式を割り当てている。つまりラムダ式(あるいは関数、あるいは一連の処理)をひとつの単語に集約されているといえる。たとえば

let greet = () => { return "Good morning" }

このようにすれば、greet() によって、Good morning という文字列が返される、あるいは一連の処理を記述できる。これは、一連の処理を関数名に集約している「構造化」という仕組みになる。そう、プログラムの構造化というものは、複数の処理をひとつの単語に集約させるという意味論がある。

さらに拡張すれば、オブジェクト指向のクラスやインスタンス(オブジェクト)も、複数の変数や処理群をひとつの単語にまとめるという意味論がある。

となれば、あらゆるプログラムは、無限に絵文字があるとすれば、ひとつの単語に集約できるのではないか?という思考実験が可能になる。まあ、実際、ターミナルの「コマンド」がそれを担っているわけで、できるわけですが。絵文字を無限に作ることは可能だけど、無限の絵文字を覚えることは不可能なので、「実現可能ではありますが現実では不可能ですね」というやつです。

シェークスピアの「ハムレット」の長い文章は「ハムレット」というタイトルを表す、ひとつの絵文字に集約できるだろう。

ということです :)

カテゴリー: 開発, chu パーマリンク