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

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

コミット

commit 54faecac0b9c7cd26440c344c7af86e1d6bd2c62
Author: Dave Cheney <dave@cheney.net>
Date:   Tue Apr 2 15:08:28 2013 +1100

    doc/go1.1.html: add a note about additional platforms
    
    Mention support for NetBSD, OpenBSD, and cgo for linux/arm.
    
    R=golang-dev, dvyukov, r, minux.ma, adg, bradfitz, adg
    CC=golang-dev
    https://golang.org/cl/8152043

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

https://github.com/golang/go/commit/54faecac0b9c7cd26440c344c7af86e1d6bd2c62

元コミット内容

このコミットは、Go 1.1のリリースドキュメントである doc/go1.1.html に、追加のプラットフォームサポートに関する注記を追加するものです。具体的には、NetBSD、OpenBSD、および linux/arm における cgo のサポートについて言及しています。

変更の背景

Go言語は、その設計思想の一つとして、様々なプラットフォームでの動作をサポートすることを目指しています。新しいGoのバージョンがリリースされる際には、通常、パフォーマンスの改善、新機能の追加、そしてサポートされるプラットフォームの拡大が行われます。

このコミットが行われたGo 1.1のリリースでは、Go言語が動作する環境をさらに広げるための取り組みの一環として、いくつかの新しいオペレーティングシステムとアーキテクチャの組み合わせに対する実験的なサポートが追加されました。これらの変更は、Go言語の適用範囲を広げ、より多くの開発者がGoを利用できるようにすることを目的としています。

このコミットの具体的な背景は、これらの新しいプラットフォームサポートがGo 1.1の重要な変更点の一つであるため、公式のリリースドキュメントにその情報を明記し、ユーザーに周知することにあります。特に、組み込みシステムや特定のUnix系OSでのGoの利用を検討している開発者にとって、この情報は非常に重要です。

前提知識の解説

  • Go言語 (Golang): Googleによって開発されたオープンソースのプログラミング言語です。シンプルさ、信頼性、効率性を重視しており、特に並行処理(goroutineとchannel)に強みを持っています。システムプログラミング、Webサービス、CLIツールなど、幅広い分野で利用されています。
  • プラットフォーム: コンピュータプログラムが動作する環境を指し、通常はオペレーティングシステム(OS)とCPUアーキテクチャの組み合わせで表現されます。例えば、linux/amd64はLinuxオペレーティングシステムとAMD64(64ビットIntel互換)アーキテクチャの組み合わせを意味します。Go言語はクロスコンパイルが可能であり、あるプラットフォーム(例: macOS)上で別のプラットフォーム(例: Linux)向けの実行ファイルを生成できます。
  • cgo: Go言語の機能の一つで、C言語のコードをGoプログラムから呼び出すことを可能にします。これにより、既存のCライブラリ(例: OpenGL、SQLiteなど)をGoプログラムで利用したり、OS固有の低レベルな機能にアクセスしたりすることが可能になります。cgoを使用すると、GoのガベージコレクションとCのメモリ管理の間で連携が必要になるため、通常のGoコードよりも複雑さが増すことがあります。
  • Go 1.1: 2013年5月にリリースされたGo言語のメジャーバージョンアップです。このリリースでは、コンパイラとランタイムのパフォーマンスが大幅に向上し、新しいプラットフォームの実験的サポートが追加されるなど、多くの改善が施されました。

技術的詳細

このコミットは、Go 1.1のリリースノートに、Go言語が新たにサポートする(または実験的にサポートする)プラットフォームに関する情報を追加しています。

具体的に言及されているプラットフォームは以下の通りです。

  • freebsd/arm: FreeBSDオペレーティングシステム上でのARMアーキテクチャのサポートです。ARMは、スマートフォン、タブレット、組み込みシステム、シングルボードコンピュータ(例: Raspberry Pi)などで広く利用されている低消費電力のCPUアーキテクチャです。
  • netbsd/386: NetBSDオペレーティングシステム上でのIntel 386互換(32ビット)アーキテクチャのサポートです。
  • netbsd/amd64: NetBSDオペレーティングシステム上でのAMD64(64ビットIntel互換)アーキテクチャのサポートです。
  • netbsd/arm: NetBSDオペレーティングシステム上でのARMアーキテクチャのサポートです。
  • openbsd/386: OpenBSDオペレーティングシステム上でのIntel 386互換(32ビット)アーキテクチャのサポートです。
  • openbsd/amd64: OpenBSDオペレーティングシステム上でのAMD64(64ビットIntel互換)アーキテクチャのサポートです。

FreeBSD、NetBSD、OpenBSDは、いずれもUnix系のオープンソースオペレーティングシステムであり、それぞれ異なる設計思想やセキュリティポリシーを持っています。Goがこれらのプラットフォームをサポートすることで、Goアプリケーションの展開先が広がり、より多様な環境での利用が可能になります。

