分享 静态语言元编程哪家强: Nim

luikore · 2015年01月24日 · 最后由 luikore 回复于 2015年01月26日 · 16935 次阅读

Nim (原来叫 Nimrod) 是一个缩进语法,编译到 C++/ObjC/JS 的静态语言,而且:

有卫生宏,可以让用户添加新语法例如 list comprehension

https://github.com/def-/nim-unsorted/blob/master/listcomprehensions.nim

可以自己插入编译规则

http://nim-lang.org/trmacros.html

模式语言改写 AST 超简单!比 Java 的 annotation processing tool 好一万倍

const 支持编译期计算,不需要难用得一 B 的 C++ 模板了

早就该这么做了...

特别的标识符等价规则:首字符大小写敏感,其余字符不管下划线和大小写

例如 fooBar_BAZ 等价于 foo_barbaz, 但不等价于 FooBar_BAZ

作用:不管你用的库是驼峰党还是蛇党写的,自己的代码依然可以维持统一的风格...

call unification: foo.bar() 相当于 bar(foo)

C++ 也要加这个 feature 啦

directive guided syntax

语法可以微调,例如 #! strongSpaces 可以启用 strong spaces 特性,提高无空格的操作符的结合度

pragma 调整程序的行为

例如加入 NaN 和 Infinity 检查

{.NanChecks: on, InfChecks: on.}

GC 可以控制步进时间

(还没看实现,难道是 G1GC?)

...

现在尝鲜很简单,到 http://nim-lang.org/download.html 下载一个 zip 包,./build.sh 就好了

hello world:

"hello".echo
echo("nim~~")
bin/nim -r c hello.nim

参考这两篇博客

http://hookrace.net/blog/what-is-special-about-nim/ http://hookrace.net/blog/what-makes-nim-practical/

實在學不了這麼多語言怎麼辦...

卫生宏,这个属于听起来感觉怪怪的。。。难道是我思想邪恶了。。。

#1 楼 @blacktulip 我也是,经常止步于 hello world...

#2 楼 @hisea 从 hygienic macro 翻译来的,hygien 就是卫生,很多写 lisp 的书都这么讲...

第一次听说这个好像是好几年前了。。。看起来还挺厉害的

能漂亮的写出宏的语言都值得一看。。。

@luikore 大覺得 Nim 比 Ruby 怎樣?

#5 楼 @ksec l 大只是看看 nim 的优点,没有拿它和 ruby 比得意思

#5 楼 @ksec Nim 好处是可以用简单的代码编译出比 C 还快的结果,不过好像基本没法函数式编程。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号