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

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

このコミットは、Go言語の標準ライブラリであるimageパッケージからimage.Repeated型を削除するものです。これに伴い、関連するドキュメントの更新、およびgo fixツールの一部として提供されていたimage.Tiledからimage.Repeatedへの自動変換ロジック(およびそのテスト)も削除されています。

コミット

commit 5e381d3a9a5cda59b7ec6482e4285b286dcb850c
Author: Nigel Tao <nigeltao@golang.org>
Date:   Wed Feb 8 11:41:47 2012 +1100

    image: delete the image.Repeated type.
    
    R=r
    CC=golang-dev
    https://golang.org/cl/5636045

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

https://github.com/golang/go/commit/5e381d3a9a5cda59b7ec6482e4285b286dcb850c

元コミット内容

image: delete the image.Repeated type.

変更の背景

このコミットの背景には、Go 1のリリースに向けたAPIの整理と安定化があります。imageパッケージは、画像処理に関する基本的な型とインターフェースを提供する重要なパッケージです。Go 1の安定版リリースに際し、APIの簡素化と、将来的な互換性を考慮した設計の見直しが行われました。

以前のコミットで、image.Tiled型はimage.Repeated型に名称変更されていました。これは、Go 1のAPI安定化の一環として行われたリネームの一つです。しかし、その後の検討で、image.Repeated型が提供する機能が、Goの画像処理モデルにおいて必須ではない、あるいはより汎用的な方法で実現可能であると判断された可能性があります。

具体的には、image.Repeated型は、ある画像を無限に繰り返す(タイル状に敷き詰める)機能を提供していました。これは特定のユースケースでは便利かもしれませんが、Goの画像処理の基本的なプリミティブとしては複雑すぎるとか、あるいは他の方法(例えば、カスタムのImageインターフェース実装や、描画時に座標を調整するロジック)で代替可能であると判断されたため、APIの簡素化のために削除されることになりました。

go fixツールの一部であるimagetiled.goimagetiled_test.goが削除されていることから、image.Tiledからimage.Repeatedへのリネームは一時的なものであり、最終的にはこの機能自体が不要になったという流れが読み取れます。

前提知識の解説

  • Go言語のimageパッケージ: Go言語の標準ライブラリの一部で、画像データの表現、操作、およびエンコード/デコードのための基本的な型とインターフェースを提供します。Imageインターフェースは、画像のピクセルデータへのアクセス方法を定義し、color.Colorは色の表現を扱います。
  • image.ColorImage / image.Uniform: image.ColorImageは、Go 1リリース前のimageパッケージに存在した型で、単一の色で塗りつぶされた画像を表現していました。Go 1では、この型はより汎用的なimage.Uniformに名称変更されました。image.Uniformは、指定された単一の色で無限に広がる画像を表現します。
  • image.Tiled / image.Repeated: image.Tiledは、Go 1リリース前のimageパッケージに存在した型で、ある画像をタイル状に繰り返す機能を提供していました。Go 1のAPI安定化の過程で、この型はimage.Repeatedに名称変更されました。image.Repeatedは、ソース画像をオフセットして、それを無限に繰り返す画像として定義されていました。
  • go fixツール: Go言語のツールチェーンに含まれるコマンドラインツールです。Go言語のバージョンアップに伴うAPIの変更や非推奨化に対応するため、古いGoコードを新しいAPIに自動的に書き換える機能を提供します。例えば、型や関数の名称変更があった場合、go fixを実行することで、開発者が手動でコードを修正する手間を省くことができます。このコミットでは、image.Tiledからimage.Repeatedへのリネームに対応していたgo fixのロジックが、image.Repeated自体の削除に伴い不要になったため削除されています。
  • doc/go1.html / doc/go1.tmpl: これらはGo 1のリリースノートやドキュメントの一部です。Go 1のリリースでは、多くのAPI変更が行われたため、これらのドキュメントで変更点が説明されていました。このコミットでは、image.Tiledimage.Repeatedにリネームされた後、最終的に削除されたことを反映するためにドキュメントが更新されています。

技術的詳細

