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

2019 年 6 月 14 日 开源中国

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

详细的更新日志和更新说明请查看「阅读原文」。

开源中国征稿啦!


开源中国 www.oschina.net 是目前备受关注、具有强大影响力的开源技术社区,拥有超过 400 万的开源技术精英。我们传播开源的理念,推广开源项目,为 IT 开发者提供一个发现、使用、并交流开源技术的平台。


现在我们开始对外征稿啦!如果你有优秀的技术文章想要分享,热点的行业资讯需要报道等等,欢迎联系开源中国进行投稿。投稿详情及联系方式请参见:我要投稿


推荐阅读

采用 Linux 内核的 WSL 2 现已可用

华为邀请安卓开发者加入华为应用商店

2019 程序员高考-坑爹代码篇

Firefox 和 Chrome 拼性能,结果……

开源“圣经”作者:SaaS 是危险的蠢货

登录查看更多
0

相关内容

【干货书】现代数据平台架构,636页pdf
专知会员服务
253+阅读 · 2020年6月15日
最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
【微众银行】联邦学习白皮书_v2.0,48页pdf,
专知会员服务
165+阅读 · 2020年4月26日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
机器学习入门的经验与建议
专知会员服务
92+阅读 · 2019年10月10日
机器学习相关资源(框架、库、软件)大列表
专知会员服务
39+阅读 · 2019年10月9日
Python 3.8.0来了!
数据派THU
5+阅读 · 2019年10月22日
GitHub 热门:别再用 print 输出来调试代码了
Python开发者
27+阅读 · 2019年4月24日
LeetCode的C++ 11/Python3 题解及解释
专知
16+阅读 · 2019年4月13日
PyTorch 1.0 稳定版正式发布!
新智元
3+阅读 · 2018年12月8日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
发布TensorFlow 1.4
谷歌开发者
7+阅读 · 2017年11月23日
Adversarial Variational Bayes: Unifying VAE and GAN 代码
CreateAMind
7+阅读 · 2017年10月4日
Meta-Learning with Implicit Gradients
Arxiv
13+阅读 · 2019年9月10日
Attend More Times for Image Captioning
Arxiv
6+阅读 · 2018年12月8日
Arxiv
6+阅读 · 2018年10月3日
Few Shot Learning with Simplex
Arxiv
5+阅读 · 2018年7月27日
Arxiv
4+阅读 · 2018年4月26日
Arxiv
3+阅读 · 2017年12月14日
VIP会员
相关VIP内容
【干货书】现代数据平台架构,636页pdf
专知会员服务
253+阅读 · 2020年6月15日
最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
【微众银行】联邦学习白皮书_v2.0,48页pdf,
专知会员服务
165+阅读 · 2020年4月26日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
机器学习入门的经验与建议
专知会员服务
92+阅读 · 2019年10月10日
机器学习相关资源(框架、库、软件)大列表
专知会员服务
39+阅读 · 2019年10月9日
相关资讯
Python 3.8.0来了!
数据派THU
5+阅读 · 2019年10月22日
GitHub 热门:别再用 print 输出来调试代码了
Python开发者
27+阅读 · 2019年4月24日
LeetCode的C++ 11/Python3 题解及解释
专知
16+阅读 · 2019年4月13日
PyTorch 1.0 稳定版正式发布!
新智元
3+阅读 · 2018年12月8日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
发布TensorFlow 1.4
谷歌开发者
7+阅读 · 2017年11月23日
Adversarial Variational Bayes: Unifying VAE and GAN 代码
CreateAMind
7+阅读 · 2017年10月4日
相关论文
Meta-Learning with Implicit Gradients
Arxiv
13+阅读 · 2019年9月10日
Attend More Times for Image Captioning
Arxiv
6+阅读 · 2018年12月8日
Arxiv
6+阅读 · 2018年10月3日
Few Shot Learning with Simplex
Arxiv
5+阅读 · 2018年7月27日
Arxiv
4+阅读 · 2018年4月26日
Arxiv
3+阅读 · 2017年12月14日
Top
微信扫码咨询专知VIP会员