バベルの塔

yuumin
·

キリスト教にバベルの塔という話がある。天に届くほど高い塔を建てようとして、神の怒りを買い、それ以降人間たちの言語がバラバラになってしまったという話である。

プログラミングでBabelというと、JavaScriptのコンパイラを指す。最新のJavaScriptを古いブラウザでも動くようにしたりとか、そういうことができるツールである。調べていないけれど、babelの塔がつくられる前の、共通のJavaScript言語というものにコンパイルしようという意味を込めたネーミングなのだろう。きっと。

日常的な言語でいえば、エスペラント語というものが一時期ネットで有名になったことがある。人工的につくられた言語で、すべての人の第二言語を目標ととしている。もちろん誰も母語の人はいない。もし日本語とエスペラント語の翻訳が100%可能になったらどうなるだろうか。一度、日本語からエスペラント語を経由し、その後、他の言語に翻訳ができれば、翻訳の精度が高くなるだろう。残念ながらエスペラント語はそこまで広まらなかった。そもそも、英語で良いのである。日本語からロシア語へ変換するとしても、英語を経由すれば精度が高くなる。日本語と英語の翻訳と同じくらい、日本語とエスペラント語の翻訳は難しいだろう。

プログラミング言語の話に戻る。fableというプロジェクトがある。これはdotnetというフレームワークのF#という言語をnode.jsに変換するプロジェクトである。しかも、最近ではnode.jsに留まらない。まだまだ実験段階の様だが、rustなどにも変換できるようにつくっているらしい。簡単なHello,Wold程度ならば動いた。すごいね。

普通の言語に比べると、プログラミング言語のほうが共通の言語がつくりやすいような気がする。最近の言語は、かなり似通っている。もちろん言語ごとの特色はあるものの、ループ、ラムダ式、パターンマッチングなど、便利な機能が多くの言語で使えるようになっている。言語の基本機能として存在しないとしても、誰かがライブラリとして公開している。

fableのように、なんらかの言語で書いたものが他の言語として翻訳されるようになると非常に便利だ。たとえば、JavaScriptで書いたものがrustやgoに変換されたら、マルチな環境で動くバイナリをつくることができる。実はJavaScriptからマルチプラットフォームで実行可能なファイルはつくれるけれど、node.jsを含むのでファイルサイズが大きくなりがちだ。そういう問題点を解消してくれるだろう。インタプリタ言語かコンパイル言語か、ということを気にしなくてよくなる。逆にJavaで書いたプログラムをFaaSでコールドスリープのことを考えずに実行できる(そういうことをしたければ、scala.jsを使えば良いけれど)。

自分の好きな言語で書いて、好きな言語のコードに変換されたら非常に便利だろう。そんなに遠くない未来のように思える。