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

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

コミット

このコミットは、Go言語の公式ドキュメントの一部である doc/go1.1.html ファイルに対して行われたものです。具体的には、Go 1.1リリースにおける標準ライブラリの変更点に関する記述を追加・更新しています。コミットメッセージには「まだやるべきことは多いが、これは始まりに過ぎない」とあり、Go 1.1のリリースノート作成の初期段階であることが示唆されています。

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

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

元コミット内容

doc/go1.1.html: document some of the library changes.
Still much to do, but this is a start.

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

変更の背景

このコミットは、Go 1.1のリリースに向けたドキュメント作成の一環として行われました。Go 1.1は、Go 1.0からのメジャーアップデートであり、パフォーマンスの向上、コンパイラ、ランタイム、標準ライブラリの広範な変更が含まれていました。これらの変更点をユーザーに正確に伝えるため、公式リリースノートである doc/go1.1.html の内容を充実させる必要がありました。本コミットは、特に標準ライブラリの変更点に焦点を当て、その初期ドキュメント化を進めることを目的としています。

前提知識の解説

  • Go 1.1リリース: Go 1.1は、2013年5月13日にリリースされたGo言語の重要なバージョンです。Go 1.0との互換性を維持しつつ、パフォーマンスの大幅な改善、コンパイラ、ガベージコレクタ、スケジューラ、マップの実装、標準ライブラリの最適化が行われました。また、並行プログラムにおけるメモリ同期エラーを検出するためのレース検出器が導入されるなど、開発体験を向上させる新機能も追加されました。
  • Go標準ライブラリ: Go言語は、豊富な標準ライブラリを提供しており、ネットワーキング、ファイルI/O、暗号化、データ構造など、多岐にわたる機能が含まれています。これらのライブラリはGoプログラムの基盤を形成し、開発者が効率的にアプリケーションを構築できるように設計されています。
  • HTMLドキュメント: doc/go1.1.html は、Go言語の公式ウェブサイトで公開されるGo 1.1のリリースノートのHTMLソースコードです。このファイルは、Go 1.1で導入された新機能、変更点、非互換性などについて記述し、ユーザーが新しいバージョンに移行する際のガイドとなります。
  • TODO コメント: ソースコードやドキュメント内で見られる TODO コメントは、将来的に実装または記述が必要な項目を示す一般的な慣習です。このコミットでは、まだドキュメント化が完了していない部分に多くの TODO が残されており、作業の進行状況を示しています。

技術的詳細

このコミットは、doc/go1.1.html ファイルに対して255行の追加と10行の削除を行っています。これは、Go 1.1で変更された標準ライブラリの各パッケージについて、新しいセクションや項目を追加する作業を反映しています。

具体的には、以下のパッケージに関する記述が追加または更新されています(一部は TODO として残されていますが、ドキュメント化の対象としてリストアップされています):

  • bufio.Scanner: 新しいスキャナ機能に関する記述。
  • debug/elf: ELFファイル解析パッケージの変更点。特にシンボル情報のスキップに関する挙動の変更。
  • net: ネットワークパッケージの変更点。UnixConnReadFrom および WriteTo メソッドの追加など。
  • reflect: リフレクションパッケージの変更点。Select, ChanOf, MakeFunc, MapOf, SliceOf, Convert, Type.ConvertibleTo など。
  • runtime: ランタイムパッケージの変更点。BlockProfile など。
  • time: 時間パッケージの変更点。ParseInLocation, Timer.Reset, Time.YearDay など。
  • exp および old サブツリーの移動: code.google.com/p/go.exp サブリポジトリへの移動に関する説明。
  • マイナーなライブラリ変更点: 以下のパッケージにおける追加機能や改善点がリストアップされています。
    • bytes: TrimPrefix, TrimSuffix, Buffer.Grow, Reader.WriteTo
    • crypto/hmac: Equal 関数。
    • crypto/x509: DecryptPEMBlock, EncryptPEMBlock など。
    • database/sql/driver: Queryer
    • database/sql: Ping, SetMaxIdleConns
    • encoding/json: Decoder.Buffered, UseNumber, Number
    • encoding/xml: EscapeText, Encoder.Indent
    • go/ast: CommentMap 型と関連メソッド。
    • go/doc: godoc コマンドの -notes フラグによる TODO(joe) などのアノテーションの処理。
    • go/format: Node, Source
    • html/template: 未定義の「noescape」機能の削除。
    • io: io.ByteWriter インターフェースのエクスポート。
    • log/syslog: OS固有のロギング機能のサポート強化。
    • math/big: Int 型の MarshalJSON, UnmarshalJSON, Uint64, SetUint64 メソッド。Rat 型の Float64, SetFloat64 メソッド。
    • mime/multipart: Writer.SetBoundary
    • net/http/cookiejar: 新しいパッケージの追加。
    • net/http: ParseTime, CloseNotifier, Request.PostFormValue, ServeMux.Handler, Transport.CancelRequest
    • net/mail: ParseAddress, ParseAddressList
    • net/smtp: Client.Hello
    • net/textproto: TrimBytes, TrimString
    • net: DialOption, DialOpt, ListenUnixgram, LookupNS, IPConn.ReadMsgIP, IPConn.WriteMsgIP, UDPConn.ReadMsgUDP, UDPConn.WriteMsgUDP, UnixConn.CloseRead, UnixConn.CloseWrite
    • os: os.FileMode.IsRegular メソッド。
    • pkg/image: 新しいサブサンプリング。
    • regexp: Regexp.Longest, Regexp.Split メソッド。
    • runtime/debug: FreeOSMemory, ReadGCStats, SetGCPercent
    • sort: Reverse 関数。
    • strings: TrimPrefix, TrimSuffix, Reader.WriteTo
    • syscall: 各OSの定数とシステムコールの更新。
    • testing: AllocsPerRun, AllocsPerOp, Verbose, B.Skip, T.Skip
    • text/template および html/template: パイプラインの要素をグループ化するための括弧のサポート。
    • unicode/utf8: ValidRune 関数。
    • unicode: Unicode 6.2.0への更新。

