クロスランゲージ機能のために Haxe を使用することを考えていましたが、このタスクに最適かどうか確信が持てませんでした。ターゲット言語で使用でき、文書化できる (doxygen のようなものを適用できる) ジェネリック ライブラリを作成します。別の言い方をすれば、Haxe でジェネリック ライブラリを作成し、C++ コードを出力し (およびそれが完了したら Java)、他のプログラマーがアクセスできるようにしたいと考えています。このタスクに最適な選択ですか、それとも言語ごとにライブラリのバージョンを作成した方がよいでしょうか?
2 に答える
選択したプラットフォームによっては多少のぎこちなさがあるかもしれませんが、確かに可能です。
JavaScript、neko、Flash では、生成されるコードはネイティブ コードに非常に近く、人々はそれが Haxe で生成されたことを知らなくても使用できます。
PHP については、残念ながら、それがどのように機能するのかよくわかりません。しかし、少しぎこちない名前空間のハックがいくつかありますが、これらはライブラリを手書きのコードでラップすることで解決できると思います。
C++ では、リフレクションが機能するようにするための定型コードを少し使用することを気にしなければ、ほとんど問題なく機能します。コンストラクターを処理する非標準的な方法があり、gc が接続されているため、非常に注意する必要があります。認識していない参照を保持する外部コードをどの程度うまく処理できるかわかりません。
新しいターゲットについて - C# と Java は、ネイティブ コードと 100% 相互運用します。デリゲートを除いて、ほとんどの Haxe 機能はプラットフォームのネイティブ機能にマッピングされます。ただし、インターフェイスでデリゲートを公開しなければ問題ありません。また、これらのプラットフォームで高速リフレクションを有効にする定型コードもいくつか生成しますが、何をしているのかわかっている場合は、これを無効にする方法があります。
Haxe はクロス言語ライブラリを作成するように設計されていませんが、それは可能であり、動作するいくつかの例を見てきました:
- polygonal、Haxe および AS3 で使用可能なデータ構造および物理エンジン。
- verb、Haxe および JS で使用可能な NURBS ベースの CAD ライブラリ。
- daff、JS、Python、Java、C#、C++、Ruby、および PHP で使用可能な、テーブルを比較するためのライブラリ。
ただし、特に C++ のhxcpp
場合、GC を含む多くの Haxe 固有のものを生成するため、多くのクリーンアップが必要になるか、使用するのが簡単ではありません。Haxeメーリングリストで質問してください。