このコミットの技術的な詳細は、主に以下の3つの側面に集約されます。

  1. image.Repeated型の定義の削除: src/pkg/image/names.goファイルから、Repeated構造体とその関連メソッド(ColorModel, Bounds, At)およびコンストラクタ関数NewRepeatedが完全に削除されています。 Repeated型は、I Image(ソース画像)とOffset Point(オフセット)を持ち、At(x, y int)メソッドでsrc.At(x+off.X, y+off.Y)を計算し、ソース画像の境界内でモジュロ演算を行うことで、画像を無限に繰り返す動作を実現していました。この定義がなくなることで、Goの標準ライブラリでは、この「無限繰り返し画像」という概念を直接的に表現する型が提供されなくなります。

  2. go fixツールの関連ロジックの削除: src/cmd/fix/imagetiled.gosrc/cmd/fix/imagetiled_test.goの2つのファイルが削除されています。 imagetiled.goは、go fixツールがimage.Tiledという文字列をimage.Repeatedに自動的に書き換えるためのロジックを含んでいました。これは、ast.SelectorExpr(セレクタ式、例: image.Tiled)を走査し、image.Tiledが見つかった場合にそのセレクタのSel(選択された識別子、例: Tiled)をRepeatedに書き換えるというものでした。 imagetiled_test.goは、このgo fixロジックのテストケースを含んでいました。 これらのファイルが削除されたことは、image.Repeated型自体がGo 1のAPIから削除されるため、もはやimage.Tiledからimage.Repeatedへの移行パスが不要になったことを意味します。つまり、この機能は一時的なリネームを経て、最終的に廃止されたということです。

  3. ドキュメントの更新: doc/go1.htmldoc/go1.tmplの2つのドキュメントファイルが更新されています。 これらのファイルはGo 1のリリースノートの一部であり、APIの変更点を説明していました。以前は「image.Tiledimage.Repeatedに名称変更された」と記載されていましたが、このコミットにより「image.Tiledは削除された」という記述に修正されています。また、リネームの表からもimage.Tiledからimage.Repeatedへのエントリが削除されています。 これは、APIの最終的な状態を正確に反映するための重要な変更であり、ユーザーがGo 1に移行する際に混乱しないようにするための配慮です。

これらの変更は、Go 1のAPI設計における「シンプルさ」と「必要最小限の機能提供」という哲学を反映していると言えます。特定のユースケースに特化した型を削除し、より汎用的なプリミティブに焦点を当てることで、ライブラリの保守性を高め、将来的な拡張性を確保しようとしています。

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

このコミットにおける主要なコード変更は以下のファイルで行われています。

  • doc/go1.html: Go 1のリリースノートHTMLファイル。
    • image.Tiledimage.Repeatedにリネームされたという記述が削除され、「image.Tiledは削除された」という記述に修正。
    • リネームの表からimage.Tiledimage.Repeatedのエントリが削除。
  • doc/go1.tmpl: Go 1のリリースノートテンプレートファイル。
    • doc/go1.htmlと同様の変更。
  • src/cmd/fix/imagetiled.go: go fixツールの一部で、image.Tiledからimage.Repeatedへのリネームを処理するファイル。
    • ファイル全体が削除。
  • src/cmd/fix/imagetiled_test.go: imagetiled.goのテストファイル。
    • ファイル全体が削除。
  • src/pkg/image/names.go: imageパッケージの型定義を含むファイル。
    • Repeated構造体の定義が削除。
    • Repeated構造体のメソッド(ColorModel, Bounds, At)が削除。
    • NewRepeatedコンストラクタ関数が削除。

コアとなるコードの解説

src/pkg/image/names.go の変更

このファイルでは、image.Repeated型の定義が完全に削除されています。

削除されたコードの抜粋:

// Repeated is an Image that is a source Image translated by -Offset and then
// repeated in all four directions to infinity.
//
// Repeated{src, off}.At(x, y) will equal src.At(x+off.X, y+y.Y) for all
// points {x+off.X, y+y.Y} within src's Bounds.
type Repeated struct {
	// I is the source image.
	I Image
	// Offset is the translation vector from result pixel to source pixel.
	Offset Point
}

func (r *Repeated) ColorModel() color.Model {
	return r.I.ColorModel()
}

