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

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

このコミットは、Go言語のバージョン管理における重要なマイルストーンである go1.2rc5 のリリース候補タグ付けに関するものです。具体的には、Goプロジェクトのリポジトリ内でバージョンタグを管理するために使用される .hgtags ファイルに、go1.2rc5 のハッシュとタグ名を追加しています。

コミット

  • コミットハッシュ: bad181e2c2e4d7e1bd44899390edc7e8a90086b4
  • Author: Andrew Gerrand adg@golang.org
  • Date: Mon Nov 18 12:47:37 2013 +1100
  • Message:
    tag go1.2rc5
    
    R=dsymonds
    CC=golang-dev
    https://golang.org/cl/28150043
    

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

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

元コミット内容

tag go1.2rc5

R=dsymonds
CC=golang-dev
https://golang.org/cl/28150043

変更の背景

このコミットの背景には、Go 1.2のリリースプロセスがあります。go1.2rc5 は、Go 1.2の正式リリースに向けた5番目のリリース候補(Release Candidate: RC)であることを示しています。ソフトウェア開発において、正式リリース前にRC版を公開する目的は、最終的な品質保証とバグ修正を行うためです。RC版は、ほぼ最終版に近い安定性を持つとされ、ユーザーや開発者が実際に使用して問題を発見し、フィードバックを提供することで、より堅牢な最終版をリリースすることができます。

このコミットは、特定のコミットハッシュ(b3d5a20b070a92da2458c5788694d1359b353f4a)に go1.2rc5 というタグを付けることで、その時点のコードベースが go1.2rc5 であることを明示的に示しています。これにより、開発者は特定のバージョンのコードベースを容易に参照・取得できるようになります。

前提知識の解説

リリース候補 (Release Candidate: RC)

リリース候補(RC)とは、ソフトウェア開発において、製品の最終リリースに非常に近い状態のバージョンを指します。RC版は、すべての主要な機能が実装され、既知の重大なバグは修正されていると見なされます。その目的は、広範なテストとフィードバックを収集し、最終リリース前に残っている可能性のある問題を発見・修正することです。RC版が安定していると判断されれば、それがそのまま最終リリース版となることもあります。

.hgtags ファイル

.hgtags ファイルは、Mercurialという分散型バージョン管理システムでタグ(特定のコミットに付けられた名前)を管理するために使用されるファイルです。GoプロジェクトはかつてMercurialを使用していましたが、後にGitに移行しました。しかし、Goの初期のリリース履歴やタグ付けは、Mercurialの慣習を引き継いでおり、.hgtags ファイルはその歴史的な名残として、Goの主要なリリースバージョンとその対応するコミットハッシュを記録するために使用されていました。

このファイルは、各行が「コミットハッシュ」と「タグ名」のペアで構成されており、特定のコミットがどのバージョンに対応するかを一目でわかるようにしています。

Goのリリースプロセス

Go言語は、通常、年に2回のメジャーリリース(例: Go 1.x)を行います。各メジャーリリースに先立ち、複数のベータ版(go1.xbetaY)とリリース候補版(go1.xrcZ)が公開されます。

  1. ベータ版 (Beta): 新機能の導入と初期のバグ修正が行われる段階。まだ不安定な場合がある。
  2. リリース候補 (Release Candidate: RC): 機能が凍結され、バグ修正と安定性向上に重点が置かれる段階。最終リリースに非常に近い。
  3. 正式リリース (Stable Release): RC版が十分に安定していると判断された後、正式にリリースされるバージョン。

このコミットは、Go 1.2のRC段階における重要なステップであり、最終リリースに向けた準備が着実に進められていることを示しています。

技術的詳細

このコミット自体は、コードの機能的な変更を伴うものではなく、Go 1.2のリリースプロセスにおけるバージョン管理の側面を反映しています。しかし、go1.2rc5 がタグ付けされたGo 1.2は、Go言語にとって非常に重要なリリースであり、多くの技術的な改善と新機能が導入されました。

