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

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

このコミットは、Go言語の公式ドキュメントの一部である doc/go1.1.html ファイルに対する変更です。具体的には、Go 1.1リリースに関する導入部分のプレースホルダー(TODOコメント)を、実際のリリース概要と変更点の紹介文に置き換えるものです。このファイルは、Go 1.1のリリースノートとして機能し、ユーザーが新しいバージョンで何が改善され、何に注意すべきかを理解するための重要な情報源となります。

コミット

  • コミットハッシュ: 4529c047b852772eb380499926c1c4e1c42da625
  • 作者: Rob Pike r@golang.org
  • コミット日時: Mon Mar 25 17:41:12 2013 -0700
  • コミットメッセージ:
    doc/go1.1.html: introduction
    
    R=golang-dev, adg, bradfitz
    CC=golang-dev
    https://golang.org/cl/7696045
    

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

https://github.com/golang/go/commit/4529c047b852772eb380499926c1c4e1c42da625

元コミット内容

doc/go1.1.html: introduction

R=golang-dev, adg, bradfitz
CC=golang-dev
https://golang.org/cl/7696045

変更の背景

このコミットは、Go 1.1のリリース準備の一環として行われました。Go 1.1は、Go 1のリリース(2012年3月)以降の最初のメジャーアップデートであり、その変更点や改善点をユーザーに伝えるための公式ドキュメント doc/go1.1.html の作成が進められていました。このコミット以前は、導入部分が「TODO」コメントで占められていましたが、このコミットによって、Go 1.1の主要な特徴、特にパフォーマンスの向上とGo 1との互換性維持の約束を説明する実際のテキストが追加されました。これは、リリースノートの完成に向けた重要なステップです。

前提知識の解説

Go言語のバージョン管理と互換性保証 (Go 1 Compatibility Promise)

Go言語は、バージョン1(Go 1)のリリース以降、「Go 1 Compatibility Promise」という強力な互換性保証を掲げています。これは、Go 1で書かれたプログラムは、Go 1以降の将来のGoのバージョンでも動作し続けることを保証するというものです。この原則により、Go開発者は、新しいGoバージョンがリリースされても既存のコードが壊れる心配をせずに、安心してアップグレードできるという大きなメリットを享受できます。Go 1.1もこの互換性保証の範囲内で開発されており、このコミットで追加された導入文でもその点が強調されています。

Goのリリースサイクル

Go言語は、通常、年に2回のメジャーリリース(例: Go 1.1, Go 1.2, Go 1.18など)を行います。これらのメジャーリリースでは、新機能の追加、パフォーマンスの改善、標準ライブラリの拡張など、比較的大規模な変更が含まれることがあります。一方で、メジャーリリース間には「ポイントリリース」(例: Go 1.0.1, Go 1.0.2)が発行されることがあります。これらは主にバグ修正やセキュリティパッチを目的としており、非互換な変更は含まれません。Go 1.1は、Go 1に続く最初のメジャーリリースであり、パフォーマンス向上に重点が置かれている点が特徴です。

ドキュメントの重要性

ソフトウェアの新しいバージョンがリリースされる際、その変更点を正確かつ網羅的に記述したドキュメントは、ユーザーがスムーズに移行し、新機能を活用するために不可欠です。doc/go1.1.html のようなリリースノートは、言語の変更点、標準ライブラリの更新、ツールの改善、パフォーマンスの向上など、多岐にわたる情報を集約し、開発者が効率的に情報を得るための中心的な役割を果たします。このコミットは、まさにその重要なドキュメントの核となる部分を構築するものです。

技術的詳細

