いものやま。

雑多な知識の寄せ集め

pLucidをいじってみた。(その1)

最近、pLucidをいじってるので、それについて少しずつ書いていこうと思う。

pLucidとは?

pLucidというのは、Lucidというデータフロープログラミング言語の処理系の1つ。

データフロープログラミング - Wikipedia

Lucid (プログラミング言語) - Wikipedia

新年の挨拶と今年やっていきたいこと。(2018年) - いものやま。で書いた通り、最近データフロー指向というのに興味を持っている。
そこで、どんなデータフロープログラミング言語があるのかなとwikipediaを見てみたんだけど、いくつか言語がリストアップされているものの、HDL(ハードウェア記述言語)でなく、(LabVIEWのような)ビジュアルプログラミング言語でもないものとなると、かなり少ない。
Lucidはそんな条件を満たす言語の1つで、しかもある程度情報があり、pLucidという処理系も一応ある。
ということで、このpLucidをちょっといじっていこうかな、と。

Lucidは、wikipediaによれば1976年に登場した言語で、けっこう古い言語といえる。
C言語が登場したのが1972年とかで、標準化されたのは1990年(ANSI C)。
そして、pLucidはC言語で書かれてるんだけど、そんなわけで、標準化される前のK&Rの文法だったりする。

そんなpLucid、Google Codeにコードがアップされていたんだけど、Google Codeが閉鎖されたので、今はGitHubにコードは移っている。

plucid - Google Code

ただ、Google CodeからGitHubリポジトリをエクスポートしている人は何人かいて、どれが本流なのかがよく分からない・・・
まぁ、どれもオリジナルからほとんど変更していないようだけど。

ということで、とりあえず適当な人のリポジトリからフォークして、自分のリポジトリを作ってみた。

ちなみに、K&R時代のC言語で書かれてたこともあって、かなりハチャメチャなコード。
グローバル変数だらけだし、型もかなり適当。
マクロでけっこう無茶なことやってたり、もう何が何やら・・・

そもそも、Clangだと普通にビルドエラーが起きてビルドが通らなかったり(^^;

なので、とりあえずコードのフォーマットと明らかにおかしいところを修正して、とりあえずビルドエラーと警告を全部消した。
これだけで約33klocの差分w
ほぼすべて書き直しw

これで一応ビルドは出来るようになって、ソースを中間のバイナリファイルに変換するところまでは動くようになった。
けど、このバイナリファイルを解釈させて実際に動作させるプログラムを動かすと、セグメンテーションフォールトになる(^^;
標準のmalloc使えばいいのに、なんか自前で独自のメモリ管理やってるし、グローバル変数だらけで初期化の順番も怪しかったりするんで、たぶんその辺りが原因。
この辺りも、あとで解決していかないとなぁ・・・

さて、肝心のLucidについては、次回で。

今日はここまで!