3

テールコールの最適化がないという制限 (clojure 実装ではなく jvm の制限) を除けば、clojure 実装は優れていると人々は言います。

http://lambda-the-ultimate.org/node/2547

TCO を Python に実装すると犠牲になると言われてきました

  • スタック トレース ダンプ、および
  • デバッグの規則性。

テールコール最適化の重要性と、Python がそれを必要とする理由を説明してください

TCO の jvm 実装のために同じ犠牲を払わなければならないでしょうか? 他に何かを犠牲にする必要がありますか?

4

3 に答える 3

2

JVM にテール コールを追加する作業が現在進行中です。いくつかの詳細について話しているwiki ページがあります。

于 2009-06-18T16:03:42.473 に答える
0

はい、一般的に、TCO を実装すると完全なスタック トレースを取得できなくなります。TCO の要点は追加のスタック フレームの作成を避けることであるため、これは避けられません。

Clojure には、現在の JVM バージョンでのこの制約を回避するための、スタックを消費しない「再帰」機能があることも注目に値します。

例:

(defn triangle [n accumulator] 
  (if 
    (<= n 0)  
      accumulator
      (recur (dec n) (+ n accumulator))))

(triangle 1000000 0)

=> 500000500000     (note stack does not explode here!)
于 2010-06-01T10:53:54.740 に答える