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

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

このコミットは、Go 1.3のリリースノートである doc/go1.3.html ファイルを更新し、FreeBSD上のARMアーキテクチャにおけるGoのサポートに関する重要な変更点を追記しています。

コミット

  • コミットハッシュ: 74dccea2f270d31d94e6cd27111d6b04c64db51c
  • 作者: Shenghou Ma minux.ma@gmail.com
  • コミット日時: 2014年4月29日 火曜日 15:54:37 -0400
  • コミットメッセージ:
    doc/go1.3.html: update for FreeBSD/ARM support.
    FreeBSD 10 is fully supported.
    
    LGTM=r
    R=golang-codereviews, bradfitz, r
    CC=dave, golang-codereviews
    https://golang.org/cl/99810044
    

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

https://github.com/golang/go/commit/74dccea2f270d31d94e6cd27111d6b04c64db51c

元コミット内容

このコミットの目的は、Go 1.3におけるFreeBSD/ARMサポートに関するドキュメントを更新することです。具体的には、FreeBSD 10が完全にサポートされるようになったことを明記しています。

変更の背景

Go言語は様々なプラットフォームをサポートしていますが、各プラットフォームの特定のバージョンやアーキテクチャとの互換性は、ランタイムやシステムコールインターフェースの変更によって影響を受けることがあります。このコミットは、Go 1.3のリリースに向けて、FreeBSD上のARMアーキテクチャにおけるGoの動作環境に関する重要な変更をユーザーに伝えるために行われました。

特に、ARMプラットフォーム向けのEABI (Embedded Application Binary Interface) システムコールへの切り替えに伴い、Go 1.3がFreeBSD上でARMアーキテクチャで動作するためには、FreeBSD 10が必要となるという互換性の制約が発生しました。この変更は、Goランタイムの内部的な改善や最適化の結果として生じたものであり、その影響をユーザーに明確に伝える必要がありました。x86系のプラットフォーム(386およびamd64)は、この変更の影響を受けないことも明記されています。

前提知識の解説

  • FreeBSD: Unix系オペレーティングシステムの一つで、高性能かつ安定したサーバー環境や組み込みシステムで広く利用されています。
  • ARM (Advanced RISC Machine): モバイルデバイス、組み込みシステム、IoTデバイスなどで広く採用されているプロセッサアーキテクチャのファミリーです。低消費電力と高い性能効率が特徴です。
  • EABI (Embedded Application Binary Interface): 組み込みシステム向けのアプリケーションバイナリインターフェースの標準です。これは、プログラムがどのようにメモリに配置され、関数がどのように引数を渡し、値を返すかなど、低レベルのバイナリ互換性を定義します。特にARMアーキテクチャでは、異なるEABIバージョンが存在し、システムコール(OSカーネルとのやり取り)の規約もこれに準じます。GoランタイムがEABIシステムコールに切り替えるということは、OSとのインターフェース方法が変更されたことを意味します。
  • システムコール (System Call): オペレーティングシステムが提供するサービスをプログラムが利用するためのインターフェースです。ファイル操作、メモリ管理、プロセス制御など、OSのコア機能にアクセスするために使用されます。システムコールの規約(引数の渡し方、戻り値の形式など)は、OSのバージョンやアーキテクチャによって異なる場合があります。
  • Go 1.3: このコミットが関連するGo言語の特定のバージョンです。Goは定期的に新しいバージョンをリリースし、パフォーマンスの改善、新機能の追加、バグ修正、そしてプラットフォームサポートの更新を行っています。
  • x86, 386, amd64: IntelおよびAMDが開発したプロセッサアーキテクチャです。386は32ビットのx86アーキテクチャ、amd64は64ビットのx86アーキテクチャ(x86-64とも呼ばれる)を指します。これらは主にデスクトップPCやサーバーで広く使用されています。

技術的詳細

このコミットが示す技術的な核心は、Go 1.3のFreeBSD/ARM版ランタイムが、FreeBSD 10のEABIシステムコールインターフェースに特化して設計されたという点です。

