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

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

このコミットは、Go言語の標準ライブラリのAPI変更を記録する api/next.txt ファイルの更新です。このファイルは、次期Goリリースで導入される予定の新しいAPI要素(関数、型、定数、メソッドなど)を追跡するために使用されます。このコミットでは、crypto/tlsdebug/dwarfdebug/plan9obj、および特定のプラットフォームのsyscallパッケージにわたる複数のAPI追加が記録されています。

コミット

commit ba5594742d637a80582a1d6c37baad2acc0898ea
Author: Shenghou Ma <minux.ma@gmail.com>
Date:   Tue Feb 11 19:37:36 2014 -0500

    api: update next.txt
    
    LGTM=bradfitz
    R=golang-codereviews, bradfitz
    CC=golang-codereviews
    https://golang.org/cl/54830045

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

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

元コミット内容

api: update next.txt

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/54830045

変更の背景

このコミットは、Go言語の次期リリース(このコミットのタイムスタンプから推測するとGo 1.3リリースサイクルの一部である可能性が高い)に向けて、複数のパッケージで導入された新しいAPI要素を公式に記録するために行われました。api/next.txtは、GoのAPI互換性ポリシーを維持するために重要な役割を果たします。このファイルに記載されたAPIは、将来のリリースで安定したAPIとして提供されることが期待されます。

具体的には、以下の機能強化と改善が背景にあります。

  • crypto/tls パッケージにおけるTLSセッション再開の改善: クライアントサイドのTLSセッションキャッシュ機能の追加により、TLSハンドシェイクのオーバーヘッドを削減し、接続確立の高速化とサーバー負荷の軽減を目指しています。
  • debug/dwarf パッケージのデバッグ情報拡張: DWARFデバッグ情報フォーマットの新しいタグのサポートと、型情報の追加機能により、デバッガがGoプログラムの実行状態をより詳細に理解できるようになります。これは、特にCgoを介してC/C++コードと連携するGoプログラムのデバッグにおいて重要です。
  • debug/plan9obj パッケージの追加: Plan 9オブジェクトファイル形式の解析機能の導入は、GoツールチェインがPlan 9システム(またはPlan 9由来の実行ファイル形式)とより深く連携するための基盤を提供します。これは、Goがサポートする多様なプラットフォームへの対応を強化する一環と考えられます。
  • syscall パッケージのプラットフォーム固有の調整: FreeBSD ARMおよびWindowsプラットフォームにおけるsyscall構造体の調整は、これらの環境でのGoプログラムの互換性と安定性を向上させるための、低レベルなシステムコールインターフェースの修正です。

これらの変更は、Go言語がより堅牢で、高性能で、多様なプラットフォームに対応できることを目指す継続的な開発努力の一部です。

前提知識の解説

このコミットの変更内容を理解するためには、以下の技術的背景知識が役立ちます。

1. Go言語のAPI互換性ポリシーとapi/next.txt

Go言語は、後方互換性を非常に重視しています。これは、既存のGoプログラムが新しいバージョンのGoコンパイラで問題なく動作することを保証するためです。api/next.txtファイルは、このポリシーをサポートするメカニズムの一つです。

  • api/next.txt: このファイルは、次期Goリリースで公開される予定の新しいAPI要素(関数、型、メソッド、定数など)のリストを記録します。Goのリリースプロセスでは、このファイルに記載されたAPIが最終的に公開APIとして承認され、その後のリリースで互換性が保証されます。開発者は、このファイルを参照することで、将来のGoバージョンで利用可能になるAPIを事前に確認できます。
  • API互換性: GoのAPI互換性ポリシーでは、一度公開されたAPIは、特別な理由がない限り変更または削除されないことが保証されます。これにより、Goプログラムの長期的な安定性と保守性が向上します。

2. TLS (Transport Layer Security) とセッション再開