このコミットの技術的な詳細の核心は、Go 1.1のリリースにおける主要な変更点と哲学を、公式ドキュメントの導入部分として明確に記述した点にあります。

  1. Go 1の安定性とポイントリリース: 導入文は、Go 1がGo言語とライブラリに安定性をもたらし、その後のポイントリリース(1.0.1, 1.0.2, 1.0.3)がバグ修正に専念し、非互換な変更を行わなかったことを説明しています。これは、Goエコシステムの成熟と、互換性保証へのコミットメントを示しています。

  2. Go 1.1の焦点: Go 1.1の最も重要な焦点は「パフォーマンス」であることが明記されています。コンパイラ、ライブラリ、ランタイムの実装に「major work」(大規模な作業)が行われ、その結果として「significant, sometimes dramatic speedups」(顕著で、時には劇的な高速化)が多くのテストプログラムで確認されたと述べられています。これは、ユーザーがGo 1.1にアップグレードし、既存のプログラムを再コンパイルするだけで、パフォーマンスの恩恵を受けられることを示唆しています。

  3. 互換性の維持: Go 1.1がGo 1の互換性保証を維持していることが強調されています。これは、既存のGo 1コードがGo 1.1でも問題なく動作することを意味します。ただし、非常に稀なケースとして、「64-bit ints」と「Unicode literals」に関連するエラーが表面化する可能性が言及されており、これらについてはドキュメントの後半で詳細が説明されることが示唆されています。これは、互換性を最大限に維持しつつも、特定のコーナーケースで発生しうる挙動の変化について、ユーザーに事前に注意を促すためのものです。

  4. ドキュメント内のコード例の修正: コミットの差分には、HTMLドキュメント内のコード例の修正も含まれています。具体的には、func (p []byte) (n int, err error) および func (w *bufio.Writer, p []byte) (n int, err error) の例において、w.Write(n, err)w.Write(p) に変更されています。これは、Goの io.Writer インターフェースの Write メソッドの正しいシグネチャが Write(p []byte) (n int, err error) であるため、引数として nerr を渡すのは誤りであり、バイトスライス p を渡すのが正しいという、ドキュメント内の誤植または不正確なコードスニペットの修正です。これは言語仕様の変更ではなく、ドキュメントの正確性を高めるための修正です。

  5. net パッケージの TODO リストの整理: net パッケージに関する TODO リストが、コミットの前後で一部変更されています。これは、ドキュメント作成の過程で、net パッケージに追加される新しいAPI(LookupNS, IPConn.ReadMsgIP, IPConn.WriteMsgIP など)に関する記述の整理や、その進捗状況を反映したものと考えられます。

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

--- a/doc/go1.1.html
+++ b/doc/go1.1.html
@@ -6,9 +6,41 @@
 <h2 id="introduction">Introduction to Go 1.1</h2>
 
-TODO
- - overview
- - link back to Go 1 and also Go 1 Compatibility docs.
+<p>
+The release of <a href="/doc/go1.html">Go version 1</a> (Go 1 or Go 1.0 for short)
+in March of 2012 introduced a new period
+of stability in the Go language and libraries.
+That stability has helped nourish a growing community of Go users
+and systems around the world.
+Several "point" releases since
+then—1.0.1, 1.0.2, and 1.0.3—have been issued.
+These point releases fixed known bugs but made
+no non-critical changes to the implementation.
+</p>
+
+<p>
+This new release, Go 1.1, keeps the <a href="/doc/go1compat.html">promise
+of compatibility</a> but adds a couple of significant
+(backwards-compatible, of course) language changes, has a long list
+of (again, compatible) library changes, and
+includes major work on the implementation of the compilers,
+libraries, and run-time.
+The focus is on performance.
+Benchmarking is an inexact science at best, but we see significant,
+sometimes dramatic speedups for many of our test programs.
+We trust that many of our users' programs will also see improvements
+just by updating their Go installation and recompiling.
+</p>
+
+<p>
+This document summarizes the changes between Go 1 and Go 1.1.
+Very little if any code will need modification to run with Go 1.1,
+although a couple of rare error cases surface with this release
+and need to be addressed if they arise.
+Details appear below; see the discussion of
+<a href="#int">64-bit ints</a> and <a href="#unicode_literals">Unicode literals</a>
+in particular.
+</p>
 
 <h2 id="language">Changes to the language</h2>
 