これらの変更は、Go 1.1が単なるパフォーマンス改善だけでなく、標準ライブラリの機能拡張と改善にも力を入れていたことを示しています。

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

このコミットのコアとなる変更は、doc/go1.1.html ファイルへのHTMLコンテンツの追加と修正です。具体的には、Go 1.1で導入された標準ライブラリの変更点を説明するための新しい <h3> 見出しと <p> 段落、そして <ul> リストが追加されています。

--- a/doc/go1.1.html
+++ b/doc/go1.1.html
@@ -9,6 +9,7 @@
 TODO
  - overview
  - link back to Go 1 and also Go 1 Compatibility docs.
+ - links through body of text
 
 <h2 id="language">Changes to the language</h2>
 
@@ -33,7 +34,8 @@ In Go 1.1, an integer division by constant zero is not a legal program, so it is
 
 <h2 id="impl">Changes to the implementations and tools</h2>
 
-TODO: more
+<li>TODO: more</li>
+<li>TODO: unicode: surrogate halves in compiler, libraries, runtime</li>
 
 <h3 id="gc-flag">Command-line flag parsing</h3>
 
@@ -59,7 +61,7 @@ more than 2 billion elements on 64-bit platforms.\n <em>Updating</em>:\n Most programs will be unaffected by this change.\n Because Go does not allow implicit conversions between distinct\n-<a href="/ref/spec#Numeric_types">numeric types</a>,\n+<a href="/ref/spec/#Numeric_types">numeric types</a>,\n no programs will stop compiling due to this change.\n However, programs that contain implicit assumptions\n that <code>int</code> is only 32 bits may change behavior.\n@@ -129,8 +131,27 @@ before Go 1 to use Go 1 APIs. To update pre-Go 1 code to Go 1.1, use a Go 1.0 to\n to convert the code to Go 1.0 first.\n </p>\n \n+<h2 id="performance">Performance</h2>\n+\n+<p>\n+TODO introduction\n+</p>\n+\n+<ul>\n+<li>TODO better code generation (inlining, ...?)</li>\n+<li>TODO parallel gc</li>\n+<li>TODO more precise gc</li>\n+<li>TODO networking is more efficient (known to runtime)</li>\n+</ul>\n+\n <h2 id="library">Changes to the standard library</h2>

この差分は、Go 1.1のドキュメントに「Performance」セクションと「Changes to the standard library」セクションが追加され、その中に具体的なライブラリ変更点の記述が始まっていることを示しています。特に、bufio.Scannerdebug/elfnetreflectruntimetime といった主要なパッケージに関する見出しと、その内容を記述するための TODO や具体的な説明が追加されています。

コアとなるコードの解説

このコミットは、Go 1.1のリリースノートの骨格を形成し、標準ライブラリの変更点を体系的に記述するための基盤を構築しています。

  • セクションの追加: <h2> タグで「Performance」と「Changes to the standard library」という新しい主要セクションが追加されています。これにより、Go 1.1の主要な変更点であるパフォーマンスとライブラリの進化が明確に示されます。
  • パッケージごとの詳細化: 各標準ライブラリパッケージに対して <h3> タグで個別のセクションが設けられています。これにより、ユーザーは特定のパッケージの変更点を容易に参照できるようになります。
  • TODO の活用: まだ詳細が記述されていない部分には TODO コメントが挿入されており、今後のドキュメント作成作業のロードマップとして機能しています。これは、リリースノートが段階的に作成されていることを示唆しています。
  • 具体的な変更点の記述: bytes, crypto/hmac, go/ast, go/doc, io, log/syslog, math/big, net/http/cookiejar, os, regexp, sort, strings, syscall, testing, text/template, html/template, unicode/utf8, unicode など、多くのパッケージについて具体的な関数やメソッドの追加、挙動の変更が簡潔に記述されています。これにより、ユーザーはGo 1.1で利用可能になった新機能や改善点を把握できます。
  • html/template の「noescape」機能削除: 未定義かつ部分的にしか実装されていなかった「noescape」機能が削除されたことが明記されており、これに依存していたプログラムが動作しなくなる可能性があることが警告されています。これは、後方互換性に関する重要な情報です。

全体として、このコミットはGo 1.1のリリースノートの重要な部分を構築し、Go言語の進化をユーザーに伝えるための基盤を確立しています。

関連リンク

参考にした情報源リンク