早朝に行われた自作言語のライブラリについての意見交換

自作言語のライブラリを用意するには、どうすれば良いのかという疑問とその回答をまとめてみました。
4
木村屋 @kimuraya

こういうショボい言語でいいから、コンパイラを完成させたいな。 http://blog.livedoor.jp/south_kanto_dm/archives/51692011.html

2010-09-16 03:59:02
木村屋 @kimuraya

今作ろうとしているプログラミング言語には、データ型にはintしかないけど、浮動小数点や文字も扱えるようにして、文字列を扱う標準関数を追加したら、実用的な言語になるのかな。

2010-09-16 04:00:31
木村屋 @kimuraya

オブジェクト指向言語に別のパラダイムの言語を引っ付けて、文字列を扱う標準クラスを付け加えたら、使ってくれる人は出てくるかな。個人で言語を作る上で、壁になるのはライブラリと知名度なのかな。

2010-09-16 04:01:58
木村屋 @kimuraya

実用的な言語のライブラリなんて、個人で用意できるものじゃないしな…Rubyの事例を調べてみるべきかもしれない。

2010-09-16 04:02:44
tana@人間らしく生きたい @tana_ash

@kimuraya ライブラリは、C言語で書かれたDLL(.dllや.soなど)を呼べるようになれば半分解決するような感じもするかもしれません。

2010-09-16 04:05:26
@Pota_kamone

@kimuraya 激しく期待してますよ。

2010-09-16 04:06:55
IGARASHI Shinji@無職 @s50

@kimuraya よく見るのはその言語からCのライブラリを叩く方法を用意してラッパを提供することすね。その言語自身が多少ショボくてもCの性能で機能を提供できるし

2010-09-16 04:09:48
木村屋 @kimuraya

@tana_ash 他の方からも、それを勧められたことがあります。Visual C++も標準関数はDLLの中にあるようです。標準関数の内部では、Windows APIを呼び出しているのでしょうね。そう考えると、標準関数はその様な形で提供しても問題ないのかもしれません。

2010-09-16 04:12:25
木村屋 @kimuraya

@Pota_kamone 期待に答えられるか微妙ですが、やってみます(笑

2010-09-16 04:12:50
@Pota_kamone

@kimuraya とりあえず ファイルやらネットワークやらのIO周りと文字列ライブラリさえ出来ていれば何とかなります。

2010-09-16 04:14:09
tana@人間らしく生きたい @tana_ash

@kimuraya@load "hoge.dll"」「@decl "hoge" "hoge" int int => int」のような構文を利用してもおもしろいかもしれませんね。

2010-09-16 04:17:37
tana@人間らしく生きたい @tana_ash

@kimuraya ちなみにloadはDLLの読み込み、declは登録する関数名、DLLの中での関数名、関数の型を登録する構文みたいな感じで。

2010-09-16 04:19:12
羊羽 @hitsujibane

@kimuraya Lispは実装しやすいです。CommonLispの規格準拠とかは厳しいですが。1000行の実装とかあって小さな処理系の参考になりますし

2010-09-16 04:20:26
木村屋 @kimuraya

@s50 Cの標準関数も、VC++の場合、Cランタイムライブラリ(CRT)という形で提供されている事を思い出しました。CRTの中でWindows APIを呼んで、ファイルの処理などを行っているのでしょうから、標準関数はラッパだと思うのが良いかもしれませんね。

2010-09-16 04:21:27
木村屋 @kimuraya

@hitsujibane 以前も、Lispの処理系は実装が簡単だという話を聞いたことがあります。今はLispまでは手が回らないのですが、来年にはLispの学習と共に、処理系の自作もやってみたいです。

2010-09-16 04:23:08
IGARASHI Shinji@無職 @s50

@kimuraya WinのAPIからしてDLL越しに叩くC関数的なインターフェースですね。内部ではシステムコール呼ぶためのCPUの命令使ってますが

2010-09-16 04:28:45
IGARASHI Shinji@無職 @s50

@kimuraya Cのラッパにするとバッファリングが多重になって重いとか、C側の抽象化と俺言語側の抽象化のミスマッチが許せない場合にはその言語側で書くす。まあそういう問題がなかったり許せたりするケースではCのインターフェースが世界共通言語、て感じに有効活用されることが多いす

2010-09-16 04:31:53
木村屋 @kimuraya

自作言語の標準関数は、Cランタイムライブラリのラッパーみたいなものを作れば良いのだろうか。自作言語の関数から、Cの標準関数を呼び出して、Cの標準関数はWindows APIを呼び出して、Windows APIはWindowsカーネルを…(以下略)

2010-09-16 04:32:06
木村屋 @kimuraya

@s50 成程~ 参考になりました。ありがとう御座います。

2010-09-16 04:33:10
IGARASHI Shinji@無職 @s50

@kimuraya その言語でフルマシンエミュ作れればそれが無限に再帰する訳です

2010-09-16 04:34:22
@Pota_kamone

@kimuraya PHPとかCの関数をそのまま呼んでますねー。多分perlもそうだと思います。

2010-09-16 04:38:39
木村屋 @kimuraya

@Pota_kamone そうなのですか。一般的に使われている手法なのですね。

2010-09-16 04:40:12
木村屋 @kimuraya

@s50 メモリがある限り、再帰が続くわけですか…何というか、理解は出来ますが不思議な感じですね。

2010-09-16 04:41:06
羊羽 @hitsujibane

@kimuraya ほんといまさらですみませんが、C++言語のカラクリという本にC++の出来た経緯があって、その中で言語の初期の成長のさせ方などが載っています

2010-09-16 05:41:26
羊羽 @hitsujibane

@kimuraya 【続き】その中で、C++での起こったことを例に最初にインタプリタを作って、コンパイラに成長させていく過程がありますので、参考になるかもしれません

2010-09-16 05:44:34