2011-06-13 1 views
1

プログラミング言語理論では、インラインブロックとファンクションブロック、何が違うのですか?

スタックフレームに関連するブロックは2種類あります。インラインブロックおよびファンクションブロック。

インラインブロックファンクションブロックの違いは何ですか?

そして、次のようなコードがあるとします。

int x = 1; 
g(z) = z + x; 

インラインブロックによれば、関数gは変数xにネストされていますか?

答えて

1

機能ブロック:
void func(){...}; // CまたはC++

中(defunのFUNC ...)// CLISPで

楽しいFUNC()= ... // mlの

にファンクションブロックはラップブロックです関数。
Cでは、関数が復帰すると、関数のアクティベーションレコードがスタックから削除されます。
しかし、ML、CLISPなどの関数型言語では、関数の戻り値は必ずしもスタックフレームの削除を意味しません。
この機能は後で使用できるためです。

インラインブロックは、ネストされた構造を示すブロックです。

int x = 1; 
g(z) = z + x; 

関数gは、インラインブロックを使用する場合、関数gだけ関数gの活性化レコードを使用して、xの値を知らない1と関数gを変数xをとります。しかし、関数gがxの値を知ることができる理由は、静的リンクを使用し、静的リンクが最も近いネスティングブロックを指すことです。

ファンクションブロックとインラインブロックの違いは、ファンクションブロックがスタックフレームから常に削除されないことです。

関連する問題