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

[インデックス 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 pullhg update といったMercurialコマンドの記述があるのはそのためです。.hgtags ファイルはMercurialのリポジトリでタグを管理するために使用されるファイルです。

goinstall

goinstall は、Go 1リリース以前に存在したGoパッケージのインストールツールです。現在の go get コマンドの前身にあたります。このコミットの週次スナップショットでは、パッケージの再編成により goinstall が一時的に機能しないことが警告されています。

Go 1パッケージ再編成

Go 1のリリースに向けて、Goの標準ライブラリのパッケージ構造とインポートパスが大幅に見直されました。これは、APIの安定性と一貫性を確保し、将来のGo言語の基盤を固めるための重要な作業でした。このコミットでは、ソースコードの物理的な移動が行われたものの、インポートパスはまだ変更されていないという「不整合」が指摘されており、これが goinstall の問題を引き起こしていました。

html/templatetext/template

Go言語には、テンプレートエンジンとして text/template パッケージと html/template パッケージがあります。text/template は任意のテキストを生成するための汎用テンプレートエンジンですが、html/template はHTMLのコンテキストで安全な出力を生成するために、自動的にエスケープ処理を行うセキュリティ機能が強化されています。このコミットでは、html/template のAPIが text/template のAPIと直接的にコピーされる形に変更され、より使いやすくなったことが示されています。

os.EOFio.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.EOFio.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: gofmtgofix がインポート文をソートするようになりました。これはGoコードの標準的なフォーマットの一部です。
  • goinstall: support launchpad.net/~user branches: goinstalllaunchpad.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つのファイルに集中しています。

  1. .hgtags:

    • 780c85032b174c9d4b42adf75d82bc85af7d78d1 weekly の行が削除されました。これは、Mercurialのタグファイルから古い weekly タグのエントリが削除されたことを意味します。おそらく、新しい週次スナップショットのタグ付けに備えてのクリーンアップです。
  2. 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言語の初期開発における透明性とコミュニティとの連携の重要性を示しており、開発の節目を記録する役割を果たしていました。

関連リンク

参考にした情報源リンク

この解説は、提供されたコミット情報と、Go言語の歴史および初期開発に関する一般的な知識に基づいて作成されました。特定の外部ウェブサイトを直接参照して情報を取得したわけではありませんが、以下の概念はGo言語の公式ドキュメントやコミュニティの議論を通じて得られたものです。

  • Go言語のバージョン管理の歴史(MercurialからGitへの移行)
  • Go 1リリース前の開発プロセスと週次スナップショット
  • goinstallgo get の関係
  • Go 1におけるパッケージ再編成の背景
  • Go標準ライブラリの各パッケージ(html/template, text/template, http, io, os など)の基本的な機能と歴史的経緯
  • Goコンパイラ(gc)とランタイムの一般的な機能

これらの情報は、Go言語の公式ブログ、ドキュメント、およびGoコミュニティのアーカイブされた議論から得られるものです。