文字列オブジェクト

抽象論

Forth一般では、文字列変数にはバイトアレイを利用するのが普通です。これは、大域変数としてあらかじめ必要なメモリー領域を確保しておくものです。これに対してMopsにはヒープを利用するハイレベルの文字列オブジェクトが準備されています。ここでは、Mops特有(Forth規格にはないという意味)の文字列オブジェクトの基本構造の説明を試みます。PowerMopsを前提とします。

文字列クラスには、二つのクラスが準備されています。一つはStringクラスで、これはMopsにはじめからロードされています。もう一つはその下位クラスのString+クラスで、zString+ファイル(iMopsではString+)をロードすれば利用可能となります。クラス階層は、
String  => ByteString => String+
となっていますが、かなりの数のメソッドが上書き(オーバーライド)されています。

クラス階層を頭から書き出せば、
Object => LongWord => Handle =>String .....
となります。LongWordクラスは4バイトの数値を格納するデータクラスの基礎を提供しているクラスです(ジェネリッククラス)。Stringクラスはまたhandleクラスの下位クラスです。これはつまり、Stringオブジェクトの文字列データは、伸縮自在であるということをも意味します。大雑把にいえば、Stringクラスは文字列データを自由利用メモリ(ヒープメモリ)に適当な領域を取って格納し、必要なときにその場所にアクセスできるための4バイトデータ(マスターポインタ)だけをオブジェクトデータとして保有することになります。

Stringオブジェクトは宣言によって生成されます:
STRING  MyString
STRING+  MyString+

この段階では、もちろんまだ中身はありません。


関連項目:






最終更新:2018年12月15日 22:18