unicodeパッケージおよび関連機能がUnicode 15からUnicode 17へ更新され、Todhriなど新規スクリプトを含む最新の文字集合に対応した。
unicode
概要
unicode パッケージおよびシステム全体の関連機能が、Unicode 15 から Unicode 17 へアップグレードされた。変更内容の詳細は Unicode 16.0.0 および Unicode 17.0.0 のリリースノートを参照。
導入経緯
Issue #77266("all: update to Unicode 17")で追跡された。作業は複数のCL(CL 737400、CL 737401、CL 737402、CL 737404、CL 737420)に分割して実装され、全て提出済みであることが確認された上でクローズされた。
議論のハイライト
- 一連のCLはテーブル更新(CL 737404、CL 737420)だけでなく、
unicode/normのパック済み forminfo における QC (Quick Check) Maybe ビットの保持修正(CL 737400)や idna 関連の実装更新・旧コード削除(CL 737402、CL 737401)など、周辺実装の整合性確保にも及んだ。 - 全CL提出後、コアチームメンバーから「残作業はあるか」との確認が入り、「All done!」の返信を受けてクローズに至った。
使用例
Before
package main
import (
"fmt"
"unicode"
)
func main() {
fmt.Println(unicode.Version) // Go 1.26以前: "15.0.0"
}
After
package main
import (
"fmt"
"unicode"
)
func main() {
fmt.Println(unicode.Version) // "17.0.0"
}
移行時の注意
Unicode 16.0では Todhri・Garay・Gurung Khema・Kirat Rai・Ol Onal・Sunuwar・Tulu-Tigalari など新規スクリプトが追加されており、unicode.Scripts にもこれらのテーブルが加わった。既存コードが unicode.Is・unicode.IsLetter などで未知のコードポイントを一律「非対応」として扱っていた場合、これらの新規スクリプトの文字が新たに認識されるようになる点に注意。また既存の文字であっても分類(カテゴリ・大文字小文字変換・正規化結果など)が変わる場合があるため、Unicodeプロパティに依存した比較・ソート・正規化を行うコードは出力差分がないか確認するとよい。
実装解説
unicode.Version 定数はUnicode 17.0.0を示す値に更新されている(src/unicode/tables.go;l=6)。また unicode.Scripts マップには、Unicode 16.0で追加された新規スクリプト(Garay・Gurung_Khema・Kirat_Rai・Ol_Onal・Sunuwar・Todhri・Tulu_Tigalari など)が新たなエントリとして加わっている(src/unicode/tables.go;l=5399)。