昭和30年代後半の生まれです。ドリフターズの全員集合をリアルタイムで見てました。聖子ちゃんより、明菜ちゃん派でした。Z80どっぷりでしたけど、6809に憧れてました。なんだか平均年齢を引き上げているような気がして恐縮です。1980年代にパソコンが出現し、激しい知的ショックを受けました。当時は第二次AIブーム。PrologとLispの洗礼を受けました。アンタも好きねぇまた、Prolog処理系を作っています。C言語で作っていた頃は、仏教でいう難行苦行のようでした。書かなければならないコードが多いですし、ガベージコレクションも自前でなんとかしないといけません。バグとりにも苦労させられました。ところがどっこい、Elixirでやってみると鼻歌まじりでスイスイです。GCもElixirにお任せできますし、並列処理をProlog処理系に組み込んで計算実験するなんてことも気楽なものです。ElxlogというElixirで作ったProlog処理系にコンパイラを付けて遊んでました。Prologコンパイラといえばウォーレンさんの抽象マシン、WAMにコンパイルするのが常道です。これは高性能なものの、WAMを最初から作っていたのでは、とても時間がかかります。しようかな?と考えているとfukuoka.exのメンバ-さんから啓示がありました。言語処理系好きにはたまらんものが満載です。これは弄り甲斐があるというものです。アイディアはこうです。(1)Prologのコードをインタプリタの仕組みを利用して、構文木を表すリストに変換します。(2)コンパイラはその構文木のリストを解析して対応するElixirコードの文字列を生成します。(3)全部のPrologコードをElixirの文字列に変換したら、Fileモジュールを使って識別子を”o"に変えたファイルに書き出します。(4)reconsult述語は識別子が"o"のファイルである場合には、Fileモジュールでこれを文字列として読み込みます。(5)さらに(4)の文字列をCodeモジュールのcompile_stringを使って動的にコンパイルします。半日で動いたインスタントコンパイラこのコンパイラは11月のある土曜日の午後に書いたものです。実は昼飯を食ったら睡魔に襲われまして不覚にもお昼寝をしてしまったのでした。3時頃に目が覚めて、書き始めたんでした。ところがElixirの生産性の高さには驚くばかりです。2時間ほど書いていたら、それらしくコンパイルするところまで漕ぎつけました。Elixirの生産性の高さには驚くばかりです。生成されるコードは?PrologというのはSLDリゾルーションというかなり変わった計算原理で動いています。Cなどの普通の言語に翻訳するのは骨がおれます。Elixirのcatch・throwに助けられました。階乗計算をするfact/2は、こんなコードに変換されています。見易さのためにformatしています。N*A1.Prologコードとの対応を示すコメントを付加しておきました。#unifyが成功するのであれば後続の述語を実行(証明)する。#unifyが成功であるならば本体部を実行(証明)する。#第二節も失敗した場合には偽と以前の環境、定義を返す。doend第一節が失敗した場合には第二節の証明に移るのですが、関数型言語であるElixirにはgotoがありません。しましょう?としばらく悩んでいたのですが、catch、throwでできることに気が付きました。弾丸(タマ)よりも速くコンパイルしたら速くなってくれてないといけません。どのくらい高速になったのかな?8queensが動作するようになったので実行時間を計測しました。second"false?-おおよそ4割程度、高速化しています。Cでゴリゴリと書いたSWI-PrologやGNU-Prologには及びません。半日でできたコンパイラにしては上出来というものです。SWI-PrologとかGNU-Prologってのは20世紀の頃から開発が継続されています。9Queensみたいなのは最適化されているので、新興のモダン言語より遥かに高速だったりします。Elxlogには1つだけそれらを超える取り柄があるのです。それは決定性の述語をElixirで記述できることです。竹内関数やアッカーマン関数をそれらの処理系で計算させると簡単に処理系が落ちます。ところがElxlogは涼しい顔して高速実行です。12true?-並列もあるでよ!Elixirの得意技、並列も織り込んでいます。AND並列を実験的に入れてみました。parallelという述語で並列実行します。Fibonacciの再帰定義で効率がよくなります。parallel/Nという述語を入れてみました。610true?-コンパイルするとさらに高速になります。コンパイル&並列でけっこうイケルんじゃないかぁ。渕先生、並列の時代の到来です!20世紀後半の国家プロジェクト、第五世代計画、ICOTの渕一博先生は、当時から「並列の時代」を予言していました。先生の予想は早すぎたのでしょうか。今や、並列の時代に突入しています。この並列の時代にあってElixirは牽引役を果たしていくことでしょう。Prologと少なからず因縁のあるElixirが21世紀に活躍するのを渕先生は天上界でニコニコしながらご覧になっていることと思います。遊び甲斐たっぷりのElixirElixirには高性能なWEBアプリケーションライブラリであるPhoenixがあります。私は言語処理系いじりが好きな変わり者。WEBはさっぱりわからないもので、変なことをして遊んでいます。WEB以外にもかなりなポテンシャルをElixirは有しているらしいことがわかってきました。Joseさん、ありがとう。Elixirは大したヤツです。Githubにおいてあります。賢一@sym_numLALの笹川です。upLoginユーザーは見つかりませんでした。