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

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

このコミットは、Go言語のweekly.2011-10-18リリースを記録したものです。Go言語の開発初期における重要なマイルストーンの一つで、多くの言語仕様の変更とパッケージの大幅な再編成が行われました。

コミット

  • コミットハッシュ: ac21766c958dc1341d79f17c36cc686ed936e6d4
  • 作成者: Andrew Gerrand adg@golang.org
  • 作成日: 2011年10月19日 11:31:57 +1100
  • コミットメッセージ: weekly.2011-10-18
  • レビュー: R=rsc
  • CC: golang-dev
  • Code Review URL: https://golang.org/cl/5302041

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

https://github.com/golang/go/commit/ac21766c958dc1341d79f17c36cc686ed936e6d4

元コミット内容

このコミットでは以下の変更が行われました:

  • .hgtagsファイルから1行削除
  • doc/devel/weekly.htmlファイルに131行追加(2011-10-18リリースノート)

変更されたファイル:

  • .hgtags(1行削除)
  • doc/devel/weekly.html(131行追加)

変更の背景

2011年10月は、Go言語が正式な1.0リリースに向けて準備を進めていた重要な時期でした。Go言語は当時Mercurial(hg)を使用してバージョン管理を行っており、毎週リリースを通じて新機能のテストと改善を行っていました。

このweekly.2011-10-18リリースは、Go 1.0リリースに向けた最後の大規模な言語仕様変更の一つとして位置づけられており、後方互換性を破る変更が含まれていました。Go言語の開発チームは、1.0リリース前にこれらの変更を完了させる必要がありました。

前提知識の解説

Go言語の初期開発体制

Go言語は2009年にGoogleで開発が開始され、2012年のGo 1.0リリースまでは頻繁に仕様変更が行われていました。当時はMercurial(hg)を使用してバージョン管理を行っており、毎週リリース(weekly release)を通じて新機能のテストと改善を行っていました。

週次リリースシステム

Go言語の初期開発では、以下のような週次リリースシステムが採用されていました:

  • 毎週、新しいスナップショットをリリース
  • weekly.YYYY-MM-DD形式でタグ付け
  • 開発者はhg pullhg update weekly.YYYY-MM-DDでアップデート可能

mapの削除構文の歴史

Go言語の初期版では、mapから要素を削除する際にm[x] = 0, falseという特殊な構文を使用していました。この構文は以下の問題がありました:

  • 言語仕様内で唯一の2対1代入の特殊ケース
  • 削除時に不要な値(通常は無視される)を渡す必要があった
  • 一貫性に欠ける構文として議論の対象となっていた

技術的詳細

主要な言語仕様変更

  1. mapの削除構文変更

    • 旧構文: m[x] = 0, false
    • 新構文: delete(m, x)
    • 移行支援: gofixツールが自動変換をサポート
  2. return文の厳密化

    • 結果変数がシャドウイングされている場合、引数なしのreturn文を拒否
    • バグの可能性があるコードの検出強化
  3. チャンネル操作の制限

    • 受信専用チャンネル(<-chan T)のclose操作を禁止
    • 型安全性の向上
  4. map反復順序のランダム化

    • map反復の最初の要素をランダムに選択
    • 反復順序に依存するコードの検出
  5. 初期化時のgoroutine実行

    • プログラム初期化中にgoroutineが実行される可能性
  6. 文字列とバイトスライスの操作

    • 文字列をバイトスライスに追加可能:b = append(b, s...)

パッケージ再編成

削除されたパッケージ

  • gotryコマンドとtryパッケージ
  • exp/datafmtパッケージ
  • container/vectorパッケージ(スライスで代替)
  • go/typecheckerパッケージ(非推奨)

移動されたパッケージ

  • gotypeツール → exp/gotype
  • go/typesパッケージ → exp/types
  • ebnflintツール → pkg/exp/ebnflint
  • ebnfパッケージ → pkg/exp/ebnf
  • netchanパッケージ → old/netchan
  • http/spdyパッケージ → exp/spdy

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

.hgtags ファイル(commit_data/10050.txt:15-26)

@@ -84,7 +84,6 @@ fd30c132d1bdeb79f8f111cb721fb1c78b767b27 release.r60.1
 d7322ae4d055a4cf3efaf842d0717a41acd85bac weekly.2011-09-21
 32a5db19629897641b2d488de4d1b998942ef80e release.r60.2
 3bdabf483805fbf0c7ef013fd09bfd6062b9d3f2 weekly.2011-10-06
-3bdabf483805fbf0c7ef013fd09bfd6062b9d3f2 weekly
 c1702f36df0397c19fc333571a771666029aa37e release.r60.3
 c1702f36df0397c19fc333571a771666029aa37e release
 acaddf1cea75c059d19b20dbef35b20fb3f38954 release.r58.2

doc/devel/weekly.html ファイル(commit_data/10050.txt:27-164)

2011-10-18セクションの完全な追加(131行)が行われており、以下の主要な変更が記録されています:

  1. map削除構文の変更説明
The syntax for map deletion has been changed. Code that looks like:
	m[x] = 0, false
should be written as:
	delete(m, x)
  1. その他の言語仕様変更
  2. パッケージの移動・削除リスト
  3. 各パッケージの詳細な変更履歴

コアとなるコードの解説

Mercurialタグ管理

.hgtagsファイルの変更は、Mercurialのタグ管理システムに関するものです。削除された行:

3bdabf483805fbf0c7ef013fd09bfd6062b9d3f2 weekly

この変更により、weeklyという汎用的なタグが削除され、具体的な日付付きタグ(weekly.2011-10-06)のみが残されました。これにより、タグの管理がより明確になり、特定の週次リリースを参照しやすくなりました。

リリースノートの構造

doc/devel/weekly.htmlに追加されたリリースノートは、以下の構造で構成されています:

  1. 重要な変更の警告

    • 後方互換性を破る変更があることの明示
    • 開発者への注意喚起
  2. 言語仕様の変更

    • map削除構文の変更
    • return文の厳密化
    • チャンネル操作の制限
    • map反復順序のランダム化
  3. パッケージの再編成

    • 削除されたパッケージのリスト
    • 移動されたパッケージのリスト
    • 代替手段の提示
  4. その他の変更

    • 各パッケージの詳細な変更履歴
    • コントリビューターへの謝辞

container/vectorパッケージの削除

このリリースで特に重要なのは、container/vectorパッケージの削除です。リリースノートには以下の説明があります:

The container/vector package has been deleted. Slices are better:
	http://code.google.com/p/go-wiki/wiki/SliceTricks

これは、Go言語の設計哲学を反映した重要な決定でした。組み込み機能(スライス)で十分な場合は、追加のパッケージを提供しないという方針の表れです。

関連リンク

参考にした情報源リンク