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

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

このコミットは、Go 1.3のリリースノートドキュメントである doc/go1.3.html の内容を更新するものです。具体的には、Windows 2000のサポート終了に関する記述の追加と、sync/pool パッケージに関する記述の修正が含まれています。

コミット

commit 78025fb2202e79580cd78bc1f4a32cead762e963
Author: Rob Pike <r@golang.org>
Date:   Tue Apr 8 14:07:17 2014 +1000

    doc/go1.3.html: drop support for windows 2000
    
    LGTM=bradfitz, alex.brainman
    R=golang-codereviews, bradfitz, alex.brainman
    CC=golang-codereviews
    https://golang.org/cl/85190043

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

https://github.com/golang/go/commit/78025fb2202e79580cd78bc1f4a32cead762e963

元コミット内容

doc/go1.3.html: drop support for windows 2000

LGTM=bradfitz, alex.brainman
R=golang-codereviews, bradfitz, alex.brainman
CC=golang-codereviews
https://golang.org/cl/85190043

変更の背景

このコミットの主な目的は、Go 1.3がWindows 2000のサポートを終了したことを公式ドキュメントに反映させることです。Microsoftは2010年にWindows 2000のサポートを終了しており、GoランタイムがWindows 2000上で例外処理(Unix用語でいうシグナル)を実装する際に技術的な困難を抱えていたため、Goもこの古いOSのサポートを打ち切る決定がなされました。

また、Go 1.3のリリースノートには、全体的なパフォーマンス改善、正確なガベージコレクション(precise garbage collection)、GoogleのNative Client (NaCl) アーキテクチャのサポートといった重要な進展も含まれることが示唆されています。sync/pool パッケージに関する記述の修正は、このパッケージがGo 1.3で「新しく追加された」ものではなく、それ以前のバージョンで既に導入されていたことを明確にするためのものです。

前提知識の解説

  • Windows 2000: 2000年にMicrosoftがリリースしたオペレーティングシステムです。2010年にはMicrosoftによる公式サポートが終了しています。古いOSであるため、現代のソフトウェア開発においては互換性の問題やセキュリティリスクが生じることがあります。
  • 例外処理 (Exception Handling) / シグナル (Signals): プログラム実行中に発生する予期せぬイベント(エラー、割り込みなど)を処理するメカニズムです。WindowsではStructured Exception Handling (SEH) や Vectored Exception Handling (VEH) といった仕組みがあり、Unix系OSではシグナルが同様の役割を果たします。Goランタイムのような低レベルな処理を行うシステムでは、OSの例外処理メカニズムとの連携が不可欠です。
  • Goの互換性保証 (Go 1 Compatibility Promise): Go言語は、Go 1以降のバージョンにおいて、既存のGo 1プログラムが新しいGoバージョンでも動作し続けることを保証しています。これは、言語仕様や標準ライブラリの破壊的変更を極力避けるというGo開発チームの強いコミットメントです。しかし、OSのサポート終了など、外部要因による互換性の問題は発生し得ます。
  • sync/pool パッケージ: Goの標準ライブラリ sync パッケージに含まれる型で、一時的なオブジェクトの再利用を目的としています。オブジェクトの生成と破棄のコストを削減し、ガベージコレクタの負荷を軽減することで、アプリケーションのパフォーマンスを向上させることができます。sync.Pool に格納されたオブジェクトは、ガベージコレクションの対象となり得るため、永続的なデータの保存には適していません。

技術的詳細

GoランタイムがWindows 2000のサポートを終了した主な技術的理由は、例外処理の実装に関する困難にありました。Goは、その独自のスタック管理とスケジューリングモデルにより、OSの低レベルな機能と密接に連携する必要があります。

以前、GoはWindows上でStructured Exception Handling (SEH) を使用していましたが、これはGoのスタック管理と相性が悪く、微妙なバグを引き起こす可能性がありました。この問題を解決するため、GoチームはChangeList (CL) 74790043 (タイトル: "runtime: use VEH, not SEH, for windows/386 exception handling") において、例外処理のメカニズムをSEHからVectored Exception Handling (VEH) へと変更しました。

