Nim 发布 0.19 版本 ,命令式编程语言

栏目: 软件资讯 · 发布时间: 7年前

内容简介:影响后向兼容的改变 ``future``标准库重命名为``sugar``。 ``macros.callsite`` 现在被废弃, 因为引入了``varargs``。 只有一个元素的匿名元组现在可以被写作``(1,)``,尾随逗号。该样例的底层AST是``nnkTupleC...

影响后向兼容的改变

  • ``future``标准库重命名为``sugar``。

  • ``macros.callsite`` 现在被废弃, 因为引入了``varargs``。

  • 只有一个元素的匿名元组现在可以被写作``(1,)``,尾随逗号。该样例的底层AST是``nnkTupleConstr(newLit 1)`` 。``nnkTupleConstr`` 是你的宏需要处理的新的结点类型。

  • JS目标的``cstring``索引现在被映射成``charCodeAt``。

  • 导致一个对象切片成自身的超类型的赋值现在会在运行时被阻止. 使用``ref object``的继承代替``object`` 的继承避免这个问题。

  • ``not nil``类型注释现在通过``{.experimental: "notnil"}``被显式使能,尽管这个特性在Nim容器中表现不尽如人意。

  • 解析器现在对二元操作符旁不一致的空格给出警告,加为他们很容易和一元操作符混淆。这个警告将来会变为错误。

  • 八进制字面值``'c``和``'C'`` 前缀被废弃,以使语言与标准库一致(e.g. ``parseOct``).

  • import 目录的点风格(例如``import path.to.module`` 代替``import path/to/module``) 已经被废弃。

标准库的变化

  • ``re.split`` 空的正则表达式现在返回字符串的每个字符。

  • ``system.instantiationInfo`` 返回的元组现在有一个第三个字段,包含了实例化的列.

  • ``cookies.setCookie`` 不再对过期日期假定UTC。

  • ``strutils.formatEng`` 不再对它的``unit`` 参数区分``nil`` 和``""`` 。 相反,空格通过新参数``useUnitSpace``控制。

  • ``times.parse`` 和``times.format`` 被重写。方法签名一致,所以他应当没有破坏性。不过新实现有点严格,可能会带来破坏性,比如``parse("2017-01-01 foo", "yyyy-MM-dd")`` 现在将会产生错误。

  • ``times`` 模块的``proc `-`*(a, b: Time): int64``  返回值类型变成了``times.Duration`` 以支持更好的时间精度。该方法不再被废弃。

  • ``times.Timezone`` 现在是一个不可变的引用类型,必须显式使用构造函数``newTimezone``初始化。

  • ``posix.Timeval.tv_sec`` 类型改为``posix.Time``。

  • ``math.`mod` `` 浮点取模现在和整数取模``mod`` (之前它使用 Python 那样的向下取整除法)。使用``math.floorMod`` 保持原来的行为。

  • 字符串输入``unicode.isUpper`` 和``unicode.isLower`` 现在要求第二个强制参数``skipNonAlpha``。

  • 字符串输入, ``strutils.isUpperAscii`` 和``strutils.isLowerAscii`` 现在要求第二个强制参数``skipNonAlpha``。

  • ``osLastError`` 现在被标注为``sideEffect``。

  • ``parseHexInt`` 和``parseOctInt`` 方法现在当只有有效前缀时失败, 例如,"0x" 十六进制整数前缀.

  • ``terminal.setCursorPos`` 和 ``terminal.setCursorXPos`` 现在在POSIX的0基坐标工作正常(之前, 你需要使用1基坐标; Windows 一直是正确的)。

  • ``lineInfoObj`` 现在返回绝对路径而不是项目路径。``lineInfo``, ``check``, ``expect``, ``require``等会用到它。

  • ``net.sendTo``不再返回整型,现在发起一个错误``OSError``。

  • `threadpool`的`await` 和其派生被重命名为`blockUntil` 以避免和`async` 宏的`await` 混淆。

