[インデックス 11178] ファイルの概要
コミット
weekly.2012-01-15
R=golang-dev, dsymonds, r, n13m3y3r
CC=golang-dev
https://golang.org/cl/5543049
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/a19870744979bdce3eff58776be42e399ed8f6f1
元コミット内容
このコミットは、Go言語の「weekly.2012-01-15」と題された週次スナップショットのリリースノートを更新するものです。具体的には、doc/devel/weekly.html
ファイルに、このスナップショットに含まれる多数の変更点と、ユーザーが注意すべきパッケージの変更に関する情報が追加されています。また、.hgtags
ファイルから古い週次タグのエントリが削除されています。
変更の背景
Go言語は、活発な開発が行われているオープンソースプロジェクトであり、定期的に開発版のスナップショットを公開することで、最新の変更をユーザーや開発者に提供しています。このコミットは、2012年1月15日時点での開発状況をまとめた週次スナップショットのリリースノートを公式ドキュメントに追加することを目的としています。これにより、ユーザーは最新のスナップショットにどのような変更が含まれているのか、特に既存のコードに影響を与える可能性のある変更(APIの変更や動作の変更など)について、一目で把握できるようになります。
前提知識の解説
このコミットの変更内容を理解するためには、以下のGo言語に関する前提知識があると役立ちます。
- Go言語のリリースサイクルとスナップショット: Go言語は、安定版リリース(例: Go 1.x)の間に、開発の進捗を共有するために定期的に「週次スナップショット」や「ベータ版」「リリース候補版」といった形で開発版を公開します。これらは、次期安定版リリースに含まれる予定の機能や修正を先行して試すことができるものです。
- Goの標準ライブラリ: Go言語は、豊富な標準ライブラリを提供しており、
image
、encoding/xml
、net/http
、crypto
、os
、runtime
など、多岐にわたる機能が含まれています。これらのパッケージは、Goアプリケーション開発の基盤となります。 - Goのツールチェイン: Goには、コードのビルド、テスト、フォーマット、静的解析などを行うための強力なツールチェインが付属しています。
go
コマンド: ビルド、インストール、テスト、フォーマットなど、Go開発の主要なタスクを実行するための統合コマンド。gc
(Go Compiler): Goのソースコードをコンパイルするコンパイラ。gofmt
: Goのコードを標準的なスタイルに自動整形するツール。go vet
: Goのソースコード内の疑わしい構成を報告する静的解析ツール。go fix
: 古いAPIの使用を新しいAPIに自動的に更新するツール。
- Goのランタイム: Goプログラムの実行を管理するシステムで、ガベージコレクタ(GC)、ゴルーチン(軽量スレッド)スケジューラなどが含まれます。
- Goのドキュメント: Goプロジェクトは、開発者向けのドキュメントを充実させており、
doc/devel/weekly.html
のようなファイルは、開発の進捗や重要な変更点をまとめる役割を担っています。 - Mercurial (Hg): Goプロジェクトは、かつてバージョン管理システムとしてMercurial (Hg) を使用していました。
.hgtags
ファイルは、Mercurialリポジトリでタグ(特定のコミットに名前を付けるもの)を管理するために使用されるファイルです。このコミットは、GoがGitに移行する前のMercurial時代のものです。
技術的詳細
このコミットの主要な技術的詳細は、doc/devel/weekly.html
に追加された膨大な変更ログに集約されています。これは、Go言語の様々なコンポーネントにおける多岐にわたる改善、バグ修正、新機能の追加を示しています。
主な変更点と注目すべき点は以下の通りです。
パッケージの変更と互換性に関する注意
image
パッケージ:Tiled
型がRepeated
に名称変更されました。これは、既存のimage
パッケージを使用しているコードに影響を与える可能性があります。encoding/xml
パッケージ: 構造体タグのより慣用的な使用法に対応するために変更されました。これにより、XMLのエンコーディング/デコーディングロジックに影響が出る可能性があり、既存のXML処理コードは変更が必要になる場合があります。詳細な変更説明へのリンク (http://code.google.com/p/go/source/detail?r=70e914beb409
) が提供されています。
コンパイラ (gc
) の改善
- 関数インライン化のデフォルト有効化:
gc
コンパイラにおいて、関数インライン化がデフォルトで有効になりました。これにより、コンパイルされたコードの実行速度が向上する可能性があります。 - エラーメッセージの改善: コンパイラのエラーメッセージがより分かりやすくなりました。
- インライン化のバグ修正: インライン化に関する既存のバグが修正されました。
unsafe.Pointer
の型チェックエラーメッセージの改善:unsafe.Pointer
の使用に関するエラーメッセージがより明確になりました。
cmd/go
(goコマンド) の機能強化と修正
- 並列ビルド (
-p
フラグ):make -j
のように、並列でビルドを実行するための-p
フラグが追加されました。これにより、大規模なプロジェクトのビルド時間が短縮されます。 - 詳細出力 (
-v
フラグ):build
およびinstall
コマンドに-v
フラグが追加され、実行中の詳細な情報が表示されるようになりました。 - インポートパスの
...
パターン: インポートパスの引数で...
パターンがサポートされ、複数のパッケージを一度に指定できるようになりました。 - ビルド時のデータ競合の修正: ビルドプロセス中のデータ競合が修正されました。
- Cgo関連の改善:
pkg-config
プラグマの処理や、_cgo_export.h
の出力先に関する修正が含まれます。 - テスト関連の改善:
fmt
,vet
,fix
コマンドにテストファイルが含まれるようになりました。- テストプロセスが10分後に強制終了されるようになりました。
- テストの合否を終了コードで判断するようになりました。
その他のパッケージの変更
多岐にわたるパッケージで、バグ修正、機能追加、パフォーマンス改善が行われています。
bytes
: EOFでの0バイト読み取りに関する修正。crypto/openpgp
,crypto/tls
: 暗号関連の改善とバグ修正。encoding/asn1
,encoding/gob
,encoding/json
: エンコーディング/デコーディングに関する修正。特にencoding/json
では、特殊な浮動小数点値のマーシャリングに関する修正があります。exp
パッケージ:exp/proxy
(新規パッケージ)、exp/sql
(時間型サポート、行のクローズ、スキャン時の破損修正)、exp/ssh
、exp/terminal
など、実験的なパッケージの更新。flag
:Duration
フラグ型の追加、Set
メソッドの変更。go/ast
,go/build
,go/doc
,go/parser
,go/printer
,go/scanner
: GoのAST、ビルド、ドキュメント、パーサー、プリンター、スキャナーに関する改善。特にgo/scanner
は17%高速化されました。html/template
,html
: HTMLテンプレートとHTMLパーサーに関する修正。net/http
,net/textproto
,net
: ネットワーク関連の改善。os
:ModeCharDevice
の追加。runtime
:NumCPU
の追加、ガベージコレクタの高速化、パニックメッセージの明確化、FreeBSDでのruntime.ncpu
有効化、バグ修正。spec
: ポインタ比較とselect
ステートメントに関する仕様の記述変更。strconv
: 浮動小数点数変換の高速化(Grisu3アルゴリズムの使用)、丸め処理の修正。syscall
: Linux固有の親プロセス終了シグナルサポート、Environ
の順序維持。testing
:defer
の競合状態修正、-timeout
フラグのflag.Duration
使用。text/template
: パニック値の処理、マップのrange
でキーのソート。time
:ParseDuration
の追加、After
とNewTicker
のドキュメント修正。
このコミットは、Go言語がGo 1リリースに向けて、広範囲にわたる機能強化、安定性向上、パフォーマンス最適化を進めていた時期の典型的なスナップショット更新であり、開発の活発さを示しています。
コアとなるコードの変更箇所
このコミットにおける「コアとなるコードの変更箇所」は、主に以下の2つのファイルです。
-
.hgtags
:--- a/.hgtags +++ b/.hgtags @@ -100,4 +100,3 @@ b4a91b6933748db1a7150c06a1b55ad506e52906 weekly.2011-11-18 0c39eee85b0d1606b79c8ebcdeb3b67ed5849e39 weekly.2011-12-06 82fdc445f2ff2c85043446eb84a19cc999dfcb95 weekly.2011-12-14 4a82689277582a2a60f006e3f158985f2f8d1da3 weekly.2011-12-22 -4a82689277582a2a60f006e3f158985f2f8d1da3 weekly
この変更は、Mercurialのタグファイルから、古い
weekly
タグのエントリを削除しています。これは、新しい週次スナップショットがリリースされる際に、古いタグ情報を整理する一般的なメンテナンス作業です。 -
doc/devel/weekly.html
:--- a/doc/devel/weekly.html +++ b/doc/devel/weekly.html @@ -14,6 +14,123 @@ hg pull hg update weekly.<i>YYYY-MM-DD</i> </pre> +<h2 id="2012-01-14">2012-01-15</h2> + +<pre> +This weekly snapshot includes two package changes that may require changes to +client code. + +The image package's Tiled type has been renamed to Repeated. + +The encoding/xml package has been changed to make more idiomatic use of struct +tags, among other things. If you use the xml package please read the change +description to see if your code is affected: +\thttp://code.google.com/p/go/source/detail?r=70e914beb409 + +Function inlining is now enabled by default in the gc compiler. + +Other changes: +* bytes: Buffer read of 0 bytes at EOF shouldn't be an EOF. +* cgo: if value for constant did not parse, get it from DWARF info, +... (以下、多数の変更点のリストが続く)
このファイルには、
weekly.2012-01-15
スナップショットに関する新しいセクションが追加されています。このセクションには、image
パッケージとencoding/xml
パッケージの互換性に影響する変更、gc
コンパイラの関数インライン化のデフォルト有効化、そしてGo言語の様々なパッケージにおける多数のバグ修正、機能追加、改善点が箇条書きで詳細に記述されています。
このコミット自体は、Go言語の実際の機能コードを変更するものではなく、Go言語の週次スナップショットのリリースノートを更新するというドキュメンテーションの変更が主です。したがって、Go言語の機能的な変更は、このコミットの前に個別のコミットとして行われており、このコミットはその変更をまとめたドキュメントを公開する役割を担っています。
コアとなるコードの解説
このコミットの「コアとなるコード」は、Goプロジェクトのドキュメンテーションの一部である doc/devel/weekly.html
ファイルへの追加された内容です。
-
doc/devel/weekly.html
の追加内容:- このHTMLファイルは、Go言語の開発者向けドキュメントの一部であり、週次スナップショットのリリースノートとして機能します。
- 追加された内容は、
weekly.2012-01-15
スナップショットに含まれる主要な変更点を網羅的にリストアップしています。これには、APIの変更(例:image.Tiled
からimage.Repeated
への名称変更)、既存のコードに影響を与える可能性のある動作変更(例:encoding/xml
の構造体タグの扱い)、そしてパフォーマンス向上(例: 関数インライン化のデフォルト有効化)などが含まれます。 - このドキュメントの目的は、Go言語のユーザーや開発者が、最新のスナップショットにアップグレードする際に、どのような変更に注意すべきか、またどのような新機能が利用可能になったかを迅速に把握できるようにすることです。特に、互換性のない変更については、明確に警告し、必要に応じて詳細情報へのリンクを提供しています。
-
.hgtags
の変更:.hgtags
ファイルは、Mercurialリポジトリにおけるタグの定義を保持していました。このコミットでは、古い週次スナップショットのタグエントリを削除することで、タグ管理を整理しています。これは、GoプロジェクトがMercurialからGitへ移行する前の、バージョン管理システムにおける一般的なメンテナンス作業の一環です。
要するに、このコミットは、Go言語の継続的な開発プロセスにおいて、ユーザーと開発者に対して最新の変更を透明かつ効率的に伝えるための重要なドキュメンテーション更新です。これにより、Goエコシステム全体の健全な発展が促進されます。
関連リンク
- Go Code Review (CL) リンク:
- https://golang.org/cl/5543049
- このリンクは、このコミットがマージされる前のコードレビュープロセスを示しています。Goプロジェクトでは、すべての変更がレビューを経て承認されます。
encoding/xml
パッケージの変更詳細:- http://code.google.com/p/go/source/detail?r=70e914beb409
encoding/xml
パッケージの変更に関する具体的な詳細が記述された、当時のGoプロジェクトのソースコードリポジトリへのリンクです。
参考にした情報源リンク
- Go言語の公式ドキュメント (当時のバージョン)
- Go言語の標準ライブラリのドキュメント
- Mercurialのドキュメンテーション (
.hgtags
ファイルの理解のため) - 一般的なソフトウェア開発におけるリリースノートの役割に関する知識