一文字の文字列は必ずinternされるように

しました。
さらに、小さい文字列は変数に埋め込む形にしました。

struct BASE{

  enum{
    SMALL_STRING_MAX = (sizeof(int_t) / sizeof(char_t))
  };

  struct SmallString{
    char_t buf[SMALL_STRING_MAX];
  };

  int_t type_;

  union{
    int_t value_;
    float_t fvalue_;
    Base* pvalue_;
    SmallString svalue_;
  };

};

Xtalからはもちろん、C++から使う場合でも、それが大きい文字列か、小さい文字列か、特に意識することなくプログラミングできます。

StringPtr small = "a"; // small変数自体に埋め込まれる
StringPtr large = "large string"; 

printf("%s, %s\n", small->c_str(), large->c_str());


文字列にはもう一つ仕掛けを。
文字列同士の連結にRope*1のような*2実装を取り入れました。

ret: "";
10000.times{
  ret ~= "aaaaaaaaaaaaaaaaaaaaaa";
}

のようなコードを書いても、速度が激しく落ちないようになりました。