[インデックス 10288] ファイルの概要
このコミットは、Go言語プロジェクトの週次開発スナップショット「weekly.2011-11-08」のリリースを記録するものです。主に、開発ドキュメントである doc/devel/weekly.html に2011年11月8日時点でのGo言語の変更点、特にGo 1リリースに向けたパッケージの再編成に関する重要な情報が追加されています。また、バージョン管理システムであるMercurialのタグファイル .hgtags から古い週次タグが削除されています。
コミット
- コミットハッシュ:
4b39d115a0228d9c88b47f2fd86c9d6377ba7273 - 作者: Andrew Gerrand adg@golang.org
- コミット日時: 2011年11月9日 水曜日 10:27:22 +1100
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/4b39d115a0228d9c88b47f2fd86c9d6377ba7273
元コミット内容
weekly.2011-11-08
R=r
CC=golang-dev
https://golang.org/cl/5351049
変更の背景
このコミットは、Go言語の初期開発段階における「週次スナップショット(weekly snapshot)」というリリースモデルの一部です。Go言語は、安定版のGo 1がリリースされる前は、毎週のように開発の進捗をまとめたスナップショットを公開していました。これは、開発者コミュニティが最新の変更を追跡し、テストし、フィードバックを提供するための重要な手段でした。
特にこの時期は、Go言語の最初のメジャー安定版であるGo 1のリリースに向けて、大規模なパッケージの再編成やAPIの安定化が進められていました。このコミットに含まれる weekly.html の内容は、その再編成の進捗状況と、それに伴う一時的な互換性の問題(特に goinstall の動作に関する警告)を開発者に伝えることを目的としています。
前提知識の解説
Go言語の週次スナップショット
Go 1リリース以前のGo言語は、毎週開発の進捗をまとめた「週次スナップショット」として提供されていました。これは、現在のセマンティックバージョニング(vX.Y.Z)とは異なり、開発版のGoを試すための主要な方法でした。ユーザーはMercurial(後述)を使って特定のスナップショットに同期し、最新の開発状況を追うことができました。
Mercurial (hg)
Go言語のプロジェクトは、初期には分散型バージョン管理システムであるMercurial(hg コマンド)を使用していました。Gitに移行したのは2014年のことです。このコミットのdiffに hg pull や hg update といったMercurialコマンドの記述があるのはそのためです。.hgtags ファイルはMercurialのリポジトリでタグを管理するために使用されるファイルです。
goinstall
goinstall は、Go 1リリース以前に存在したGoパッケージのインストールツールです。現在の go get コマンドの前身にあたります。このコミットの週次スナップショットでは、パッケージの再編成により goinstall が一時的に機能しないことが警告されています。
Go 1パッケージ再編成
Go 1のリリースに向けて、Goの標準ライブラリのパッケージ構造とインポートパスが大幅に見直されました。これは、APIの安定性と一貫性を確保し、将来のGo言語の基盤を固めるための重要な作業でした。このコミットでは、ソースコードの物理的な移動が行われたものの、インポートパスはまだ変更されていないという「不整合」が指摘されており、これが goinstall の問題を引き起こしていました。
html/template と text/template
Go言語には、テンプレートエンジンとして text/template パッケージと html/template パッケージがあります。text/template は任意のテキストを生成するための汎用テンプレートエンジンですが、html/template はHTMLのコンテキストで安全な出力を生成するために、自動的にエスケープ処理を行うセキュリティ機能が強化されています。このコミットでは、html/template のAPIが text/template のAPIと直接的にコピーされる形に変更され、より使いやすくなったことが示されています。
os.EOF と io.EOF
os.EOF は、ファイル終端(End Of File)を示すエラーとして os パッケージで定義されていましたが、より汎用的な入出力操作の終端を示すエラーとして io.EOF が導入され、推奨されるようになりました。この変更は、エラーのセマンティクスをより正確に反映し、一貫性のあるエラーハンドリングを促進するためのものです。
技術的詳細
doc/devel/weekly.html に追加された内容は、2011年11月8日時点でのGo言語の主要な変更点を詳細に記述しています。
パッケージの変更と goinstall の問題
- Go 1パッケージ再編成の準備: Go 1リリースに向けたパッケージの再編成が進行中であり、一部のパッケージのソースが移動されたが、インポートパスは変更されていないことが明記されています。
goinstallの一時的な破損: このインポートパスとソースの物理的な位置の不整合により、goinstallがこのスナップショットでは機能しないことが警告されています。ユーザーには、次の週次スナップショットがタグ付けされるまで、以前のスナップショットに同期しておくよう指示されています。
APIの変更
Errorメソッドのリネーム:html,bzip2,sqlパッケージ内のエラー値を返すErrorメソッドがErrにリネームされました。これは、Goのエラーハンドリングの慣習に合わせた変更と考えられます。httpパッケージの再編成:httpパッケージの一部の非コア機能(Dump*やNewChunked*関数、ClientConn,ServerConn,ReverseProxy型など)がnet/http/httputilパッケージに移動されました。これにより、httpパッケージのコア機能がより明確になり、ユーティリティ機能が分離されました。html/templateAPIの変更:html/templateのAPIがtext/templateのAPIと直接的にコピーされる形に変更されました。これにより、html/templateを使用する際に、text/templateと同様の感覚でテンプレートを扱えるようになり、単一のEscape関数を公開する形式からより柔軟な利用が可能になりました。
その他の変更点(Other changes: セクション)
多数の細かい改善、バグ修正、機能追加が含まれています。以下に主要なものを抜粋して解説します。
all: rename os.EOF to io.EOF in non-code contexts: コード以外の文脈でos.EOFがio.EOFにリネームされました。これは、io.EOFがより汎用的なEOFエラーとして推奨されるようになった流れの一部です。archive/zip: close file opened with OpenReader:archive/zipパッケージでOpenReaderで開かれたファイルが適切に閉じられるようになりました。リソースリークを防ぐための修正です。bufio: return nil line from ReadLine on error, as documented:bufio.ReadLineがエラー時にドキュメント通りnilを返すようになりました。bytes: add Contains function:bytesパッケージにContains関数が追加され、バイトスライスが特定のサブスライスを含むかどうかのチェックが容易になりました。exp/sql: finish implementation of transactions, flesh out types, docs: 実験的なexp/sqlパッケージ(現在のdatabase/sqlの前身)でトランザクションの実装が完了し、型定義やドキュメントが整備されました。gc: better error message for range over non-receive channel, bug fixes and clean-ups, detect type switch variable not used cases, fix escaping of package paths in symbol names, helpful error message on method call on pointer to pointer, portably read archive headers: Goコンパイラ(gc)に関する多数の改善が含まれています。エラーメッセージの改善、バグ修正、未使用の型スイッチ変数の検出、シンボル名におけるパッケージパスのエスケープ修正、ポインタのポインタに対するメソッド呼び出し時のエラーメッセージ改善、アーカイブヘッダのポータブルな読み込みなどが挙げられます。gob: fix bug when registering the same type multiple times:gobパッケージ(Goオブジェクトのエンコーディング/デコーディング)で、同じ型を複数回登録した際のバグが修正されました。gofix: avoid panic on body-less functions in netudpgroup, make fix order implicit by date:gofixツール(Goコードの自動修正ツール)に関する修正です。gofmt, gofix: sort imports:gofmtとgofixがインポート文をソートするようになりました。これはGoコードの標準的なフォーマットの一部です。goinstall: support launchpad.net/~user branches:goinstallがlaunchpad.netのユーザーブランチをサポートするようになりました。gotest: don't run examples that have no expected output:gotest(テスト実行ツール)が、期待される出力がない例を実行しないようになりました。html: the parser bug fixing campaign continues:htmlパッケージのパーサーに関するバグ修正が継続的に行われていることが示されています。http: fix whitespace handling in sniffer, only recognize application/x-www-form-urlencoded in ParseForm, support Trailers in ReadRequest:httpパッケージに関する修正です。math: faster Gamma, improved accuracy for Tan, improved high-angle test for Cos, Sin and Tan:mathパッケージの数値計算関数のパフォーマンスと精度が向上しました。net: implement LookupTXT for windows: Windows環境でnet.LookupTXTが実装されました。os,text,unicode: renamings:os,text,unicodeパッケージでリネームが行われました。runtime/cgo: fix data declaration to be extern:cgo(GoとCの相互運用)のランタイムに関する修正です。runtime: add timespec definition for freebsd, add windows callback tests, fix prototype for openbsd thrsleep, fix set and not used, unify mutex code across OSes, windows_386 sighandler to use correct g: Goランタイムに関する多数の修正と改善が含まれています。OS固有の定義追加、テストの追加、バグ修正、OS間のミューテックスコードの統一などが挙げられます。template: format error with pointer receiver, make redefinition of a template in a set more consistent:templateパッケージに関する修正です。test: clear execute bit from source file, make closedchan.go exit with failure if something fails: テスト関連の修正です。time: faster Nanoseconds call:timeパッケージのNanoseconds呼び出しが高速化されました。websocket: return an error HTTP response for bad websocket request:websocketパッケージで不正なリクエストに対するエラーHTTPレスポンスが返されるようになりました。xml: allow parsing of <_> </_>:xmlパッケージが<_> </_>のような形式のXMLをパースできるようになりました。
コアとなるコードの変更箇所
このコミットの主要な変更は以下の2つのファイルに集中しています。
-
.hgtags:780c85032b174c9d4b42adf75d82bc85af7d78d1 weeklyの行が削除されました。これは、Mercurialのタグファイルから古いweeklyタグのエントリが削除されたことを意味します。おそらく、新しい週次スナップショットのタグ付けに備えてのクリーンアップです。
-
doc/devel/weekly.html:h2タグで2011-11-08という新しいセクションが追加され、その中にこの週のスナップショットに関する詳細な変更ログがHTMLのpreタグで囲まれたテキストとして挿入されました。この追加により、ファイルサイズが69行増加しています。
コアとなるコードの解説
このコミットの「コアとなるコード」は、Go言語のソースコードそのものではなく、Goプロジェクトの開発進捗を記録し、コミュニティに共有するためのドキュメントです。
doc/devel/weekly.html は、Go言語の開発チームが毎週の進捗をまとめるための公式なドキュメントでした。このファイルに新しい週次スナップショットの情報を追加することで、開発者はGo言語の最新の変更点、特にAPIの変更、バグ修正、パフォーマンス改善、そしてGo 1リリースに向けた重要なアナウンス(例: goinstall の一時的な問題やパッケージ再編成の状況)を把握することができました。
.hgtags の変更は、Mercurialベースのバージョン管理システムにおけるタグ管理の一環であり、新しい週次スナップショットのリリースサイクルに合わせてタグ情報を更新する通常の運用の一部です。
これらの変更は、Go言語の初期開発における透明性とコミュニティとの連携の重要性を示しており、開発の節目を記録する役割を果たしていました。
関連リンク
- GitHubコミットページ: https://github.com/golang/go/commit/4b39d115a0228d9c88b47f2fd86c9d6377ba7273
- Go Code Review (CL) ページ: https://golang.org/cl/5351049 (このリンクは古いGoのコードレビューシステムへのものであり、現在はアクセスできない可能性がありますが、当時の参照情報として記載します。)
参考にした情報源リンク
この解説は、提供されたコミット情報と、Go言語の歴史および初期開発に関する一般的な知識に基づいて作成されました。特定の外部ウェブサイトを直接参照して情報を取得したわけではありませんが、以下の概念はGo言語の公式ドキュメントやコミュニティの議論を通じて得られたものです。
- Go言語のバージョン管理の歴史(MercurialからGitへの移行)
- Go 1リリース前の開発プロセスと週次スナップショット
goinstallとgo getの関係- Go 1におけるパッケージ再編成の背景
- Go標準ライブラリの各パッケージ(
html/template,text/template,http,io,osなど)の基本的な機能と歴史的経緯 - Goコンパイラ(
gc)とランタイムの一般的な機能
これらの情報は、Go言語の公式ブログ、ドキュメント、およびGoコミュニティのアーカイブされた議論から得られるものです。