有人在用Nim 语言么, 谈谈感受 ?

题叶
  • 17.3k

昨天晚上看评论, 看起来性能非常高, 同时语法非常像 Python. 感觉有点逆天...
有没有用过的同学献身说法一下这门语言写起来感觉怎么样?

http://hookrace.net/
https://github.com/logicchains/LPATHBench/blob/master/writeup.md

nimimport bpg, os

proc writePPM(img, filename) =
  var imgInfo: ImageInfo
  discard img.getInfo(addr imgInfo)

  let (w,h) = (imgInfo.width.int, imgInfo.height.int)
  var rgbLine = newSeq[uint8](w * 3)

  var f = open(filename, fmWrite)
  f.writeln "P6\n", w, " ", h, "\n255"

  discard img.start(OUTPUT_FORMAT_RGB24)
  for y in 1..h:
    discard img.getLine(addr rgbLine[0])
    discard f.writeBuffer(addr rgbLine[0], w * 3)

  f.close()

if paramCount() != 1:
  stderr.writeln "Usage: decode img.bpg"
  quit 1

var
  buf = readFile paramStr(1)
  img = bpg.open()

if img.decode(cast[ptr uint8](addr buf[0]), buf.len.cint) < 0:
  stderr.writeln "Could not decode image"
  quit 2

img.writePPM("out.ppm")
img.close()
回复
阅读 13.6k
4 个回答
mogu
  • 16

优点:语法的强一致性,优雅,可选gc,编译到其他语言(c/cpp/oc/javascript),比rust的更优雅的卫生macro,目前为止地球上最强的编译期能力,可以在编译期执行有副作用的nim代码,支持几乎所有的泛式,什么oo,泛型,函数式,依赖类型应有尽有(除了逻辑式,然而有macro就可以造),强大的属性能力,几乎可以无限扩展编译器的能力

缺点:编译器现在的提示不够准确,bug还蛮多的,主导开发的人有点少,很多库的实现质量不行,人毕竟太少了,没有原生的match可用(已经有人用macro造了一个可用的match)

有兴趣的可以加群 Expert Nim: 499795267
相互交流学习

当年学C++的时候就觉得应该设计成类似nim这样
以及相比之下,之前用rust写个控制台工具都感觉稍微有点蛋疼

charliecui
  • 2.4k

没用过,不过我看了下评测,这个评测是作者写的吧。。。不过测评条目少了些,感觉这语言急着上位啊,记得以前看Google内部的评测go,scala,java,C++的,最后google的内部结论还是C++强,go还有待发展,这个评测直接灭掉C++了。。。明显急着上位的节奏啊。坐等其他用过的人的回复,关注。

shuxiang
  • 382

语法是学的python和pascal, 因为有pascal的特点, 有些代码看起来怪怪的; 语法比rust简洁, 毕竟rust的目标是c++. 内存分配和回收的方式比较特别, 但没有rust的ownership那种比较新的东西. 虽然和cython定位不一样, 但体验上感觉就是个cython差不多的东西. 如果要我选go和nim, 肯定是nim了, 呵呵. nim和rust比较难抉择, rust太复杂, nim又缺些rust才有的特性

nim最让我不爽的地方是没有模式匹配!!!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