スタック効果コメント

コメントの中でも特に重要で、コードの一部といってもいいほどなのは、スタック効果コメント( stack effect comment )です。単にスタックコメント ( stack comment )と呼ばれることもあります。これはワード(関数)とメソッドを新たに定義する際に付けられるもので、そのワード(関数)やメソッドが、入力パラメターとしていくつのスタックアイテムを消費し、出力としていくつの値をどの順でスタックに積み上げるかを記述するものです。例えば、
: Word1 ( n addr -- n1 n2 ) .... ;
は、"Word1"はトップスタックにおいてあるアドレス値(多くはポインタ値)とその下においてある何らかの数値を消費して、実行結果として二つの数値"n1", "n2"を残すということを宣言しています。実行完了直後、トップスタックは"n2"になります。つまり、"--"を挟んで左側が入力アイテム、右側が出力アイテムをそれぞれ表わし、スタックの深さは、コメントの「左から右」にスタックの「下から上」となります。

浮動小数点数がパラメターとして必要である場合には、浮動小数点数スタックが必要です。このスタックは、通常の整数スタックとは区別されますので、コメントも別々につけます。浮動小数点数スタックについてのコメントには、初めに"F:"とつけて区別します。例えば、整数パラメタを2つ、浮動小数点数パラメターを1つ消費して、整数と浮動小数点の出力をそれぞれひとつずつ出力するワードのコメントは、
: Word2 ( n1 n2 -- n ) ( F: r -- r' ) ...
となります。

コメントに使うアルファベットを簡単に説明しましょう。"n"はnumberで符号付の数値を表わします。符号なし数は"u"と書きます。"addr"は、addressでメモリーの番地(アドレス)の値です。文字のASCII値の場合には"c"または"char"と書きます。特に数値のタイプに関係がないワードのスタック効果コメントには"x"を使います。適宜、数字を添えて同種のものを識別します。この他、Mopsでは、addrと組で"addr len"あるいは"taddr tlen"のような形で"len"ないし"tlen"があります。これは、文字列(ストリング)を格納しているバッファ(メモリー)のアドレスとバイト長を表わしているもので、"len"はバイト長にあたります。"t-"を頭につけるのは、「TEXTの」という趣旨でしょう。


関連項目:






最終更新:2018年12月11日 21:27