Julia 1.10 正式发布
经过 3 个 beta 版本和 3 次候选发布版本后,Julia 1.10 现已正式发布。这是一种通用的高性能语言,在科学计算和数值分析中较为流行。
新版本的一些亮点内容如下:
-
用 Julia 编写的新解析器
将之前用 Scheme 编写的默认解析器替换为用 Julia 编写的新解析器,称为 JuliaSyntax.jl。此更改引入了多项改进:提高解析性能、详细的语法错误消息、高级源代码映射。
-
包加载时间改进
这项工作主要是通过分析和改进 OmniPackage.jl 的加载时间来完成的,OmniPackage.jl 是一个人造的"mega package",其唯一目的就是依赖和加载大量的依赖项。总的来说,OmniPackage.jl 最终会加载大约 650 个软件包,其中许多软件包都非常大。
# Julia 1.9: 48.041773 seconds (102.17 M allocations: 6.522 GiB, 5.82% gc time, 1.21% compilation time: 86% of which was recompilation) # Julia 1.10: 19.125309 seconds (30.38 M allocations: 2.011 GiB, 11.54% gc time, 10.38% compilation time: 61% of which was recompilation)
-
堆栈跟踪渲染的改进
随着 Julia 1.10 的改进,堆栈跟踪现在更加简洁:
Stacktrace: [1] error() @ Base ./error.jl:44 [2] f(g::Function, a::Int64; kw::@Kwargs{}) @ Main ./REPL[1]:1 [3] f(a::Int64) @ Main ./REPL[2]:1 [4] top-level scope @ REPL[3]:1
此更新导致堆栈跟踪更短且更易于阅读。
-
并行垃圾收集
在 1.10 版中对垃圾收集器(GC)的标记阶段进行了并行化处理,并引入了与应用线程同时运行部分清扫阶段的可能性。这大大加快了多线程分配繁重工作负载的垃圾回收时间。
多线程 GC 可通过命令行选项 --gcthreads=M 启用,该选项可指定在 GC 的标记阶段使用的线程数。也可以通过 --gcthreads=M,1 启用上述并发页面扫描,这意味着在 GC 标记阶段将使用 M 个线程,而一个 GC 线程负责与应用程序同时执行部分扫描阶段。
默认情况下,GC 线程数设置为计算线程数(--threads)的一半。
-
Tracy 和英特尔 VTune ITTAPI 分析集成
-
升级到 LLVM 15
Julia 1.10 版本使用 LLVM 15。这带来了新处理器和一般现代化更新的配置文件。特别值得注意的是新的 pass-manager 的迁移,有望改进编译时间。LLVM 15 改进了对 x86 上 Float16 的支持。
-
Linux AArch64 稳定性改进
升级到 LLVM 15 后,可以在 Linux 的 aarch64 CPU 上使用 JITLink。这种 linker 最初是在 Julia v1.8 中引入的,仅适用于 Apple Silicon(macOS 上的 aarch64 CPU),它解决了在该平台上影响 Julia 的频繁 segmentation fault 问题。不过,由于 LLVM 内存管理器中的一个错误,非重要工作负载可能会生成过多的内存映射 (mmap),从而超出允许映射的上限。如果遇到这个问题,可阅读有关如何更改mmap
限制的文档。
-
system images 和 package images 的并行本机代码生成
通过在 LLVM 编译阶段 exposing 并行性,加速了 Ahead-of-time compilation (AOT)。现在,编译工作不再是编译一个大型的整体编译单元,而是分成多个小块。这种多线程方式加快了 system images 和大型 package images 的编译速度,从而缩短了其预编译时间。
可以通过环境变量 JULIA_IMAGE_THREADS=n 来控制并行的使用量。此外,由于 Windows 本地 COFF 二进制文件的限制,在 Windows 上编译大型 images 时,多线程将被禁用。
-
避免并行预编译期间 races
1.10 引入了一种“pidfile”(process id file)锁定机制,该机制可确保只有一个 Julia 进程能够预编译给定的缓存文件,而缓存文件是预编译过程中针对特定 Julia 设置的。
这种安排既有利于可能同时运行多个进程的本地用户,也有利于可能在同一共享仓库中运行数百个工作程序的高性能计算用户。
-
使用时并行预编译
虽然 Pkg 会在安装后自动并行预编译依赖包,但在使用/导入时进行的预编译以前是串行的,每次预编译一个依赖包。
当用户开发一个软件包时,最终可能会在加载时进行预编译,而且如果开发的软件包中的代码变更深入到正在加载的软件包的依赖关系树中,串行预编译过程可能会特别慢。
1.10 引入了加载时的并行预编译,以捕捉这些情况并加快预编译速度。
更多详情可查看官方公告。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
openGauss 系新增市场份额达21.9%,跨越生态拐点
[中国,北京,2023年12月28日]以“汇聚数据库创新力量,打造千行万业数据基石”为主题的openGaussSummit2023在北京望京凯悦酒店举办。本次大会由国家工业信息安全发展研究中心软件所、中国软件行业协会、中国计算机学会数据库专业委员会指导,openGauss社区主办。 中国工程院院士郑纬民为大会致辞,他表示:中国数据库行业进入高速发展阶段,openGauss已在国计民生行业规模商用,成为行业首选的国产开源数据库。国内数据库社区进一步可持续发展需加强数据库核心技术研发;建立完善的国产开源数据库生态,打造植根于国内的开源数据库根社区;加强专业数据库技术人才培养。 中国工程院院士郑纬民 中国科学院院士王小云在致辞中表示,数据安全技术的突破,不仅需要科学界解决密码学、共识算法等难题,同时需要与应用场景、基础软件等相结合,以便在千行百业落地,保证国计民生重要数据的全生命周期安全。 中国科学院院士王小云 国家工业信息安全发展研究中心软件所所长潘妍表示,要着力攻克核心技术的卡点短板,加强新型数据库研发布局,强化应用场景的牵引,并打造优质的骨干企业,培育一批数据库龙头企业和创新型的中小企...
- 下一篇
FolkMQ 新的消息中间件,v1.0.25
简介 采用 “多路复用” + "内存运行" + "快照持久化" + "Broker 集群模式"(可选)+ 基于Socket.D 网络应用协议开发。全新设计,自主架构! 角色 功能 生产端 发布消息(Qos0、Qos1)、发布定时消息(Qos0、Qos1)、发布重试 消费端 订阅、取消订阅 消费端 消费-ACK(自动、手动) 服务端 发布-Confirm、订阅-Confirm、取消订阅-Confirm、派发-Retry、派发-Delayed 服务端 内存运行、快照持久化(自动、停机、手动) 服务端 集群热扩展 特点 高吞吐量、低延迟 FolkMQ 纯内存运行,每秒能处理几十万条消息,最低延迟不到1毫秒。 可扩展性 FolkMQ Broker 集群支持 folkmq-server 节点热扩展。流量高时随时加,流量低时可减 持久性、可靠性 消息被快照持久化(类似于 redis)到本地磁盘,并且支持数据备份防止数据丢失 高可用 集群内任何节点坏掉只要还有“一个”同类节点,仍可提供服务 快(单机版,180K TPS)。有点像 Redis 之于 MySql。 //使用 MacBook pr...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- 2048小游戏-低调大师作品
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音