また、freebsd/armnetbsd/arm については、「ARMv6以上のプロセッサが必要」という注記があります。これは、Goのランタイムやコンパイラが、特定のARM命令セットや機能(例: 浮動小数点演算ユニットの有無や特定の命令のサポート)に依存しているためと考えられます。ARMv6は、Raspberry Piの初期モデル(Raspberry Pi 1 Model Bなど)で採用されていたアーキテクチャです。

さらに重要な点として、linux/arm における cgo の実験的サポートが挙げられます。linux/armは、組み込みLinuxシステムやシングルボードコンピュータ(例: Raspberry Pi)で非常に広く利用されているプラットフォームです。これまで linux/armcgo が完全にサポートされていなかった場合、Cライブラリに依存するGoプログラムは、この環境で動作させることが困難でした。cgo の実験的サポートが追加されたことにより、linux/arm 環境でのGoアプリケーション開発の柔軟性が大幅に向上します。例えば、ハードウェアと直接やり取りするデバイスドライバや、既存のCベースのシステムライブラリ(例: グラフィックライブラリ、ネットワークライブラリなど)を利用するアプリケーションの開発が、Go言語でより容易になります。これは、IoTデバイスや組み込みLinuxシステムにおけるGoの採用を促進する上で大きな意味を持ちます。

これらのプラットフォームサポートの追加は、Go言語が単なるWebアプリケーション開発言語に留まらず、より低レベルなシステムプログラミングや、多様なハードウェア環境での利用を目指していることを示しています。

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

変更は doc/go1.1.html ファイルに対して行われています。具体的には、既存のHTMLドキュメントの <h2 id="performance">Performance</h2> の直前に、新しい <h3> セクションが追加されています。

--- a/doc/go1.1.html
+++ b/doc/go1.1.html
@@ -352,6 +352,17 @@ To update pre-Go 1 code to Go 1.1, use a Go 1.0 tool chain
 to convert the code to Go 1.0 first.\n </p>\n \n+<h3 id=\"platforms\">Additional platforms</h3>\n+\n+<p>\n+The Go 1.1 tool chain adds experimental support for <code>freebsd/arm</code>,\n+<code>netbsd/386</code>, <code>netbsd/amd64</code>, <code>netbsd/arm</code>, \n+<code>openbsd/386</code> and <code>openbsd/amd64</code> platforms.\n+<code>freebsd/arm</code> and <code>netbsd/arm</code> require an ARMv6 or\n+better processor. Go 1.1 adds experimental support for <code>cgo</code> on\n+<code>linux/arm</code>.\n+</p>\n+\n <h2 id=\"performance\">Performance</h2>\n \n <p>\n```

追加されたHTMLスニペットは以下の通りです。

```html
<h3 id="platforms">Additional platforms</h3>

<p>
The Go 1.1 tool chain adds experimental support for <code>freebsd/arm</code>,
<code>netbsd/386</code>, <code>netbsd/amd64</code>, <code>netbsd/arm</code>, 
<code>openbsd/386</code> and <code>openbsd/amd64</code> platforms.
<code>freebsd/arm</code> and <code>netbsd/arm</code> require an ARMv6 or
better processor. Go 1.1 adds experimental support for <code>cgo</code> on
<code>linux/arm</code>.
</p>

コアとなるコードの解説

この変更は、Go 1.1の公式リリースドキュメントに、新しいプラットフォームサポートに関する情報を追加するためのものです。

  • <h3 id="platforms">Additional platforms</h3>: これは、ドキュメント内で「追加のプラットフォーム」という新しいセクション見出しを作成しています。id="platforms" は、このセクションへの内部リンクを可能にするためのアンカーです。
  • <p>...</p>: この段落には、Go 1.1ツールチェーンが実験的にサポートするようになった具体的なプラットフォームのリストが記述されています。
    • freebsd/arm
    • netbsd/386
    • netbsd/amd64
    • netbsd/arm
    • openbsd/386
    • openbsd/amd64 これらのプラットフォームは、Go言語が動作するOSとCPUアーキテクチャの組み合わせを示しています。
  • freebsd/armnetbsd/arm が「ARMv6以上のプロセッサを必要とする」という重要な制約も明記されています。これは、これらのプラットフォームでGoを実行するために必要なハードウェア要件をユーザーに伝えます。
  • 最後に、「Go 1.1は linux/arm での cgo の実験的サポートを追加する」という記述があります。これは、linux/arm 環境でC言語のライブラリをGoから利用する機能が、Go 1.1で利用可能になったことを示しており、このプラットフォームでのGo開発の可能性を大きく広げるものです。

このドキュメントの更新は、Go 1.1のリリースにおける重要な変更点をユーザーに正確に伝えるためのものであり、Go言語の普及と利用促進に貢献します。

関連リンク

参考にした情報源リンク