Goランタイムは、OSのシステムコールを直接呼び出すことで、ファイルI/O、ネットワーク通信、メモリ割り当てなどの低レベルな操作を実行します。ARMアーキテクチャでは、システムコールの呼び出し規約がEABIによって標準化されていますが、OSのバージョンによってその実装や細部が異なることがあります。

Go 1.3において、FreeBSD上のARM向けにEABIシステムコールへの切り替えが行われたということは、GoランタイムがFreeBSD 10が提供する特定のEABIシステムコール規約に準拠するように変更されたことを意味します。これにより、GoプログラムはFreeBSD 10のカーネルと効率的かつ正しく対話できるようになります。

この変更の直接的な結果として、Go 1.3はFreeBSD 10より古いバージョンのFreeBSD(例えばFreeBSD 9.xなど)では、ARMアーキテクチャ上で動作しなくなるという互換性の制約が発生します。これは、古いFreeBSDバージョンがGo 1.3が期待するEABIシステムコール規約をサポートしていないためです。

一方で、x86系のプラットフォーム(386およびamd64)は、このEABIシステムコールへの切り替えの影響を受けません。これは、x86アーキテクチャにおけるシステムコール規約がARMとは異なり、Go 1.3の変更がx86プラットフォームの互換性を損なうものではなかったためです。

このコミット自体は、Goランタイムのコードを変更するものではなく、この重要な互換性情報をユーザーに伝えるためのドキュメントの更新です。しかし、このドキュメントの変更は、Goランタイムの内部的な、FreeBSD/ARMプラットフォームに特化したシステムコールインターフェースの変更を反映しています。

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

このコミットによる変更は、doc/go1.3.html ファイルに限定されています。具体的には、以下のHTMLスニペットが追加されました。

--- a/doc/go1.3.html
+++ b/doc/go1.3.html
@@ -70,6 +70,11 @@ As of Go 1.3, support for Go on FreeBSD requires that the kernel be compiled wit
 <code>COMPAT_FREEBSD32</code> flag configured.\n </p>\n \n+<p>\n+In concert with the switch to EABI syscalls for ARM platforms, Go 1.3 will run only on\n+FreeBSD 10. The x86 platforms, 386 and amd64, are unaffected.\n+</p>\n+\n <h2 id=\"memory\">Changes to the memory model</h2>

この変更は、既存のFreeBSDサポートに関する段落の後に、新しい段落を追加する形で行われています。

コアとなるコードの解説

追加されたHTMLスニペットは、Go 1.3におけるFreeBSD/ARMサポートの新しい要件を明確に記述しています。

  • In concert with the switch to EABI syscalls for ARM platforms, Go 1.3 will run only on FreeBSD 10.

    • これは、ARMプラットフォーム向けのEABIシステムコールへの切り替えに伴い、Go 1.3がFreeBSD 10でのみ動作することを明確に述べています。これは、Go 1.3を使用するFreeBSD/ARMユーザーにとって最も重要な情報です。
  • The x86 platforms, 386 and amd64, are unaffected.

    • この文は、x86系のプラットフォーム(32ビットの386と64ビットのamd64)がこの変更の影響を受けないことを保証しています。これにより、ユーザーは自分の環境が影響を受けるかどうかを迅速に判断できます。

この変更は、Goランタイムの内部的な変更(EABIシステムコールへの切り替え)の結果として生じた互換性の制約を、ユーザーに分かりやすく伝えるためのドキュメンテーションの更新です。実際のランタイムコードの変更はこのコミットには含まれていませんが、その変更の重要性を鑑みて、リリースノートに明記されたものです。

関連リンク

  • Go Change List (CL): このコミットの元となったGerritレビューページです。より詳細な議論や関連する変更履歴を確認できます。 https://golang.org/cl/99810044

参考にした情報源リンク

  • 提供されたコミット情報 (./commit_data/19258.txt)
  • Go言語の一般的な知識
  • FreeBSDおよびARMアーキテクチャに関する一般的な知識
  • EABIに関する一般的な知識