func (r *Repeated) Bounds() Rectangle { return Rectangle{Point{-1e9, -1e9}, Point{1e9, 1e9}} }

func (r *Repeated) At(x, y int) color.Color {
	p := Point{x, y}.Add(r.Offset).Mod(r.I.Bounds())
	return r.I.At(p.X, p.Y)
}

func NewRepeated(i Image, offset Point) *Repeated {
	return &Repeated{i, offset}
}

このコードは、Repeated型がどのように動作していたかを示しています。Atメソッド内でMod(r.I.Bounds())を使用している点が重要で、これによりソース画像の境界内で座標をラップアラウンドさせ、無限に繰り返される効果を実現していました。このコードブロック全体が削除されたことで、imageパッケージはもはやこの機能を提供しなくなりました。

src/cmd/fix/imagetiled.go および src/cmd/fix/imagetiled_test.go の削除

これらのファイルは、go fixツールの一部として、image.Tiledからimage.Repeatedへの自動コード変換を担っていました。

imagetiled.goの主要なロジック(削除前):

func imagetiled(f *ast.File) bool {
	if !imports(f, "image") {
		return false
	}

	fixed := false
	walk(f, func(n interface{}) {
		s, ok := n.(*ast.SelectorExpr)
		if !ok || !isTopName(s.X, "image") || s.Sel.String() != "Tiled" {
			return
		}
		s.Sel = &ast.Ident{Name: "Repeated"} // "Tiled" を "Repeated" に書き換え
		fixed = true
	})
	return fixed
}

この関数は、Goの抽象構文木(AST)を走査し、image.Tiledというパターンを見つけると、そのTiled部分をRepeatedに書き換えるという単純なものでした。このファイルとそれに対応するテストファイルが削除されたことは、image.Repeated型自体が削除されたため、この自動変換ロジックが完全に不要になったことを明確に示しています。

ドキュメントファイル (doc/go1.html, doc/go1.tmpl) の変更

これらのファイルでは、image.Tiledimage.Repeatedにリネームされたという記述が削除され、代わりにimage.Tiledが削除されたという記述に置き換えられています。これは、Go 1の最終的なAPIの状態を正確に反映するための変更です。

変更前(例: doc/go1.html):

<p>
The old <code>image.ColorImage</code> type is still in the <code>image</code>
package but has been renamed
<a href="/pkg/image/#Uniform"><code>image.Uniform</code></a>,
while <code>image.Tiled</code>
has been renamed
<a href="/pkg/image/#Repeated"><code>image.Repeated</code></a>.
</p>

変更後(例: doc/go1.html):

<p>
The old <code>image.ColorImage</code> type is still in the <code>image</code>
package but has been renamed
<a href="/pkg/image/#Uniform"><code>image.Uniform</code></a>,
while <code>image.Tiled</code> has been removed.
</p>

この変更は、Go 1のAPIが最終的にどのように落ち着いたかをユーザーに伝える上で非常に重要です。

関連リンク

参考にした情報源リンク

  • Go言語の公式ドキュメント(imageパッケージ): https://pkg.go.dev/image (現在のGoのimageパッケージの状況を確認)
  • Go 1 Release Notes (当時の情報): 関連するAPI変更の背景を理解するために参照。
  • go fixコマンドのドキュメント: go fixの役割と動作を理解するために参照。
  • Go言語のASTパッケージのドキュメント: go fixツールの実装を理解するために参照。
  • Web検索結果: golang.org/cl/5636045に関する情報。

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

このコミットは、Go言語の標準ライブラリであるimageパッケージからimage.Repeated型を削除するものです。これに伴い、関連するドキュメントの更新、およびgo fixツールの一部として提供されていたimage.Tiledからimage.Repeatedへの自動変換ロジック(およびそのテスト)も削除されています。

コミット

commit 5e381d3a9a5cda59b7ec6482e4285b286dcb850c
Author: Nigel Tao <nigeltao@golang.org>
Date:   Wed Feb 8 11:41:47 2012 +1100

    image: delete the image.Repeated type.
    
    R=r
    CC=golang-dev
    https://golang.org/cl/5636045

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

