例如,模式匹配是一種編程語言功能,可以通過宏添加到clojure語言中:http://www.brool.com/index.php/pattern-matching-in-clojure什麼語言功能可以通過庫添加到Clojure中?
可以將其他語言功能添加到該語言中?
例如,模式匹配是一種編程語言功能,可以通過宏添加到clojure語言中:http://www.brool.com/index.php/pattern-matching-in-clojure什麼語言功能可以通過庫添加到Clojure中?
可以將其他語言功能添加到該語言中?
關我的帽子的頂部,我有兩個例子,但我敢肯定有更多。
人們也可能會注意到David Nolens在[core.logic](http://github.com/clojure/core.logic)上的工作,他是mini-kanren。 – kotarak
我認爲這是一個愚蠢的問題要問,可以添加什麼,你應該問的是,你不能添加什麼。宏允許你掛鉤編譯器,這意味着你幾乎可以做任何事情。
此刻你不能你自己的語法添加到語言。 Clojure中沒有用戶extenseble閱讀器,這意味着你沒有任何讀者的宏(http://dorophone.blogspot.com/2008/03/common-lisp-reader-macros-simple.html)。這不是因爲技術問題,而是由Rich Hickey(Clojure的創造者)作出的更多決定。
你不能做的是落實需要虛擬maschine支持,例如添加尾部調用語義或goto
功能。
如果你想看到一些東西,已經做了:Are there any Clojure DSLs?
注意,這份名單是不是100%是最新的。
編輯:
因爲你似乎你把模式匹配爲例(它是宏的力量一個很好的例子),你真的應該看看match
庫。它探索了Clojure中最快速的模式匹配庫。 http://vimeo.com/27860102
您仍然可以添加自己的語法:只需用您自己的代碼替換整個Clojure閱讀器,並將其用作'(my-include「file.clj」)'宏。 –
可以有效地添加任何你喜歡的語言功能。
這從宏在編譯時構建任意代碼的能力來看:只要你能夠找出你需要生成的代碼來實現你的語言特性,就可以用宏來實現。
我看到的一些例子:
有幾個注意事項:
「如果你給某人Fortran,他有Fortran,如果你給Lisp一個人,他有他喜歡的任何語言。 Guy Steele –
用這種方法列出你無法添加到語言中的內容會更容易。不幸的是,'goto'就是其中之一。 –
JVM強加了一些限制,例如缺少正確的尾部調用(http://blogs.oracle.com/jrose/entry/tail_calls_in_the_vm)。 – ponzao