>しかし、私はLuaの方法と、モジュールによる名前空間の分割の
>本質的な違いを説明することはできません。
LuaやJavaScriptの方法だと、名前空間が動的になるんですよね。
環境作ってないので試してませんけど、Luaで「hoge = string」と書くと、
hoge.sub()で文字列置換ができるようになるんじゃないでしょうか。
Javaなどでもimportでパッケージ指定を省略できたりしますが、その規則は
あくまで静的です。これを動的に変えられると、どこで何呼んでるんだか
さっぱり、という状態になりそうな気がします。もっとも、
「そんなことしないでしょ」という考え方もありますが。
# でも、s = stringとかしてタイプ量を節約する人はいる気がする。
また、そういう規則では、統合開発環境はお手上げでしょうが、それは
形無し言語全般に言えることかも。
RDEとやらの入力保管機能はどうなってるんだろ、とマニュアルを見てみたら…
ううむ。
http://rubyde.sourceforge.net/hiki/ja/Auto%2BComplete.html
また、単なるテーブル(crowbarならオブジェクト)を名前空間に使うと、
ライブラリ関数が壊せてしまうというのも、問題だと思います。
Luaでは、string.subに代入できるんですよね?
と言いつつ、実は今crowbarに予約語finalを持ち込んで定数を作れるように
したりしてるので、ライブラリ関数のメンバとか名前空間オブジェクトをfinalに
してしまえば、これでもいい気がしてきました。うーん。
>配列とハッシュが同列なら、配列リテラルがあるので、
>ハッシュリテラルも欲しいところです。
>初期化ができないと不便なので私は必須だと思っています。
ご意見ありがとうございます。
…と言いつつ、やりたいことは他にもあるので、すみませんが優先順位は高くないです。
>(2)に関しては、Luaは、GCされたくなければ、グローバルとして
>別に残しておかなければなりません。
これは、Cの関数を抜けた後の話ですよね。レジストリに登録するという。
crowbarでは、Cの関数の実行中でも、ヒープ関連の関数を呼び出すと
GCが動く可能性がありますから、ひとまずスタックに積まなければなりません。
>また、LuaがコンサバGCかどうかは不明ですが、
>crowbarのようなcrowbarスタックはLuaには、ないと思います。
Luaの仮想スタックって、まさにcrowbarのスタックのような独自スタックでは?
crowbarのような手間がなさそうなところからして、Cの関数の部分だけ、
Cスタックをスキャンするconservative GCなのかなあ、とも思ったのですが、
テーブルを確保すると勝手にスタックに積まれること、他の参照型というと
文字列くらいですがCRB_Stringのような型では扱っていないことからして、
コンサバGCではないようですね。
>現状のCRB_add_native_function()で、ネイティブ関数を登録
>しておかなければならないのは、interface.cのソースを直接
>いじらないといけないので、これはLuaの方が楽だと思います。
うーん、CRB_add_native_function()は別にinterface.cの中で呼ぶ必要はないんですが
(実際今はnative.cとかの中で呼んでますし)。実行中でも呼べますから、
ネイティブ関数内でも登録可能です。
>Cで書いた関数(例えば、l_sin()という関数)を、
>lua_pushcfunction(L, l_sin)
>lua_setglobal(L, "mysin")
>で、登録することによりLuaでmysin()という関数が使えます。
これに近いことをするのであれば、(ver.0.4で新設された)CRB_create_closure()で
クロージャ作って、CRB_add_assoc_member()でオブジェクトに登録するなり
CRB_add_global_variable()でグローバル変数に登録するなりもできます。
>また、Luaでは、CからLuaのコードを呼ぶ際に、
>Lを、lua_State型の変数とすると、
>lua_dofile(L, "test.lua")
>により、test.luaが実行されるのですが、
>crowbarでは、これはどうやればできますか?
crowbarスクリプトをまったく独立して動かせばよいのなら、インタプリタを
もうひとつ作って実行すればよいです。
ただ、たぶんこの場合、グローバル変数を共有して動かしたいのだと思います。
そうだとすれば、外部crowbarスクリプトのトップレベルを動かす方法は
ありません。ただし、外部crowbarスクリプト中の関数であれば、
CRB_compile()とCRB_call_function()を使えば実行可能です。
>ただのプログラミング練習言語で終わらせるのはもったいないと
>思います。
>何か特徴を付けて、存在価値のある言語にして欲しいです。
やりたいこと・やるべきことはいろいろあって、その中にはcrowbar以外のことも
含まれます。もう少ししたら、crowbarほっぽりだして別の言語を作り始める
可能性も(かなり高い確率で)あります。企画の趣旨的には、crowbarを実用言語に
するよりも、バイトコードインタプリタのような違う実行形態の言語をもうひとつ
作る、という方が合っている気がしますし。
ということで、crowbarに期待してくださるのは大変嬉しいことですし、
私としても励みになるのですが、私の時間が有限である以上お応えできるかどうかは
わからない、ということで、すみませんがご理解ください。
>あと、できれば、Windows版のcrowbar.exeもダウンロード
>できるようにして欲しいです。
確かに便利だと思いますし、今まで考えなかったわけでもないのですが、
企画の趣旨的にどうかという気もします。
あと、今だと鬼車のライセンス表記をどこかに含めなければいけませんよね。
次バージョンで検討します。