内容简介:影响后向兼容的改变 ``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]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Nim 1.0 发布,命令式编程语言
- Nim 0.17.2 发布,命令式编程语言
- Nim 0.18.0 发布,命令式编程语言
- Nim 0.20.2 发布,命令式编程语言
- 命令式编程语言 Nim 0.20 发布,1.0 还会远吗?
- 命令式与声明式——Kubernetes部署教程
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。