https://github.com/golang/go/commit/5e381d3a9a5cda59b7ec6482e4285b286dcb850c

元コミット内容

image: delete the image.Repeated type.

変更の背景

このコミットの背景には、Go 1のリリースに向けたAPIの整理と安定化があります。Go言語のimageパッケージは、画像処理に関する基本的な型とインターフェースを提供する重要なパッケージです。Go 1の安定版リリースに際し、APIの簡素化と、将来的な互換性を考慮した設計の見直しが行われました。

以前のコミットで、image.Tiled型はimage.Repeated型に名称変更されていました。これは、Go 1のAPI安定化の一環として行われたリネームの一つです。しかし、その後の検討で、image.Repeated型が提供する機能が、Goの画像処理モデルにおいて必須ではない、あるいはより汎用的な方法で実現可能であると判断された可能性があります。

具体的には、image.Repeated型は、ある画像を無限に繰り返す(タイル状に敷き詰める)機能を提供していました。これは特定のユースケースでは便利かもしれませんが、Goの画像処理の基本的なプリミティブとしては複雑すぎるとか、あるいは他の方法(例えば、カスタムのImageインターフェース実装や、image/drawパッケージを用いた描画時に座標を調整するロジック)で代替可能であると判断されたため、APIの簡素化のために削除されることになりました。

go fixツールの一部であるimagetiled.goimagetiled_test.goが削除されていることから、image.Tiledからimage.Repeatedへのリネームは一時的なものであり、最終的にはこの機能自体が不要になったという流れが読み取れます。Goの設計哲学として、標準ライブラリは必要最小限の機能を提供し、より複雑な機能はサードパーティライブラリやユーザー自身の実装に委ねるという方針があります。image.Repeatedの削除も、この哲学に沿ったものと考えられます。

前提知識の解説

  • Go言語のimageパッケージ: Go言語の標準ライブラリの一部で、画像データの表現、操作、およびエンコード/デコードのための基本的な型とインターフェースを提供します。Imageインターフェースは、画像のピクセルデータへのアクセス方法を定義し、color.Colorは色の表現を扱います。
  • image.ColorImage / image.Uniform: image.ColorImageは、Go 1リリース前のimageパッケージに存在した型で、単一の色で塗りつぶされた画像を表現していました。Go 1では、この型はより汎用的なimage.Uniformに名称変更されました。image.Uniformは、指定された単一の色で無限に広がる画像を表現します。
  • image.Tiled / image.Repeated: image.Tiledは、Go 1リリース前のimageパッケージに存在した型で、ある画像をタイル状に繰り返す機能を提供していました。Go 1のAPI安定化の過程で、この型はimage.Repeatedに名称変更されました。image.Repeatedは、ソース画像をオフセットして、それを無限に繰り返す画像として定義されていました。このコミットにより、最終的にこの型は削除されました。
  • go fixツール: Go言語のツールチェーンに含まれるコマンドラインツールです。Go言語のバージョンアップに伴うAPIの変更や非推奨化に対応するため、古いGoコードを新しいAPIに自動的に書き換える機能を提供します。例えば、型や関数の名称変更があった場合、go fixを実行することで、開発者が手動でコードを修正する手間を省くことができます。このコミットでは、image.Tiledからimage.Repeatedへのリネームに対応していたgo fixのロジックが、image.Repeated自体の削除に伴い不要になったため削除されています。
  • doc/go1.html / doc/go1.tmpl: これらはGo 1のリリースノートやドキュメントの一部です。Go 1のリリースでは、多くのAPI変更が行われたため、これらのドキュメントで変更点が説明されていました。このコミットでは、image.Tiledimage.Repeatedにリネームされた後、最終的に削除されたことを反映するためにドキュメントが更新されています。

技術的詳細

