输、路由等
压缩指令64位系统代码,低于4GB内存的20%的已加载代码
使用NIFs和“脏调度程序”重写efile驱动程序,从而加快文件操作
non-smp VM删除
为可伸缩性优化的链接和监视器
操作系统:getenv/putenv现在致力于线程安全模拟。不再与libc getenv(3)同步。需要手动同步。
Compiler:
- Misc编译器优化,包括Elixir团队的贡献,在基准测试中得到10%的改进
- “元组调用”已从运行时系统中删除。
- 像f({ok, Val}) -> {ok, Val}这样的代码现在被自动重写为f({ok, Val} = Tuple) -> Tuple。这减少了代码大小、执行时间和消除了GC压力。
- stacktrace中的更多信息来自多个操作符
- erlang:get_stacktrace/0不赞成使用,代以 try … catch C:R:Stacktrace -> …
- 优化创建具有文字键的小映射。
- 一个新的预编译宏' OTP_RELEASE '和预处理器指令' -if '和' -elif '
安全:
- SSL应用程序现在支持DTLS
- 增强了对TLS分发的支持
- 从SSL和SSH的缺省值中删除“不安全”密码。
- 定义一个新选项值,以方便实现exec服务器。旧选项保持兼容性,但现在在stderror上出现错误。
标准库:
- 新的日志API, logger
- 根据“标准”解析uri的新uri_string模块
- 新函数:lists:search(list,fun/1) -> {ok, Value} | false
- 更改了.erlang加载的默认行为。escript、erlc、dialyzer和typer不再加载.erlang。
OTP 20.3
Erlang/OTP 20.3是20个主要版本的第三个服务版本。服务版本主要包含bug修复和特性改进,但也包含一些新特性。
ssl
增加了新的API函数,以方便密码套件的处理
erts,observer
更多的崩溃转储信息,例如:进程二进制虚拟堆统计信息、导致GC期间mem超时的进程的完整信息、更多的端口相关信息和脏调度程序信息。
inet
在http客户机中添加对unix域套接字的支持。
OTP 20.2
Erlang/OTP 20.2是20个主要版本的第二个服务版本。服务版本主要包含bug修复和特性改进,但也包含一些新特性。
crypto,ssl
crypto API被扩展为使用存储在引擎中的私钥/公钥进行签名/验证或加密/解密操作。
ssl应用程序提供了一个API来在TLS中使用这个新的引擎概念。
ssh
SSH现在可以从存储在引擎中的私钥获取主机密钥。有关引擎的详细信息,请参阅crypto应用程序。
ssl
添加了一个新的命令行选项-ssl_dist_optfile,以便在使用SSL作为分发协议时指定所需的许多选项。
stdlib
在处理ASCII字符时提高新字符串功能的性能。
OTP 20.1
20.1的一些亮点
crypto, public_key:crypto和public_key函数签名扩展,用下面方式验证:
- 支持rsasa - ps填充签名和盐长设置
- X9.31 RSA填充。
- 如NIST SP 800-57第1部分所述,用于dss签名的sha、sha224、sha256、sha384和sha512。
- 用于rsa签名的ripemd160。
一个新的元组在 crypto:supports/0 报告支持MAC算法。
diameters:
- 添加服务选项decode_format,允许将传入的消息解码为映射,而不是记录。
- 解码性能得到了提高。
- 添加服务/传输选项avp_dictionary,以便更好地支持只定义AVPs的字典。
erts:将erts内部PCRE库从8.40版本升级到8.41版本。
erts、kernel、tools:现在可以在运行时在锁计数模拟器(-emu_type lcnt)中完全切换带有锁计数的分析。默认情况下,所有内容都启用了与旧行为匹配的功能,但是在禁用特定类别时,可以随意切换,而运行时开销最小。有关详细信息,请参阅lcnt:rt_mask/1上的文档。
lcnt:collect和lcnt:clear将不再阻塞运行时系统中的所有其他线程。这使得在较重的负载下运行锁计数成为可能。
erts:zlib模块已经被重构,它的所有操作现在都将得到适当的处理,允许它们在并发应用程序中自由使用。
erts,tools:添加erlang:iolist_to_iovec/1,它将iolist()转换为erlang:iovec(),后者适合与enif_inspect_iovec()一起使用。
erts:添加新的nif API函数来管理I/O队列。
添加的函数有:enif_ioq_create()、enif_ioq_destroy()、enif_ioq_enq_binary()、enif_ioq_enqv()、enif_ioq_deq()、enif_ioq_peek()、enif_inspect_iovec()、enif_free_iovec()
observer/crashdump_viewer:
- 对包含许多二进制文件的崩溃转储文件的读取进行了优化。
- 当打开流程的详细信息视图时,将显示一个进度条。
- cdv脚本现在将ERL_CRASH_DUMP_SECONDS设置为0,以避免从运行Crashdump查看器的节点生成新的崩溃转储。
observer:
在observer中将系统统计信息和限制添加到frontpage。
public_key,ssl * *:
改进了错误传播和报告
ssh:实现了一个新的选项modify_algorithms。它支持在默认算法列表上指定更改。参见参考手册和SSH用户指南“在SSH中配置算法”一章。
tools/xref:预定义的xref analysis locals_not_used现在理解-on_load()属性,并且不报告未使用的函数。
tools/fprof:当采样多个进程并将total设置为true进行分析时,输出现在将所有涉及相同函数的调用者和被调用者条目汇总在一起。以前的行为是分别报告每个贡献条目。
OTP 20.0
潜在的不兼容
ERTS:
- 不支持SMP Erlang VM,默认情况下不构建它
- 移除弃用erlang:hash/2
- erlang