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

[インデックス 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言語は、豊富な標準ライブラリを提供しており、imageencoding/xmlnet/httpcryptoosruntime など、多岐にわたる機能が含まれています。これらのパッケージは、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/sshexp/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 の追加、AfterNewTicker のドキュメント修正。

このコミットは、Go言語がGo 1リリースに向けて、広範囲にわたる機能強化、安定性向上、パフォーマンス最適化を進めていた時期の典型的なスナップショット更新であり、開発の活発さを示しています。

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

このコミットにおける「コアとなるコードの変更箇所」は、主に以下の2つのファイルです。

  1. .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 タグのエントリを削除しています。これは、新しい週次スナップショットがリリースされる際に、古いタグ情報を整理する一般的なメンテナンス作業です。

  2. 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 パッケージの変更詳細:

参考にした情報源リンク

  • Go言語の公式ドキュメント (当時のバージョン)
  • Go言語の標準ライブラリのドキュメント
  • Mercurialのドキュメンテーション (.hgtags ファイルの理解のため)
  • 一般的なソフトウェア開発におけるリリースノートの役割に関する知識