2012-01-09 7 views
13

私は最近この質問をhttps://softwareengineering.stackexchange.com/questions/129076/go-instead-of-c-c-with-cgoと尋ねて、非常に面白い入力を得ました。しかし、私の疑問に間違いがあります。私はcgoがC++コードにアクセスするためにも使用できると仮定しましたが、それは不可能です。代わりにSWIGを使用する必要があります。C++をgo + swigに置き換えてください

がgoよくあるご質問は、外部関数インタフェース「CGOプログラムがためのメカニズムを提供します 『と言う

私の質問』ゴーコードからCライブラリの安全な通話を可能にするために、SWIGはC++のライブラリにこの機能を拡張します。。」: SWIG + GoでQTなどの高水準のC++フレームワークにアクセスして生産性を高めることは可能ですか?私はGoを "スクリプト言語"として使ってC++ライブラリを利用したいと思っています。

あなたは行って泳ぐ経験がありますか?私が知っておかなければならない落とし穴がありますか?

更新/回答:私もIRCの上にこれを求めてきましたし、私は質問が解決されると思う:

SWIGは、他の言語からのC++コードをインタフェースするのではなく、クリーンな方法です。悲しいことに、C++のタイプをgoのようなものにマッチさせることは非常に複雑であり、ほとんどの場合、自分でマッピングを指定する必要があります。つまり、SWIGは既存のコードベースを活用して既に書かれたアルゴリズムを再利用する良い方法です。しかし、Qtのようなライブラリをマッピングすると、あなたに年齢がかかるでしょう。確かに可能ですが、あなたはそれをしたくありません。

ここでguiプログラミングをgoにした人は、go-gtkやgoWidgetsのgoバージョンを試してみたいかもしれません。

+2

これはstackoverflowに属しています。閉鎖/移転の投票。 –

+2

これは面白いです:まず私はhttp://programmers.stackexchange.com/questions/129076/go-instead-of-c-c-with-cgoにstackoverflowで尋ねられ、プログラマーに移されました。今更新された質問はプログラマーからここに戻されます。 – lhk

+4

誰かがこの質問をプログラマーに移したかったのは不合理だと思います。これはまさにStackoverflowが意味する質問のようなものです。私が間違っている? –

答えて

5

可能でしょうか?はい。

できるだけ短時間で完了できますか? No.

大きなフレームワークを取り入れた他のプロジェクトを見て、その上に抽象レイヤーを配置しようとすると、ほとんどが「不完全」であることがわかります。あなたはおそらくかなり良いスタートをして初期のラッパーを入手することができますが、一般的に単純なケースを解決する作業でも、自動ツールでもラップするコードがたくさんあると時間がかかります完全な解決策ではありません)。そして、...あなたはあなたを永遠に連れて行く厄介な残り10%になります(少なくとも、本当に本当に長い時間です)。そして、それが最初の場所でどのように変化するターゲットであるかについて考える。たとえば、Qtは次の大きな書き換えをリリースしようとしています。

一般的に、フレームワークが設計したフレームワーク言語に固執するのが最も安全です。多くの場合、プロジェクト自体に言語拡張があります。たとえば、Qtの場合はQMLをチェックアウトする必要があります.QMLは(他の多くのものの中でも)Qtへのjavascriptバインディングを提供します。並べ替えしかし、それはあなたの "スクリプト"の要件を満たすかもしれません。

+1

+1と答えとして受け入れます。最初の2つの文は、stackoverflowの質問の半分に良い答えになる可能性があります;) – lhk

+0

ハ! (btw、あなたは実際に答えとしてそれを受け入れていない...) –

2

この問題に関連するアップデート:this CLのcgoを使用してC++と対話することが可能になりました。これはGo 1.2にマージされています。しかし、Cのような関数呼び出しには限界があり、クラス、メソッド、C++の機能はサポートされていません(しかし、私は願っています)。

+0

興味深い、情報ありがとう – lhk