TLSは、インターネット上で安全な通信を行うための暗号化プロトコルです。ウェブブラウジング(HTTPS)、電子メール、VPNなど、多くのアプリケーションで利用されています。

  • TLSハンドシェイク: クライアントとサーバーが安全な通信チャネルを確立する際に実行される一連のメッセージ交換です。これには、暗号スイートのネゴシエーション、証明書の交換、鍵の生成などが含まれ、計算コストが高い処理です。
  • TLSセッション再開 (Session Resumption): 以前に確立されたTLSセッションの情報を再利用して、新しいTLSハンドシェイクを短縮するメカニズムです。これにより、ハンドシェイクのオーバーヘッドが大幅に削減され、接続確立が高速化し、サーバーのリソース消費も抑えられます。セッション再開には、セッションIDベースとセッションチケットベースの2つの主要な方法があります。
    • セッションID: サーバーがセッションIDを生成し、クライアントに送信します。クライアントは次回接続時にこのIDを提示し、サーバーはキャッシュされたセッション情報を見つけて再開します。
    • セッションチケット: サーバーが暗号化されたセッション状態をチケットとしてクライアントに送信します。クライアントは次回接続時にこのチケットを提示し、サーバーはチケットを復号してセッションを再開します。

3. DWARF (Debugging With Attributed Record Formats)

DWARFは、ソースレベルデバッガがプログラムの実行状態を理解するために使用する標準的なデバッグ情報フォーマットです。コンパイラによって生成され、実行ファイルに埋め込まれます。

  • デバッグ情報: 変数の名前、型、スコープ、ソースコードの行番号と実行可能コードのアドレスのマッピング、関数呼び出しスタックの情報など、デバッグに必要なあらゆる情報を含みます。
  • DWARFタグ: DWARF情報内の各要素(変数、関数、型など)は、特定の「タグ」で識別されます。例えば、DW_TAG_variableは変数を、DW_TAG_subprogramは関数を表します。新しいタグの追加は、DWARFが表現できる情報の種類が増えることを意味します。

4. Plan 9 オブジェクトファイル形式

Plan 9は、ベル研究所で開発された分散オペレーティングシステムです。Go言語は、その設計思想や一部のツール(例: go tool objdump)にPlan 9の影響を受けています。

  • オブジェクトファイル: コンパイラがソースコードをコンパイルして生成する中間ファイルで、機械語コード、データ、シンボル情報などが含まれます。
  • Plan 9オブジェクトファイル形式: Plan 9システムで使用される実行可能ファイルおよびオブジェクトファイルの形式です。一般的なELF(Executable and Linkable Format)やPE(Portable Executable)とは異なります。Goがこの形式を解析できることは、Plan 9環境でのGoプログラムのデバッグや分析能力を向上させます。

5. syscall パッケージとCgo

syscallパッケージは、Goプログラムからオペレーティングシステムのシステムコールを直接呼び出すための低レベルなインターフェースを提供します。

  • システムコール: オペレーティングシステムのカーネルが提供するサービス(ファイルI/O、メモリ管理、プロセス制御など)をプログラムが利用するためのインターフェースです。
  • Cgo: GoプログラムからC言語のコードを呼び出すためのGoの機能です。Cgoを使用すると、GoとCの間でデータ構造を共有したり、Cライブラリの関数を呼び出したりできます。
  • 構造体のアライメントとパディング: コンピュータのメモリでは、データ構造のメンバーが特定のバイト境界に配置されるように、コンパイラが自動的にパディング(詰め物)を追加することがあります。これは、プロセッサが効率的にメモリにアクセスできるようにするためです。Cgoを介してGoとCの間で構造体をやり取りする場合、アライメントの違いが問題となることがあります。Pad_cgo_0のようなフィールドは、このようなアライメントの不一致を解消するために明示的に追加されるパディングです。

技術的詳細

このコミットによってapi/next.txtに追加されたAPI要素は、Go言語の複数のサブシステムにおける重要な機能強化を示しています。

