
程式的意義
|
51
相較之下,這種大步驟實作物使用了更多的堆疊,完全依賴它來記住我們位在整個運算
的位置,在執行運算時,以較小的運算構成大運算,並且持續記錄還有多少估算要執
行。看起來像是一次呼叫
#evaluate
實際轉換成一組遞迴呼叫,而且每個都在語法樹更
深處估算子程式。
這種差異凸顯了每種作法的目的。小步語意假設了能執行小操作的簡單抽象機,也因此
包括如何產生有用的中間結果的明確細節;大步語意將組裝整個運算的負荷放在執行它
的機器或人,要求他持續追蹤許多中間的子目標,因為他以單一操作就將整個程式轉換
成最終的結果。根據我們希望以語言使用的操作語意(或許建置了有效率的實作物),
某一種或另一種作法可能更為適合。
大步語意規範真實程式語言最具影響力的使用,是標準 ML 程式語言原始定義的第 6
章(
http://www.lfcs.inf.ed.ac.uk/reports/87/ECS-LFCS-87-36/
),這裡以大步驟的風格解釋
了 ML 所有的執行階段行為。依照這個範例,OCaml 的核心語言是以大步語意(
http://
caml.inria.fr/pub/docs/u3-ocaml/ocaml-ml.html#htoc7
)補足它更詳細的小步驟定義。
W3C 也使用大步驟操作語意:XQuery 1.0 和 XPath 2.0 的規格(
http://www.w3.org/TR/
xquery-semantics/
)使用數學推理規則描述應該如何估算它的語言,而且 XQuery 和
XPath Full ...