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

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

このコミットは、Go言語の初期開発段階におけるコードベースのクリーンアップと標準化を目的としています。具体的には、テストファイルのヘッダーから古いビルドコマンドのコメントを削除し、src/lib/math/asin.goファイル内のif文の構文をGo言語の慣用的な形式に修正しています。コミットメッセージの「add author lines」は、より広範なファイルヘッダーの標準化作業の一部として解釈できますが、この特定のコミットでは主に不要なビルドコマンドの削除と構文の修正が行われています。

コミット

commit ed490dbed878041f76c9082ab244bc2eda345872
Author: Russ Cox <rsc@golang.org>
Date:   Tue Nov 25 09:22:58 2008 -0800

    add author lines

    R=r
    DELTA=150  (147 added, 0 deleted, 3 changed)
    OCL=19968
    CL=19977
---
 src/lib/math/all_test.go  | 2 --
 src/lib/math/asin.go      | 2 +-\
 src/lib/time/time_test.go | 2 --
 3 files changed, 1 insertion(+), 5 deletions(-)

diff --git a/src/lib/math/all_test.go b/src/lib/math/all_test.go
index 8fa334c350..ddcb1e3ac7 100644
--- a/src/lib/math/all_test.go
+++ b/src/lib/math/all_test.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.

-// $G $F.go && $L $F.$A && (./$A.out || echo BUG: math fails)
-
 package math

 import (
diff --git a/src/lib/math/asin.go b/src/lib/math/asin.go
index 91875d35f8..effaba85e7 100644
--- a/src/lib/math/asin.go
+++ b/src/lib/math/asin.go
@@ -46,7 +46,7 @@ export func Asin(arg float64) float64 {
 }

 export func func Acos(arg float64) float64 {
-	if(arg > 1 || arg < -1) {
+	if arg > 1 || arg < -1 {
 		return sys.NaN();
 	}
 	return pio2 - Asin(arg);
diff --git a/src/lib/time/time_test.go b/src/lib/time/time_test.go
index f771ec03cb..d54dfd0217 100644
--- a/src/lib/time/time_test.go
+++ b/src/lib/time/time_test.go
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.

-// $G $F.go && $L $F.$A && ./$A.out
-
 package time

 import (

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

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

元コミット内容

add author lines

R=r
DELTA=150  (147 added, 0 deleted, 3 changed)
OCL=19968
CL=19977

変更の背景

このコミットは、Go言語の非常に初期の段階(2008年11月)に行われたものであり、言語仕様や開発ツールの進化に伴うコードベースの整理と標準化の一環として位置づけられます。

  1. テストファイルのヘッダーのクリーンアップ: 変更されたall_test.gotime_test.goのテストファイルから、$G $F.go && $L $F.$A && ...のようなコメント行が削除されています。これらは、Goの初期のビルドシステムにおけるコンパイル、リンク、実行の手順を直接記述したものでした。Goの開発が進むにつれて、より洗練されたビルドツールやテストフレームワークが導入され、これらの手動のビルド指示は不要になったか、あるいはより自動化されたプロセスに置き換えられたと考えられます。この変更は、コードの可読性を向上させ、将来のビルドシステムの変更に対する柔軟性を高めることを目的としています。

  2. Go言語の構文の標準化: asin.goにおけるif(condition)からif conditionへの変更は、Go言語のif文の慣用的な構文への準拠を目的としています。Goでは、if文の条件式を括弧で囲む必要がなく、むしろ囲まないのが一般的です。このような小さな構文の修正は、コードベース全体の一貫性を保ち、Goの設計思想に沿ったコーディングスタイルを確立するための継続的な取り組みの一部です。

コミットメッセージの「add author lines」は、直接的なコードの変更内容とは少し乖離しているように見えますが、これはおそらく、ファイルヘッダーに適切なライセンス情報や著作権表示("author lines")が確実に含まれるようにするための、より大きな標準化作業の一部であったことを示唆している可能性があります。このコミットでは、その作業の一環として、古くなったビルド指示を削除し、構文を修正することで、ヘッダー部分を整理したと推測されます。

前提知識の解説

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

  1. Go言語の初期開発: Go言語は2007年にGoogleで設計が始まり、2009年にオープンソースとして公開されました。このコミットは2008年に行われており、Goがまだ活発に開発され、言語仕様やツールチェインが固まっていない非常に初期の段階であったことを示しています。この時期は、言語の構文、標準ライブラリ、ビルドシステムなどが頻繁に変更・改善されていました。

  2. Goのビルドプロセス(初期):

    • $G: Goのコンパイラを指す環境変数またはコマンド名。初期のGoでは、6g(64ビット用)、8g(32ビット用)などのコンパイラが存在しました。
    • $F.go: コンパイル対象のGoソースファイル(例: all_test.go)。
    • $L: Goのリンカを指す環境変数またはコマンド名。初期のGoでは、6l8lなどのリンカが存在しました。
    • $F.$A: リンカが出力するアーカイブファイルまたは実行可能ファイルの名前。
    • ./$A.out: 生成された実行可能ファイルを実行するコマンド。
    • echo BUG: math fails: テストが失敗した場合にエラーメッセージを出力するためのシェルコマンド。 これらのコマンドは、Goのソースコードをコンパイルし、実行可能ファイルを生成し、テストを実行するための手動の手順を示していました。現代のGoでは、go buildgo testといった統合されたコマンドがこれらの複雑な手順を抽象化しています。
  3. Go言語のif文の構文: Go言語のif文は、条件式を括弧で囲む必要がありません。これはC言語やJavaなどの多くの言語とは異なる特徴です。

    • 正しいGoの構文: if condition { ... }
    • 誤った(または非慣用的な)Goの構文: if (condition) { ... } このコミットは、後者の形式を前者の慣用的な形式に修正しています。
  4. sys.NaN(): sysパッケージは、Goの初期の標準ライブラリの一部であり、システムレベルの機能や数値演算に関連する関数を提供していました。NaNは"Not a Number"の略で、浮動小数点演算の結果が数値として表現できない場合(例: 0/0、無限大 - 無限大)に返される特殊な浮動小数点値です。sys.NaN()は、このNaN値を生成する関数です。現代のGoでは、math.NaN()が同等の機能を提供しています。

技術的詳細

このコミットにおける技術的な変更は、以下の2つの主要なカテゴリに分類できます。

  1. テストファイルのビルド指示の削除:

    • src/lib/math/all_test.gosrc/lib/time/time_test.goから、以下のコメント行が削除されました。
      • // $G $F.go && $L $F.$A && (./$A.out || echo BUG: math fails)
      • // $G $F.go && $L $F.$A && ./$A.out
    • これらの行は、Goの初期のビルドプロセスにおいて、テストファイルをコンパイル、リンク、実行するためのシェルコマンドを直接記述したものでした。
    • $GはGoコンパイラ(例: 6g)、$F.goは現在のソースファイル、$LはGoリンカ(例: 6l)、$F.$Aは生成される実行可能ファイル名(例: all_test.6a)、./$A.outはその実行可能ファイルの実行を意味します。
    • || echo BUG: math failsは、テスト実行が失敗した場合にエラーメッセージを出力するシェルスクリプトの慣用句です。
    • これらのコメントの削除は、Goのビルドシステムが進化し、go testのようなより高レベルで自動化されたコマンドが導入されたことを示唆しています。これにより、開発者は個々のテストファイルのビルド手順を意識する必要がなくなり、テストの実行が簡素化されました。
  2. if文の構文修正:

    • src/lib/math/asin.goにおいて、Acos関数のif文の条件式が修正されました。
      • 変更前: if(arg > 1 || arg < -1)
      • 変更後: if arg > 1 || arg < -1
    • この変更は、Go言語のif文の条件式を括弧で囲まないという慣用的なスタイルに準拠するためのものです。Goでは、条件式を括弧で囲むことは構文エラーではありませんが、推奨されません。この修正は、コードベース全体で一貫したコーディングスタイルを維持し、Goの設計原則に従うためのものです。
    • sys.NaN()は、引数が有効な範囲外である場合に"Not a Number"を返すために使用されています。これは、数学関数の入力検証における一般的なパターンです。

これらの変更は、Go言語がまだ初期段階であり、言語仕様、ツール、コーディング規約が継続的に洗練されていた時期の典型的なものです。

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

このコミットで変更されたコアとなるコードの箇所は以下の通りです。

  1. src/lib/math/all_test.go

    --- a/src/lib/math/all_test.go
    +++ b/src/lib/math/all_test.go
    @@ -2,8 +2,6 @@
     // Use of this source code is governed by a BSD-style
     // license that can be found in the LICENSE file.
    
    -// $G $F.go && $L $F.$A && (./$A.out || echo BUG: math fails)
    -
     package math
    
     import (
    

    -2行が削除されました。

  2. src/lib/math/asin.go

    --- a/src/lib/math/asin.go
    +++ b/src/lib/math/asin.go
    @@ -46,7 +46,7 @@ export func Asin(arg float64) float64 {
     }
    
     export func Acos(arg float64) float64 {
    -	if(arg > 1 || arg < -1) {
    +	if arg > 1 || arg < -1 {
     		return sys.NaN();
     	}
     	return pio2 - Asin(arg);
    

    1行が変更されました(括弧の削除)。

  3. src/lib/time/time_test.go

    --- a/src/lib/time/time_test.go
    +++ b/src/lib/time/time_test.go
    @@ -2,8 +2,6 @@
     // Use of this source code is governed by a BSD-style
     // license that can be found in the LICENSE file.
    
    -// $G $F.go && $L $F.$A && ./$A.out
    -
     package time
    
     import (
    

    -2行が削除されました。

コアとなるコードの解説

  1. テストファイルのコメント削除 (all_test.go, time_test.go): 削除された行は、Goの初期のビルドシステムにおけるテストのコンパイルと実行方法を説明するコメントでした。

    • $G $F.go && $L $F.$A && (./$A.out || echo BUG: math fails)
    • $G $F.go && $L $F.$A && ./$A.out これらのコメントは、Goのテストフレームワークがまだ成熟しておらず、開発者が手動でコンパイラ($G)、リンカ($L)、そして生成された実行可能ファイル(./$A.out)を呼び出してテストを実行する必要があった時代の名残です。echo BUG: math failsは、テストが失敗した場合にシェルがエラーメッセージを出力するためのものです。 これらの行が削除されたのは、Goのビルドツールチェインが進化し、go testコマンドのような、より統合された自動化されたテスト実行メカニズムが導入されたためと考えられます。これにより、テストコード自体にビルド手順を記述する必要がなくなり、コードがよりクリーンで保守しやすくなりました。
  2. if文の構文修正 (asin.go): 変更された行は、Acos関数内の入力値チェックのif文です。

    • 変更前: if(arg > 1 || arg < -1)
    • 変更後: if arg > 1 || arg < -1 この変更は、Go言語のif文の条件式を括弧で囲まないという、言語の慣用的なスタイルに準拠するためのものです。Goでは、条件式を括弧で囲むことは構文的には許容されますが、推奨されず、一般的にはコードスタイルガイドラインで禁止されています。この修正は、コードベース全体でGoの標準的なコーディングスタイルを適用し、一貫性と可読性を向上させることを目的としています。sys.NaN()は、引数argが有効な範囲(-1から1)を超えている場合に、"Not a Number"という浮動小数点値を返すために使用されます。これは、数学関数のドメインエラー処理の標準的な方法です。

これらの変更は、Go言語が初期段階で、言語の設計とツールの両方が急速に進化していた時期の典型的なコードベースの洗練と標準化の取り組みを示しています。

関連リンク

参考にした情報源リンク