crypto/tls パッケージの変更

  • pkg crypto/tls, func NewLRUClientSessionCache(int) ClientSessionCache
    • LRU (Least Recently Used) アルゴリズムに基づくクライアントセッションキャッシュを新しく作成する関数です。引数の int はキャッシュの最大エントリ数を示します。これにより、クライアントは以前のTLSセッション情報を効率的に保存・再利用できるようになります。
  • pkg crypto/tls, type ClientSessionCache interface { Get, Put }
    • クライアントセッションキャッシュの振る舞いを定義するインターフェースです。Getメソッドでセッション情報を取得し、Putメソッドでセッション情報を保存します。これにより、異なるキャッシュ実装をプラグインできるようになります。
  • pkg crypto/tls, type ClientSessionCache interface, Get(string) (*ClientSessionState, bool)
    • ClientSessionCacheインターフェースのGetメソッドのシグネチャです。セッションキー(通常はサーバー名とポートの組み合わせ)を引数に取り、対応する*ClientSessionStateと、セッションが見つかったかどうかを示すboolを返します。
  • pkg crypto/tls, type ClientSessionCache interface, Put(string, *ClientSessionState)
    • ClientSessionCacheインターフェースのPutメソッドのシグネチャです。セッションキーと*ClientSessionStateを引数に取り、セッション情報をキャッシュに保存します。
  • pkg crypto/tls, type ClientSessionState struct
    • クライアントセッションの状態を保持する構造体です。TLSセッション再開に必要な情報(マスターシークレット、セッションID、ピア証明書など)が含まれます。
  • pkg crypto/tls, type Config struct, ClientSessionCache ClientSessionCache
    • TLS接続の設定を保持するConfig構造体に、ClientSessionCacheインターフェース型のフィールドが追加されました。これにより、ユーザーはカスタムのセッションキャッシュ実装をTLS設定に組み込むことができるようになります。

これらの変更は、GoのTLSクライアントがセッション再開をサポートし、ネットワーク接続のパフォーマンスを向上させるための基盤を提供します。

debug/dwarf パッケージの変更

  • pkg debug/dwarf, const TagCondition = 63
  • pkg debug/dwarf, const TagCondition Tag
  • pkg debug/dwarf, const TagRvalueReferenceType = 66
  • pkg debug/dwarf, const TagRvalueReferenceType Tag
  • pkg debug/dwarf, const TagSharedType = 64
  • pkg debug/dwarf, const TagSharedType Tag
  • pkg debug/dwarf, const TagTemplateAlias = 67
  • pkg debug/dwarf, const TagTemplateAlias Tag
  • pkg debug/dwarf, const TagTypeUnit = 65
  • pkg debug/dwarf, const TagTypeUnit Tag
    • これらは、DWARFデバッグ情報フォーマットにおける新しいタグ定数です。これらのタグは、特定の種類のデバッグ情報を表現するために使用されます。
      • TagCondition: 条件付きコンパイルやデバッグに関連する情報。
      • TagRvalueReferenceType: C++11で導入された右辺値参照型に関連する情報。これは、GoがCgoを介してC++コードと連携する際に、より正確なデバッグ情報を提供するために重要です。
      • TagSharedType: 共有型、つまり複数のコンパイル単位で定義され、共有される型に関連する情報。
      • TagTemplateAlias: テンプレートエイリアス(C++のusing宣言など)に関連する情報。これもC++との連携を強化します。
      • TagTypeUnit: 型情報のみを含むコンパイル単位。
  • pkg debug/dwarf, method (*Data) AddTypes(string, []uint8) error
    • Data構造体(DWARFデバッグ情報を表す)に、新しい型情報を追加するメソッドです。これにより、デバッガは動的に型情報をロードしたり、既存のデバッグ情報に新しい型定義をマージしたりできるようになります。これは、特に動的ロードされるライブラリや、JITコンパイルされたコードのデバッグにおいて有用です。

これらの追加は、Goのデバッグツールがよりリッチで正確なデバッグ情報を提供できるようになることを示唆しています。

debug/plan9obj パッケージの変更

このコミットでは、debug/plan9objパッケージに多数の新しいAPIが追加されています。これは、GoがPlan 9オブジェクトファイル形式を解析し、その内容(セクション、シンボル、プログラムヘッダなど)にアクセスするための包括的な機能を提供することを示しています。

  • ファイル操作: NewFile, Open, Close
  • セクションとシンボルへのアクセス: Section, Symbols
  • エラーハンドリング: FormatError
  • 構造体: ExecTable, File, FileHeader, FormatError, Prog, ProgHeader, Section, SectionHeader, Sym
  • メソッド: Data, Open, ReadAt (Prog, Section)

これらのAPIは、Plan 9形式の実行ファイルをGoプログラムから検査したり、デバッグツールを構築したりするために使用されます。例えば、debug/plan9obj.Openでファイルを開き、File.Sectionsでセクション情報を取得し、Section.Dataでセクションの生データを読み取るといった操作が可能になります。

