CUE 言語仕様を読む – 数値リテラル

English Version

https://cuelang.org/docs/references/spec/#numeric-literals

その前に、新しいバージョンが出ていたのでアップデート。

$ go install cuelang.org/go/cmd/cue@latest

$ cue version
cue version v0.5.0

go version go1.18.9
       -compiler gc
     CGO_ENABLED 1
          GOARCH arm64
            GOOS linux

一通り試す。

$ cat numeric.cue
dec: 123
dec_long: 123_456_789
m: 1K
mi: 1Ki
bin: 0b10000
bin_long: 0b100000000_00000000
oct: 0o700
oct_long: 0o700_000_000
hex: 0xff
hex_long: 0xdead_beef
f: 0.1
fn: .2
e: 1e-1
e2: 1.2e-1

$ cue eval numeric.cue
dec:      123
dec_long: 123456789
m:        1000
mi:       1024
bin:      16
bin_long: 65536
oct:      448
oct_long: 117440512
hex:      255
hex_long: 3735928559
f:        0.1
fn:       0.2
e:        0.1
e2:       0.12

i 付マルチプレクサ(Mi とか)の前の数値に小数点は使えない? 仕様書では使える様に見えるが。ソースを調査するチャンスかも。

$ cat numeric2.cue
m: 1.2Mi

$ cue eval numeric2.cue
m: parse error: number cannot be represented as int:
    ./numeric2.cue:1:4

CUE 言語触ってみた

English Version

プログラムの定義ファイルの形式どうしようかなと、今どきの形式を調べている際に、CUE 言語という形式を知った。

コメントや条件分岐、繰り返し処理が可能… さらに Go 言語のライブラリが使える… とちょっと機能盛沢山すぎる気もするが。

とりあえず触ってみた感じ。

インストール

$ go install cuelang.org/go/cmd/cue@latest
$ cue version
cue version v0.4.3 linux/arm64

こんな定義ファイルで

$ cat persons.cue
#Person: {
        name: string
        level: int & >=1 & <=10
        role: "Administrator" | *"Developer"  // Developer is the default
}

alicee: #Person
alicee: {name: "Alice", level: 6 }

bobsmith: #Person
bobsmith: {name: "Bob", level: 5 }

carryz: #Person
bobsmith: {name: "Carry", level: 5 }

Administrators: [ "alicee" ]

for person in Administrators {
        "\(person)": {
                role: "Administrator"
        }
}

評価するとこう。

$ cue eval persons.cue
$ cue eval persons.cue
#Person: {
    name:  string
    level: uint & >=1 & <=10
    role:  "Developer"
}
alicee: {
    name:  "Alice"
    level: 6
    role:  "Administrator"
}
bobsmith: {
    name:  "Bob"
    level: 5
    role:  "Developer"
}
carryz: {
    name:  "Carry"
    level: 5
    role:  "Developer"
}
Administrators: ["alicee"]