[インデックス 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/template
APIの変更: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コミュニティのアーカイブされた議論から得られるものです。