syscall パッケージの変更

  • pkg syscall (freebsd-arm), type Timespec struct, Pad_cgo_0 [4]uint8
  • pkg syscall (freebsd-arm), type Timeval struct, Pad_cgo_0 [4]uint8
  • pkg syscall (freebsd-arm-cgo), type Timespec struct, Pad_cgo_0 [4]uint8
  • pkg syscall (freebsd-arm-cgo), type Timeval struct, Pad_cgo_0 [4]uint8
    • FreeBSD ARMアーキテクチャ向けのTimespecおよびTimeval構造体に、Pad_cgo_0という名前の4バイトのパディングフィールドが追加されています。これは、Cgoを介してC言語の構造体とGoの構造体をやり取りする際に、メモリのアライメント要件を満たすために必要となる場合があります。ARMアーキテクチャでは、特定のデータ型が特定のバイト境界に配置される必要があり、このパディングはGoとCの構造体レイアウトの不一致を解消するために導入されたと考えられます。
  • pkg syscall (windows-386), const ERROR_MORE_DATA = 234
  • pkg syscall (windows-386), const ERROR_MORE_DATA Errno
  • pkg syscall (windows-amd64), const ERROR_MORE_DATA = 234
  • pkg syscall (windows-amd64), const ERROR_MORE_DATA Errno
    • Windowsプラットフォーム(32ビットおよび64ビット)向けのsyscallパッケージに、ERROR_MORE_DATAという定数が追加されています。これは、Windows API関数が、提供されたバッファが小さすぎてすべてのデータを格納できない場合に返す一般的なエラーコードです。この定数の追加により、GoプログラムはWindowsシステムコールからのこの特定のエラーをより明確に処理できるようになります。

これらのsyscallパッケージの変更は、特定のオペレーティングシステムおよびアーキテクチャにおけるGoのシステムコールインターフェースの正確性と堅牢性を向上させるための、低レベルな調整です。

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

このコミット自体は、Goのソースコード(.goファイル)を直接変更するものではなく、GoのAPI変更を記録するテキストファイル api/next.txt のみを変更しています。

変更の差分は以下の通りです。

--- a/api/next.txt
+++ b/api/next.txt
@@ -1,3 +1,20 @@
+pkg crypto/tls, func NewLRUClientSessionCache(int) ClientSessionCache
+pkg crypto/tls, type ClientSessionCache interface { Get, Put }
+pkg crypto/tls, type ClientSessionCache interface, Get(string) (*ClientSessionState, bool)
+pkg crypto/tls, type ClientSessionCache interface, Put(string, *ClientSessionState)
+pkg crypto/tls, type ClientSessionState struct
+pkg crypto/tls, type Config struct, ClientSessionCache ClientSessionCache
+pkg debug/dwarf, const TagCondition = 63
+pkg debug/dwarf, const TagCondition Tag
+pkg debug/dwarf, const TagRvalueReferenceType = 66
+pkg debug/dwarf, const TagRvalueReferenceType Tag
+pkg debug/dwarf, const TagSharedType = 64
+pkg debug/dwarf, const TagSharedType Tag
+pkg debug/dwarf, const TagTemplateAlias = 67
+pkg debug/dwarf, const TagTemplateAlias Tag
+pkg debug/dwarf, const TagTypeUnit = 65
+pkg debug/dwarf, const TagTypeUnit Tag
+pkg debug/dwarf, method (*Data) AddTypes(string, []uint8) error
 pkg debug/goobj, const SBSS = 21
 pkg debug/goobj, const SBSS SymKind
 pkg debug/goobj, const SCONST = 31
@@ -113,6 +130,50 @@ pkg debug/goobj, type Var struct, Kind int
 pkg debug/goobj, type Var struct, Name string
 pkg debug/goobj, type Var struct, Offset int
 pkg debug/goobj, type Var struct, Type SymID