@@ -62,7 +94,7 @@ a function literal closing over <code>w</code>:
 
 <pre>
 func (p []byte) (n int, err error) {
-\treturn w.Write(n, err)
+\treturn w.Write(p)
 }
 </pre>
 
@@ -75,7 +107,7 @@ is equivalent to a function with an extra first argument, a receiver of type
 
 <pre>
 func (w *bufio.Writer, p []byte) (n int int, err error) {
-\treturn w.Write(n, err)
+\treturn w.Write(p)
 }
 </pre>
 
@@ -707,6 +739,10 @@ clearly a mistake in Go 1.0.
 Since this API change fixes a bug, it is permitted by the Go 1 compatibility rules.
 </li>
 
+<li> TODO:
+<code>net</code>: LookupNS, IPConn.ReadMsgIP, IPConn.WriteMsgIP, UDPConn.ReadMsgUDP, UDPConn.WriteMsgUDP, UnixConn.CloseRead, UnixConn.CloseWrite
+</li>
+
 <li>
 The <a href="/pkg/net/"><code>net</code></a> package includes a new function,
 <a href="/pkg/net/#DialOpt"><code>DialOpt</code></a>, to supply options to
@@ -759,10 +795,6 @@ has two new functions,
 which do ASCII-only trimming of leading and trailing spaces.
 </li>
 
-<li> TODO:
-<code>net</code>: ListenUnixgram, LookupNS, IPConn.ReadMsgIP, IPConn.WriteMsgIP, UDPConn.ReadMsgUDP, UDPConn.WriteMsgUDP, UnixConn.CloseRead, UnixConn.CloseWrite
-</li>
-
 <li>
 The new method <a href="/pkg/os/#FileMode.IsRegular"><code>os.FileMode.IsRegular</code> </a> makes it easy to ask if a file is a plain file.
 </li>

コアとなるコードの解説

このコミットは、Go言語のソースコードそのものではなく、Go 1.1のリリースノートとなるHTMLドキュメント doc/go1.1.html の内容を更新しています。

  1. 導入セクションの追加:

    • TODO コメントが削除され、Go 1.1の正式な導入文が追加されました。この導入文は、Go 1がもたらした安定性、その後のポイントリリースによるバグ修正、そしてGo 1.1の主要な焦点がパフォーマンス向上にあることを明確に述べています。
    • 特に、「Benchmarking is an inexact science at best, but we see significant, sometimes dramatic speedups for many of our test programs.」という記述は、Go 1.1がコンパイラ、ライブラリ、ランタイムの最適化によって、既存のGoプログラムの実行速度を大幅に向上させることを示唆しています。
    • また、Go 1との互換性が維持されていること、そして「64-bit ints」と「Unicode literals」に関する稀なエラーケースに注意が必要であることも言及されています。
  2. コード例の修正:

    • func (p []byte) (n int, err error) { return w.Write(n, err) } という誤ったコードスニペットが、func (p []byte) (n int, err error) { return w.Write(p) } に修正されています。これは、Goの io.Writer インターフェースの Write メソッドの正しいシグネチャが Write(p []byte) (n int, err error) であるため、Write メソッドにはバイトスライス p を引数として渡すのが正しいという、ドキュメント内のコードの正確性を向上させるための変更です。nerrWrite メソッドの戻り値であり、引数ではありません。
  3. net パッケージの TODO リストの整理:

    • net パッケージに関する TODO リストが更新されています。これは、ドキュメント作成の過程で、net パッケージに追加される新しいAPIに関する記述の進捗状況を反映していると考えられます。具体的には、ListenUnixgram がリストから削除され、他の関数が残っています。これは、ドキュメントの最終化に向けて、どのAPIについて言及すべきか、あるいは既に記述が完了したかどうかの管理を示唆しています。

全体として、このコミットはGo 1.1のリリースに向けたドキュメントの整備であり、ユーザーが新しいバージョンを理解し、スムーズに利用するための基盤を固める重要な役割を担っています。

関連リンク

参考にした情報源リンク