スピードと統合という2つのことを探しています。通常、2つは一緒になり、親しみがあります。残念ながら、C ++の場合、速度と統合を提供する言語はほとんどありません。私はLuaを使用しましたが、それは恐ろしく吸いました。私はずっとバインディングを作成するのに費やしましたが、実際にコードを作成するのに十分な時間はありませんでした。
言語機能?スクリプト言語を埋め込むことの目的は、元の言語にはなかった不規則な動的言語機能を持たせることではなく、実行時に解釈できるようにすることです。それが基本的に機能的である限り、私はそれを超えて本当に気にしません、そしてそれはそれで問題なく、私のホスト言語(この場合はC ++)に適合します。ただし、驚くべきことに、ホストアプリケーションに統合するように設計された言語は、統合に関する部分を完全に失敗させます。
コルーチンが必要ですか?いいえ、コルーチンは必要ありません。動的なタイピングは必要ですか?いいえ、スクリプト言語から返された型を知る必要があります。既存のコードはすべて非常に強力な型指定に基づいて構築されているため、スクリプトコードでもそれを尊重できるようにしたいと思っています。ガベージコレクションは必要ですか?いいえ、私のタイプはすでに独自のリソースを管理しており、私は間違いなく確定的な破壊を望んでいます。後藤はいい?いいえ、例外を投げたいのですが。
私が見つけた問題は、基本的に、既存のすべてのスクリプト言語はC ++ではなくCを拡張するように設計されており、多くの点でC ++モデルを適切にサポートしていないことです。それに加えて、セマンティクスはまったく異なります。shared_ptr
決定的な自動破壊であるを、ガベージコレクションされた環境にいったいどのように変換しますか?必要なラッピングライブラリを作成できます。拡張しようとしている言語と互換性のない基本的な言語セマンティクスを変更することはありません。これvoid*
が正しいタイプであることをどのように確認できますか?継承はどのように処理できますか?例外をスローしてキャッチするにはどうすればよいですか?機能しません。
C ++に適したスクリプト言語は、静的に型付けされ、値のセマンティクス、確定的に破壊され、例外をスローしてキャッチし、私のデストラクタ/コンストラクタ/コピーコンストラクタを尊重します。高速で、私のオリジナルのセマンティクスをすべてサポートし、バインドが簡単です。