2010-09-19 18 views
16

Dokuzuncu madde işareti"Bütün dil her zaman kullanılabilir" Clojure durumunda mı? Paul Graham <a href="http://www.paulgraham.com/diff.html" rel="noreferrer">What Made Lisp Different</a> yılında

9. bütün dil her zaman kullanılabilir, diyor.

, derleme zamanı ve çalışma zamanı salt zaman arasında gerçek bir ayrım yoktur. Derleme sırasında kod okurken, okuduğunuzda veya çalıştırırken kodu derleyebilir veya çalıştırabilir ve çalışma zamanında kodu okuyabilir veya derleyebilirsiniz. salt anda

Running kod kullanıcıları Lisp'in sözdizimi yeniden programlamak sağlar; derleme zamanında çalışan kod, makroların temelidir; Çalışma zamanında derleme, Lisp'in Emacs gibi programlarda bir eklenti dili olarak kullanılmasının temelini oluşturur; ve çalışma zamanında okuma, programların s-ifadeleri kullanarak iletişim kurmasını sağlar ve XML olarak yeni keşfedilen bir fikir.

Clojure için bu son madde işareti noktası tutun mu?

cevap

13

Çalışma zamanını ve derleme zamanını Clojure'de serbest olarak karıştırabilirsiniz, ancak Common Lisp hala burada biraz daha esnektir (derleyici makroları ve simge makroları ve tam olarak desteklenen bir macrolet'un varlığı nedeniyle Clojure, havalı yaklaşımında bir avantaj sunar. sözdizimi-alıntıda otomagic sembol çözünürlüğü ile makro hijyene. Okuyucu şu anda kapalıdır, bu nedenle çalışma zamanı, derleme zamanı ve okuma zamanının serbest karıştırılması mümkün değildir . desteklenmeyen clever hacks aracılığıyla hariç


.

+5

Daha açıkçası, bu keyfi zamanlarda Oku 'kod 'etmek Clojure mümkündür ve daha sonra derlemek ve çalıştırmak; Ancak, Common Lisp'te olduğu gibi, okuma zamanında rasgele kod yürütmek için okuyucuya takmak mümkün değildir. –

+0

Kesmek seviyorum. Link için teşekkürler! : -D – missingfaktor

+3

Clojure, ## = okuyucu makrosuyla okuma zamanında rasgele kod çalıştırabilir. –

4

Dayanmayacak gelmez, sen keyfi ile birlikte bir Clojure vektörü olarak şablonunuzu olmasını sağlar static olduğu için ben Clojure biliyorum

Sadece Clojure içinde program yapılandırması emacs'dan gibi
(eval (read-string "(println \"Hello World!!\")")) 
Hello World!! 
nil 

, bir proje okuma zamanında yürütülecek kod.