+pkg debug/plan9obj, func NewFile(io.ReaderAt) (*File, error)
+pkg debug/plan9obj, func Open(string) (*File, error)
+pkg debug/plan9obj, method (*File) Close() error
+pkg debug/plan9obj, method (*File) Section(string) *Section
+pkg debug/plan9obj, method (*File) Symbols() ([]Sym, error)
+pkg debug/plan9obj, method (*FormatError) Error() string
+pkg debug/plan9obj, method (*Prog) Open() io.ReadSeeker
+pkg debug/plan9obj, method (*Section) Data() ([]uint8, error)
+pkg debug/plan9obj, method (*Section) Open() io.ReadSeeker
+pkg debug/plan9obj, method (Prog) ReadAt([]uint8, int64) (int, error)
+pkg debug/plan9obj, method (Section) ReadAt([]uint8, int64) (int, error)
+pkg debug/plan9obj, type ExecTable struct
+pkg debug/plan9obj, type ExecTable struct, Hsize uint32
+pkg debug/plan9obj, type ExecTable struct, Magic string
+pkg debug/plan9obj, type ExecTable struct, Ptrsz int
+pkg debug/plan9obj, type File struct
+pkg debug/plan9obj, type File struct, Sections []*Section
+pkg debug/plan9obj, type File struct, embedded FileHeader
+pkg debug/plan9obj, type FileHeader struct
+pkg debug/plan9obj, type FileHeader struct, Ptrsz int
+pkg debug/plan9obj, type FormatError struct
+pkg debug/plan9obj, type Prog struct
+pkg debug/plan9obj, type Prog struct, embedded ProgHeader
+pkg debug/plan9obj, type Prog struct, embedded io.ReaderAt
+pkg debug/plan9obj, type ProgHeader struct
+pkg debug/plan9obj, type ProgHeader struct, Bss uint32
+pkg debug/plan9obj, type ProgHeader struct, Data uint32
+pkg debug/plan9obj, type ProgHeader struct, Entry uint64
+pkg debug/plan9obj, type ProgHeader struct, Magic uint32
+pkg debug/plan9obj, type ProgHeader struct, Pcsz uint32
+pkg debug/plan9obj, type ProgHeader struct, Spsz uint32
+pkg debug/plan9obj, type ProgHeader struct, Syms uint32
+pkg debug/plan9obj, type ProgHeader struct, Text uint32
+pkg debug/plan9obj, type Section struct
+pkg debug/plan9obj, type Section struct, embedded SectionHeader
+pkg debug/plan9obj, type Section struct, embedded io.ReaderAt
+pkg debug/plan9obj, type SectionHeader struct
+pkg debug/plan9obj, type SectionHeader struct, Name string
+pkg debug/plan9obj, type SectionHeader struct, Offset uint32
+pkg debug/plan9obj, type SectionHeader struct, Size uint32
+pkg debug/plan9obj, type Sym struct
+pkg debug/plan9obj, type Sym struct, Name string
+pkg debug/plan9obj, type Sym struct, Type int32
+pkg debug/plan9obj, type Sym struct, Value uint64
 pkg sync, method (*Pool) Get() interface{}
 pkg sync, method (*Pool) Put(interface{})
 pkg sync, type Pool struct
@@ -159,8 +220,12 @@ pkg syscall (freebsd-amd64-cgo), type Termios struct, Oflag uint32
 pkg syscall (freebsd-amd64-cgo), type Termios struct, Ospeed uint32
 pkg syscall (freebsd-arm), func Fchflags(int, int) error
 pkg syscall (freebsd-arm), func FcntlFlock(uintptr, int, *Flock_t) error
+pkg syscall (freebsd-arm), type Timespec struct, Pad_cgo_0 [4]uint8
+pkg syscall (freebsd-arm), type Timeval struct, Pad_cgo_0 [4]uint8
 pkg syscall (freebsd-arm-cgo), func Fchflags(int, int) error
 pkg syscall (freebsd-arm-cgo), func FcntlFlock(uintptr, int, *Flock_t) error
+pkg syscall (freebsd-arm-cgo), type Timespec struct, Pad_cgo_0 [4]uint8
+pkg syscall (freebsd-arm-cgo), type Timeval struct, Pad_cgo_0 [4]uint8
 pkg syscall (linux-386), func FcntlFlock(uintptr, int, *Flock_t) error
 pkg syscall (linux-386), type Flock_t struct
 pkg syscall (linux-386), type Flock_t struct, Len int64
@@ -1297,6 +1362,8 @@ pkg syscall (openbsd-amd64-cgo), type Termios struct, Lflag uint32
 pkg syscall (openbsd-amd64-cgo), type Termios struct, Oflag uint32
 pkg syscall (openbsd-amd64-cgo), type Termios struct, Ospeed int32
 pkg syscall (openbsd-amd64-cgo), type Timespec struct, Sec int64
