[インデックス 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.go
とimagetiled_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.Tiled
がimage.Repeated
にリネームされた後、最終的に削除されたことを反映するためにドキュメントが更新されています。
技術的詳細
このコミットの技術的な詳細は、主に以下の3つの側面に集約されます。
-
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の標準ライブラリでは、この「無限繰り返し画像」という概念を直接的に表現する型が提供されなくなります。 -
go fix
ツールの関連ロジックの削除:src/cmd/fix/imagetiled.go
とsrc/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
への移行パスが不要になったことを意味します。つまり、この機能は一時的なリネームを経て、最終的に廃止されたということです。 -
ドキュメントの更新:
doc/go1.html
とdoc/go1.tmpl
の2つのドキュメントファイルが更新されています。 これらのファイルはGo 1のリリースノートの一部であり、APIの変更点を説明していました。以前は「image.Tiled
はimage.Repeated
に名称変更された」と記載されていましたが、このコミットにより「image.Tiled
は削除された」という記述に修正されています。また、リネームの表からもimage.Tiled
からimage.Repeated
へのエントリが削除されています。 これは、APIの最終的な状態を正確に反映するための重要な変更であり、ユーザーがGo 1に移行する際に混乱しないようにするための配慮です。
これらの変更は、Go 1のAPI設計における「シンプルさ」と「必要最小限の機能提供」という哲学を反映していると言えます。特定のユースケースに特化した型を削除し、より汎用的なプリミティブに焦点を当てることで、ライブラリの保守性を高め、将来的な拡張性を確保しようとしています。
コアとなるコードの変更箇所
このコミットにおける主要なコード変更は以下のファイルで行われています。
doc/go1.html
: Go 1のリリースノートHTMLファイル。image.Tiled
がimage.Repeated
にリネームされたという記述が削除され、「image.Tiled
は削除された」という記述に修正。- リネームの表から
image.Tiled
とimage.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.Tiled
がimage.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 Change List 5636045: https://golang.org/cl/5636045
- GitHub上のコミットページ: https://github.com/golang/go/commit/5e381d3a9a5cda59b7ec6482e4285b286dcb850c
参考にした情報源リンク
- 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.go
とimagetiled_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.Tiled
がimage.Repeated
にリネームされた後、最終的に削除されたことを反映するためにドキュメントが更新されています。
技術的詳細
このコミットの技術的な詳細は、主に以下の3つの側面に集約されます。
-
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
パッケージを使用してソース画像を繰り返し描画するなどの方法で実現する必要があります。 -
go fix
ツールの関連ロジックの削除:src/cmd/fix/imagetiled.go
とsrc/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
ツールはよりシンプルになり、不要な変換ロジックを持たなくなりました。 -
ドキュメントの更新:
doc/go1.html
とdoc/go1.tmpl
の2つのドキュメントファイルが更新されています。 これらのファイルはGo 1のリリースノートの一部であり、APIの変更点を説明していました。以前は「image.Tiled
はimage.Repeated
に名称変更された」と記載されていましたが、このコミットにより「image.Tiled
は削除された」という記述に修正されています。また、リネームの表からもimage.Tiled
からimage.Repeated
へのエントリが削除されています。 これは、APIの最終的な状態を正確に反映するための重要な変更であり、ユーザーがGo 1に移行する際に混乱しないようにするための配慮です。正確なドキュメントは、開発者が新しいAPIにスムーズに移行するために不可欠です。
これらの変更は、Go 1のAPI設計における「シンプルさ」と「必要最小限の機能提供」という哲学を反映していると言えます。特定のユースケースに特化した型を削除し、より汎用的なプリミティブに焦点を当てることで、ライブラリの保守性を高め、将来的な拡張性を確保しようとしています。
コアとなるコードの変更箇所
このコミットにおける主要なコード変更は以下のファイルで行われています。
doc/go1.html
: Go 1のリリースノートHTMLファイル。image.Tiled
がimage.Repeated
にリネームされたという記述が削除され、「image.Tiled
は削除された」という記述に修正。- リネームの表から
image.Tiled
とimage.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.Tiled
がimage.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 Change List 5636045: https://golang.org/cl/5636045
- GitHub上のコミットページ: https://github.com/golang/go/commit/5e381d3a9a5cda59b7ec6482e4285b286dcb850c
参考にした情報源リンク
- 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
パッケージにおける繰り返し処理に関する議論など)