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

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

このコミットは、Go言語の公式ドキュメントである doc/go1.2.html ファイルに対する更新です。具体的には、syscall パッケージに関する記述の軽微な変更が含まれています。

コミット

commit eb002c50f5aaa3d63ff01a406bbe8dd30fdc9535
Author: Mikio Hara <mikioh.mikioh@gmail.com>
Date:   Fri Oct 4 13:13:56 2013 +0900

    doc/go1.2.html: update a minor change to syscall
    
    R=golang-dev, r
    CC=golang-dev
    https://golang.org/cl/14379043

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

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

元コミット内容

doc/go1.2.html: update a minor change to syscall

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/14379043

変更の背景

このコミットの背景には、Go 1.2 リリースに向けたドキュメントの正確性の確保があります。Go言語の syscall パッケージは、オペレーティングシステムが提供する低レベルなシステムコールへのインターフェースを提供します。Sendfile は、ファイルディスクリプタ間でデータを直接転送するためのシステムコールであり、特にネットワークプログラミングにおいて、ユーザー空間とカーネル空間間のデータコピーを減らすことでパフォーマンスを向上させるために使用されます。

以前の記述では、Sendfile が Darwin (macOS) 向けに実装されたことと、Syscall9 が Darwin/amd64 向けに追加されたことが併記されていました。しかし、このコミットは、Sendfile の Darwin への実装に焦点を当て、より簡潔かつ正確な表現に修正することを目的としています。これは、ドキュメントが特定の機能の追加を明確に反映し、読者にとって理解しやすいようにするための継続的な改善の一環です。

前提知識の解説

システムコール (System Call)

システムコールは、オペレーティングシステム (OS) のカーネルが提供するサービスを、ユーザー空間で動作するプログラムが利用するためのインターフェースです。ファイルI/O、ネットワーク通信、プロセス管理、メモリ管理など、OSの基本的な機能のほとんどはシステムコールを通じて行われます。プログラムが直接ハードウェアにアクセスすることはセキュリティや安定性の観点から制限されているため、システムコールを介してOSに処理を依頼します。

syscall パッケージ (Go言語)

Go言語の標準ライブラリには syscall パッケージが含まれています。このパッケージは、Goプログラムから直接OSのシステムコールを呼び出すための低レベルな機能を提供します。これにより、Go言語でOS固有の機能を利用したり、パフォーマンスが重要な場面でより効率的なI/O操作を行ったりすることが可能になります。ただし、syscall パッケージはOSに依存する部分が多く、移植性のあるコードを書く際には注意が必要です。

Sendfile システムコール

Sendfile は、主にUnix系OSで利用されるシステムコールで、あるファイルディスクリプタから別のファイルディスクリプタへデータを直接転送する機能を提供します。一般的なファイル転送では、ファイルの内容をカーネルからユーザー空間のバッファに読み込み、その後ユーザー空間からネットワークソケットなどの別のファイルディスクリプタに書き込むという2段階のコピーが発生します。Sendfile を使用すると、このプロセスをカーネル空間内で完結させることができ、ユーザー空間へのデータコピーを省略することで、CPUオーバーヘッドとメモリ帯域幅の使用量を削減し、特に大規模なファイル転送や高負荷なWebサーバーなどで高いパフォーマンスを発揮します。

Darwin (macOS)

Darwinは、AppleのmacOSオペレーティングシステムの基盤となるオープンソースのUNIX系OSです。macOSアプリケーションはDarwin上で動作し、Darwinが提供するシステムコールやライブラリを利用します。Go言語のプログラムもDarwin上で動作する場合、syscall パッケージを通じてDarwinのシステムコールを利用することになります。

技術的詳細

このコミットは、Go 1.2 リリースノートの一部である doc/go1.2.html ファイルの更新です。変更の核心は、syscall パッケージの Sendfile 関数が Darwin (macOS) プラットフォームで利用可能になったという情報を、より明確かつ簡潔に表現することにあります。

元の記述では、Sendfile の Darwin への実装と、Syscall9 の Darwin/amd64 への追加が同じ箇条書き項目で言及されていました。Syscall9 は、9つの引数を取るシステムコールを呼び出すための汎用的な関数であり、特定のシステムコールである Sendfile とは異なる概念です。この修正は、ドキュメントの正確性を高め、読者が各機能の追加を個別に理解できるようにするために行われました。

