[インデックス 19073] ファイルの概要
このコミットは、Go言語のバージョン1.3のリリースノートを記述したドキュメントファイル doc/go1.3.html
に対する変更です。このファイルは、Go 1.3で導入された新機能、改善点、および変更点をユーザーに伝えるための公式ドキュメントの一部として機能します。具体的には、ガベージコレクタの精度向上、Native Client (NaCl) のサポート、およびSolarisオペレーティングシステムのサポートに関する記述が追加・更新されています。
コミット
- コミットハッシュ:
b69238bfbec9c94b804c17fdfaf2e93ae9175cfc
- 作者: Rob Pike r@golang.org
- コミット日時: 2014年4月9日 水曜日 12:47:35 +1000
- 変更ファイル:
doc/go1.3.html
(1ファイル変更) - 変更行数: 14行追加, 4行削除
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/b69238bfbec9c94b804c17fdfaf2e93ae9175cfc
元コミット内容
doc/go1.3.html: gc precision, nacl, solaris
LGTM=rsc
R=rsc, bradfitz
CC=golang-codereviews
https://golang.org/cl/85740043
変更の背景
このコミットは、Go 1.3のリリースに向けて、その主要な変更点や新機能を公式ドキュメントに反映させるために行われました。特に、以下の3つの重要な側面について、ユーザーがGo 1.3で何が期待できるかを明確に伝える必要がありました。
- ガベージコレクタ (GC) の精度向上: Goのランタイムにおけるメモリ管理の重要な側面であるGCの動作が改善され、より効率的で信頼性の高いメモリ回収が可能になったことを説明するため。
- Native Client (NaCl) のサポート: Google Chromeブラウザ内で安全にネイティブコードを実行するための技術であるNative ClientへのGoのサポートが復活したことをアナウンスするため。これは、Webアプリケーションのパフォーマンス向上や新たなユースケースの開拓に繋がる可能性がありました。
- Solarisのサポート: Goがサポートするオペレーティングシステムの範囲がSolarisに拡大されたことを告知するため。これにより、Solaris環境でGoアプリケーションを開発・実行したいユーザーへの情報提供が必要でした。
これらの変更は、Go言語の進化と、より多様なプラットフォームやユースケースへの対応を示すものであり、その情報を正確かつ詳細にユーザーに提供することが、このドキュメント更新の背景にありました。
前提知識の解説
Go言語のリリースサイクルとドキュメントの重要性
Go言語は、およそ半年ごとにメジャーリリース(例: Go 1.x)を行います。各リリースでは、言語仕様の変更、標準ライブラリの追加・改善、ランタイムの最適化など、様々な変更が加えられます。これらの変更は、go.dev
(旧 golang.org
)のウェブサイトで公開されるリリースノート(通常は doc/go1.x.html
のような形式)を通じてユーザーに伝えられます。このドキュメントは、開発者が新しいバージョンに移行する際に、互換性の問題や新機能の利用方法を理解するための重要な情報源となります。
Goのガベージコレクタ (GC) と「精度 (Precision)」の概念
Go言語は、自動メモリ管理のためにガベージコレクタ (GC) を採用しています。GCの主な役割は、プログラムがもはや参照しないメモリ領域(「到達不能なオブジェクト」)を自動的に識別し、解放することです。これにより、開発者は手動でのメモリ管理の複雑さから解放されます。
GCにおける「精度 (Precision)」とは、GCがメモリ上の値がポインタであるか否かを正確に識別できる能力を指します。
- 正確なGC (Precise GC): GCがメモリ上の各ワードを検査し、それが有効なポインタであるか、それとも単なる整数や浮動小数点数などの非ポインタ値であるかを確実に判断できる場合、そのGCは「正確」であると言われます。正確なGCは、誤って非ポインタ値をポインタと解釈してしまい、実際には到達不能なオブジェクトを「到達可能」とマークしてしまう(これによりメモリリークが発生する)ことを防ぎます。
- 不正確なGC (Conservative GC): 一方、不正確なGCは、メモリ上の値がポインタであるかどうかを確実に判断できない場合があります。例えば、ある整数値がたまたまメモリ上の有効なアドレスと一致した場合、不正確なGCはそれをポインタと誤認し、そのアドレスが指すメモリ領域を解放しない可能性があります。これは「メモリリーク」や「メモリの断片化」を引き起こし、プログラムのパフォーマンスやメモリ使用効率に悪影響を与えることがあります。
GoのGCは、ヒープ上の値に対しては以前から正確でしたが、このコミットで言及されている変更は、スタック上の値に対しても同様の精度を適用することに焦点を当てています。スタックは、関数のローカル変数や引数などが格納されるメモリ領域です。スタック上の値が正確に識別されることで、GCはより多くの不要なメモリを安全に回収できるようになります。
Native Client (NaCl)
Native Client (NaCl) は、Googleが開発したオープンソース技術で、Webブラウザ内でネイティブコード(C/C++など)を安全かつ高性能に実行することを可能にします。NaClは、サンドボックス環境を提供することで、悪意のあるコードがシステムにアクセスするのを防ぎつつ、CPUに近いパフォーマンスを実現します。
- 目的: Webアプリケーションのパフォーマンスを向上させ、従来のJavaScriptでは困難だった計算集約的なタスク(例: 3Dグラフィックス、ゲーム、科学計算)をブラウザ上で実行できるようにすること。
- Goとの関連性: Go言語で書かれたプログラムをNaClモジュールとしてコンパイルし、Webブラウザ内で実行できるようになります。これにより、Goの並行処理能力やパフォーマンスをWebクライアント側で活用できる可能性が広がります。
- PNaClとの違い: Portable Native Client (PNaCl) は、NaClの進化版であり、特定のCPUアーキテクチャに依存しないポータブルなバイナリ形式を提供します。このコミットで言及されているのは「Native Client (NaCl)」であり、「Portable Native Client (PNaCl)」ではない点に注意が必要です。
Solaris
Solarisは、Sun Microsystems(現在はOracleが所有)によって開発されたUNIXベースのオペレーティングシステムです。主にエンタープライズ環境でのサーバーやワークステーションで使用されてきました。Go言語がSolarisをサポートすることは、Goアプリケーションのデプロイ先として、より多様なサーバー環境が選択肢となることを意味します。このコミットでは、amd64
(64-bit x86) アーキテクチャ上でのSolarisサポートが「プレリミナリ(予備的)」であり、プロダクション環境での使用には適していないこと、およびソースからのビルドが必要であることが明記されています。
技術的詳細
ガベージコレクタの精度向上 (Stack Precision)
Go 1.3におけるガベージコレクタの最も重要な改善点の一つは、スタック上の値に対するポインタの精度 (precision) の向上です。
- 背景: 以前のGoのGCは、ヒープ上のオブジェクトについては正確にポインタを識別できましたが、スタック上の値については、一部のケースで不正確な(conservativeな)挙動を示すことがありました。これは、スタックフレーム内の特定のメモリ位置に、たまたま有効なポインタのように見えるビットパターンが存在した場合、GCがそれを実際のポインタと誤認し、その「ポインタ」が指すメモリ領域を解放対象から除外してしまう可能性があったことを意味します。
- Go 1.3での変更: Go 1.3では、スタック上のすべての値についても、ヒープ上の値と同様に正確なポインタ識別が行われるようになりました。これは、コンパイラがスタックフレーム内のどの位置にポインタが格納されているか、そしてそのポインタがどの型であるかに関するより詳細なメタデータをGCに提供することで実現されます。
- 影響と利点:
- メモリリークの削減: 非ポインタ値(例: 整数、浮動小数点数、構造体の一部)が誤ってポインタと認識されることがなくなるため、実際には到達不能なメモリが解放されずに残るという「偽の参照」によるメモリリークが完全に排除されます。
- GC効率の向上: GCは、本当に必要なメモリだけを保持し、不要なメモリをより積極的に、かつ安全に解放できるようになります。これにより、GCの実行時間が短縮され、アプリケーション全体のパフォーマンスが向上する可能性があります。
- 予測可能性の向上: GCの動作がより予測可能になり、デバッグやプロファイリングが容易になります。
この変更は、Goランタイムの堅牢性と効率性を大幅に向上させるものであり、特にメモリ使用量が大きいアプリケーションや、長時間稼働するサービスにおいてその恩恵が顕著に現れます。
Native Client (NaCl) サポートの復活
Go 1.3では、以前は存在し、一時的に削除されていたNative Client (NaCl) のサポートが復活しました。
- サポートされるアーキテクチャ:
GOARCH=386
: 32-bit Intelアーキテクチャ。GOARCH=amd64p32
: 64-bit Intelアーキテクチャ上で32-bitポインタを使用するモード。これは、NaCl環境が提供するメモリモデルに合わせたものです。
- 未サポート: ARMアーキテクチャ上でのNative Clientサポートは、この時点ではまだ提供されていませんでした。
- 重要な注意点: このサポートは「Native Client (NaCl)」であり、「Portable Native Client (PNaCl)」ではありません。PNaClは、よりポータブルなバイナリ形式を提供しますが、Go 1.3の時点ではNaClのみが対象でした。
- 利用方法: ドキュメントには、Native Clientに関する一般的な情報へのリンク(
https://developers.google.com/native-client/dev/
)と、GoでNative Clientを設定する方法に関するGo Wikiのページへのリンク(http://golang.org/wiki/NativeClient
)が記載されています。これにより、開発者はGoプログラムをNaCl環境で実行するための具体的な手順を参照できます。
Solarisサポートの追加
Go 1.3では、Solarisオペレーティングシステムへのプレリミナリ(予備的)なサポートが追加されました。
- 対象アーキテクチャ:
amd64
(64-bit x86) アーキテクチャ上のSolarisが対象です。 - 現状と制限:
- プレリミナリサポート: このサポートはまだ初期段階であり、完全な安定性や機能が保証されているわけではありません。
- プロダクション非推奨: ドキュメントには「プロダクションでの使用には適していません (not ready for production use)」と明記されており、本番環境での利用は推奨されていませんでした。
- ソースからのビルド: Solaris上でGoを使用するには、Goのソースコードからビルドする必要がありました。これは、公式のバイナリディストリビューションが提供されていないことを意味します。
このサポートの追加は、Goがより多くのエンタープライズ環境やレガシーシステムへの対応を進めていることを示唆していますが、その成熟度にはまだ課題があることを示しています。
コアとなるコードの変更箇所
このコミットは、doc/go1.3.html
ファイルの以下のセクションに記述を追加・変更しています。
--- a/doc/go1.3.html
+++ b/doc/go1.3.html
@@ -25,14 +25,22 @@ will continue to compile and run without change when moved to 1.3.
<h2 id="os">Changes to the supported operating systems and architectures</h2>
<h3 id="nacl">Support for Native Client</h3>
+\n <p>
+-TODO
++Support for the Native Client virtual machine architecture has returned to Go with the 1.3 release.\n+It runs on the 32-bit Intel architectures (<code>GOARCH=386</code>) and also on 64-bit Intel, but using\n+32-bit pointers (<code>GOARCH=amd64p32</code>).\n+There is not yet support for Native Client on ARM.\n+Note that this is Native Client (NaCl), not Portable Native Client (PNaCl).\n+Details about Native Client are <a href="https://developers.google.com/native-client/dev/">here</a>;\n+how to set up the Go version is described <a href="http://golang.org/wiki/NativeClient">here</a>.\n </p>
<h3 id="solaris">Support for Solaris</h3>
<p>
-TODO
-+Go 1.3 now includes preliminary support for Solaris on the <code>amd64</code> (64-bit x86) architecture.\n++The Solaris port of Go is not ready for production use and must be built from source.\n </p>
@@ -82,8 +90,10 @@ put back to 4 kilobytes.\n <h3 id="garbage_collector">Changes to the garbage collector</h3>
<p>
-precision (TODO what to say)
-liveness (TODO what to say)
-+For a while now, the garbage collector has been <em>precise</em> when examining\n++For a while now, the garbage collector has been <em>precise</em> when examining\n+values in the heap; the Go 1.3 release adds equivalent precision to values on the stack.\n+This means that a non-pointer Go value such as an integer will never be mistaken for a\n+pointer and prevent unused memory from being reclaimed.\n </p>
<h3 id="liblink">The linker</h3>
コアとなるコードの解説
上記の差分は、doc/go1.3.html
ファイル内の3つの主要なセクション (nacl
, solaris
, garbage_collector
) に具体的な説明を追加しています。
-
h3 id="nacl"
(Support for Native Client) セクション:-TODO
が削除され、Native Clientサポートに関する詳細な説明が追加されています。- 「Go 1.3リリースでNative Client仮想マシンアーキテクチャのサポートがGoに戻ってきた」と明記されています。
- サポートされるアーキテクチャとして
GOARCH=386
(32-bit Intel) とGOARCH=amd64p32
(64-bit Intelで32-bitポインタを使用) が挙げられています。 - ARM上でのNative Clientサポートはまだないことが述べられています。
- これがNative Client (NaCl) であり、Portable Native Client (PNaCl) ではないことが強調されています。
- Native Clientに関する詳細情報へのリンク (
https://developers.google.com/native-client/dev/
) と、Goでの設定方法に関するGo Wikiへのリンク (http://golang.org/wiki/NativeClient
) が提供されています。
-
h3 id="solaris"
(Support for Solaris) セクション:-TODO
が削除され、Solarisサポートに関する説明が追加されています。- 「Go 1.3が
amd64
(64-bit x86) アーキテクチャ上のSolarisに対する予備的なサポートを含むようになった」と記述されています。 - 「GoのSolarisポートはプロダクションでの使用には適しておらず、ソースからビルドする必要がある」という重要な注意書きが追加されています。
-
h3 id="garbage_collector"
(Changes to the garbage collector) セクション:-precision (TODO what to say)
と-liveness (TODO what to say)
というプレースホルダーが削除され、ガベージコレクタの精度に関する具体的な説明が追加されています。- 「ガベージコレクタはこれまでヒープ内の値を検査する際に正確であったが、Go 1.3リリースではスタック上の値にも同等の精度が追加された」と説明されています。
- この変更の意義として、「これにより、整数のような非ポインタのGo値がポインタと誤認されて、未使用のメモリが回収されないことを防ぐ」と明確に述べられています。これは、前述の「前提知識の解説」で説明したGCの精度向上、特にスタック上の値に対する正確なポインタ識別の重要性を強調するものです。
これらの変更は、Go 1.3の主要な技術的進歩をユーザーに伝えるための、具体的かつ詳細なドキュメント更新を反映しています。
関連リンク
- Native Client開発者向けドキュメント: https://developers.google.com/native-client/dev/
- Go Wiki - Native Client: http://golang.org/wiki/NativeClient
参考にした情報源リンク
- Go 1.3 Release Notes (公式ドキュメント): https://go.dev/doc/go1.3 (このコミットが更新しているファイルそのものですが、最終的な公開版を参照することで、より広範な文脈を理解できます。)
- Go Garbage Collection (公式ドキュメントや関連ブログ記事): GoのGCに関する一般的な情報源。
- Native Client (Wikipediaなど): NaClの技術的背景に関する情報源。
- Solaris Operating System (Wikipediaなど): Solaris OSに関する一般的な情報源。
- Go言語の公式リポジトリのコミット履歴: 関連する他のコミットや議論を追跡するため。
- Go言語のメーリングリストやフォーラム: 開発者間の議論や決定の背景を理解するため。
- Go言語のソースコード: GCの実装やNaCl/Solaris関連のコードを直接確認するため。
[インデックス 19073] ファイルの概要
このコミットは、Go言語のバージョン1.3のリリースノートを記述したドキュメントファイル doc/go1.3.html
に対する変更です。このファイルは、Go 1.3で導入された新機能、改善点、および変更点をユーザーに伝えるための公式ドキュメントの一部として機能します。具体的には、ガベージコレクタの精度向上、Native Client (NaCl) のサポート、およびSolarisオペレーティングシステムのサポートに関する記述が追加・更新されています。
コミット
- コミットハッシュ:
b69238bfbec9c94b804c17fdfaf2e93ae9175cfc
- 作者: Rob Pike r@golang.org
- コミット日時: 2014年4月9日 水曜日 12:47:35 +1000
- 変更ファイル:
doc/go1.3.html
(1ファイル変更) - 変更行数: 14行追加, 4行削除
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/b69238bfbec9c94b804c17fdfaf2e93ae9175cfc
元コミット内容
doc/go1.3.html: gc precision, nacl, solaris
LGTM=rsc
R=rsc, bradfitz
CC=golang-codereviews
https://golang.org/cl/85740043
変更の背景
このコミットは、Go 1.3のリリースに向けて、その主要な変更点や新機能を公式ドキュメントに反映させるために行われました。特に、以下の3つの重要な側面について、ユーザーがGo 1.3で何が期待できるかを明確に伝える必要がありました。
- ガベージコレクタ (GC) の精度向上: Goのランタイムにおけるメモリ管理の重要な側面であるGCの動作が改善され、より効率的で信頼性の高いメモリ回収が可能になったことを説明するため。
- Native Client (NaCl) のサポート: Google Chromeブラウザ内で安全にネイティブコードを実行するための技術であるNative ClientへのGoのサポートが復活したことをアナウンスするため。これは、Webアプリケーションのパフォーマンス向上や新たなユースケースの開拓に繋がる可能性がありました。
- Solarisのサポート: Goがサポートするオペレーティングシステムの範囲がSolarisに拡大されたことを告知するため。これにより、Solaris環境でGoアプリケーションを開発・実行したいユーザーへの情報提供が必要でした。
これらの変更は、Go言語の進化と、より多様なプラットフォームやユースケースへの対応を示すものであり、その情報を正確かつ詳細にユーザーに提供することが、このドキュメント更新の背景にありました。
前提知識の解説
Go言語のリリースサイクルとドキュメントの重要性
Go言語は、およそ半年ごとにメジャーリリース(例: Go 1.x)を行います。各リリースでは、言語仕様の変更、標準ライブラリの追加・改善、ランタイムの最適化など、様々な変更が加えられます。これらの変更は、go.dev
(旧 golang.org
)のウェブサイトで公開されるリリースノート(通常は doc/go1.x.html
のような形式)を通じてユーザーに伝えられます。このドキュメントは、開発者が新しいバージョンに移行する際に、互換性の問題や新機能の利用方法を理解するための重要な情報源となります。
Goのガベージコレクタ (GC) と「精度 (Precision)」の概念
Go言語は、自動メモリ管理のためにガベージコレクタ (GC) を採用しています。GCの主な役割は、プログラムがもはや参照しないメモリ領域(「到達不能なオブジェクト」)を自動的に識別し、解放することです。これにより、開発者は手動でのメモリ管理の複雑さから解放されます。
GCにおける「精度 (Precision)」とは、GCがメモリ上の値がポインタであるか否かを正確に識別できる能力を指します。
- 正確なGC (Precise GC): GCがメモリ上の各ワードを検査し、それが有効なポインタであるか、それとも単なる整数や浮動小数点数などの非ポインタ値であるかを確実に判断できる場合、そのGCは「正確」であると言われます。正確なGCは、誤って非ポインタ値をポインタと解釈してしまい、実際には到達不能なオブジェクトを「到達可能」とマークしてしまう(これによりメモリリークが発生する)ことを防ぎます。
- 不正確なGC (Conservative GC): 一方、不正確なGCは、メモリ上の値がポインタであるかどうかを確実に判断できない場合があります。例えば、ある整数値がたまたまメモリ上の有効なアドレスと一致した場合、不正確なGCはそれをポインタと誤認し、そのアドレスが指すメモリ領域を解放しない可能性があります。これは「メモリリーク」や「メモリの断片化」を引き起こし、プログラムのパフォーマンスやメモリ使用効率に悪影響を与えることがあります。
GoのGCは、ヒープ上の値に対しては以前から正確でしたが、このコミットで言及されている変更は、スタック上の値に対しても同様の精度を適用することに焦点を当てています。スタックは、関数のローカル変数や引数などが格納されるメモリ領域です。スタック上の値が正確に識別されることで、GCはより多くの不要なメモリを安全に回収できるようになります。
Native Client (NaCl)
Native Client (NaCl) は、Googleが開発したオープンソース技術で、Webブラウザ内でネイティブコード(C/C++など)を安全かつ高性能に実行することを可能にします。NaClは、サンドボックス環境を提供することで、悪意のあるコードがシステムにアクセスするのを防ぎつつ、CPUに近いパフォーマンスを実現します。
- 目的: Webアプリケーションのパフォーマンスを向上させ、従来のJavaScriptでは困難だった計算集約的なタスク(例: 3Dグラフィックス、ゲーム、科学計算)をブラウザ上で実行できるようにすること。
- Goとの関連性: Go言語で書かれたプログラムをNaClモジュールとしてコンパイルし、Webブラウザ内で実行できるようになります。これにより、Goの並行処理能力やパフォーマンスをWebクライアント側で活用できる可能性が広がります。
- PNaClとの違い: Portable Native Client (PNaCl) は、NaClの進化版であり、特定のCPUアーキテクチャに依存しないポータブルなバイナリ形式を提供します。このコミットで言及されているのは「Native Client (NaCl)」であり、「Portable Native Client (PNaCl)」ではない点に注意が必要です。
Solaris
Solarisは、Sun Microsystems(現在はOracleが所有)によって開発されたUNIXベースのオペレーティングシステムです。主にエンタープライズ環境でのサーバーやワークステーションで使用されてきました。Go言語がSolarisをサポートすることは、Goアプリケーションのデプロイ先として、より多様なサーバー環境が選択肢となることを意味します。このコミットでは、amd64
(64-bit x86) アーキテクチャ上でのSolarisサポートが「プレリミナリ(予備的)」であり、プロダクション環境での使用には適していないこと、およびソースからのビルドが必要であることが明記されています。
技術的詳細
ガベージコレクタの精度向上 (Stack Precision)
Go 1.3におけるガベージコレクタの最も重要な改善点の一つは、スタック上の値に対するポインタの精度 (precision) の向上です。
- 背景: 以前のGoのGCは、ヒープ上のオブジェクトについては正確にポインタを識別できましたが、スタック上の値については、一部のケースで不正確な(conservativeな)挙動を示すことがありました。これは、スタックフレーム内の特定のメモリ位置に、たまたま有効なポインタのように見えるビットパターンが存在した場合、GCがそれを実際のポインタと誤認し、その「ポインタ」が指すメモリ領域を解放対象から除外してしまう可能性があったことを意味します。
- Go 1.3での変更: Go 1.3では、スタック上のすべての値についても、ヒープ上の値と同様に正確なポインタ識別が行われるようになりました。これは、コンパイラがスタックフレーム内のどの位置にポインタが格納されているか、そしてそのポインタがどの型であるかに関するより詳細なメタデータをGCに提供することで実現されます。
- 影響と利点:
- メモリリークの削減: 非ポインタ値(例: 整数、浮動小数点数、構造体の一部)が誤ってポインタと認識されることがなくなるため、実際には到達不能なメモリが解放されずに残るという「偽の参照」によるメモリリークが完全に排除されます。
- GC効率の向上: GCは、本当に必要なメモリだけを保持し、不要なメモリをより積極的に、かつ安全に解放できるようになります。これにより、GCの実行時間が短縮され、アプリケーション全体のパフォーマンスが向上する可能性があります。
- 予測可能性の向上: GCの動作がより予測可能になり、デバッグやプロファイリングが容易になります。
この変更は、Goランタイムの堅牢性と効率性を大幅に向上させるものであり、特にメモリ使用量が大きいアプリケーションや、長時間稼働するサービスにおいてその恩恵が顕著に現れます。
Native Client (NaCl) サポートの復活
Go 1.3では、以前は存在し、一時的に削除されていたNative Client (NaCl) のサポートが復活しました。
- サポートされるアーキテクチャ:
GOARCH=386
: 32-bit Intelアーキテクチャ。GOARCH=amd64p32
: 64-bit Intelアーキテクチャ上で32-bitポインタを使用するモード。これは、NaCl環境が提供するメモリモデルに合わせたものです。
- 未サポート: ARMアーキテクチャ上でのNative Clientサポートは、この時点ではまだ提供されていませんでした。
- 重要な注意点: このサポートは「Native Client (NaCl)」であり、「Portable Native Client (PNaCl)」ではありません。PNaClは、よりポータブルなバイナリ形式を提供しますが、Go 1.3の時点ではNaClのみが対象でした。
- 利用方法: ドキュメントには、Native Clientに関する一般的な情報へのリンク(
https://developers.google.com/native-client/dev/
)と、GoでNative Clientを設定する方法に関するGo Wikiのページへのリンク(http://golang.org/wiki/NativeClient
)が記載されています。これにより、開発者はGoプログラムをNaCl環境で実行するための具体的な手順を参照できます。
Solarisサポートの追加
Go 1.3では、Solarisオペレーティングシステムへのプレリミナリ(予備的)なサポートが追加されました。
- 対象アーキテクチャ:
amd64
(64-bit x86) アーキテクチャ上のSolarisが対象です。 - 現状と制限:
- プレリミナリサポート: このサポートはまだ初期段階であり、完全な安定性や機能が保証されているわけではありません。
- プロダクション非推奨: ドキュメントには「プロダクションでの使用には適していません (not ready for production use)」と明記されており、本番環境での利用は推奨されていませんでした。
- ソースからのビルド: Solaris上でGoを使用するには、Goのソースコードからビルドする必要がありました。これは、公式のバイナリディストリビューションが提供されていないことを意味します。
このサポートの追加は、Goがより多くのエンタープライズ環境やレガシーシステムへの対応を進めていることを示唆していますが、その成熟度にはまだ課題があることを示しています。
コアとなるコードの変更箇所
このコミットは、doc/go1.3.html
ファイルの以下のセクションに記述を追加・変更しています。
--- a/doc/go1.3.html
+++ b/doc/go1.3.html
@@ -25,14 +25,22 @@ will continue to compile and run without change when moved to 1.3.
<h2 id="os">Changes to the supported operating systems and architectures</h2>
<h3 id="nacl">Support for Native Client</h3>
+\n <p>
-TODO
++Support for the Native Client virtual machine architecture has returned to Go with the 1.3 release.\n+It runs on the 32-bit Intel architectures (<code>GOARCH=386</code>) and also on 64-bit Intel, but using\n+32-bit pointers (<code>GOARCH=amd64p32</code>).\n+There is not yet support for Native Client on ARM.\n+Note that this is Native Client (NaCl), not Portable Native Client (PNaCl).\n+Details about Native Client are <a href="https://developers.google.com/native-client/dev/">here</a>;\n+how to set up the Go version is described <a href="http://golang.org/wiki/NativeClient">here</a>.\n </p>
<h3 id="solaris">Support for Solaris</h3>
<p>
-TODO
-+Go 1.3 now includes preliminary support for Solaris on the <code>amd64</code> (64-bit x86) architecture.\n++The Solaris port of Go is not ready for production use and must be built from source.\n </p>
@@ -82,8 +90,10 @@ put back to 4 kilobytes.\n <h3 id="garbage_collector">Changes to the garbage collector</h3>
<p>
-precision (TODO what to say)
-liveness (TODO what to say)
-+For a while now, the garbage collector has been <em>precise</em> when examining\n++For a while now, the garbage collector has been <em>precise</em> when examining\n+values in the heap; the Go 1.3 release adds equivalent precision to values on the stack.\n+This means that a non-pointer Go value such as an integer will never be mistaken for a\n+pointer and prevent unused memory from being reclaimed.\n </p>
<h3 id="liblink">The linker</h3>
コアとなるコードの解説
上記の差分は、doc/go1.3.html
ファイル内の3つの主要なセクション (nacl
, solaris
, garbage_collector
) に具体的な説明を追加しています。
-
h3 id="nacl"
(Support for Native Client) セクション:-TODO
が削除され、Native Clientサポートに関する詳細な説明が追加されています。- 「Go 1.3リリースでNative Client仮想マシンアーキテクチャのサポートがGoに戻ってきた」と明記されています。
- サポートされるアーキテクチャとして
GOARCH=386
(32-bit Intel) とGOARCH=amd64p32
(64-bit Intelで32-bitポインタを使用) が挙げられています。 - ARM上でのNative Clientサポートはまだないことが述べられています。
- これがNative Client (NaCl) であり、Portable Native Client (PNaCl) ではないことが強調されています。
- Native Clientに関する詳細情報へのリンク (
https://developers.google.com/native-client/dev/
) と、Goでの設定方法に関するGo Wikiへのリンク (http://golang.org/wiki/NativeClient
) が提供されています。
-
h3 id="solaris"
(Support for Solaris) セクション:-TODO
が削除され、Solarisサポートに関する説明が追加されています。- 「Go 1.3が
amd64
(64-bit x86) アーキテクチャ上のSolarisに対する予備的なサポートを含むようになった」と記述されています。 - 「GoのSolarisポートはプロダクションでの使用には適しておらず、ソースからビルドする必要がある」という重要な注意書きが追加されています。
-
h3 id="garbage_collector"
(Changes to the garbage collector) セクション:-precision (TODO what to say)
と-liveness (TODO what to say)
というプレースホルダーが削除され、ガベージコレクタの精度に関する具体的な説明が追加されています。- 「ガベージコレクタはこれまでヒープ内の値を検査する際に正確であったが、Go 1.3リリースではスタック上の値にも同等の精度が追加された」と説明されています。
- この変更の意義として、「これにより、整数のような非ポインタのGo値がポインタと誤認されて、未使用のメモリが回収されないことを防ぐ」と明確に述べられています。これは、前述の「前提知識の解説」で説明したGCの精度向上、特にスタック上の値に対する正確なポインタ識別の重要性を強調するものです。
これらの変更は、Go 1.3の主要な技術的進歩をユーザーに伝えるための、具体的かつ詳細なドキュメント更新を反映しています。
関連リンク
- Native Client開発者向けドキュメント: https://developers.google.com/native-client/dev/
- Go Wiki - Native Client: http://golang.org/wiki/NativeClient
参考にした情報源リンク
- Go 1.3 Release Notes (公式ドキュメント): https://go.dev/doc/go1.3 (このコミットが更新しているファイルそのものですが、最終的な公開版を参照することで、より広範な文脈を理解できます。)
- Go Garbage Collection (公式ドキュメントや関連ブログ記事): GoのGCに関する一般的な情報源。
- Native Client (Wikipediaなど): NaClの技術的背景に関する情報源。
- Solaris Operating System (Wikipediaなど): Solaris OSに関する一般的な情報源。
- Go言語の公式リポジトリのコミット履歴: 関連する他のコミットや議論を追跡するため。
- Go言語のメーリングリストやフォーラム: 開発者間の議論や決定の背景を理解するため。
- Go言語のソースコード: GCの実装やNaCl/Solaris関連のコードを直接確認するため。