VEHはSEHよりもUnixのシグナルハンドラに近い動作をし、プロセス全体で単一のハンドラを設定できるため、Goのランタイムにとってより扱いやすいものでした。しかし、VEHはWindows XP以降で導入された機能であり、Windows 2000では利用できません。この技術的な変更が、Go 1.3でWindows 2000のサポートを終了する直接的な原因となりました。Microsoftが既にWindows 2000のサポートを終了していたことも、この決定を後押ししました。

このコミットは、Go 1.3のリリースノートドキュメント doc/go1.3.html を更新し、この変更をユーザーに伝えるものです。また、ドキュメント内の「新パッケージ」のセクションで、sync/pool がGo 1.3で新しく追加されたかのような記述があったのを修正し、「Go 1.3のコアライブラリには新しいパッケージは登場しない」と明確にしています。sync/pool はCL 41860043および46010043によってGo 1.2で既に導入されていました。

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

doc/go1.3.html ファイルにおいて、以下の変更が行われました。

  1. パフォーマンス改善に関する記述の修正:

    -significant performance improvements,
    -including TODO,
    +significant performance improvements across the board,
    

    「TODO」というプレースホルダーが削除され、「全体的に大幅なパフォーマンス改善」というより具体的な表現に修正されました。

  2. Windows 2000サポート終了に関する記述の追加:

    -<p>
    -TODO
    -windows 2000 removed (CL 74790043)
    +<p>
    +Microsoft stopped supporting Windows 2000 in 2010.
    +Since it has <a href="https://codereview.appspot.com/74790043">implementation difficulties</a>
    +regarding exception handling (signals in Unix terminology),
    +as of Go 1.3 it is not supported by Go either.
    </p>
    

    Windows 2000のサポート終了に関する詳細な説明が追加されました。Microsoftによるサポート終了時期と、例外処理に関する技術的な困難(CL 74790043へのリンクを含む)が明記されています。

  3. sync/pool パッケージに関する記述の修正:

    -<p>
    -There is one new package added to the standard library: <a href="/pkg/sync/pool/"><code>sync/pool</code></a>.
    -TODO: sync: add Pool (CL 41860043, 46010043)
    +<p>
    +No new packages appear in the core libraries in Go 1.3.
    </p>
    

    「Go 1.3で新しいパッケージ sync/pool が追加された」という誤解を招く記述が削除され、「Go 1.3のコアライブラリには新しいパッケージは登場しない」という正確な情報に置き換えられました。sync/pool はGo 1.2で導入済みでした。

コアとなるコードの解説

これらの変更は、Go 1.3のリリースノートが正確で、ユーザーにとって分かりやすい情報を提供するようにするためのものです。

  • パフォーマンス改善の記述修正は、リリースノートの品質向上を目的としています。
  • Windows 2000のサポート終了に関する追加は、Goランタイムの技術的な進化と、それに伴うOS互換性の変更をユーザーに明確に伝えるために重要です。特に、例外処理のメカニズム変更という技術的背景が示されており、単なるサポート終了以上の情報を提供しています。
  • sync/pool パッケージに関する記述の修正は、情報の正確性を保つためのものです。既に導入されていたパッケージを「新パッケージ」として紹介することは誤解を招くため、この修正はドキュメントの信頼性を高めます。

これらの変更は、Go言語のドキュメントが常に最新かつ正確な情報を提供するという原則に基づいています。

関連リンク

参考にした情報源リンク

  • Microsoft Windows 2000 End-of-Life Information (一般的な情報源)
  • Go言語の公式ドキュメント
  • Goのコードレビューシステム (codereview.appspot.com)
  • sync.Pool のGoドキュメント: https://pkg.go.dev/sync/pool