具体的には、以下の変更が行われました。

  • 変更前: syscall: implemented Sendfile for Darwin, added Syscall9 for Darwin/amd64 (CL 10980043).
  • 変更後: The <a href="/pkg/syscall/"><code>syscall</code></a> package now implements <a href="/pkg/syscall/#Sendfile"><code>Sendfile</code></a> for Darwin.

この変更により、Sendfile の Darwin への実装が独立した情報として強調され、syscall パッケージのドキュメントへのリンクも追加されました。これにより、読者は Sendfile の詳細について直接Goのドキュメントを参照できるようになり、情報のアクセス性が向上しています。

この修正は、Go言語のドキュメントが、各プラットフォームにおける syscall パッケージの機能の進化を正確に反映し、開発者がGoプログラムで低レベルなOS機能を利用する際の参考となるようにするための、細部にわたる配慮を示しています。

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

--- a/doc/go1.2.html
+++ b/doc/go1.2.html
@@ -880,7 +880,8 @@ which swaps an <code>unsafe.Pointer</code>.
 </li>
 
 <li>
-syscall: implemented Sendfile for Darwin, added Syscall9 for Darwin/amd64 (CL 10980043).
+The <a href="/pkg/syscall/"><code>syscall</code></a> package now implements
+<a href="/pkg/syscall/#Sendfile\"><code>Sendfile</code></a> for Darwin.
 </li>
 
 <li>

コアとなるコードの解説

この変更は、doc/go1.2.html ファイルの880行目付近にあるリスト項目を修正しています。

  • - syscall: implemented Sendfile for Darwin, added Syscall9 for Darwin/amd64 (CL 10980043).: これは変更前の行です。syscall パッケージが Darwin 向けに Sendfile を実装し、Darwin/amd64 向けに Syscall9 を追加したことを記述しています。括弧内の CL 10980043 は、この変更が導入された元の変更リスト(Change List)のIDを示しています。

  • + The <a href="/pkg/syscall/"><code>syscall</code></a> package now implements: これは変更後の最初の行です。syscall パッケージが Sendfile を実装したことをより一般的な表現で始めています。<a href="/pkg/syscall/"> は、syscall パッケージのドキュメントへのハイパーリンクを作成しています。<code>syscall</code> は、コード要素として syscall を表示するためのHTMLタグです。

  • + <a href="/pkg/syscall/#Sendfile\"><code>Sendfile</code></a> for Darwin.: これは変更後の2行目です。Sendfile 関数に特化したハイパーリンク <a href="/pkg/syscall/#Sendfile\"> を追加し、Sendfile が Darwin 向けに実装されたことを明確に述べています。<code>Sendfile</code> も同様にコード要素として表示されます。

この変更の目的は、ドキュメントの記述をより正確で、読みやすく、かつ情報にアクセスしやすくすることです。特に、SendfileSyscall9 という異なる機能の追加を分離し、それぞれの情報に適切なリンクを提供することで、読者の理解を深めることを意図しています。

関連リンク

