( wallen | 2007. 11. 21., sze – 14:45 )

A Scheme, Lisp, Smalltalk, Factor, Haskell és egyéb dinamikus nyelvek már rég nem interpretáltan futnak. A compiler része a rendszernek, ami rendes assembly-re fordít és az fut. A type system habár dinamikus attól még compile time mindenféle ellenőrzéseket végez. Ha például a Haskell compiler type error-t jelez az igen nagy valószínűséggel egy program hiba, míg ugyanz C++/Java/C#-ban gyakran csak azt jelenti, hogy még nem magyaráztad meg rendesen a compilernek, hogy az a kód úgy jó ahogy van.

Compiler ügyben csak hogy egy optimalizációt említsek: az hogy valami egész típusú még nem jelenti azt, hogy be kell férjen 32 vagy 64 bitbe, de azt sem hogy folyton a heap-en kell foglalni. Ha a szám elég kicsi akkor benne van egy CPU regiszterben, ha nem akkor a heapre kerül. Ez transzparens, tehát írhatsz olyat, hogy:

(iterate (for i :from 0 :to 1000000000000000000)
(print i))

és amíg az i belefér addig másik kód path (gyorsabb) fut, amikortól nem onnan meg a heapen tolja.

Hogy melyik a legjobb implementáció arra nem tudok válaszolni, mivel nem ismerem mindegyiket nem beszélve egyéb peremfeltételekről (hardware/software platform support, ingyenes, nyelvi featurok, compiler, stb.)

Scheme: http://en.wikipedia.org/wiki/Scheme_%28programming_language%29
CL: http://en.wikipedia.org/wiki/Common_Lisp
Lásd az implementáció szekciókat.

DSL: eszembe jutott egy jó példa: hogyan szervezhetsz például ciklusokat egy Common Lisp-ben írt library! segítségével. http://common-lisp.net/project/iterate/doc/index.html

Természetesen ez is assemblyre fordul, annak ellenére hogy ez csak egy lib.

levy