[インデックス 10656] ファイルの概要
このコミットは、Go言語のバージョン1(Go 1)のリリースノート文書の骨格を作成するものです。まだ内容は含まれていませんが、タイトルと導入段落が用意されています。これにより、今後のリリースノートのコンテンツ追加が、個別の管理しやすい変更リスト(CLs)として行えるようになります。doc/Makefile
が更新され、新しいgo1.html
がビルドプロセスに含まれるようになりました。
コミット
commit bab4dec14214b27837b2c9c8c3d0f4a08df809b5
Author: Rob Pike <r@golang.org>
Date: Wed Dec 7 14:33:37 2011 -0800
doc: skeleton for release note document
No content yet other than titles and an introductory paragraph.
Once this is in, content can arise as separate manageable CLs.
R=rsc
CC=golang-dev
https://golang.org/cl/5435090
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/bab4dec14214b27837b2c9c8c3d0f4a08df809b5
元コミット内容
doc: skeleton for release note document
No content yet other than titles and an introductory paragraph.
Once this is in, content can arise as separate manageable CLs.
変更の背景
Go 1のリリースは、Go言語にとって極めて重要な節目でした。それまでのGoは活発に開発が進められていましたが、Go 1は言語とコアライブラリの安定した基盤を確立し、長期的な互換性を保証することを目的としていました。このコミットは、そのGo 1のリリースノートを体系的に作成するための最初のステップです。
リリースノートは、Go 1で導入される言語仕様、ライブラリ、ツールチェンジ、およびその他の重要な変更点をユーザーに伝えるための公式文書となります。このコミットでは、リリースノートの構造(目次やセクション見出し)を事前に定義することで、複数の開発者が並行してコンテンツを追加しやすくし、リリースプロセスを効率化することを目指しています。特に、Go 1の「安定性」という目標をユーザーに明確に伝えるための導入部が既に含まれている点が重要です。
前提知識の解説
- Go 1の安定性保証: Go 1は、Go言語の歴史において「互換性」を重視した最初のメジャーリリースです。Go 1の仕様に準拠して書かれたプログラムは、将来のGoのバージョンでも動作し続けることが保証されました。これは、開発者がGoを採用する上での大きな安心材料となり、エコシステムの成長を促進しました。このコミットで作成されるリリースノートは、この安定性保証の具体的な内容をユーザーに伝える役割を担います。
- Makefile:
Makefile
は、ソフトウェアのビルドプロセスを自動化するためのツールであるmake
が使用する設定ファイルです。このファイルには、ソースコードのコンパイル、リンク、ドキュメントの生成など、プロジェクトをビルドするために必要なコマンドと依存関係が記述されています。このコミットでは、新しいgo1.html
ファイルをビルドターゲットに追加するためにdoc/Makefile
が変更されています。 - テンプレートエンジンとHTML生成:
go1.tmpl
というファイル名から、Goのドキュメント生成プロセスがテンプレートエンジンを使用していることが示唆されます。テンプレートエンジンは、プレースホルダーを含むテキストファイル(テンプレート)とデータ(この場合はリリースノートのコンテンツ)を組み合わせて、最終的な出力(HTMLファイル)を生成するソフトウェアです。これにより、コンテンツとプレゼンテーション(HTML構造)を分離し、ドキュメントの管理を容易にします。tmpltohtml
というツールがテンプレートからHTMLを生成していることがMakefile
の変更から読み取れます。 - CL (Change List): Goプロジェクトでは、変更は通常「Change List (CL)」として提出されます。これは、Perforceなどのバージョン管理システムで使われる用語で、一連の関連する変更をまとめたものです。このコミットメッセージにある「content can arise as separate manageable CLs」という記述は、リリースノートの各セクションが個別のCLとして追加されることを意味し、変更のレビューと管理を細分化して効率的に行うためのプラクティスを示しています。
技術的詳細
このコミットの技術的な変更点は主に以下の2つです。
-
doc/Makefile
の変更:all
ターゲットにgo1.html
が追加されました。これは、make all
コマンドを実行した際に、go1.html
もビルド対象となることを意味します。- 既存の
go_tutorial.html
とeffective_go.html
のビルドルールが、より汎用的なパターンルール%.html: %.tmpl tmpltohtml
に置き換えられました。このパターンルールは、「.tmpl
拡張子を持つファイルとtmpltohtml
ツールに依存する.html
ファイルは、./makehtml $*.tmpl
コマンドを実行して生成される」ということを意味します。$*
は、ターゲット名から拡張子を除いた部分(例:go1
)に展開されます。これにより、新しい.tmpl
ファイルが追加された際に、Makefile
を修正することなく対応する.html
ファイルを自動的にビルドできるようになります。これは、将来のドキュメント追加に対する保守性を高める変更です。
-
doc/go1.html
およびdoc/go1.tmpl
の新規追加:go1.html
とgo1.tmpl
という2つの新しいファイルが追加されました。これらは全く同じ内容で、Go 1リリースノートの初期骨格を構成しています。- ファイルの内容はHTMLコメント、
h2
、h3
、p
タグで構成されており、リリースノートの主要なセクション(導入、言語の変更、ライブラリの変更、go
コマンド、パッケージリリース)のタイトルとサブタイトルが定義されています。 - 特に「Introduction to Go 1」の段落では、Go 1が「安定した言語とコアライブラリのセット」であり、「Go 1の仕様に書かれたコードは動作し続けることを保証する」というGo 1の核心的な目標が明記されています。また、Google App Engineでのサポートについても言及されています。
- 言語とライブラリの変更点については、
append
、close
、composite literals
、rune
、error type
、http package
など、Go 1で変更が予定されている具体的な項目がh3
タグとしてリストアップされています。これらは、Go 1のリリースに向けて議論され、実装が進められていた変更点の一部を示唆しています。
コアとなるコードの変更箇所
doc/Makefile
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -8,12 +8,9 @@ TARG=tmpltohtml
GOFILES=\
tmpltohtml.go\
-all: tmpltohtml go_tutorial.html effective_go.html
+all: tmpltohtml go_tutorial.html effective_go.html go1.html
-go_tutorial.html: go_tutorial.tmpl tmpltohtml
- ./makehtml go_tutorial.tmpl
-
-effective_go.html: effective_go.tmpl tmpltohtml
- ./makehtml effective_go.tmpl
+%.html: %.tmpl tmpltohtml
+ ./makehtml $*.tmpl
include ../src/Make.cmd
doc/go1.html
(新規ファイル)
<!-- Go 1 Release Notes -->
<h2 id="introduction">Introduction to Go 1</h2>
<p>
For a full explanation of the motivation and design of Go 1, see XXX.
Here follows a summary.
</p>
<p>
Go 1 is intended to be a stable language and core library set that will form a reliable foundation for people and organizations that want to make a long-term commitment to developing in the Go programming language. Go will continue to develop, but in a way that guarantees code written to the Go 1 specification will continue to work. For instance, Go 1 will be a supported platform on Google App Engine for the next few years. Incompatible changes to the environment, should they arise, will be done in a distinct version.
</p>
<p>
This document describes the changes in the language and libraries in Go 1, relative to the previous release, r60 (at the time of writing, tagged as r60.3). It also explains how to update code at r60 to compile and run under Go 1. Finally, it outlines the new <code>go</code> command for building Go programs and the new binary release process being introduced. Most of these topics have more thorough presentations elsewhere; such documents are linked below.
</p>
<h2 id="language">Changes to the language</h2>
<h3 id="append">Append</h3>
<h3 id="close">Close</h3>
<h3 id="composite_literals">Composite literals</h3>
<h3 id="goroutines_init">Goroutines during init</h3>
<h3 id="rune">The rune type</h3>
<h3 id="delete">Deleting from maps</h3>
<h3 id="multiple_assignment">Multiple assignment</h3>
<h3 id="shadowing">Returns and shadowed variables</h3>
<h3 id="struct_equality">Equality of structs and arrays</h3>
<h2 id="library">Changes to the library</h2>
<h3 id="package_hierarchy">The package hierarchy</h3>
<h3 id="errors">The error type</h3>
<h3 id="syscall_errors">System call errors</h3>
<h3 id="time">Time</h3>
<h3 id="html">The html package</h3>
<h3 id="http">The http package</h3>
<h3 id="strconv">The strconv package</h3>
<h3 id="exp">The package tree exp</h3>
<h3 id="old">The package tree old</h3>
<h3 id="deleted_packages">Deleted packages</h3>
<!--
go/typechecker
go/types
ebnf (and cmd/ebnflint)
container/vector
try (and gotry)
exp/datafmt
netchan
-->
<h3 id="subrepo_packages">Packages moving to subrepositories</h3>
<!--
crypto/openpgp to XXX
maybe exp/ssh?
-->
<h3 id="os_fileinfo">The os.FileInfo type</h3>
<h2 id="go_command">The go command</h2>
<h2 id="releases">Packaged releases</h2>
doc/go1.tmpl
(新規ファイル)
doc/go1.html
と全く同じ内容です。
コアとなるコードの解説
-
doc/Makefile
の変更:all: tmpltohtml go_tutorial.html effective_go.html go1.html
:all
ターゲットにgo1.html
を追加することで、Go 1リリースノートのHTMLファイルがプロジェクトのビルドプロセスの一部として生成されるようになりました。これにより、ドキュメントが常に最新の状態に保たれ、配布物に含まれることが保証されます。%.html: %.tmpl tmpltohtml\n\t./makehtml $*.tmpl
:このパターンルールは、go_tutorial.html
やeffective_go.html
のような個別のルールを置き換えるものです。これは、make
が.tmpl
ファイルから.html
ファイルを生成する方法を一般化します。これにより、将来的に新しいリリースノートやドキュメントが追加された場合でも、Makefile
を修正することなく、対応するHTMLファイルを自動的に生成できるようになり、メンテナンス性が向上します。
-
doc/go1.html
とdoc/go1.tmpl
の新規追加:- これらのファイルは、Go 1リリースノートの初期構造を定義しています。HTMLの
h2
およびh3
タグを使用して、主要なセクション(導入、言語の変更、ライブラリの変更、go
コマンド、パッケージリリース)とサブセクション(append
、rune
、error type
など)が体系的に配置されています。 - 特に導入部分の段落は、Go 1のリリースにおける最も重要なメッセージ、すなわち「安定性」と「後方互換性」の約束を明確に示しています。これは、Go言語がエンタープライズレベルでの採用を促進するための重要な戦略の一部でした。
- 言語とライブラリの変更点のリストは、Go 1で導入される具体的な変更のプレビューとして機能します。これらの項目は、Goコミュニティ内で活発に議論され、Go 1の安定版に含めるべきと判断された重要な変更点を示しています。例えば、
rune
型の導入はUnicode文字の扱いを改善し、error type
の変更はGoのエラーハンドリングの標準化に貢献しました。
- これらのファイルは、Go 1リリースノートの初期構造を定義しています。HTMLの
これらの変更は、Go 1のリリースに向けたドキュメント作成の基盤を築き、将来のGo言語の安定性と成長を支える上で不可欠なステップでした。
関連リンク
- https://github.com/golang/go/commit/bab4dec14214b27837b2c9c8c3d0f4a08df809b5
- https://golang.org/cl/5435090
参考にした情報源リンク
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHQCTU9VbYW68hWaSsLCMfFBh22YhiIF9KpkeJxM8ah78__AWuwsqULEHxXpCcY3akXsPrpROYkrnx63yUqD-3oQGyK-MyIm71BGus6XCwIpCNDPcnHpQi2SOmYHC4rihGouWWN3A==
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHivawNvMTI85zIUsAY3DTrNxp4LKTm7pCTHqs4wPmqZqw3TUjNJqf6z-cStO-q97DiMNTliIBBRhDqIZsj8j-7u108ZkTwG3HRhfM9y2F0G00=
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEAj1hlRypDp96D6Y41E9IaRfBPkG2JdA3vibzGjoFYmysSmmu4Rt2xmtBI50Is4LigAHY9DVigb9pGhYOYpWZIzLnQNaJBi5Dz9YrvwXup0fADbDfHpF_jad8g1ZF6zVieGq8429OODSmHGLQI9REDg7c3wg==
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQErG15wJQIXB_dgFq-aue43xQp2XQ33eMpg2ainCRjssFcpdNs24p3t6SA-k1sPf8WvyvNe8OXZgj0kBH9QKkU_CIv82QssoVhu4b8uvv5Ja1zHWQ==