参考にした情報源リンク

  • Go言語の公式ドキュメント
  • システムコールに関する一般的な情報源 (例: Wikipedia, OSの教科書)
  • Sendfile システムコールに関する情報源 (例: manページ, Linux Programmer's Manual)
  • Darwin (macOS) のシステムプログラミングに関する情報源
  • Go言語の変更リスト (CL) システムに関する情報
  • Go 1.2 リリースノート (このコミットが修正しているドキュメント自体)

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

このコミットは、Go言語の公式ドキュメントである doc/go1.2.html ファイルに対する更新です。具体的には、syscall パッケージに関する記述の軽微な変更が含まれています。

コミット

commit eb002c50f5aaa3d63ff01a406bbe8dd30fdc9535
Author: Mikio Hara <mikioh.mikioh@gmail.com>
Date:   Fri Oct 4 13:13:56 2013 +0900

    doc/go1.2.html: update a minor change to syscall
    
    R=golang-dev, r
    CC=golang-dev
    https://golang.org/cl/14379043

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

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

元コミット内容

doc/go1.2.html: update a minor change to syscall

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/14379043

変更の背景

このコミットの背景には、Go 1.2 リリースに向けたドキュメントの正確性の確保があります。Go言語の syscall パッケージは、オペレーティングシステムが提供する低レベルなシステムコールへのインターフェースを提供します。Sendfile は、ファイルディスクリプタ間でデータを直接転送するためのシステムコールであり、特にネットワークプログラミングにおいて、ユーザー空間とカーネル空間間のデータコピーを減らすことでパフォーマンスを向上させるために使用されます。

以前の記述では、Sendfile が Darwin (macOS) 向けに実装されたことと、Syscall9 が Darwin/amd64 向けに追加されたことが併記されていました。しかし、このコミットは、Sendfile の Darwin への実装に焦点を当て、より簡潔かつ正確な表現に修正することを目的としています。これは、ドキュメントが特定の機能の追加を明確に反映し、読者にとって理解しやすいようにするための継続的な改善の一環です。

前提知識の解説

システムコール (System Call)

システムコールは、オペレーティングシステム (OS) のカーネルが提供するサービスを、ユーザー空間で動作するプログラムが利用するためのインターフェースです。ファイルI/O、ネットワーク通信、プロセス管理、メモリ管理など、OSの基本的な機能のほとんどはシステムコールを通じて行われます。プログラムが直接ハードウェアにアクセスすることはセキュリティや安定性の観点から制限されているため、システムコールを介してOSに処理を依頼します。

syscall パッケージ (Go言語)

Go言語の標準ライブラリには syscall パッケージが含まれています。このパッケージは、Goプログラムから直接OSのシステムコールを呼び出すための低レベルな機能を提供します。これにより、Go言語でOS固有の機能を利用したり、パフォーマンスが重要な場面でより効率的なI/O操作を行ったりすることが可能になります。ただし、syscall パッケージはOSに依存する部分が多く、移植性のあるコードを書く際には注意が必要です。

Sendfile システムコール

Sendfile は、主にUnix系OSで利用されるシステムコールで、あるファイルディスクリプタから別のファイルディスクリプタへデータを直接転送する機能を提供します。一般的なファイル転送では、ファイルの内容をカーネルからユーザー空間のバッファに読み込み、その後ユーザー空間からネットワークソケットなどの別のファイルディスクリプタに書き込むという2段階のコピーが発生します。Sendfile を使用すると、このプロセスをカーネル空間内で完結させることができ、ユーザー空間へのデータコピーを省略することで、CPUオーバーヘッドとメモリ帯域幅の使用量を削減し、特に大規模なファイル転送や高負荷なWebサーバーなどで高いパフォーマンスを発揮します。

macOS (Darwin) における sendfile の実装は、Linuxとは異なるプロトタイプを持つことが知られています。Goの syscall.Sendfile はこの違いを抽象化し、func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) という一貫したシグネチャを提供します。ただし、macOSでは要求されたバイト数よりも少ないバイトしか書き込まれない場合があり、特に非ブロッキングI/Oを扱う際には EAGAIN エラーを返すことがあります。また、特定のファイルシステムが sendfile をサポートしていない場合、errno 45 (ENOTSUPP) エラーが発生する可能性もあります。

Darwin (macOS)

Darwinは、AppleのmacOSオペレーティングシステムの基盤となるオープンソースのUNIX系OSです。macOSアプリケーションはDarwin上で動作し、Darwinが提供するシステムコールやライブラリを利用します。Go言語のプログラムもDarwin上で動作する場合、syscall パッケージを通じてDarwinのシステムコールを利用することになります。

技術的詳細

このコミットは、Go 1.2 リリースノートの一部である doc/go1.2.html ファイルの更新です。変更の核心は、syscall パッケージの Sendfile 関数が Darwin (macOS) プラットフォームで利用可能になったという情報を、より明確かつ簡潔に表現することにあります。

元の記述では、Sendfile の Darwin への実装と、Syscall9 の Darwin/amd64 への追加が同じ箇条書き項目で言及されていました。Syscall9 は、9つの引数を取るシステムコールを呼び出すための汎用的な関数であり、特定のシステムコールである Sendfile とは異なる概念です。この修正は、ドキュメントの正確性を高め、読者が各機能の追加を個別に理解できるようにするために行われました。

