t**r 发帖数: 3428 | 1 最近在用clj干活。顺便看了看macro 倒吸一口冷气。这玩意真心掌握不了。 |
h*i 发帖数: 3446 | 2 宏其实很简单的,就是一种编译前的预处理语法而已。
但Clojure社区现在不鼓励用宏了。在Clojure早期的时候,很多库还是用了不少宏的,
比如Storm,compojure,等等。但现代的clj库几乎都不用宏了。
这有两个原因:
1. Clojure程序员追求好的composibility。在组合能力上,宏不如函数,而函数又不如
纯数据,所以现在用Clojure实现一个功能的优先级是:
data > function > macro
能用数据作的事不用函数做,能用函数的不用宏。比如datomic,onyx等等项目,都是
以数据结构为中心的,比较declarative。
2. 从历史上看,宏的日常使用容易造成社区分裂,参见Common LISP。
总而言之,用Clojure不用宏没关系。
【在 t**r 的大作中提到】 : 最近在用clj干活。顺便看了看macro 倒吸一口冷气。这玩意真心掌握不了。
|
n*w 发帖数: 3393 | 3 有没有什么情况用宏特别合适?
不如
【在 h*i 的大作中提到】 : 宏其实很简单的,就是一种编译前的预处理语法而已。 : 但Clojure社区现在不鼓励用宏了。在Clojure早期的时候,很多库还是用了不少宏的, : 比如Storm,compojure,等等。但现代的clj库几乎都不用宏了。 : 这有两个原因: : 1. Clojure程序员追求好的composibility。在组合能力上,宏不如函数,而函数又不如 : 纯数据,所以现在用Clojure实现一个功能的优先级是: : data > function > macro : 能用数据作的事不用函数做,能用函数的不用宏。比如datomic,onyx等等项目,都是 : 以数据结构为中心的,比较declarative。 : 2. 从历史上看,宏的日常使用容易造成社区分裂,参见Common LISP。
|
h*i 发帖数: 3446 | 4 http://www.lispcast.com/when-to-use-a-macro
★ 发自iPhone App: ChineseWeb 8.7
【在 n*w 的大作中提到】 : 有没有什么情况用宏特别合适? : : 不如
|
e*******o 发帖数: 4654 | 5 Re
我觉得lisp 不是死在括号上 是死在macro上
lisp 类的语言声称syntax简单 但是加上macro 就意味着你永远学不完它的syntax
不如
【在 h*i 的大作中提到】 : 宏其实很简单的,就是一种编译前的预处理语法而已。 : 但Clojure社区现在不鼓励用宏了。在Clojure早期的时候,很多库还是用了不少宏的, : 比如Storm,compojure,等等。但现代的clj库几乎都不用宏了。 : 这有两个原因: : 1. Clojure程序员追求好的composibility。在组合能力上,宏不如函数,而函数又不如 : 纯数据,所以现在用Clojure实现一个功能的优先级是: : data > function > macro : 能用数据作的事不用函数做,能用函数的不用宏。比如datomic,onyx等等项目,都是 : 以数据结构为中心的,比较declarative。 : 2. 从历史上看,宏的日常使用容易造成社区分裂,参见Common LISP。
|
t**r 发帖数: 3428 | 6 meta programming c++ 也可以搞 比较难写就是了。
【在 e*******o 的大作中提到】 : Re : 我觉得lisp 不是死在括号上 是死在macro上 : lisp 类的语言声称syntax简单 但是加上macro 就意味着你永远学不完它的syntax : : 不如
|
e*******o 发帖数: 4654 | 7 难写的好处是提高了bar
不是随便一个smart ass 都随时想搞一下
【在 t**r 的大作中提到】 : meta programming c++ 也可以搞 比较难写就是了。
|