Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 16380] ファイルの概要

このコミットは、Go言語の公式ドキュメント doc/go1.1.html の更新に関するものです。具体的には、GCCのGoコンパイラであるgccgoのGo 1.1実装に関する記述を修正し、GCC 4.8.1がGo 1.1に更新されていないという事実を反映しています。当初の期待とは異なり、GCC 4.8.1では完全なGo 1.1の実装が提供されなかったため、ドキュメント内のGCC 4.8.1に関する記述をGCC 4.8.2に修正し、期待されるリリース時期も変更しています。

コミット

  • コミットハッシュ: 452f3bc7599afcee9a5bda0caee4f7859c8d170a
  • Author: Ian Lance Taylor iant@golang.org
  • Date: Wed May 22 13:05:31 2013 -0700

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/452f3bc7599afcee9a5bda0caee4f7859c8d170a

元コミット内容

doc: GCC 4.8.1 is not updated to Go 1.1

I will try again for 4.8.2.

R=golang-dev, minux.ma
CC=golang-dev
https://golang.org/cl/9663045

変更の背景

このコミットの背景には、Go言語の公式リリースと、GCC (GNU Compiler Collection) に含まれるGoコンパイラであるgccgoのリリーススケジュールの不一致があります。Go言語は独自のリリースサイクルを持っていますが、gccgoはGCCのリリースサイクルに依存しています。

Go 1.1がリリースされた際、ドキュメントではGCC 4.8.1がGo 1.1の完全な実装を提供すると期待されていました。しかし、実際にGCC 4.8.1がリリースされた時点では、gccgoのGo 1.1実装が完全ではなかった、特に「メソッド値 (method values)」が未実装であったという問題がありました。

このコミットは、この期待と現実の乖離を修正するために行われました。ドキュメントの記述を更新し、GCC 4.8.1ではなくGCC 4.8.2で完全なGo 1.1実装が提供される見込みであることを明記しています。これは、ユーザーがgccgoのバージョンとGo言語のバージョンとの互換性について誤解するのを防ぐための重要な修正です。

前提知識の解説

Go言語

GoはGoogleによって開発されたオープンソースのプログラミング言語です。静的型付け、コンパイル型、並行処理のサポート、ガベージコレクションなどの特徴を持ち、シンプルさと効率性を重視しています。Goは、特にネットワークサービスや分散システムなどの開発に適しています。

GCC (GNU Compiler Collection)

GCCは、GNUプロジェクトによって開発されたコンパイラの集合体です。C、C++、Objective-C、Fortran、Ada、Goなど、多くのプログラミング言語をサポートしています。GCCは、オープンソースのオペレーティングシステム(Linuxなど)で広く使用されている標準的なコンパイラです。

gccgo

gccgoは、GCCの一部として提供されるGo言語のフロントエンド(コンパイラ)です。Go言語の公式コンパイラであるgcとは異なる実装であり、GCCの最適化パスやバックエンドを利用できるという特徴があります。これにより、特定のプラットフォームでのパフォーマンス向上や、他のGCCがサポートする言語との連携が容易になる場合があります。しかし、gccgoのリリースはGCCのリリースサイクルに縛られるため、Go言語の公式リリースから遅れることがあります。

Goのリリースサイクルとgccgoの同期

Go言語は、通常半年ごとに新しいメジャーバージョンをリリースしています。これに対して、GCCも独自のリリーススケジュールを持っています。このため、Goの新しいバージョンがリリースされても、gccgoがそのGoのバージョンに完全に追いつくには、次のGCCのメジャーリリースを待つ必要がある場合があります。このコミットのケースでは、Go 1.1がリリースされた時点では、GCC 4.8.0のgccgoはGo 1.1に「ほぼ」対応していましたが、完全ではありませんでした。そして、期待されていたGCC 4.8.1でも完全なGo 1.1実装が提供されなかったため、GCC 4.8.2での対応が期待されることになりました。

メソッド値 (Method Values)