具体的には、以下の変更が行われました。

  • 変更前: syscall: implemented Sendfile for Darwin, added Syscall9 for Darwin/amd64 (CL 10980043).
  • 変更後: The <a href="/pkg/syscall/"><code>syscall</code></a> package now implements <a href="/pkg/syscall/#Sendfile"><code>Sendfile</code></a> for Darwin.

この変更により、Sendfile の Darwin への実装が独立した情報として強調され、syscall パッケージのドキュメントへのリンクも追加されました。これにより、読者は Sendfile の詳細について直接Goのドキュメントを参照できるようになり、情報のアクセス性が向上しています。

Go言語では、ファイルからソケットへの効率的なデータ転送には、通常 io.Copy 関数を使用することが推奨されます。io.Copy は、ソースが os.File で、宛先が net.TCPConn の場合、内部的に sendfile を利用するように最適化されており、直接 syscall パッケージを使用することなくカーネルレベルの最適化を活用できます。このアプローチは、プラットフォーム固有のニュアンスや最適化を自動的に処理するため、より堅牢でGoらしい方法とされています。

この修正は、Go言語のドキュメントが、各プラットフォームにおける syscall パッケージの機能の進化を正確に反映し、開発者がGoプログラムで低レベルなOS機能を利用する際の参考となるようにするための、細部にわたる配慮を示しています。

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

--- a/doc/go1.2.html
+++ b/doc/go1.2.html
@@ -880,7 +880,8 @@ which swaps an <code>unsafe.Pointer</code>.
 </li>
 
 <li>
-syscall: implemented Sendfile for Darwin, added Syscall9 for Darwin/amd64 (CL 10980043).
+The <a href="/pkg/syscall/"><code>syscall</code></a> package now implements
+<a href="/pkg/syscall/#Sendfile\"><code>Sendfile</code></a> for Darwin.
 </li>
 
 <li>

コアとなるコードの解説

この変更は、doc/go1.2.html ファイルの880行目付近にあるリスト項目を修正しています。

  • - syscall: implemented Sendfile for Darwin, added Syscall9 for Darwin/amd64 (CL 10980043).: これは変更前の行です。syscall パッケージが Darwin 向けに Sendfile を実装し、Darwin/amd64 向けに Syscall9 を追加したことを記述しています。括弧内の CL 10980043 は、この変更が導入された元の変更リスト(Change List)のIDを示しています。

  • + The <a href="/pkg/syscall/"><code>syscall</code></a> package now implements: これは変更後の最初の行です。syscall パッケージが Sendfile を実装したことをより一般的な表現で始めています。<a href="/pkg/syscall/"> は、syscall パッケージのドキュメントへのハイパーリンクを作成しています。<code>syscall</code> は、コード要素として syscall を表示するためのHTMLタグです。

  • + <a href="/pkg/syscall/#Sendfile\"><code>Sendfile</code></a> for Darwin.: これは変更後の2行目です。Sendfile 関数に特化したハイパーリンク <a href="/pkg/syscall/#Sendfile\"> を追加し、Sendfile が Darwin 向けに実装されたことを明確に述べています。<code>Sendfile</code> も同様にコード要素として表示されます。

この変更の目的は、ドキュメントの記述をより正確で、読みやすく、かつ情報にアクセスしやすくすることです。特に、SendfileSyscall9 という異なる機能の追加を分離し、それぞれの情報に適切なリンクを提供することで、読者の理解を深めることを意図しています。

関連リンク

参考にした情報源リンク

  • Go言語の公式ドキュメント
  • システムコールに関する一般的な情報源 (例: Wikipedia, OSの教科書)
  • Sendfile システムコールに関する情報源 (例: manページ, Linux Programmer's Manual)
  • Darwin (macOS) のシステムプログラミングに関する情報源
  • Go言語の変更リスト (CL) システムに関する情報
  • Go 1.2 リリースノート (このコミットが修正しているドキュメント自体)
  • Web検索結果: "Go syscall Sendfile Darwin"