https://github.com/micklat/NimBorg
これは、やや似たような目標を持つプロジェクトです。現時点では python と lua を対象としていますが、Ruby とのインターフェイスに同じ手法を使用することはそれほど難しいことではありません。
Nim には、流暢な方法で外国語とやり取りするのに役立ついくつかの機能があります。
1) Nim のドット演算子を使用して Nim から Ruby を呼び出す
method_missing
これらはRubyと少し似ています。RubyValue
Nim のような型を定義できます。これには、foo.bar
またはfoo.bar(baz)
適切な Ruby メソッド呼び出しのような式を変換するドット演算子があります。引数は、さまざまな Nim および C 型に対してオーバーロードできるような汎用関数に渡してtoRubyValue
、適切な Ruby 型に自動的に変換できます。
2) Ruby から Nim を呼び出す
ほとんどのスクリプト言語では、外部の型を登録する方法があります。これは、多くの場合、エクスポートされた型ごとに 1 回入力する必要がある特定のデータ構造で記述されます。少しの汎用プログラミングと Nim の.global.
変数を使用して、ドット演算子を介して Ruby に渡された型ごとに必要なデータ構造を自動的に作成してキャッシュすることができます。getRubyTypeDesc(T: typedesc)
に依存する可能性のある一般的な procやtypeinfo
、typetraits
ユーザーが提供するオーバーロードされた proc があり、その型に対してエクスポートする必要があるものを定義します。
ここで、mruby に本当に依存したい場合 (たとえば、経験があるなどの理由で) 、.emit の使用を検討できます。mruby コードの断片を直接出力するプラグマ。その後、Nim コンパイラにソース コードのみを生成するように依頼することができます。ソース コードは 2 番目のステップでコンパイルします。または、Nim がプロジェクトのコンパイル時に呼び出すコンパイラ実行可能ファイルを変更することもできます (これについては、上記のリンク先の同じセクションで説明されています)。