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

[インデックス 17144] ファイルの概要

このコミットは、Go言語の将来のバージョンであるGo 1.2のリリースノートドラフトである doc/go1.2.txt ファイルに対する更新です。このファイルは、Go 1.2リリースに含まれる予定の重要な変更点、新機能、改善点をまとめたもので、ユーザーが新しいバージョンで何が変更されたかを把握するための公式ドキュメントの一部となります。

コミット

commit e486cefec270e56204ae3f3e57ca422c5a4c166e
Author: Pieter Droogendijk <pieter@binky.org.uk>
Date:   Sat Aug 10 09:48:43 2013 +1000

    doc/go1.2.txt: Added missing changes since 1st of August
    
    R=golang-dev, r
    CC=golang-dev
    https://golang.org/cl/12714043

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/e486cefec270e56204ae3f3e57ca422c5a4c166e

元コミット内容

このコミットは、doc/go1.2.txt ファイルに、2013年8月1日以降に行われたGo 1.2の変更点を追記するものです。具体的には、以下の5つの変更点が追加されています。

  • cmd/gc: make missing package error fatal (CL 12677043).
  • encoding/csv: always allow trailing commas (CL 11916045).
  • encoding/xml: allow attributes stored in pointers to be marshaled (CL 8653047).
  • ioutil: add WriteString to Discard (CL 12580045).
  • strings: add IndexByte, for consistency with bytes package (CL 12214044).

変更の背景

Go言語の開発プロセスでは、新しいバージョンがリリースされる前に、そのバージョンに含まれるすべての重要な変更点をまとめたリリースノートが作成されます。doc/go1.2.txt は、Go 1.2のリリースノートのドラフトであり、開発中に継続的に更新されます。

このコミットの背景には、Go 1.2のリリースに向けて、それまでにコミットされた重要な変更点がリリースノートにまだ反映されていなかったという状況があります。特に、2013年8月1日以降にマージされた変更点が漏れていたため、それらを追記することで、リリースノートの正確性と完全性を保つことが目的です。これにより、Go 1.2のユーザーは、新しいバージョンで導入されたすべての変更点を網羅的に把握できるようになります。

前提知識の解説

  • Go言語のリリースサイクル: Go言語は、通常6ヶ月ごとにメジャーリリースを行います。各リリースでは、言語仕様の変更、標準ライブラリの改善、ツールチェーンの機能強化、パフォーマンスの最適化など、多岐にわたる変更が導入されます。
  • doc/go1.2.txt: これはGo 1.2のリリースノートのドラフトファイルです。Goの各リリースには、doc/goX.Y.txt のような形式でリリースノートが提供され、そのバージョンで導入されたすべての変更点が簡潔にまとめられています。これは、ユーザーが新しいバージョンにアップグレードする際に、互換性の問題や新機能を確認するための重要なドキュメントです。
  • CL (Change List): Go言語の開発では、すべての変更は「Change List (CL)」としてGerrit(Goプロジェクトが使用するコードレビューシステム)に提出されます。各CLには一意の番号が割り当てられ、そのCLがどのような変更を導入するのかが記述されます。コミットメッセージやリリースノートでは、しばしばこのCL番号が参照され、詳細な変更内容を追跡するためのリンクとして機能します。
  • cmd/gc: Goコンパイラ(gcはGo Compilerの略)を指します。Goのソースコードを機械語に変換する役割を担います。
  • encoding/csv: CSV (Comma Separated Values) 形式のデータをエンコードおよびデコードするためのGo標準ライブラリパッケージです。
  • encoding/xml: XML (Extensible Markup Language) 形式のデータをエンコードおよびデコードするためのGo標準ライブラリパッケージです。
  • ioutil: Go 1.16でio/ioutilパッケージは非推奨となり、その機能はioパッケージとosパッケージに統合されました。しかし、このコミットが作成された2013年時点では、ioutilは独立したパッケージとして存在していました。ファイルやI/O操作に関するユーティリティ関数を提供します。
  • strings: 文字列操作に関するユーティリティ関数を提供するGo標準ライブラリパッケージです。

技術的詳細