+pkg syscall (windows-386), const ERROR_MORE_DATA = 234
+pkg syscall (windows-386), const ERROR_MORE_DATA Errno
 pkg syscall (windows-386), const ERROR_NETNAME_DELETED = 64
 pkg syscall (windows-386), const ERROR_NETNAME_DELETED Errno
 pkg syscall (windows-386), const IOC_VENDOR = 402653184
@@ -1310,6 +1379,8 @@ pkg syscall (windows-386), type TCPKeepalive struct
 pkg syscall (windows-386), type TCPKeepalive struct, Interval uint32
 pkg syscall (windows-386), type TCPKeepalive struct, OnOff uint32
 pkg syscall (windows-386), type TCPKeepalive struct, Time uint32
+pkg syscall (windows-amd64), const ERROR_MORE_DATA = 234
+pkg syscall (windows-amd64), const ERROR_MORE_DATA Errno
 pkg syscall (windows-amd64), const ERROR_NETNAME_DELETED = 64
 pkg syscall (windows-amd64), const ERROR_NETNAME_DELETED Errno
 pkg syscall (windows-amd64), const IOC_VENDOR = 402653184

コアとなるコードの解説

このコミットは、GoのAPI定義ファイルである api/next.txt に新しい行を追加しています。このファイルは、Goのビルドシステムによって使用され、Goの標準ライブラリが提供するAPIの変更を追跡します。

追加された各行は、Goの特定のパッケージにおける新しいAPI要素(関数、型、定数、メソッド)を記述しています。これらの行は、GoのAPI互換性チェックツールによって解析され、Goの次期リリースでこれらのAPIが公開されることを保証します。

具体的には、以下のカテゴリのAPIが追加されています。

  • crypto/tls: TLSクライアントセッションキャッシュに関連するAPIが追加されました。これは、TLSハンドシェイクのパフォーマンスを向上させるための重要な機能です。NewLRUClientSessionCache関数はLRUキャッシュの実装を提供し、ClientSessionCacheインターフェースはカスタムキャッシュ実装を可能にします。Config構造体にClientSessionCacheフィールドが追加されたことで、ユーザーはTLSクライアントのセッションキャッシュ動作を制御できるようになります。
  • debug/dwarf: DWARFデバッグ情報フォーマットの新しいタグ定数と、AddTypesメソッドが追加されました。これにより、Goのデバッグツールは、より複雑な型情報(特にC++の右辺値参照やテンプレートエイリアスなど)を表現し、動的に型情報を追加できるようになります。これは、Cgoを使用するGoプログラムのデバッグ能力を向上させます。
  • debug/plan9obj: Plan 9オブジェクトファイル形式を解析するための包括的なAPIセットが追加されました。これにより、GoプログラムはPlan 9形式の実行ファイルやオブジェクトファイルの内容(セクション、シンボル、ヘッダ情報など)を読み取り、検査できるようになります。これは、Goのクロスプラットフォームデバッグおよび分析ツールを強化します。
  • syscall: 特定のプラットフォーム(FreeBSD ARMおよびWindows)向けのsyscall構造体と定数が調整されました。FreeBSD ARMでは、TimespecTimeval構造体にCgoとの互換性のためのパディングフィールドが追加されました。Windowsでは、一般的なエラーコードであるERROR_MORE_DATAが定数として追加され、Windows APIからのエラー処理が改善されます。

これらの変更は、Go言語がより広範なユースケースとプラットフォームに対応できるよう、継続的に進化していることを示しています。api/next.txtの更新は、これらの機能強化がGoの公式APIの一部として安定的に提供されることを意味します。

関連リンク

参考にした情報源リンク

  • Goのコミットログとapi/next.txtの差分情報
  • Go言語の公式ドキュメント
  • TLSプロトコルに関する一般的な情報源
  • DWARFデバッグ情報フォーマットに関する一般的な情報源
  • Plan 9オペレーティングシステムおよびオブジェクトファイル形式に関する一般的な情報源
  • Windows APIエラーコードに関するMicrosoftのドキュメント
  • CgoおよびGoとCの相互運用性に関するGoのドキュメント
  • メモリのアライメントとパディングに関する一般的なコンピュータサイエンスの知識