命令式编程语言 Nim 0.20 发布,1.0 还会远吗?

局长
 局长
发布于 2019年06月13日
收藏 10

Nim 团队已于上周发布了 Nim 0.20,官方表示这是一个重大更新版本,它包含超过 1000 个 commit,也算是标志着 1.0 候选版的推出。

Nim 0.20 引入了 1.0 所需的一些破坏性变更,这些变更将会被引入到 Nim 1.0 稳定版中,并且目前也没计划继续引入更多的破坏性变更。

所以 Nim 团队称这个版本为“事实上的 Nim 1.0 RC1”。他们还解释了为什么不直接发布 1.0,主要是希望社区能彻底测试 Nim 0.20,并找出可能是破坏性变更导致的 bug。更重要的是,1.0 的发布意味着 Nim 已到达一个稳定阶段,将不再进行任何重大的修改。所以团队希望在 0.20 基础上发布 1.0 候选版本,最终才是 1.0 稳定版。

Nim 0.20 新特性

not 永远是一元操作符

let a = false

# v0.19:
assert not a # Error: type mismatch: got <proc (cond: untyped, msg: string): typed, bool>
assert(not a) # workaround

# v0.20:
assert not a

针对整数和浮点数转换进行更严格的编译时检查

# v0.19:
const b = uint16(-1)
echo b # 65535

# v0.20:
const b = uint16(-1)
# Error: -1 can't be converted to uint16
const c = not uint16(0)
echo c # 65535

面向常量和for循环变量的元组拆包

const (d, e) = (7, "eight")
# v0.19: Error: identifier expected, but got '('

# v0.20:
echo d # 7
echo e # eight


let f = @[(51, 10), (23, 25)]

for (x, y) in f: # v0.19: Error: identifier expected, but got '('
  echo x + y
# v0.20:
# 61
# 48

默认情况下对哈希集和表进行初始化

import sets, tables

var s: HashSet[int]

s.incl(5)
# v0.19: `isValid(s)` Error: unhandled exception: The set needs to be initialized. [AssertionError]
# v0.20:
echo s # {5}


var t: Table[char, int]
t['a'] = 10
# v0.19: Error: unhandled exception: index out of bounds [IndexError]
# v0.20:
echo t # {'a': 10}

针对 case 语句提供更友好的错误消息

type
  MyEnum = enum
    first
    second
    third
    fourth

proc foo(x: MyEnum): int =
  case x
  of first: 1
  of second: 2
  of third: 3
  of fourth: 4
  else: 99

# v0.19: compiles
# v0.20: Error: invalid else, all cases are already covered


proc bar(x: MyEnum): int =
  case x
  of first: 1
  of third: 3

# v0.19: Error: not all cases are covered
# v0.20: Error: not all cases are covered; missing: {second, fourth}

在迭代期间,表的长度不得更改

import tables

var xs = {1: "one", 2: "two", 3: "three"}.toTable

for x in xs.keys:
  if x mod 2 == 0:
    xs[10*x] = "a lot"
echo xs

# v0.19: {200: "a lot", 1: "one", 2: "two", 3: "three", 20: "a lot"}
# v0.20: Error: unhandled exception: the length of the table changed while iterating over it [AssertionError]

针对索引超出范围的情况,提供更友好的错误消息

let a = [10, 20, 30]

echo a[5]
# v0.19: Error: index out of bounds
# v0.20: Error: index 5 not in 0 .. 2

详细的更新日志和更新说明请查看发布公告

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:命令式编程语言 Nim 0.20 发布,1.0 还会远吗?
加载中

精彩评论

最后的夏天
最后的夏天
rust没人碰?
我就看看_不说话
没人用的语言都不要碰,比如nim rust.
站在风口,垃圾语言objc都能飞,国内都是调库党,没有研发能力.
开源中国最大五毛
开源中国最大五毛
没人用的语言建议都别碰,毕竟大家都不是搞精准扶贫工作的,没必要和钱过不去。

特别针对如下语言:nim、d、crystal。

最新评论(12

d
dwcz
没撒,新东西,只是在语法层玩花活。
回去干活
回去干活
语法是好的,只是背后没有推广的大佬跟是吧。
开源中国最大五毛
开源中国最大五毛
没人用的语言建议都别碰,毕竟大家都不是搞精准扶贫工作的,没必要和钱过不去。

特别针对如下语言:nim、d、crystal。
开源中国-首席村长
开源中国-首席村长
貌似不是一般的远
zhenruyan
zhenruyan
性能很好 语法很懵 核心库基本上全都是模仿的python的核心库 但是大佬们都说别用 😂😂😂😂
幻影分身
幻影分身
十年如一日, python的高效加c的效率; 我看好他, nim
我就看看_不说话
没人用的语言都不要碰,比如nim rust.
站在风口,垃圾语言objc都能飞,国内都是调库党,没有研发能力.
最后的夏天
最后的夏天
rust没人碰?
冰力
冰力
@我就看看_不说话 D语言HuntLabs有研发能力,国内使用的人也是很少,从核心库到各种框架,优秀的语言语言投入研发力量,国内的确是都在写都是自研业务逻辑写bug..
fys
fys
还不如直接用C语言呢,这语法太蹩脚了
7月
7月
这个能不能不经过C直接编译为二进制?
kjpioo
kjpioo
不能。官方文档写了它是先翻译为c代码再得到二进制的
返回顶部
顶部