编译器的破坏性变化

  • 未归档的``#? braces`` 解析模式被移除。

  • 未归档的 PHP 后端被移除。

  • 原生代码目标的`nimcache`` 默认位置改变.。详细信息阅读[the compiler user guide](https://nim-lang.org/docs/nimc.html#generated-c-code-directory) .

库增补

  • ``re.split`` 现在也支持 ``maxsplit`` 参数以和``strutils.split``保持一致.

  • 添加``system.toOpenArray`` 以支持零拷贝切片操作. JavaScript 目标还没有获得支持.

  • 添加``getCurrentDir``, ``findExe``, ``cpDir`` 和``mvDir`` 方法到``nimscript``.

  • ``times`` 模块现在支持纳秒时间精度.

  • 添加``times.Duration`` 类型代表固定间隔时间.

  • 为不同时间单位间换算添加``times.convert`` 方法,比如,天到秒.

  • 添加有```cmp``` 参数的``algorithm.binarySearch[T, K]`` 方法 .

  • 添加方法``algorithm.upperBound``.

  • 添加反双曲三角函数, ``math.arcsinh``, ``math.arccosh`` 和``math.arctanh`` .

  • 添加余切, 正割和余割方法``math.cot``, ``math.sec`` ,``math.csc``; 和它们的双曲, 反函数和反双曲函数, ``math.coth``, ``math.sech``, ``math.csch``, ``math.arccot``, ``math.arcsec``, ``math.arccsc``, ``math.arccoth``, ``math.arcsech`` ,``math.arccsch`` .

  • 为向下整除添加``math.floorMod`` 和``math.floorDiv`` .

  • 为有理数添加``rationals.`div```, ``rationals.`mod```, ``rationals.floorDiv`` ,``rationals.floorMod`` .

  • 为openArray元素的积添加``math.prod`` .

  • 添加 ``parseBinInt`` 来解析字符串中的二进制, 返回其值.

  • parseutils 模块的``parseOct`` 和``parseBin`` 现在也像``parseHexInt``一样支持``maxLen`` 参数.

  • 为内存映射文件添加``flush`` 方法.

  • 添加``MemMapFileStream``.

  • 添加一个简单的解释性事件解析模板``eventParser`` 到``pegs`` 模块.

  • 添加``macros.copyLineInfo`` 以 从其它节点复制lineInfo.

  • 添加``system.ashr`` 整数代数右移.

库的变化

  • ``macros.astGenRepr``, ``macros.lispRepr`` 和``macros.treeRepr``现在一致地转义字符串字面值.

  • ``macros.NimSym`` 和``macros.NimIdent``现在被废弃,用更一般的``NimNode``代替.

  • ``macros.getImpl`` 现在包含类型的pragma,而不是略过.

  • ``macros.hasCustomPragma`` 和 ``macros.getCustomPragmaVal`` 现在也支持``ref`` 和``ptr`` 类型, 类型pragmas和变式字段.

  • 为了一致性和正确性``system.SomeReal``现在叫做``SomeFloat`` .

  • ``algorithm.smartBinarySearch`` 和``algorithm.binarySearch`` 现在加入了``binarySearch``. ``smartbinarySearch`` 废弃.

  • `terminal` 模块现在导出额外的方法为了生成ANSI颜色码字符串.

  • 添加``CritBitTree[int].inc``方法的``val`` 参数.

  • `unittest`` 中test块的异常现在错误消息中显示它的类型.

  • 重写``compiler/nimeval`` API以简化"compiler as an API". 使用Nim编译器和它的VM作为脚本引擎变得更加容易。见如何在一个原生Nim应用中使用Nim VM 样例``tests/compilerapi/tcompilerapi.nim``。

  • 添加 ``CritBitTree[T].incl``方法的``val`` 参数.

  • ``tgamma`` 重命名为``gamma``. ``tgamma`` 废弃.

  • ``pegs`` 模块现在为它的``Peg``字段和``NonTerminal`` 对象类型导出getters。有子节点的``Peg``现在有标准的``items`` 和``pairs`` 迭代器.

  • ``net`` 模块中的``accept``现在可以接受nil套接字.

