Skip to content

GoのruneとPlan 9のRuneは同じものか

このような話があったので調べた。

Plan 9ではC言語でRuneが使える。

GoのRuneと同じでしょうけど関係はどうなんでしたっけか。

Goにはunicode文字を表現する組み込みの型としてruneがある。これはPlan 9のRuneが元になっていて、Plan 9のRuneはu.hで定義されている。

typedef uint Rune;

u.hはアーキテクチャごとに異なるが、Rune型は全部同じだった。また、libc.hで有効なコードポイントの定数が用意されている。

/* 一部だけ抜粋 */
enum
{
Runeerror = 0xFFFD, /* decoding error in UTF */
Runemax = 0x10FFFF, /* 21-bit rune */
};

Goのruneは組み込み(builtinパッケージ)で

type rune = int32

で、unicodeパッケージで

// 一部だけ抜粋
const (
MaxRune = '\U0010FFFF' // Maximum valid Unicode code point.
ReplacementChar = '\uFFFD' // Represents invalid code points.
)

とあるので、Goの方が充実しているなどの差はあるが、もの自体は同じ。