Go 1.2の主な変更点と改善点は以下の通りです(go1.2rc5 はこれらの変更がほぼ完了した状態を示します):

  • 言語仕様の変更:

    • 3インデックススライス構文: a[low : high : max] という新しいスライス構文が導入されました。これにより、スライスの長さだけでなく、基底配列の容量も指定できるようになり、unsafe パッケージを使用せずに、基底配列の特定の部分のみにアクセスできるスライスを渡すことが可能になりました。これは、スライスの再スライス操作において、意図しない容量の拡大を防ぐのに役立ちます。
    • gc コンパイラが、package 句が欠落しているファイルをエラーとして扱うようになりました(以前は package main とデフォルトで解釈されていた)。
  • 実装とツールチェインの改善:

    • Goroutineのスタックサイズ増加: Goroutineの最小スタックサイズが4KBから8KBに増加しました。これは、頻繁なスタックセグメントの切り替えによるパフォーマンス低下を軽減するためです。
    • Goroutineのプリエンプティブスケジューリング: スケジューラが関数エントリ時に時折呼び出されるようになり、ビジーなGoroutineがスレッドを独占し、他のGoroutineが実行されない「スターベーション」状態を防ぐのに役立ちました。これにより、より公平なGoroutineの実行が保証されるようになりました。
    • スレッド数の制限: 単一プログラムが持つことができるスレッドの総数に設定可能な制限(デフォルト10,000)が追加されました。これは、リソースの枯渇を防ぐためであり、Goroutineの数ではなく、システムコールでブロックされているスレッドに適用されます。
    • cgo のC++ライブラリサポート: cgo コマンドがC++ライブラリへのリンクをサポートするようになりました。
    • テストカバレッジツール: ツールチェインに、テストカバレッジの結果を計算・表示する機能が追加されました。
  • 標準ライブラリの追加と変更:

    • crypto/cipher パッケージにGCM (Galois Counter Mode) が追加されました。
    • crypto/md5, crypto/sha1, crypto/sha256, crypto/sha512 パッケージに、ハッシュ計算を簡素化する新しい Sum 関数が追加されました。
    • crypto/x509 パッケージが任意の拡張機能の読み書きをサポートするようになりました。
    • crypto/tls パッケージがTLS 1.1、1.2、およびAES-GCMをサポートするようになりました。
    • encoding パッケージに大幅な変更が加えられ、Printf 形式文字列にインデックス付き引数が追加されました。
  • ランタイムの挙動:

    • コンパイラは、nilポインタ(nil配列、インターフェース、スライスを含む)を介した間接参照が、パニックを引き起こすか、正しい安全な非nil値を返すことを保証するようになりました。これにより、nilアドレスの評価を明示的または暗黙的に必要とする式はエラーとして扱われるようになりました。

これらの変更は、Go言語のパフォーマンス、安全性、機能性を大幅に向上させ、より堅牢で使いやすい言語としての地位を確立する上で重要な役割を果たしました。go1.2rc5 のタグ付けは、これらの広範な変更が安定し、リリース準備が整ったことを示すものです。

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

変更は .hgtags ファイルの1行の追加のみです。

--- a/.hgtags
+++ b/.hgtags
@@ -123,3 +123,4 @@ a7bd9a33067b3537351276e0178a045748ad046a go1.1.1
 45475ec7eab1c588fc4210b34d5901b15ca1e479 go1.2rc2
 7422495a6bf9d5e84828ee466406293be84f565a go1.2rc3
 94af58f9fd71feda5c316d791ed11aaf015f9e82 go1.2rc4
+b3d5a20b070a92da2458c5788694d1359b353f4a go1.2rc5

コアとなるコードの解説

追加された行 b3d5a20b070a92da2458c5788694d1359b353f4a go1.2rc5 は、以下の情報を含んでいます。

  • b3d5a20b070a92da2458c5788694d1359b353f4a: これは、go1.2rc5 というタグが付けられた特定のコミットのハッシュ値です。このハッシュは、Goリポジトリ内の特定の時点のコードベースを一意に識別します。
  • go1.2rc5: これは、そのコミットハッシュに対応するバージョンタグ名です。

この行が .hgtags ファイルに追加されることで、Goのバージョン管理システム(当時はMercurial、現在はGit)は、このハッシュ値を持つコミットが go1.2rc5 という名前で参照できることを認識します。これにより、開発者やユーザーは、go1.2rc5 のコードベースを簡単にチェックアウトしたり、ビルドしたりすることが可能になります。

この変更は、Go 1.2のリリースプロセスにおける正式なステップであり、go1.2rc5 がリリース候補として公開されたことを記録するものです。

関連リンク

参考にした情報源リンク

  • go.dev (Go 1.2 Release Notes): https://go.dev/doc/go1.2
  • go-zh.org (Go 1.2 Release Notes - Chinese, but provides similar information): https://go-zh.org/doc/go1.2 (Note: The provided search result link was a Google Cloud Vertex AI Search grounding API redirect, so I've used the direct go.dev link for the official release notes.)