Go言語における「メソッド値」とは、レシーバ(メソッドが呼び出されるオブジェクト)がバインドされたメソッドを指します。これは、関数のように変数に代入したり、引数として渡したりすることができます。例えば、type T struct {}; func (t T) M() {} という定義があった場合、t := T{}; f := t.M のようにt.Mを直接変数fに代入すると、ftにバインドされたMメソッドの「メソッド値」となります。この機能はGo言語の重要な特徴の一つであり、Go 1.1で導入されたか、あるいはGo 1.1の完全な実装の一部として期待されていた機能であったと考えられます。gccgoがこの機能を実装していなかったことは、Go 1.1の完全な互換性を提供する上で大きな課題でした。

技術的詳細

このコミットは、技術的な実装そのものよりも、ドキュメントの正確性を保つことに焦点を当てています。しかし、その背景にはgccgoの実装状況という技術的な側面が深く関わっています。

Go 1.1のリリースノートや関連する議論を考慮すると、Go 1.1はGo言語にとって重要なマイルストーンであり、多くの新機能や改善が導入されました。その中には、gccgoが追いつくのに時間を要するような複雑な変更も含まれていた可能性があります。特に「メソッド値」の未実装は、Goの型システムとランタイムの深い部分に関わる変更であり、gccgoがこれをサポートするためには、コンパイラの内部構造に相応の変更が必要だったと推測されます。

GCCのリリースサイクルは、Go言語のそれよりも長く、より多くの言語やアーキテクチャをサポートしているため、特定の言語の最新機能への対応が遅れることは珍しくありません。このコミットは、その現実をGoの公式ドキュメントに反映させることで、ユーザーがgccgoの現状を正しく理解し、適切なバージョンのgccgoを選択できるようにするためのものです。

ドキュメントの変更は、単なる日付の修正に見えますが、これはGo言語コミュニティがgccgoの進捗を注意深く追跡し、ユーザーに正確な情報を提供しようとする姿勢を示しています。

コアとなるコードの変更箇所

変更は doc/go1.1.html ファイルの1箇所のみです。

--- a/doc/go1.1.html
+++ b/doc/go1.1.html
@@ -159,7 +159,7 @@ The GCC release schedule does not coincide with the Go release schedule, so some
 <code>gccgo</code>'s releases.
 The 4.8.0 version of GCC shipped in March, 2013 and includes a nearly-Go 1.1 version of <code>gccgo</code>.
 Its library is a little behind the release, but the biggest difference is that method values are not implemented.
-Sometime around May 2013, we expect 4.8.1 of GCC to ship with a <code>gccgo</code>
+Sometime around July 2013, we expect 4.8.2 of GCC to ship with a <code>gccgo</code>
 providing a complete Go 1.1 implementaiton.
 </p>

コアとなるコードの解説

この変更は、doc/go1.1.html 内の以下の文を修正しています。

  • 変更前: Sometime around May 2013, we expect 4.8.1 of GCC to ship with a <code>gccgo</code> providing a complete Go 1.1 implementaiton.
  • 変更後: Sometime around July 2013, we expect 4.8.2 of GCC to ship with a <code>gccgo</code> providing a complete Go 1.1 implementaiton.

この修正により、以下の点が変更されました。

  1. GCCのバージョン: 4.8.1 から 4.8.2 へと変更されました。これは、GCC 4.8.1では完全なGo 1.1実装が提供されなかったため、次のバージョンである4.8.2での対応を期待するようになったことを示しています。
  2. 期待されるリリース時期: May 2013 から July 2013 へと変更されました。これは、GCC 4.8.2のリリースがGCC 4.8.1よりも遅れるため、それに合わせて期待されるgccgoの完全なGo 1.1実装の提供時期も後ろ倒しになったことを示しています。

この変更は、Go 1.1のドキュメントにおけるgccgoの互換性に関する情報を最新かつ正確なものに保つことを目的としています。

関連リンク

参考にした情報源リンク