このコミットで追加された各変更点について、その技術的な詳細を掘り下げます。

  1. cmd/gc: make missing package error fatal (CL 12677043).

    • 背景: 以前のGoコンパイラでは、存在しないパッケージをインポートしようとした場合、エラーとして報告されるものの、コンパイルプロセスが致命的に中断されないケースがあった可能性があります。これにより、後続のコンパイルステップでさらなるエラーが発生したり、開発者が問題の根本原因を特定しにくくなったりすることがありました。
    • 変更内容: この変更により、Goコンパイラ(cmd/gc)は、インポートしようとしているパッケージが見つからない場合に、そのエラーを「致命的 (fatal)」として扱うようになりました。つまり、このようなエラーが発生した場合、コンパイルプロセスは即座に停止し、それ以上の処理は行われません。
    • 影響: この変更は、コンパイルエラーの挙動をより厳格にし、開発者がパッケージの依存関係の問題を早期に、かつ明確に把握できるようにすることを目的としています。これにより、ビルドプロセスの信頼性が向上し、デバッグが容易になります。
  2. encoding/csv: always allow trailing commas (CL 11916045).

    • 背景: CSV形式は標準化されていますが、実装によっては末尾のカンマ(trailing commas)の扱いが異なることがあります。例えば、a,b,c, のように行の最後にカンマがある場合、これが空のフィールドを示すのか、それとも単なる余分なカンマとして無視されるべきなのかは、CSVパーサーによって解釈が分かれることがあります。
    • 変更内容: encoding/csv パッケージは、CSVデータのパースにおいて、常に末尾のカンマを許可するように変更されました。これは、CSVリーダーが a,b,c, のような行をパースする際に、最後のカンマを有効な区切り文字として扱い、その後に空のフィールドが存在すると解釈することを意味します。
    • 影響: この変更は、より多様なCSVファイルの形式に対応できるようになり、特に一部のシステムやツールが生成するCSVファイルとの互換性が向上します。開発者は、末尾のカンマの有無を気にすることなく、より堅牢なCSVパーサーを構築できるようになります。
  3. encoding/xml: allow attributes stored in pointers to be marshaled (CL 8653047).

    • 背景: Goのencoding/xmlパッケージは、Goの構造体をXMLにマーシャリング(変換)する機能を提供します。以前は、構造体のフィールドがポインタ型であり、それがXML属性として扱われるべき場合(例: xml:"attr,name" タグを持つフィールド)、そのポインタがnilでない場合にのみマーシャリングが正しく行われていました。ポインタがnilの場合、属性はスキップされるか、予期しない挙動を示す可能性がありました。
    • 変更内容: この変更により、encoding/xmlパッケージは、ポインタに格納された属性も正しくマーシャリングできるようになりました。これは、ポインタがnilでない限り、そのポインタが指す値がXML属性として適切にエンコードされることを意味します。
    • 影響: この改善により、XMLマーシャリングの柔軟性が向上し、開発者はポインタを使用してXML属性を表現する際に、より予測可能な挙動を期待できるようになります。特に、オプションの属性や、値が存在しない場合にnilポインタを使用するようなデータ構造を扱う際に有用です。
  4. ioutil: add WriteString to Discard (CL 12580045).

    • 背景: io.Discardは、書き込まれたすべてのデータを破棄するio.Writerの実装です。これは、データを書き込む必要があるが、そのデータがどこにも保存される必要がない場合に便利です(例: ベンチマーク中の不要な出力の抑制)。しかし、io.WriteString関数は、io.Writerインターフェースを実装するオブジェクトに対して文字列を書き込むためのユーティリティ関数ですが、io.Discardには直接WriteStringメソッドがありませんでした。
    • 変更内容: ioutilパッケージ(またはioパッケージに統合される前のio.Discardの実装)に、WriteStringメソッドが追加されました。これにより、io.Discardに対してio.WriteString関数を使用する際に、より効率的なパスが提供されるようになりました。
    • 影響: この変更は、io.Discardへの文字列書き込みのパフォーマンスをわずかに向上させる可能性があります。また、bytes.Bufferos.Fileなど、WriteStringメソッドを持つ他のio.Writer実装との一貫性が高まります。
  5. strings: add IndexByte, for consistency with bytes package (CL 12214044).

    • 背景: Goの標準ライブラリには、バイトスライスを操作するためのbytesパッケージと、文字列を操作するためのstringsパッケージがあります。bytesパッケージには、バイトスライス内で特定のバイトを検索するためのIndexByte関数が既に存在していました。しかし、stringsパッケージには、文字列内で特定のバイト(文字)を検索するための同等のIndexByte関数がありませんでした。
    • 変更内容: stringsパッケージにIndexByte(s string, c byte) int関数が追加されました。この関数は、文字列s内で最初にc(バイトとして表現される文字)が出現するインデックスを返します。見つからない場合は-1を返します。
    • 影響: この追加により、stringsパッケージとbytesパッケージの間でAPIの一貫性が向上しました。開発者は、文字列とバイトスライスの両方で、単一のバイト(文字)を検索する際に、同様の関数名とセマンティクスを使用できるようになります。これにより、コードの可読性と保守性が向上します。

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

