<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>Google&#039;s Go Guide &#187; コラム</title>
	<atom:link href="http://golang.jp/category/%e3%82%b3%e3%83%a9%e3%83%a0/feed" rel="self" type="application/rss+xml" />
	<link>http://golang.jp</link>
	<description>プログラミング言語Goの情報サイト</description>
	<lastBuildDate>Mon, 30 Aug 2010 15:38:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://golang.jp/category/%e3%82%b3%e3%83%a9%e3%83%a0/feed" />
		<item>
		<title>Go言語の2種類のコンパイラの違い</title>
		<link>http://golang.jp/2009/11/155</link>
		<comments>http://golang.jp/2009/11/155#comments</comments>
		<pubDate>Tue, 17 Nov 2009 05:55:12 +0000</pubDate>
		<dc:creator>noboru</dc:creator>
				<category><![CDATA[コラム]]></category>
		<category><![CDATA[gc]]></category>
		<category><![CDATA[gccgo]]></category>
		<category><![CDATA[コンパイラ]]></category>

		<guid isPermaLink="false">http://golang.jp/?p=155</guid>
		<description><![CDATA[ご存知かと思いますがGo言語には２種類のコンパイラ、gcとgccgoが用意されています。
なぜ、２種類のコンパイラが必要なのでしょうか？それぞれのメリット・デメリットは？
今回はこの２種類のコンパイラの違いについて説明し [...]]]></description>
			<content:encoded><![CDATA[<p>ご存知かと思いますがGo言語には２種類のコンパイラ、gcとgccgoが用意されています。<br />
なぜ、２種類のコンパイラが必要なのでしょうか？それぞれのメリット・デメリットは？<br />
今回はこの２種類のコンパイラの違いについて説明しようと思います。</p>
<p> </p>
<h1>gc &#8211; Go Compiler</h1>
<p>まずは、gc(Go Compiler)のほうから説明します。<br />
gcはC言語で記述されたコンパイラで、文法解析にyacc/bisonを利用しています。<br />
gcは後で説明するgccgoコンパイラよりコンパイル時のスピードが速いのが大きな特徴です。</p>
<p>このコンパイラの一風変わっているところはハードウェアシステム毎にコンパイラのコマンド名が異なる点です。コマンド名はx86-32の場合は&#8221;8g&#8221;、x86-64は&#8221;6g&#8221;と名づけられています。</p>
<p>この奇妙なコマンド名についてもう少し説明をしましょう。&#8221;8g&#8221;コマンドの1桁目の&#8221;8&#8243;はハードウェアのシステムを表す識別コードで、この&#8221;8&#8243;はx86-64システムを示しています。2桁目の&#8221;g&#8221;はコマンドの種類を表す識別コードで、この&#8221;g&#8221;はGo言語コンパイラという意味です。</p>
<p>他のコマンドにもこのルールが適用されています。詳細は下の2つの表を参照ください。</p>
<table border="0">
<caption><strong>システムの識別コード一覧</strong></caption>
<tbody>
<tr>
<th>識別コード(コマンドの1桁目)</th>
<th>システム</th>
</tr>
<tr>
<td> 6</td>
<td> amd64(別名 x86-64)</td>
</tr>
<tr>
<td> 8</td>
<td> 386(別名 x86, x86-32)</td>
</tr>
<tr>
<td> 5</td>
<td> arm(別名 ARM)</td>
</tr>
</tbody>
</table>
<p> </p>
<table border="0">
<caption><strong>コマンドの種類の識別コード一覧</strong></caption>
<tbody>
<tr>
<th>識別コード(コマンドの2桁目)</th>
<th>コマンドの種類</th>
</tr>
<tr>
<td> g</td>
<td> Go言語コンパイラ</td>
</tr>
<tr>
<td> a</td>
<td> アセンブラ</td>
</tr>
<tr>
<td> c</td>
<td>C言語コンパイラ</td>
</tr>
<tr>
<td> l</td>
<td> リンカ</td>
</tr>
</tbody>
</table>
<p>この名前のルールはPlan 9というオペレーティングシステムに由来するものです。このPlan 9は 分散オペレーティングシステムで様々なハードウェア上で動作するためこのようにシステム別のコマンドが用意されているようです。</p>
<p>上の表でC言語用のコンパイラが用意されていることでお分かりのように、Go言語とC言語のプログラムをリンクすることが出来ます。</p>
<p>gcを動かすためにはいくつか環境変数を設定しておく必要があります。詳しくは<a href="http://golang.jp/install">Go言語のインストール</a>を参照ください。</p>
<p> </p>
<h1> gccgo &#8211; GCC GO compiler</h1>
<p>もう一方のgccgoはgcより少し遅れて開発が開始されました。</p>
<p>gccの名前が示すとおりgcc(GNU Compiler Collection)を利用したコンパイラです。gccをバックエンドに使用しているためgccでコンパイルしたC言語、C++言語プログラムとのリンクが可能です。<br />
gccgoでコンパイルしたコードはgcでコンパイルされたものより最適化されていて若干早く動作します。</p>
<p>ただし現時点では下に記述した、いくつかの制限事項があります。</p>
<ul>
<li>ガーベージコレクションが未実装<br />
そのため長時間動作し続けるプログラムには向きません。</li>
<li>goroutinesに制限がある<br />
goroutinesとはGo言語がサポートしている軽量通信プロセスのことです。<br />
これがgccgoではNPTL(Native POSIX Thread Library)のスレッドとして実装されていて、スタックサイズが固定という制限があります。また一度に作成できるgoroutinesの数にも制限があります。</li>
</ul>
<p> </p>
<h1>どちらを使えばよいか</h1>
<p>gc、gccgoのうちどちらを使えばよいか迷ったら、現時点ではgccgoにはまだ制限が多いためgcを使うのが無難なようです。</p>
]]></content:encoded>
			<wfw:commentRss>http://golang.jp/2009/11/155/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://golang.jp/2009/11/155" />
	</item>
		<item>
		<title>Go言語早くも存続の危機？</title>
		<link>http://golang.jp/2009/11/108</link>
		<comments>http://golang.jp/2009/11/108#comments</comments>
		<pubDate>Fri, 13 Nov 2009 07:51:14 +0000</pubDate>
		<dc:creator>noboru</dc:creator>
				<category><![CDATA[コラム]]></category>

		<guid isPermaLink="false">http://golang.jp/?p=108</guid>
		<description><![CDATA[ちょっとタイトルが大げさでしたが、
slashdot.jpの記事によると、10年前に同じ名前の言語が発表されていたそうです。
http://slashdot.jp/developers/article.pl?sid=09 [...]]]></description>
			<content:encoded><![CDATA[<p>ちょっとタイトルが大げさでしたが、<br />
slashdot.jpの記事によると、10年前に同じ名前の言語が発表されていたそうです。<br />
<a href="http://slashdot.jp/developers/article.pl?sid=09/11/13/0356256">http://slashdot.jp/developers/article.pl?sid=09/11/13/0356256</a></p>
<p>その言語の名前は正確には&#8221;Go&#8221;ではなく、&#8221;Go!&#8221;みたいいですね。<br />
まるく収まるとよいですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://golang.jp/2009/11/108/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://golang.jp/2009/11/108" />
	</item>
	</channel>
</rss>