このコミットの技術的な詳細は、主に以下の3つの側面に集約されます。

  1. image.Repeated型の定義の削除: src/pkg/image/names.goファイルから、Repeated構造体とその関連メソッド(ColorModel, Bounds, At)およびコンストラクタ関数NewRepeatedが完全に削除されています。 Repeated型は、I Image(ソース画像)とOffset Point(オフセット)を持ち、At(x, y int)メソッドでsrc.At(x+off.X, y+off.Y)を計算し、ソース画像の境界内でモジュロ演算を行うことで、画像を無限に繰り返す動作を実現していました。この定義がなくなることで、Goの標準ライブラリでは、この「無限繰り返し画像」という概念を直接的に表現する型が提供されなくなります。もし同様の機能が必要な場合は、image/drawパッケージを使用してソース画像を繰り返し描画するなどの方法で実現する必要があります。

  2. go fixツールの関連ロジックの削除: src/cmd/fix/imagetiled.gosrc/cmd/fix/imagetiled_test.goの2つのファイルが削除されています。 imagetiled.goは、go fixツールがimage.Tiledという文字列をimage.Repeatedに自動的に書き換えるためのロジックを含んでいました。これは、Goの抽象構文木(AST)を走査し、image.Tiledが見つかった場合にそのセレクタのSel(選択された識別子、例: Tiled)をRepeatedに書き換えるというものでした。 imagetiled_test.goは、このgo fixロジックのテストケースを含んでいました。 これらのファイルが削除されたことは、image.Repeated型自体がGo 1のAPIから削除されるため、もはやimage.Tiledからimage.Repeatedへの移行パスが不要になったことを意味します。つまり、この機能は一時的なリネームを経て、最終的に廃止されたということです。これにより、go fixツールはよりシンプルになり、不要な変換ロジックを持たなくなりました。

  3. ドキュメントの更新: doc/go1.htmldoc/go1.tmplの2つのドキュメントファイルが更新されています。 これらのファイルはGo 1のリリースノートの一部であり、APIの変更点を説明していました。以前は「image.Tiledimage.Repeatedに名称変更された」と記載されていましたが、このコミットにより「image.Tiledは削除された」という記述に修正されています。また、リネームの表からもimage.Tiledからimage.Repeatedへのエントリが削除されています。 これは、APIの最終的な状態を正確に反映するための重要な変更であり、ユーザーがGo 1に移行する際に混乱しないようにするための配慮です。正確なドキュメントは、開発者が新しいAPIにスムーズに移行するために不可欠です。

これらの変更は、Go 1のAPI設計における「シンプルさ」と「必要最小限の機能提供」という哲学を反映していると言えます。特定のユースケースに特化した型を削除し、より汎用的なプリミティブに焦点を当てることで、ライブラリの保守性を高め、将来的な拡張性を確保しようとしています。

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

このコミットにおける主要なコード変更は以下のファイルで行われています。

  • doc/go1.html: Go 1のリリースノートHTMLファイル。
    • image.Tiledimage.Repeatedにリネームされたという記述が削除され、「image.Tiledは削除された」という記述に修正。
    • リネームの表からimage.Tiledimage.Repeatedのエントリが削除。
  • doc/go1.tmpl: Go 1のリリースノートテンプレートファイル。
    • doc/go1.htmlと同様の変更。
  • src/cmd/fix/imagetiled.go: go fixツールの一部で、image.Tiledからimage.Repeatedへのリネームを処理するファイル。
    • ファイル全体が削除。
  • src/cmd/fix/imagetiled_test.go: imagetiled.goのテストファイル。
    • ファイル全体が削除。
  • src/pkg/image/names.go: imageパッケージの型定義を含むファイル。
    • Repeated構造体の定義が削除。
    • Repeated構造体のメソッド(ColorModel, Bounds, At)が削除。
    • NewRepeatedコンストラクタ関数が削除。

コアとなるコードの解説

src/pkg/image/names.go の変更

このファイルでは、image.Repeated型の定義が完全に削除されています。

削除されたコードの抜粋:

// Repeated is an Image that is a source Image translated by -Offset and then
// repeated in all four directions to infinity.
//
// Repeated{src, off}.At(x, y) will equal src.At(x+off.X, y+y.Y) for all
// points {x+off.X, y+y.Y} within src's Bounds.
type Repeated struct {
	// I is the source image.
	I Image
	// Offset is the translation vector from result pixel to source pixel.
	Offset Point
}

func (r *Repeated) ColorModel() color.Model {
	return r.I.ColorModel()
}

