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

[インデックス 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: &lt;pre&gt; must not occur inside &lt;p&gt; (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日までの週に行われた言語仕様の変更、標準ライブラリの更新、ツール(goinstallgofmtなど)の改善、バグ修正などを集約し、公式ドキュメントに反映させることを目的としています。これにより、開発者は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日までの週に行われた多岐にわたる技術的な変更が詳細に記述されています。

言語仕様の変更

  1. 構造体と配列の比較:
    • ==および!=演算子が、構造体と配列の値に対しても定義されるようになりました。
    • この比較は、データ構造の要素自体が比較可能である場合にのみ有効です。
    • 詳細については、Go 1リリースノートの「equality」セクションを参照するよう促されています。
  2. rune型の導入と文字リテラルのデフォルト型:
    • rune型がint32のエイリアスとして正式に定義されました。
    • 文字リテラル(例: 'a')のデフォルト型がruneになりました。
    • これにより、int型を文字の表現に使用していた既存のコードは、コンパイルエラーや予期せぬ動作を引き起こす可能性があります。
    • 詳細については、Go 1リリースノートの「rune」セクションを参照するよう促されています。

ツール(goinstall, gofmt)の変更

  1. goinstallのGoogle Codeインポートパス対応:
    • goinstallが、Google Codeの新しいインポートパス形式(例: "code.google.com/p/go-tour/tree")を期待するようになりました。
    • 古い形式(例: "go-tour.googlecode.com/hg/tree")のインポートは拒否されます。
    • 既存の壊れたパッケージを更新するために、gofixモジュールが提供され、goinstall -fixコマンドで修正できることが示されています。
  2. gofmtのフラグ変更:
    • -tabintentフラグが-tabsにリネームされました。
    • -spacesフラグが削除されました。

その他の変更点(抜粋)

週次レポートには、上記以外にも多数の変更点がリストアップされています。以下にその一部を抜粋し、技術的な側面を解説します。

  • コンパイラ (5c, 6c, 8c, gc):
    • 64ビットのswitch値のサポート。
    • コンパイラのエラーメッセージの改善。
    • インライン化のサポート(-lフラグなしでは無効)。
    • 多数のバグ修正。
  • 標準ライブラリの改善:
    • 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でのmadviseSysUnusedのサポート、NetBSDのサポート。
    • strconv: エラー文字列にパッケージ名と関数名を含める、QuoteRuneなどがrune引数を取るように変更、パフォーマンス改善。
    • syscall: Linuxでのflock()システムコール定数の追加、darwin, freebsd, openbsdのz-files再生成、関数がエラーを返す場合にuintptrではなくerrorを返すように変更。
    • time: Time.Addの修正、daysInの修正、Timegobマーシャラ、AfterFuncDurationを使用。
  • ドキュメントの追加:
    • Defer, Panic, and Recoverに関する記事の追加。
    • Error Handlingに関する記事の追加。
    • Go 1リリースノートドキュメントの追加。
  • テスト関連:
    • test/benchtest/garbagetest/bench/shootouttest/bench/garbageに移動。

これらの変更は、Go言語の安定性、パフォーマンス、機能性、そして開発者体験を向上させるための継続的な取り組みを示しています。特に、言語仕様の変更はGo 1リリースに向けた重要なステップであり、ツールの改善は開発ワークフローの効率化に貢献しています。

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

このコミット自体は、Go言語のソースコード本体に直接的な機能変更を加えるものではなく、主に以下の2つのファイルを変更しています。

  1. .hgtags:
    • 0c39eee85b0d1606b79c8ebcdeb3b67ed5849e39 weeklyという行が削除されています。これは、Mercurialのタグ情報が更新されたことを示唆しています。
  2. doc/devel/weekly.html:
    • このファイルに、2011年12月14日付けの週次レポートの内容がHTML形式で追加されています。具体的には、<h2 id="2011-12-14">2011-12-14</h2>という見出しの下に、Go言語の言語変更、goinstallgofmtの変更、およびその他の多数の変更点に関する詳細な説明が<pre>タグ内に記述されています。この追加は105行にわたる大規模なものです。

したがって、「コアとなるコードの変更箇所」は、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のような自動修正ツールを提供することで、開発者の移行コストを最小限に抑えることができます。
  • gofmtのフラグ変更:
    • gofmtのフラグ変更は、ツールの使いやすさと一貫性を向上させるためのものです。-tabintentから-tabsへのリネームは、より直感的で分かりやすい命名規則への移行を示しています。-spacesフラグの削除は、Go言語の公式なコードスタイルがタブによるインデントを推奨していることを再確認させるものです。これにより、Goコミュニティ全体で統一されたコードスタイルが促進されます。

その他の変更点に関する解説

週次レポートにリストアップされたその他の多数の変更点(コンパイラの改善、標準ライブラリの機能追加・修正、ランタイムの最適化など)は、Go言語が継続的に改善され、より堅牢で高性能な言語へと進化していることを示しています。これらの変更は、Go言語の安定性、パフォーマンス、セキュリティ、そして開発者の生産性を向上させるために不可欠なものです。特に、新しいドキュメントの追加は、Go言語の学習曲線と利用しやすさを改善するための取り組みを示しています。

全体として、このコミットは、Go言語プロジェクトが透明性の高い開発プロセスを維持し、言語とエコシステムの継続的な改善にコミットしていることを明確に示しています。

関連リンク

参考にした情報源リンク

  • Go言語の週次開発レポートの歴史に関する情報(一般的な知識として利用)
  • MercurialとGitに関する一般的な知識(.hgtagsの理解のため)
  • Go言語のrune型、構造体と配列の比較、goinstallgofmtに関する一般的な知識