[インデックス 10804] ファイルの概要
このコミットは、Go言語プロジェクトの2011年12月14日時点での週次開発状況をまとめたものです。具体的には、Go言語の公式ドキュメントサイトに掲載される週次レポート(doc/devel/weekly.html
)に、その週に行われた主要な変更点や新機能、バグ修正などが追記されています。また、.hgtags
ファイルへの変更も含まれており、これは当時のGoプロジェクトがMercurial(Hg)を使用していた名残であり、特定の週次リリースを示すタグが更新されたことを示唆しています。このコミットの主な目的は、開発者コミュニティに対して最新の開発状況を共有し、Go言語の進化を透明にすることにあります。
コミット
- コミットハッシュ:
3388e9f67b2ebb30bbd115c13b3ac4728c7ff9c1
- 作者: Andrew Gerrand adg@golang.org
- 日付: 2011年12月15日 16:56:12 +1100
- コミットメッセージ:
weekly.2011-12-14 R=golang-dev, r CC=golang-dev https://golang.org/cl/5494045
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/3388e9f67b2ebb30bbd115c13b3ac4728c7ff9c1
元コミット内容
commit 3388e9f67b2ebb30bbd115c13b3ac4728c7ff9c1
Author: Andrew Gerrand <adg@golang.org>
Date: Thu Dec 15 16:56:12 2011 +1100
weekly.2011-12-14
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5494045
---
.hgtags | 1 -
doc/devel/weekly.html | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 105 insertions(+), 1 deletion(-)
diff --git a/.hgtags b/.hgtags
index ac80c3bf3c..f3cda9be82 100644
--- a/.hgtags
+++ b/.hgtags
@@ -98,4 +98,3 @@ b4a91b6933748db1a7150c06a1b55ad506e52906 weekly.2011-11-18
80db2da6495a20ddff8305c236825811db8c8665 weekly.2011-12-01
0beb796b4ef8747af601ed5ea6766d5b1340086b weekly.2011-12-02
0c39eee85b0d1606b79c8ebcdeb3b67ed5849e39 weekly.2011-12-06
-0c39eee85b0d1606b79c8ebcdeb3b67ed5849e39 weekly
diff --git a/doc/devel/weekly.html b/doc/devel/weekly.html
index 783a182542..4f616d835d 100644
--- a/doc/devel/weekly.html
+++ b/doc/devel/weekly.html
@@ -14,6 +14,111 @@ hg pull
hg update weekly.<i>YYYY-MM-DD</i>
</pre>
+<h2 id="2011-12-14">2011-12-14</h2>
+
+<pre>
+This release includes language changes and changes to goinstall and gofmt.
+
+Equality and inequality (== and !=) are now defined for struct and array
+values, respectively, provided the elements of the data structures can
+themselves be compared. See the Go 1 release notes for the details:
+\thttp://weekly..golang.org/doc/go1.html#equality
+
+The rune type is now an alias for int32 and character literals have the default
+type of rune. Code that uses int where it should use rune will break.
+See the Go 1 release notes for the details:
+\thttp://weekly.golang.org/doc/go1.html#rune
+
+Goinstall now expects Google Code import paths to be of the form:
+\t"code.google.com/p/go-tour/tree"
+It will reject imports in the old style "go-tour.googlecode.com/hg/tree".
+There is a gofix module to rename such imports.
+Use goinstall -fix to update broken packages.
+
+Gofmt\'s flags have been modified slightly.
+The -tabintent flag has been renamed -tabs.
+The -spaces flag has been removed.
+
+Other changes:
+* 5c, 6c, 8c: support 64-bit switch value (thanks Anthony Martin).
+* 8c: handle 64-bit switch value.
+* archive/tar: use struct comparison not DeepEqual (thanks Christopher Wedgwood).
+* archive/zip: make zip understand os.FileMode (thanks Roger Peppe).
+* bufio: make the minimum read buffer size 16 bytes.
+* build: disable cgo on Windows/amd64,
+\tregularize packages so they may be built without Makefiles.
+* bytes: faster Count, Index, Equal.
+* cgo: add basic gccgo support (thanks Rémy Oudompheng).
+* codereview: fix path slash issue (thanks Yasuhiro Matsumoto).
+* compress/flate: fix out of bounds error.
+* contribute.html: do not fill in the reviewer field (thanks Florian Weimer).
+* crypto/aes: made faster by eliminating some indirection (thanks Taru Karttunen).
+* crypto/dsa: don\'t truncate input hashes.
+* doc/go_tutorial: make clear the file example is Unix-specific.
+* doc: add Defer, Panic, and Recover article,
+\tadd Error Handling article,
+\tadd Go 1 release notes document.
+* encoding/gob: better error messages when types mismatch.
+* env.bash: export CGO_ENABLED so cgo tests run (thanks Alex Brainman).
+* exp/sql: simplify some string conversions.
+* exp/ssh: Wait returns an *ExitError (thanks Gustav Paul).
+* exp/ssh: improve client channel close behavior (thanks Dave Cheney).
+* fmt: don\'t recur if String method (etc.) misbehaves.
+* gc: better error messages,
+\tinlining (disabled without -l),
+\tmany bug fixes (thanks Lucio De Re and Rémy Oudompheng).
+* go/printer, godoc: print comments in example code.
+* go: implement doc, fmt, fix, list, vet, build, and install.
+* gobuilder: goinstall packages after building go tree.
+* godoc: <pre> must not occur inside <p> (thanks Olivier Duperray),
+\tadded an opensearch description document (thanks Christoph Hack),
+\ttext wrapping.
+* gofix: add httputil fix (thanks Yasuhiro Matsumoto).
+* gotest: use go/build more (thanks Robert Hencke).
+* gzip: convert between Latin-1 and Unicode (thanks Vadim Vygonets).
+* html/template: define the FuncMap type locally.
+* html: a first step at parsing foreign content (MathML, SVG),
+\tmore parser improvements (thanks Andrew Balholm).
+* http: close connection after printing panic stack trace (thanks Roger Peppe),
+\tfix failing Transport HEAD request with gzip-looking response.
+* json: treat renamed byte slices the same as []byte.
+* ld: first pass at linker support for NetBSD binaries (thanks Christopher Nielsen),
+\tfix memory leaks (thanks Scott Lawrence),
+\tincrease default stack size on Windows for cgo.
+* math: delete non-Sqrt-based Hypot,
+\timplement, document, and fix special cases (thanks Charles L. Dorian),
+* misc/benchcmp: don\'t require \"Benchmark\" at beginning of line.
+* misc/osx: rename profile.go to profile_go (thanks Scott Lawrence).
+* net/http: fix trivial example server (thanks Olivier Duperray),
+\tnet/http: make test remove temporary file and directory.
+* net/smtp: add CRAM-MD5 authentication (thanks Vadim Vygonets).
+* reflect: fix Slice cap (thanks Gustavo Niemeyer).
+* regexp: performance improvements; avoid allocation of input interface.
+* runtime: bump gc \'extra bytes\' check (thanks Christopher Wedgwood),
+\tmadvise and SysUnused for Linux (thanks Sébastien Paolacci),
+\tmake gc_test test extra allocated space, not total space,
+\tsupport for NetBSD (thanks Christopher Nielsen).
+* spec: adjust complex constant example (thanks Robert Hencke),
+\tvalues of underlying type uintptr can be converted to unsafe.Pointer,
+\tvar x = \'a\' defaults to type rune.
+* strconv: include package and function name in error strings,
+\tmake QuoteRune etc. take a rune argument,
+\tsome performance improvements.
+* syscall: add constants for flock() system call under Linux,
+\tregenerate z-files for darwin, freebsd (thanks Mikio Hara),
+\tregenerate z-files for openbsd,
+\treturn error, not uintptr, when function returns error (thanks Alex Brainman).
+* test/bench: move to test/bench/shootout.
+* test/garbage: move to test/bench/garbage.
+* test: make array smaller in nilptr test.
+* time: allow sleep tests to run for 200% too long,
+\tfix Time.Add (thanks Hector Chu),
+\tfix daysIn for December (thanks Peter Mundy),
+\tgob marshaler for Time (thanks Robert Hencke),
+\tuse Duration for AfterFunc.
+* various: a grab-bag of time.Duration cleanups.
+</pre>
+\
<h2 id="2011-12-06">2011-12-06</h2>
<pre>
変更の背景
このコミットは、Go言語プロジェクトの定期的な週次開発レポートの一環として作成されました。Goプロジェクトは、開発の透明性を保ち、コミュニティに最新の変更を伝えるために、週次で主要な変更点をまとめたレポートを公開していました。このコミットは、2011年12月14日までの週に行われた言語仕様の変更、標準ライブラリの更新、ツール(goinstall
、gofmt
など)の改善、バグ修正などを集約し、公式ドキュメントに反映させることを目的としています。これにより、開発者はGo言語の進化を追跡し、自身のコードを適応させるための情報を得ることができました。
前提知識の解説
このコミットを理解するためには、以下のGo言語に関する前提知識が役立ちます。
Go言語の週次開発レポート (Weekly Releases)
Go言語プロジェクトは、初期の段階から活発な開発が行われており、その進捗をコミュニティに共有するために「weekly releases」という形式で定期的に開発状況を報告していました。これは、言語仕様の変更、新しい機能の追加、バグ修正、ツールの改善など、その週に行われた重要な変更点をまとめたもので、開発者が最新の情報を把握し、自身のコードベースを更新する際の参考となる情報源でした。
rune
型
Go言語において、rune
型はUnicodeコードポイントを表すために使用される組み込み型です。これはint32
のエイリアスであり、Go言語が文字列をUTF-8で扱うことを前提としているため、1文字が必ずしも1バイトではないUnicode文字を正確に表現するために導入されました。このコミットの時点では、rune
型がint32
のエイリアスとして正式に定義され、文字リテラルがデフォルトでrune
型を持つように変更されたことが言及されています。これにより、int
型を文字の表現に使用していた既存のコードが影響を受ける可能性がありました。
構造体(struct
)と配列(array
)の比較
Go言語では、構造体や配列の比較(==
および!=
演算子)に関するルールが厳密に定義されています。このコミットの時点では、構造体や配列の値が比較可能であるための条件が明確化され、それらの要素が比較可能であれば、構造体や配列自体も比較可能であると定義されました。これは、Go言語の型システムと値のセマンティクスにおける重要な側面です。
goinstall
goinstall
は、Go言語の初期のパッケージ管理ツールです。これは、リモートリポジトリからGoパッケージをダウンロードし、ビルドしてインストールする機能を提供していました。このコミットの時点では、goinstall
がGoogle Codeのインポートパスの形式変更に対応したことが述べられています。これは、Google Codeのホスティングサービスにおけるリポジトリ構造の変更に伴うもので、古い形式のインポートパスを使用しているパッケージはgoinstall
で取得できなくなるため、gofix
ツールによる修正が必要となることが示唆されています。
gofmt
gofmt
は、Go言語のコードを自動的にフォーマットするツールです。Go言語のコードスタイルを統一し、可読性を高めるために広く利用されています。このコミットの時点では、gofmt
のコマンドラインフラグが変更されたことが述べられています。具体的には、-tabintent
フラグが-tabs
にリネームされ、-spaces
フラグが削除されたことが挙げられています。これは、gofmt
の使いやすさと一貫性を向上させるための変更です。
Mercurial (.hgtags
) と Git
Go言語プロジェクトは、初期には分散バージョン管理システムとしてMercurial(Hg)を使用していました。.hgtags
ファイルはMercurialのリポジトリでタグ情報を管理するために使用されるファイルです。このコミットに.hgtags
の変更が含まれていることは、当時のGoプロジェクトがまだMercurialを主要なVCSとして使用していたか、あるいはMercurialからGitへの移行期にあったことを示唆しています。現在、GoプロジェクトはGitを主要なVCSとして使用しています。
技術的詳細
このコミットによって追加された週次レポート(doc/devel/weekly.html
)には、2011年12月14日までの週に行われた多岐にわたる技術的な変更が詳細に記述されています。
言語仕様の変更
- 構造体と配列の比較:
==
および!=
演算子が、構造体と配列の値に対しても定義されるようになりました。- この比較は、データ構造の要素自体が比較可能である場合にのみ有効です。
- 詳細については、Go 1リリースノートの「equality」セクションを参照するよう促されています。
rune
型の導入と文字リテラルのデフォルト型:rune
型がint32
のエイリアスとして正式に定義されました。- 文字リテラル(例:
'a'
)のデフォルト型がrune
になりました。 - これにより、
int
型を文字の表現に使用していた既存のコードは、コンパイルエラーや予期せぬ動作を引き起こす可能性があります。 - 詳細については、Go 1リリースノートの「rune」セクションを参照するよう促されています。
ツール(goinstall
, gofmt
)の変更
goinstall
のGoogle Codeインポートパス対応:goinstall
が、Google Codeの新しいインポートパス形式(例:"code.google.com/p/go-tour/tree"
)を期待するようになりました。- 古い形式(例:
"go-tour.googlecode.com/hg/tree"
)のインポートは拒否されます。 - 既存の壊れたパッケージを更新するために、
gofix
モジュールが提供され、goinstall -fix
コマンドで修正できることが示されています。
gofmt
のフラグ変更:-tabintent
フラグが-tabs
にリネームされました。-spaces
フラグが削除されました。
その他の変更点(抜粋)
週次レポートには、上記以外にも多数の変更点がリストアップされています。以下にその一部を抜粋し、技術的な側面を解説します。
- コンパイラ (
5c
,6c
,8c
,gc
):- 64ビットの
switch
値のサポート。 - コンパイラのエラーメッセージの改善。
- インライン化のサポート(
-l
フラグなしでは無効)。 - 多数のバグ修正。
- 64ビットの
- 標準ライブラリの改善:
archive/tar
: 構造体比較を使用するように変更(DeepEqual
の代わりに)。archive/zip
:os.FileMode
を理解するように改善。bufio
: 最小読み取りバッファサイズを16バイトに設定。bytes
:Count
,Index
,Equal
関数の高速化。cgo
:gccgo
の基本的なサポートを追加。compress/flate
: 範囲外エラーの修正。crypto/aes
: 間接参照の排除による高速化。crypto/dsa
: 入力ハッシュの切り捨てを停止。encoding/gob
: 型の不一致時のエラーメッセージの改善。fmt
:String
メソッドなどが誤動作した場合の再帰防止。go/printer
,godoc
: サンプルコード内のコメントの表示。gzip
: Latin-1とUnicode間の変換をサポート。html/template
:FuncMap
型をローカルで定義。html
: 外部コンテンツ(MathML, SVG)のパースの第一歩、パーサーのさらなる改善。http
: パニックスタックトレース出力後の接続クローズ、Transport HEAD
リクエストの修正。json
: リネームされたバイトスライスを[]byte
と同様に扱う。ld
(リンカ): NetBSDバイナリのリンカサポート、メモリリークの修正、Windowsでのcgo
のデフォルトスタックサイズ増加。math
:Hypot
関数の改善(非Sqrt
ベースの削除、特殊ケースの実装と修正)。net/http
: 簡易サンプルサーバーの修正、テストでの一時ファイル・ディレクトリの削除。net/smtp
:CRAM-MD5
認証の追加。reflect
:Slice cap
の修正。regexp
: パフォーマンス改善、入力インターフェースの割り当て回避。runtime
: GCの「extra bytes」チェックの調整、Linuxでのmadvise
とSysUnused
のサポート、NetBSDのサポート。strconv
: エラー文字列にパッケージ名と関数名を含める、QuoteRune
などがrune
引数を取るように変更、パフォーマンス改善。syscall
: Linuxでのflock()
システムコール定数の追加、darwin, freebsd, openbsdのz-files
再生成、関数がエラーを返す場合にuintptr
ではなくerror
を返すように変更。time
:Time.Add
の修正、daysIn
の修正、Time
のgob
マーシャラ、AfterFunc
にDuration
を使用。
- ドキュメントの追加:
Defer, Panic, and Recover
に関する記事の追加。Error Handling
に関する記事の追加。- Go 1リリースノートドキュメントの追加。
- テスト関連:
test/bench
とtest/garbage
をtest/bench/shootout
とtest/bench/garbage
に移動。
これらの変更は、Go言語の安定性、パフォーマンス、機能性、そして開発者体験を向上させるための継続的な取り組みを示しています。特に、言語仕様の変更はGo 1リリースに向けた重要なステップであり、ツールの改善は開発ワークフローの効率化に貢献しています。
コアとなるコードの変更箇所
このコミット自体は、Go言語のソースコード本体に直接的な機能変更を加えるものではなく、主に以下の2つのファイルを変更しています。
.hgtags
:0c39eee85b0d1606b79c8ebcdeb3b67ed5849e39 weekly
という行が削除されています。これは、Mercurialのタグ情報が更新されたことを示唆しています。
doc/devel/weekly.html
:- このファイルに、2011年12月14日付けの週次レポートの内容がHTML形式で追加されています。具体的には、
<h2 id="2011-12-14">2011-12-14</h2>
という見出しの下に、Go言語の言語変更、goinstall
とgofmt
の変更、およびその他の多数の変更点に関する詳細な説明が<pre>
タグ内に記述されています。この追加は105行にわたる大規模なものです。
- このファイルに、2011年12月14日付けの週次レポートの内容がHTML形式で追加されています。具体的には、
したがって、「コアとなるコードの変更箇所」は、Go言語の実際の機能やロジックを変更するコードではなく、Go言語の変更内容を記述したドキュメントファイルそのものになります。
コアとなるコードの解説
このコミットにおける「コアとなるコード」は、Go言語の週次開発レポートであるdoc/devel/weekly.html
に追加された内容です。このHTMLファイルに追加されたテキストは、Go言語の進化における重要なマイルストーンを記録しており、以下の主要な変更点を開発者に伝えています。
言語仕様の変更に関する解説
- 構造体と配列の比較の明確化:
- Go言語の型システムにおいて、構造体や配列の等価性比較がどのように機能するかが明確に定義されました。これは、Goの型安全性と予測可能性を維持する上で重要です。開発者は、自身のカスタム型が比較可能であるかどうかを理解し、それに応じてコードを記述する必要があります。
- この変更は、Go 1リリースに向けた言語仕様の安定化の一環であり、Go言語のセマンティクスをより厳密にするためのものです。
rune
型の導入と文字リテラルのデフォルト型:rune
型がint32
のエイリアスとして導入されたことは、Go言語がUnicodeを第一級でサポートするという設計思想を強調しています。これにより、開発者は多言語対応のアプリケーションをより容易に構築できるようになります。- 文字リテラルのデフォルト型が
rune
になったことで、int
型を文字として扱っていた古いコードは修正が必要になります。これは、Go言語の型システムがより厳密になり、意図しない型変換を防ぐための変更です。開発者は、文字を扱う際には明示的にrune
型を使用することが推奨されます。
ツール(goinstall
, gofmt
)の変更に関する解説
goinstall
のGoogle Codeインポートパス対応:- これは、Go言語のパッケージ管理エコシステムが進化していることを示しています。Google Codeのインポートパス形式の変更に対応することで、
goinstall
は最新のリポジトリ構造に対応し、開発者がパッケージをよりスムーズに取得できるようにしました。 gofix
ツールの提供は、Go言語の互換性を維持するための重要な戦略です。言語やツールの変更によって既存のコードが壊れる可能性がある場合でも、gofix
のような自動修正ツールを提供することで、開発者の移行コストを最小限に抑えることができます。
- これは、Go言語のパッケージ管理エコシステムが進化していることを示しています。Google Codeのインポートパス形式の変更に対応することで、
gofmt
のフラグ変更:gofmt
のフラグ変更は、ツールの使いやすさと一貫性を向上させるためのものです。-tabintent
から-tabs
へのリネームは、より直感的で分かりやすい命名規則への移行を示しています。-spaces
フラグの削除は、Go言語の公式なコードスタイルがタブによるインデントを推奨していることを再確認させるものです。これにより、Goコミュニティ全体で統一されたコードスタイルが促進されます。
その他の変更点に関する解説
週次レポートにリストアップされたその他の多数の変更点(コンパイラの改善、標準ライブラリの機能追加・修正、ランタイムの最適化など)は、Go言語が継続的に改善され、より堅牢で高性能な言語へと進化していることを示しています。これらの変更は、Go言語の安定性、パフォーマンス、セキュリティ、そして開発者の生産性を向上させるために不可欠なものです。特に、新しいドキュメントの追加は、Go言語の学習曲線と利用しやすさを改善するための取り組みを示しています。
全体として、このコミットは、Go言語プロジェクトが透明性の高い開発プロセスを維持し、言語とエコシステムの継続的な改善にコミットしていることを明確に示しています。
関連リンク
- Go 1リリースノート(equalityに関する詳細): http://weekly..golang.org/doc/go1.html#equality
- Go 1リリースノート(runeに関する詳細): http://weekly.golang.org/doc/go1.html#rune
- Go言語の公式ウェブサイト: https://golang.org/
- Go言語のChangeList (CL) 5494045: https://golang.org/cl/5494045
参考にした情報源リンク
- Go言語の週次開発レポートの歴史に関する情報(一般的な知識として利用)
- MercurialとGitに関する一般的な知識(
.hgtags
の理解のため) - Go言語の
rune
型、構造体と配列の比較、goinstall
、gofmt
に関する一般的な知識