语言增补

  • 结合显式泛型实例化的点调用现在被写作``x.y[:z]`` ,解析器解析成``y[z](x)`` .

  • ``func`` 现在是``proc {.noSideEffect.}``的别名.

  • 为了使 ``for`` 循环和迭代器更加灵活的使用Nim现在支持"for-loop macros". 见手册[manual](manual.html#macros-for-loop-macros)  这个特性允许Python般的泛型``enumerate`` 实现.

  • Case 语句现在可以用宏重写. 见手册[manual](manual.html#macros-case-statement-macros) 。这个特性允许自定义模式匹配.

  • `typedesc` 特殊类型重命名为`type`.

  • `static` 和`type` 现在也是`ref` ,`ptr`一样的修饰语. 它们指代`static[T]` 和`type[T]`.

  • `static`强制编译期估值现在支持指定想要的目标类型(一个明确的类型或者一类类型)

  • `type` 操作符现在支持检查提供的表达式匹配期望的类型约束.

语言的变化

  • `importcpp` pragma 现在允许导入C++泛型列表字段类型 。 `static[T]`也支持数字参数。(#6415)

  • 原生C++ 异常现在可以通过`importcpp` pragma导入。导入的异常可以像Nim的异常一样被发起和捕获. 更多细节见语言手册.

  • 字符串和序列的``nil`` 终于不见了. 取而代之的默认值为是``"" / @[]``. 使用``--nilseqs:on`` 以过度。

  • 访问Nim原生字符串中的0截尾符现在是非法的.Nim字符串内部为了和cstring零拷贝的互操作性,仍然有一个尾部0. 用新开关编译``--laxStrings:on``代码,如果你需要过渡。

  • 命令语法现在支持首个逗号后的关键字参数.

  • 线程本地变量现在可以在方法内部声明。这意味着global pragma所有的效果.

  • Nim 现在支持export 语句中的``except`` 从句.

  • 延伸浮点类型, 如``range[0.0 .. Inf]``. 更多细节见语言手册.

  • ``{.this.}`` pragma 废弃. 它从来没有在泛型中工作过,并且我们发现代码比显式的``obj.field``语法更难读.

  • "Memory regions"对指针类型已经废弃,它们几乎没有在任何地方用过. 注意这和``--gc:regions`` 没有任何关系.

  • 异常层次稍微重做了, ``SystemError``重命名为``CatchableError``,并且是其它任何可以捕获异常的新基类.这个变化应当对既存的Nim代码有最小的影响。

工具的变化

  • ``jsondoc2`` 重命名为``jsondoc``, 和``doc2`` 重命名为``doc``类似. 老的``jsondoc`` 仍然可以用``jsondoc0``调用.

编译器的变化

  • VM's 指令计数限制提高到了300万指令以支持编译期的复杂计算。

  • 对JavaScript 目标的热代码重载支持已经实现. 用`--hotCodeReloading:on` 编译代码使用,使用助手库比如LiveReload或者BrowserSync.

  • 一个新的编译器选项 `--cppCompileToNamespace` 把生成的C++代码放进Nim的命名空间以避免和既存的C++代码命名冲突. 所有的Nim代码都完成了这个实现- 内部的和导出的.

  • 添加``macros.getProjectPath`` 和``ospaths.putEnv`` 方法到Nim的虚拟机.

  • ``deadCodeElim`` 选项现在总是开启,并且开关不再有效果, 但为了后向兼容它可以被识别. 

  • ``experimental`` 现在是一个pragma / 命令行开关,允许指定的语言扩展,不再是全有或全无的一个开关.

  • 添加Nintendo Switch 作为一个新的目标平台. 见编译器用户指南[the compiler user guide](https://nim-lang.org/docs/nimc.html)

  • macros.bindSym 现在可以接受不仅字符串字面值或常量表达式。 bindSym 增强使得它也可以接受宏当中、编译期函数、静态块中可计算的字符串。它只在模板、普通代码中维持原状。这个新特性可以通过 {.experimental: "dynamicBindSym".} pragma/switch获取.

  • 在Posix 系统上全局系统配置现在放置在``/etc/nim/nim.cfg``, 之前是``/etc/nim.cfg``. 尽管如此,它通常是不存在的.

  • 在Posix系统上用户配置现在在``$XDG_CONFIG_HOME/nim/nim.cfg``(如果``XDG_CONFIG_HOME`` 没有定义, 那么在``~/.config/nim/nim.cfg``). 之前是``$XDG_CONFIG_DIR/nim.cfg`` (和``~/.config/nim.cfg``). 类似地, 在Windows上, 用户配置现在在 ``%APPDATA%/nim/nim.cfg``。之前是``%APPDATA%/nim.cfg``.


【声明】文章转载自:开源中国社区 [http://www.oschina.net]


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算统计

计算统计

Geof H.Givens、Jennifer A.Hoeting / 王兆军、刘民千、邹长亮、杨建峰 / 人民邮电出版社 / 2009-09-01 / 59.00元

随着计算机的快速发展, 数理统计中许多涉及大计算量的有效方法也得到了广泛应用与迅猛发展, 可以说, 计算统计已是统计中一个很重要的研究方向. 本书既包含一些经典的统计计算方法, 如求解非线性方程组的牛顿方法、传统的随机模拟方法等, 又全面地介绍了近些年来发展起来的某些新方法, 如模拟退火算法、基因算法、EM算法、MCMC方法、Bootstrap方法等, 并通过某些实例, 对这些方法的应用进行......一起来看看 《计算统计》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具