このコミットで変更されたファイルは doc/go1.2.txt のみです。 具体的な変更箇所は以下の通りです。

--- a/doc/go1.2.txt
+++ b/doc/go1.2.txt
@@ -10,6 +10,7 @@ Please keep the list sorted (as in sort.Strings of the lines).
 
 cmd/5a: removed support for R9/R10 (use m/g instead) (CL 9840043).
 cmd/cgo, cmd/go: support including C++ code with cgo (CL 8248043).
+cmd/gc: make missing package error fatal (CL 12677043).
 cmd/go: test coverage (CL 10413044).
 
 container/heap: added Fix (CL 12265043).
@@ -19,7 +20,9 @@ crypto/sha1: Sum function to simplify hashing (CL 10571043).
 crypto/sha256: Sum256 and Sum224 functions to simplify hashing (CL 10629043).
 crypto/sha512: Sum512 and Sum384 functions to simplify hashing (CL 10630043).
 crypto/tls: add support for TLS 1.1. (CL 7872043).
+encoding/csv: always allow trailing commas (CL 11916045).
 encoding/json: accept but correct invalid UTF-8 in Marshal (CL 11211045).
+encoding/xml: allow attributes stored in pointers to be marshaled (CL 8653047).
 flag: add Getter interface (CL 10472043).
 flag: export commandLine (now CommandLine) (CL 12587043).
 fmt: indexed access to arguments in Printf etc. (CL 9680043).
@@ -28,10 +31,12 @@ image/draw: added Drawer, FloydSteinberg and the op.Draw method (CL 10977043).
 image/draw: added Quantizer type (CL 11148043).
 image/gif: added Encode and EncodeAll (CL 10896043).
 io: Copy prioritizes WriterTo over ReaderFrom (CL 9462044).
+ioutil: add WriteString to Discard (CL 12580045).
 net: new build tag netgo for building a pure Go net package (CL 7100050).
 runtime: allow SetFinalizer with a func(interface{}) (CL 11858043).
 runtime: preemption of goroutines at function entry (CL 12371043).
 sort: new Stable function provides stable sort (CL 9612044).
+strings: add IndexByte, for consistency with bytes package (CL 12214044).
 syscall: implemented Sendfile for Darwin, added Syscall9 for Darwin/amd64 (CL 10980043).
 testing: AllocsPerRun is now quantized to an integer (the type is still float64) (CL 9837049).
 time: Allow Parse and Format to handle time zone offsets with seconds (CL 8132044)

コアとなるコードの解説

このコミットの「コアとなるコード」は、Go 1.2のリリースノートファイルである doc/go1.2.txt への追記です。このファイルは、Go言語のユーザーが新しいバージョンで導入された変更点を理解するための主要な情報源となります。

追加された各行は、Go 1.2で導入された特定の変更点や新機能の簡潔な説明と、その変更を導入したChange List (CL) への参照を含んでいます。これにより、ユーザーは興味のある変更点について、CLリンクを辿ることでさらに詳細な情報を得ることができます。

このコミットの目的は、Go 1.2のリリースノートの完全性と正確性を確保することにあります。開発プロセス中にマージされた重要な変更点がリリースノートに漏れることがないように、定期的にこのドキュメントが更新されます。このコミットは、特に2013年8月1日以降にマージされた変更点を網羅するために行われました。

関連リンク

参考にした情報源リンク

  • Go言語の公式ドキュメント (Go 1.2リリースノートなど)
  • Gerrit (Goプロジェクトのコードレビューシステム)
  • Go言語のソースコードリポジトリ (GitHub)
  • Go言語のメーリングリストやフォーラムでの議論 (CLに関連する議論など)
  • Go言語のブログやニュース記事 (Go 1.2リリースに関する情報など)
  • Go言語のioパッケージ、bytesパッケージ、stringsパッケージ、encoding/csvパッケージ、encoding/xmlパッケージのドキュメント。
  • Go言語のコンパイラ(cmd/gc)に関する情報。
  • CSVおよびXMLの仕様に関する一般的な情報。
  • io.Discardの機能に関する情報。
  • Go言語のリリースプロセスに関する情報。
  • Go言語のコミット履歴と関連するCLのレビューコメント。
  • https://golang.org/cl/12714043 (このコミット自体のCL)
  • https://github.com/golang/go/commit/e486cefec270e56204ae3f3e57ca422c5a4c166e (GitHub上のコミットページ)