[インデックス 16380] ファイルの概要

このコミットは、Go言語の公式ドキュメント doc/go1.1.html の更新に関するものです。具体的には、GCCのGoコンパイラであるgccgoのGo 1.1実装に関する記述を修正し、GCC 4.8.1がGo 1.1に更新されていないという事実を反映しています。当初の期待とは異なり、GCC 4.8.1では完全なGo 1.1の実装が提供されなかったため、ドキュメント内のGCC 4.8.1に関する記述をGCC 4.8.2に修正し、期待されるリリース時期も変更しています。

コミット

  • コミットハッシュ: 452f3bc7599afcee9a5bda0caee4f7859c8d170a
  • Author: Ian Lance Taylor iant@golang.org
  • Date: Wed May 22 13:05:31 2013 -0700

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/452f3bc7599afcee9a5bda0caee4f7859c8d170a

元コミット内容

doc: GCC 4.8.1 is not updated to Go 1.1

I will try again for 4.8.2.

R=golang-dev, minux.ma
CC=golang-dev
https://golang.org/cl/9663045

変更の背景

このコミットの背景には、Go言語の公式リリースと、GCC (GNU Compiler Collection) に含まれるGoコンパイラであるgccgoのリリーススケジュールの不一致があります。Go言語は独自のリリースサイクルを持っていますが、gccgoはGCCのリリースサイクルに依存しています。

Go 1.1がリリースされた際、ドキュメントではGCC 4.8.1がGo 1.1の完全な実装を提供すると期待されていました。しかし、実際にGCC 4.8.1がリリースされた時点では、gccgoのGo 1.1実装が完全ではなかった、特に「メソッド値 (method values)」が未実装であったという問題がありました。

このコミットは、この期待と現実の乖離を修正するために行われました。ドキュメントの記述を更新し、GCC 4.8.1ではなくGCC 4.8.2で完全なGo 1.1実装が提供される見込みであることを明記しています。これは、ユーザーがgccgoのバージョンとGo言語のバージョンとの互換性について誤解するのを防ぐための重要な修正です。

前提知識の解説

Go言語

GoはGoogleによって開発されたオープンソースのプログラミング言語です。静的型付け、コンパイル型、並行処理のサポート、ガベージコレクションなどの特徴を持ち、シンプルさと効率性を重視しています。Goは、特にネットワークサービスや分散システムなどの開発に適しています。

GCC (GNU Compiler Collection)

GCCは、GNUプロジェクトによって開発されたコンパイラの集合体です。C、C++、Objective-C、Fortran、Ada、Goなど、多くのプログラミング言語をサポートしています。GCCは、オープンソースのオペレーティングシステム(Linuxなど)で広く使用されている標準的なコンパイラです。

gccgo

gccgoは、GCCの一部として提供されるGo言語のフロントエンド(コンパイラ)です。Go言語の公式コンパイラであるgcとは異なる実装であり、GCCの最適化パスやバックエンドを利用できるという特徴があります。これにより、特定のプラットフォームでのパフォーマンス向上や、他のGCCがサポートする言語との連携が容易になる場合があります。しかし、gccgoのリリースはGCCのリリースサイクルに縛られるため、Go言語の公式リリースから遅れることがあります。

Goのリリースサイクルとgccgoの同期

Go言語は、通常半年ごとに新しいメジャーバージョンをリリースしています。これに対して、GCCも独自のリリーススケジュールを持っています。このため、Goの新しいバージョンがリリースされても、gccgoがそのGoのバージョンに完全に追いつくには、次のGCCのメジャーリリースを待つ必要がある場合があります。このコミットのケースでは、Go 1.1がリリースされた時点では、GCC 4.8.0のgccgoはGo 1.1に「ほぼ」対応していましたが、完全ではありませんでした。そして、期待されていたGCC 4.8.1でも完全なGo 1.1実装が提供されなかったため、GCC 4.8.2での対応が期待されることになりました。

メソッド値 (Method Values)

