2012-01-09 7 views
14

CのソースコードをGoのソースコードに変換するために使用するツールは何ですか?例えばCをGoに変換(変換)するツールですか?

Cのコードが含まれている場合、:

struct Node { 
    struct Node *left, *right; 
    void  *data; 
}; 

char charAt(char *s, int i) { 
    return s[i]; 
} 

をツールによって生成された対応のGoコードは次のようになります。

type Node struct { 
    left, right *Node 
    data  interface{} 
} 

func charAt(s string, i int) byte { 
    return s[i] 
} 

ツールは完璧である必要はありません。生成されたGoコードの一部を手動で修正する必要がある場合は問題ありません。

+1

であるこのプロジェクトに

https://github.com/elliotchance/c2go

をチェックあなたは、おそらく本当にこのサイトのマッチではありません。 –

+0

@JoachimIsaksson "C to Java"や "C to Perl"のような質問が既にあります。この質問も同じです。 –

+0

なぜあなたは尋ねますか? C&Goコードを混在させる方が簡単でしょうか? (GCC 4.7にはGoフロントエンドの不完全なものがあるので、ときどき可能です) –

答えて

4

今日はこのような(CからGoへのソースコード変換)ツールは存在しないと思います。あなた自身のコンバータを作ることを検討するかもしれません。質問は次のようになります。それはそれに値するのですか?

GoとCが何らかの形で相互運用可能である可能性があるため、おそらくそれほど価値がないかもしれません。たとえば、GCC 4.6(または最新のスナップショット4.7がリリースされる)を使用している場合、おそらくC & Goコードをいくつかの注意を払ってリンクすることができます。

当然のことながら、悪は詳細です。

コンバーターが必要な場合は、取得したGoコードを読み込み可能にして編集可能にしますか(コードの構造を保持したいので、タスクが難しくなります。 )?その場合は、おそらく独自のCパーサが必要です(それは難しい作業です)。

生成されたGoコードの読みやすさに気にしない場合、たとえば、既存のコンパイラを拡張して作業を行うことができます。たとえば、GCCは拡張プラグインまたはMELTの拡張機能を使用しています。GCC(MELTまたは独自のGCC用Cプラグイン)をカスタマイズして、Gimple表現(GCC内の命令の主な内部表現)を読めないGoコードに変換できます。これは何とか簡単です(ただし、まだ1週間以上の作業が必要です)。

もちろん、Goインタフェース、チャネル、さらにはメモリ管理(ガベージコレクトメモリ)でも標準的なC言語の対応がありません。

1

私が知る限り、そのようなツールは存在しません(まだ)。 Cコードを手でGoに変換する必要があります。

変換したいCコードがどれほど複雑かはわかりませんが、Goには「特別な」方法があります。 interfaceschannelsのように。

2

私はこのようなツールはありませんが、IMHOはあらゆる言語で独自の "コーディングスタイル"で書くのが良いと確信しています。

私たちがCプリプロセッサのトリックを愛していて、ポインタで本当に芸術的な仕事をどれくらい愛していたかを覚えていますか? malloc/freeやスレッドを扱うのにどれだけの注意を払ったのでしょうか? 移動が異なります。プリプロセッサはありませんが、クロージャ、メソッド、インタフェース、ガベージコレクタ、スライス、ゴルーチンなどの素敵な機能を持つオブジェクトがあります。

コードを変換するのではなく、コードをはるかに優れた方法で書き換えるのはなぜですか?もちろん

、私はあなたが行くにCベースのGoコンパイラを変換するgithub.com/rsc/c2goを作成:)

14

RSCを行くためにポートにあなたが持っているCのコードの1000Kラインを持っていないことを望みます。

外部例として、akavelはゴーベースのLUAを作成するためにそれを使用しようとしているように見える:github.com/akavel/goluago/

github.com/xyproto/c2goは別のプロジェクトであるが、それは少しの間では触れられていません。

+0

しかし、c2goを使ってtest.cプログラムをtest.goプログラムに変換するには? – Dac0d3r

1

詳細な説明は、私はあなたの要件に合致するツールを見ていませんでした、これはより多くのために1を書かれている要求のように聞こえるこのarticle

関連する問題