文字列型

  • string

stringはNimで使われる通常の文字列型です。文字列型はchar型の配列ですが、ヌル終端であることと長さを保持している点が特別です。

NimはキャラクタセットとしてUnicodeを採用し, 基本的なエンコーディング方式としてUTF-8を採用することでマルチバイト文字をうまく扱うことができます。

echo "Hi"  # => "Hi"
echo "文字列" # => "文字列"

# スライス操作も可能, ただしバイト列を扱っていることに注意
# echo "文字列"[0 .. ^2] # こちらは表示崩れを引きおこす
echo "文字列"[0 .. ^4] # => "文字"

let str = "日本語"
echo len(str)  # => 9: バイトの長さが返ってくる.

# 文字列の長さが欲しい場合, runeLenを使うことができる.
import unicode
echo runeLen(str) # => 3

# 普通にforを適用した場合, バイト列に対する反復操作になる.
for c in str:
  echo $c.int

# 各文字に対する反復操作はunicodeモジュールのutf8を使う.
for c in str.utf8:
  echo c
  • cstring

cstringは主にCとの連携で使う文字列型で、Cにおいてchar *と同じものを意味します。

内部的にはGCの回収対象で、回収されてしまうことがありますが、GCはスタックのルートを控えめに監視しているので、ほぼ回収されることはありません。

ですが、もし問題が起きる場合はGC_refGC_unrefを使用してGC回収を防ぐことができます。