Go言語における「メソッド値」とは、レシーバ(メソッドが呼び出されるオブジェクト)がバインドされたメソッドを指します。これは、関数のように変数に代入したり、引数として渡したりすることができます。例えば、type T struct {}; func (t T) M() {} という定義があった場合、t := T{}; f := t.M のようにt.Mを直接変数fに代入すると、ftにバインドされたMメソッドの「メソッド値」となります。この機能はGo言語の重要な特徴の一つであり、Go 1.1で導入されたか、あるいはGo 1.1の完全な実装の一部として期待されていた機能であったと考えられます。gccgoがこの機能を実装していなかったことは、Go 1.1の完全な互換性を提供する上で大きな課題でした。

技術的詳細

このコミットは、技術的な実装そのものよりも、ドキュメントの正確性を保つことに焦点を当てています。しかし、その背景にはgccgoの実装状況という技術的な側面が深く関わっています。

Go 1.1のリリースノートや関連する議論を考慮すると、Go 1.1はGo言語にとって重要なマイルストーンであり、多くの新機能や改善が導入されました。その中には、gccgoが追いつくのに時間を要するような複雑な変更も含まれていた可能性があります。特に「メソッド値」の未実装は、Goの型システムとランタイムの深い部分に関わる変更であり、gccgoがこれをサポートするためには、コンパイラの内部構造に相応の変更が必要だったと推測されます。

GCCのリリースサイクルは、Go言語のそれよりも長く、より多くの言語やアーキテクチャをサポートしているため、特定の言語の最新機能への対応が遅れることは珍しくありません。このコミットは、その現実をGoの公式ドキュメントに反映させることで、ユーザーがgccgoの現状を正しく理解し、適切なバージョンのgccgoを選択できるようにするためのものです。

ドキュメントの変更は、単なる日付の修正に見えますが、これはGo言語コミュニティがgccgoの進捗を注意深く追跡し、ユーザーに正確な情報を提供しようとする姿勢を示しています。

コアとなるコードの変更箇所

変更は doc/go1.1.html ファイルの1箇所のみです。

--- a/doc/go1.1.html
+++ b/doc/go1.1.html
@@ -159,7 +159,7 @@ The GCC release schedule does not coincide with the Go release schedule, so some
 <code>gccgo</code>'s releases.
 The 4.8.0 version of GCC shipped in March, 2013 and includes a nearly-Go 1.1 version of <code>gccgo</code>.
 Its library is a little behind the release, but the biggest difference is that method values are not implemented.
-Sometime around May 2013, we expect 4.8.1 of GCC to ship with a <code>gccgo</code>
+Sometime around July 2013, we expect 4.8.2 of GCC to ship with a <code>gccgo</code>
 providing a complete Go 1.1 implementaiton.
 </p>

コアとなるコードの解説

この変更は、doc/go1.1.html 内の以下の文を修正しています。

  • 変更前: Sometime around May 2013, we expect 4.8.1 of GCC to ship with a <code>gccgo</code> providing a complete Go 1.1 implementaiton.
  • 変更後: Sometime around July 2013, we expect 4.8.2 of GCC to ship with a <code>gccgo</code> providing a complete Go 1.1 implementaiton.

この修正により、以下の点が変更されました。

  1. GCCのバージョン: 4.8.1 から 4.8.2 へと変更されました。これは、GCC 4.8.1では完全なGo 1.1実装が提供されなかったため、次のバージョンである4.8.2での対応を期待するようになったことを示しています。
  2. 期待されるリリース時期: May 2013 から July 2013 へと変更されました。これは、GCC 4.8.2のリリースがGCC 4.8.1よりも遅れるため、それに合わせて期待されるgccgoの完全なGo 1.1実装の提供時期も後ろ倒しになったことを示しています。

この変更は、Go 1.1のドキュメントにおけるgccgoの互換性に関する情報を最新かつ正確なものに保つことを目的としています。

関連リンク

参考にした情報源リンク