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

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

このコミットは、Go言語の標準ライブラリ math/cmplx パッケージ内の pow.go ファイルに対する変更です。math/cmplx パッケージは、複素数に対する基本的な数学関数を提供します。pow.go ファイルは、複素数のべき乗を計算する Pow 関数を実装しています。

コミット

commit 59d7aa32ca3dd83533f2078a27c17b7babd501b2
Author: Rob Pike <r@golang.org>
Date:   Tue Apr 22 21:12:15 2014 -0700

    math/cmpx: change space to tab in the Pow docs for better formatting
    Godoc makes it look better this way; before, it all ran together into nonsense.
    
    LGTM=bradfitz
    R=golang-codereviews, bradfitz
    CC=golang-codereviews
    https://golang.org/cl/90400045

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

https://github.com/golang/go/commit/59d7aa32ca3dd83533f2078a27c17b7babd501b2

元コミット内容

math/cmpx: change space to tab in the Pow docs for better formatting
Godoc makes it look better this way; before, it all ran together into nonsense.

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

変更の背景

この変更の背景には、Go言語のドキュメンテーションツールである godoc のレンダリング挙動があります。godoc はGoのソースコードから直接ドキュメンテーションを生成し、ウェブブラウザで閲覧可能な形式で提供します。

Pow 関数のドキュメンテーションには、特定の入力値に対する関数の挙動を説明する箇条書きが含まれていました。しかし、この箇条書きがスペースでインデントされていたため、godoc がこれを通常のテキストとして解釈し、期待される箇条書きや整形されたブロックとして表示されず、読みにくい状態になっていました。コミットメッセージにある「it all ran together into nonsense」という表現は、この整形の問題を指しています。

このコミットは、ドキュメンテーションの可読性を向上させ、godoc が意図した通りに整形された出力(この場合はコードブロックのような表示)を行うように、インデントに使用されているスペースをタブに置き換えることを目的としています。

前提知識の解説

Go言語のドキュメンテーションとgodoc

Go言語では、コードのコメントがそのままドキュメンテーションとして機能する「ドキュメンテーションコメント」の文化が強く根付いています。関数、変数、型などの宣言の直前に書かれたコメントは、godoc ツールによって解析され、HTML形式のドキュメンテーションとして生成されます。

godoc は、特定の書式規則に従ってコメントを解釈します。特に重要なのは、インデントされたテキストの扱いです。

  • 通常のテキスト: 行頭にスペースやタブがない場合、通常の段落として扱われます。
  • コードブロック: 行頭にタブ(または8つのスペース)がある場合、その行は整形済みのテキスト(preformatted text)として扱われ、通常は等幅フォントで表示され、改行もそのまま維持されます。これは、コード例や特定の書式を維持したいテキストを表示するのに適しています。

このコミットの文脈では、Pow 関数の特殊なケースの説明が、コードブロックのように整形されることを意図していたと考えられます。

複素数とmath/cmplxパッケージ

Go言語の math/cmplx パッケージは、複素数(complex numbers)に関する数学関数を提供します。Goには complex64 (float32の複素数) と complex128 (float64の複素数) の組み込み型があります。

  • 複素数: 実数部と虚数部を持つ数で、a + bi の形式で表されます(i は虚数単位で i^2 = -1)。
  • Pow(x, y complex128) complex128: この関数は、複素数 x を底とし、複素数 y を指数とするべき乗 x^y を計算します。数学的には exp(y * log(x)) として定義されます。

ドキュメンテーションで言及されている Pow(0, ±0)Pow(0, c) のケースは、数学的な特異点やIEEE 754浮動小数点標準における特殊な値(NaN, Inf, ±0)の扱いに関連するもので、関数の正確な挙動を明確にするために重要です。

技術的詳細

この変更の技術的な核心は、godoc がドキュメンテーションコメント内のインデントをどのように解釈するかという点にあります。

元のコードでは、Pow 関数のドキュメンテーションコメントの一部が以下のように記述されていました。

// Pow(0, ±0) returns 1+0i
// Pow(0, c) for real(c)<0 returns Inf+0i if imag(c) is zero, otherwise Inf+Inf i.

これらの行は、行頭にスペースでインデントされていました。godoc は、行頭のスペースを通常のテキストのインデントとして解釈し、結果としてこれらの行を前の行と連続した単一の段落の一部としてレンダリングしてしまいました。これにより、箇条書きのように見せる意図があったにもかかわらず、テキストが連結されて読みにくくなっていました。

Goのドキュメンテーションの慣習では、コード例や整形済みのテキストブロックを示すためには、行頭にタブ文字を使用することが推奨されています。godoc は、行頭にタブ文字がある行を、整形済みのテキストブロックとして認識し、等幅フォントで表示し、改行もそのまま維持します。これにより、テキストが意図した通りに独立したブロックとして表示され、可読性が向上します。

このコミットでは、スペースをタブに置き換えることで、godoc がこれらの行を整形済みテキストとして正しく解釈し、ドキュメンテーションがより明確で読みやすい形式で表示されるように修正しています。これは、機能的な変更ではなく、ドキュメンテーションの表示品質を向上させるための純粋な整形(フォーマット)の変更です。

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

--- a/src/pkg/math/cmplx/pow.go
+++ b/src/pkg/math/cmplx/pow.go
@@ -44,8 +44,8 @@ import "math"
 
 // Pow returns x**y, the base-x exponential of y.
 // For generalized compatiblity with math.Pow:
-// Pow(0, ±0) returns 1+0i
-// Pow(0, c) for real(c)<0 returns Inf+0i if imag(c) is zero, otherwise Inf+Inf i.
+//	Pow(0, ±0) returns 1+0i
+//	Pow(0, c) for real(c)<0 returns Inf+0i if imag(c) is zero, otherwise Inf+Inf i.
 func Pow(x, y complex128) complex128 {
  if x == 0 { // Guaranteed also true for x == -0.
  	r, i := real(y), imag(y)

コアとなるコードの解説

変更は src/pkg/math/cmplx/pow.go ファイルの44行目と45行目に集中しています。

元のコードでは、以下の2行のコメントがスペースでインデントされていました。

// Pow(0, ±0) returns 1+0i
// Pow(0, c) for real(c)<0 returns Inf+0i if imag(c) is zero, otherwise Inf+Inf i.

このコミットでは、これらの行の先頭にあるスペースがタブ文字に置き換えられました。

//	Pow(0, ±0) returns 1+0i
//	Pow(0, c) for real(c)<0 returns Inf+0i if imag(c) is zero, otherwise Inf+Inf i.

この変更により、godoc はこれらの行を整形済みのテキストブロックとして認識し、ウェブ上のドキュメンテーションで適切にインデントされ、読みやすい形式で表示されるようになります。これは、Goのドキュメンテーションスタイルガイドラインに沿った修正であり、ドキュメンテーションの品質とユーザビリティを向上させます。関数の動作自体には一切影響を与えません。

関連リンク

参考にした情報源リンク