Elixir v1.14 已发布。此版本为 Elixir 的调试体验和数据类型检查带来了许多改进。此外还添加了一个新的抽象,以方便进程的分区,称为PartitionSupervisor
,以及优化编译时间和错误信息。
另外,Elixir v1.14 是支持 Erlang/OTP 23 的最后一个版本。建议开发者考虑升级到 Erlang/OTP 24 或 Erlang/OTP 25。
dbg
Kernel.dbg/2
是一个新的宏,有点类似于IO.inspect/2
,专门为调试而定制。
调用该宏时,它会打印传递给它的任何值,以及已调试代码本身及其位置。
下面这段代码:
# In my_file.exs
feature = %{name: :dbg, inspiration: "Rust"}
dbg(feature)
dbg(Map.put(feature, :in_version, "1.14.0"))
会打印出:
$ elixir my_file.exs
[my_file.exs:2: (file)]
feature #=> %{inspiration: "Rust", name: :dbg}
[my_file.exs:3: (file)]
Map.put(feature, :in_version, "1.14.0") #=> %{in_version: "1.14.0", inspiration: "Rust", name: :dbg}
dbg/2
能完成更多任务。它是一个宏,所以可以理解 Elixir 代码_。当开发者将一系列|>
管道传递给它时,dbg/2
将打印管道每一步的值。
下面这段代码:
# In dbg_pipes.exs
__ENV__.file
|> String.split("/", trim: true)
|> List.last()
|> File.exists?()
|> dbg()
会打印出:
$ elixir dbg_pipes.exs
[dbg_pipes.exs:5: (file)]
__ENV__.file #=> "/home/myuser/dbg_pipes.exs"
|> String.split("/", trim: true) #=> ["home", "myuser", "dbg_pipes.exs"]
|> List.last() #=> "dbg_pipes.exs"
|> File.exists?() #=> true
PartitionSupervisor
PartitionSupervisor
是一个新模块,实现了新的 supervisor 类型。partition supervisor 旨在帮助处理成为瓶颈的单个受监督进程的情况。如果该进程的状态可以轻松分区,那么可以使用PartitionSupervisor
来监督该进程同时运行的多个隔离副本,每个副本都分配了自己的分区。
详情查看 release note。