elixir elixir 1.7 新版本 你沒有見過的船新版本
這次來了什么新東西呢?
更好的文檔
Elixir 1.7 給文檔增加了一些元數(shù)據(jù),用于描述作者,版本號等信息
@moduledoc "A brand new module"
@moduledoc authors: ["Jane", "Mary"], since: "1.4.0"
不僅如此,現(xiàn)在的文檔可以供所有 Erlang VM 語言來使用了。也就是說將來 Elixir 寫的 doc,Erlang 也能看了。
ExDoc 也得到了增強,第一感覺就是變的更花花綠綠了,這得益于全新的代碼高亮工具 Makeup。
不僅是外觀發(fā)生了變化,這次升級還增加了更多的提示,比如給被棄用的內(nèi)容加上醒目的警告,顯示某個函數(shù)在哪個版本號被加入等。舉個栗子,看一下這次慘遭棄用的 Behaviour。
未來的版本中(Elixir 1.8.0-dev 之后)還將加入對函數(shù)等進行自定義分組顯示的功能。栗子: Guards 分組。
當然,不僅限于 ExDoc,交互式文檔中也會輸出這些信息。
此外,文檔不但能看了,還能做結構化處理了。1.7 新加入的 Code.fetch_docs/1 函數(shù),使得開發(fā)者可以方便的獲取結構化文檔信息。
更好的日志
首先,在異常處理中新增了 __STACKTRACE__ 結構。它符合詞法作用域,而且無副作用。
調(diào)用的時候就像這樣
try do
... something that may fail ...
rescue
exception ->
log(exception, __STACKTRACE__)
reraise(exception, __STACKTRACE__)
end
然后是整合了 Erlang/OTP 21 中新的 :logger 模塊,可以用它來方便的處理更多數(shù)據(jù)和元數(shù)據(jù)。
值得提到的是,在之前 Logger 中不論有沒有輸出,它的參數(shù)都會被執(zhí)行,比如雖然設置了 info 級別的日志,但是 debug 級的依然會被執(zhí)行。
現(xiàn)在,不被輸出的日志調(diào)用將在編譯時被清洗掉,而且還可以手動配置指定清理哪些日志調(diào)用,具體配置如下
config :logger,
compile_time_purge_matching: [
[application: :foo, level_lower_than: :info],
[module: Bar, function: "foo/3"]
]
這樣配置就代表了,application :foo 中,低于 :info 級的日志調(diào)用將被清洗,同時,Bar 模塊下的 foo/3 函數(shù)所有級別的日志調(diào)用也將被清洗。
更好的測試
在之前,如果你在測試中寫出 assert foo(a, b) 這種代碼時,一般都需要配合打印出 a b 的值。
在新版本中,這件事 Elixir 替你做了。如果你寫出光禿禿的一個 assert ,那么一旦斷言失敗,就會給你打印出參數(shù)的值。
與此同時,測試結果也更加漂亮,更加具有色彩了。
如果你使用 mix test 命令進行測試,那這個功能你一定喜歡。本次更新新增了 --failed 參數(shù),執(zhí)行 mix test --failed 將只會執(zhí)行上次失敗的測試,節(jié)省了寶貴的時間。
另外一個改進是 --cover 參數(shù)將在統(tǒng)計完覆蓋率后將會在控制臺輸出一個統(tǒng)計總表,非常方便。