アカウント名:
パスワード:
GCCのsvnのtrunkのここ [gnu.org]ですね。WikipediaのGo (プログラミング言語) [wikipedia.org]には「Gccgo(再帰下降パーサを持つC++フロントエンド、バックエンドに標準GCC)」って今のところ書いてあるけど、「C++で書かれたGCCのフロントエンド」のほうがよいかなぁ。
gccgo 自体も C++ で書かれてますが、
> 「Gccgo(再帰下降パーサを持つC++フロントエンド、バックエンドに標準GCC)」
これは、「Gccgo は、goコードをC++コードに変換するフロントエンドである」って意味ですから「C++で書かれた」と書き換えてしまうと意味が変わってしまいます。
goのサイト [golang.org]にある「The Go frontend for GCC」(注:PDF) [golang.org]によると
The intermediate representation, known as GOGO, is a collection of C++ classes.(略)This version of GOGO is eventually converted to GENERIC and passed to gcc’s middle-end.
とあります。go言語のソースコードはまず「GOGO」というC++ クラスライブラリを用いた中間フォーマットに変換されて、最後にGOGOからGENERIC(gccの内部表現フォーマット)に変換してからgccのミドルエンドに渡してるわけです。
かつてのC++ コンパイラのようにCコードの形で一旦外に出すわけではなく、GOGO自体は内部フォーマットに過ぎないようです。なんか微妙に回りくどさを感じますが、既存の言語に似た新言語のコンパイラを作る場合は、この方が手間削減にはなるってことでしょうか。
>「Gccgo は、goコードをC++コードに変換するフロントエンドである」
いや、そのりくつはおかしい
goコードをC++のクラス(文クラス、式クラス、型クラス等)で表現された構造に変換するって(当たり前のことを)言ってるだけ。
その理屈だとgccはどんなフロントエンドでも最終的にCの構造体で表現するから「Cコードに変換する」ことになるの?
重箱の隅に反応しますが「ミドルエンド」(真ん中の端)って気持ち悪いですね
気持ち悪いかどうかはともかく、コンパイラの内部の話ではミドルエンドって表現は普通じゃね。心配になってぐぐってみたら普通に英語版Wikipediaにもmiddle endって書いてあって安心した。
おお、そうなのか。勉強になりました。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家
C++で書かれています (スコア:2, 興味深い)
GCCのsvnのtrunkのここ [gnu.org]ですね。
WikipediaのGo (プログラミング言語) [wikipedia.org]には
「Gccgo(再帰下降パーサを持つC++フロントエンド、バックエンドに標準GCC)」
って今のところ書いてあるけど、
「C++で書かれたGCCのフロントエンド」
のほうがよいかなぁ。
love && peace && free_software
t-nissie
Re:C++で書かれています (スコア:2, 興味深い)
gccgo 自体も C++ で書かれてますが、
> 「Gccgo(再帰下降パーサを持つC++フロントエンド、バックエンドに標準GCC)」
これは、「Gccgo は、goコードをC++コードに変換するフロントエンドである」って意味ですから「C++で書かれた」と書き換えてしまうと意味が変わってしまいます。
goのサイト [golang.org]にある「The Go frontend for GCC」(注:PDF) [golang.org]によると
とあります。
go言語のソースコードはまず「GOGO」というC++ クラスライブラリを用いた中間フォーマットに変換されて、最後にGOGOからGENERIC(gccの内部表現フォーマット)に変換してからgccのミドルエンドに渡してるわけです。
かつてのC++ コンパイラのようにCコードの形で一旦外に出すわけではなく、GOGO自体は内部フォーマットに過ぎないようです。
なんか微妙に回りくどさを感じますが、既存の言語に似た新言語のコンパイラを作る場合は、この方が手間削減にはなるってことでしょうか。
Re:C++で書かれています (スコア:1)
>「Gccgo は、goコードをC++コードに変換するフロントエンドである」
いや、そのりくつはおかしい
goコードをC++のクラス(文クラス、式クラス、型クラス等)で表現された構造に変換するって(当たり前のことを)言ってるだけ。
その理屈だとgccはどんなフロントエンドでも最終的にCの構造体で表現するから「Cコードに変換する」ことになるの?
Re:C++で書かれています (スコア:1)
重箱の隅に反応しますが「ミドルエンド」(真ん中の端)って気持ち悪いですね
Re:C++で書かれています (スコア:3, 参考になる)
気持ち悪いかどうかはともかく、コンパイラの内部の話ではミドルエンドって表現は普通じゃね。
心配になってぐぐってみたら普通に英語版Wikipediaにもmiddle endって書いてあって安心した。
Re:C++で書かれています (スコア:1)
おお、そうなのか。勉強になりました。