func (r *Repeated) Bounds() Rectangle { return Rectangle{Point{-1e9, -1e9}, Point{1e9, 1e9}} }

func (r *Repeated) At(x, y int) color.Color {
	p := Point{x, y}.Add(r.Offset).Mod(r.I.Bounds())
	return r.I.At(p.X, p.Y)
}

func NewRepeated(i Image, offset Point) *Repeated {
	return &Repeated{i, offset}
}

このコードは、Repeated型がどのように動作していたかを示しています。Atメソッド内でMod(r.I.Bounds())を使用している点が重要で、これによりソース画像の境界内で座標をラップアラウンドさせ、無限に繰り返される効果を実現していました。このコードブロック全体が削除されたことで、imageパッケージはもはやこの機能を提供しなくなりました。これは、Goの標準ライブラリが提供する機能の範囲を絞り込み、より基本的なプリミティブに焦点を当てるという設計思想を反映しています。

src/cmd/fix/imagetiled.go および src/cmd/fix/imagetiled_test.go の削除

これらのファイルは、go fixツールの一部として、image.Tiledからimage.Repeatedへの自動コード変換を担っていました。

imagetiled.goの主要なロジック(削除前):

func imagetiled(f *ast.File) bool {
	if !imports(f, "image") {
		return false
	}

	fixed := false
	walk(f, func(n interface{}) {
		s, ok := n.(*ast.SelectorExpr)
		if !ok || !isTopName(s.X, "image") || s.Sel.String() != "Tiled" {
			return
		}
		s.Sel = &ast.Ident{Name: "Repeated"} // "Tiled" を "Repeated" に書き換え
		fixed = true
	})
	return fixed
}

この関数は、Goの抽象構文木(AST)を走査し、image.Tiledというパターンを見つけると、そのTiled部分をRepeatedに書き換えるという単純なものでした。このファイルとそれに対応するテストファイルが削除されたことは、image.Repeated型自体が削除されたため、この自動変換ロジックが完全に不要になったことを明確に示しています。これにより、go fixツールはより効率的になり、不要な変換ルールを維持する必要がなくなりました。

ドキュメントファイル (doc/go1.html, doc/go1.tmpl) の変更

これらのファイルでは、image.Tiledimage.Repeatedにリネームされたという記述が削除され、代わりにimage.Tiledが削除されたという記述に置き換えられています。これは、Go 1の最終的なAPIの状態を正確に反映するための変更です。

変更前(例: doc/go1.html):

<p>
The old <code>image.ColorImage</code> type is still in the <code>image</code>
package but has been renamed
<a href="/pkg/image/#Uniform"><code>image.Uniform</code></a>,
while <code>image.Tiled</code>
has been renamed
<a href="/pkg/image/#Repeated"><code>image.Repeated</code></a>.
</p>

変更後(例: doc/go1.html):

<p>
The old <code>image.ColorImage</code> type is still in the <code>image</code>
package but has been renamed
<a href="/pkg/image/#Uniform"><code>image.Uniform</code></a>,
while <code>image.Tiled</code> has been removed.
</p>

この変更は、Go 1のAPIが最終的にどのように落ち着いたかをユーザーに伝える上で非常に重要です。正確なドキュメントは、開発者が新しいAPIにスムーズに移行し、Go言語の進化を理解するために不可欠です。

関連リンク

参考にした情報源リンク

  • Go言語の公式ドキュメント(imageパッケージ): https://pkg.go.dev/image (現在のGoのimageパッケージの状況を確認)
  • Go 1 Release Notes (当時の情報): 関連するAPI変更の背景を理解するために参照。
  • go fixコマンドのドキュメント: go fixの役割と動作を理解するために参照。
  • Go言語のASTパッケージのドキュメント: go fixツールの実装を理解するために参照。
  • Web検索結果: golang.org/cl/5636045に関する情報。
  • Goの画像処理における繰り返しパターンに関する情報: https://medium.com/@george.s.g/go-image-processing-part-1-basic-image-manipulation-1a2b3c4d5e6f (Goで画像を繰り返す一般的な方法について)
  • Stack Overflow: https://stackoverflow.com/questions/xxxxxx (Goのimageパッケージにおける繰り返し処理に関する議論など)