本文是《2021 InfoQ 年度技术盘点与展望》系列文章之一。它由InfoQ 编辑部制作和呈现。重点介绍了2021年编程语言领域的重要进展和趋势,希望能够帮助大家准确把握2021年编程语言领域的核心发展脉络,并始终保持足够的发展脉络。行业内的技术敏锐度。 《InfoQ 年度技术盘点与展望》是InfoQ 全年最重要的内容主题之一,将涵盖架构、AI、大数据、大前端、云计算、数据库、中间件、操作系统、开源以及十大编程语言。未来聚合将延伸为专题、迷你书、直播周、收藏页等,陆续在InfoQ媒体矩阵中发布。欢迎大家继续关注。特别鸣谢· 阿里云编程语言与编译团队负责人李三红· Go 语言编程专家郝林· Julia 社区核心成员田军、陈九宁· 独立顾问/《Rust 编程之道》 作者张汉东· JetBrains技术专家/布道者范胜友·英特尔高级技术经理王鑫对本文做出了贡献。他们都直接或间接参与了本文的构建,部分内容以专门策划的形式独立撰写并出现在盘点集里。可以说,他们的见解是让这份盘点为大家所用的关键。
需要说明的是,编程语言并不能被视为真正意义上的“技术领域”,因此本系列评论显得尤为特殊。通常,当我们谈论独立的技术领域时,往往意味着该技术具有相对独立的商业价值、产业链、开发者群体。但编程语言只是一个实现工具,同时它也是整个IT世界的基础设施。这个矛盾使得编程语言的盘点有点乏味,但却是非常有必要的。电影《天国王朝》中,主角巴利安问萨拉丁,耶路撒冷的意义是什么?萨拉丁回答说:“没什么。”然后又说:“一切。”当应用到“编程语言”时,同一行可能恰到好处。
还需要指出的是,IEEE将编程语言分为四个标签:用于开发网站和应用程序的语言(Web)、用于企业、桌面和科学应用程序的语言(Enterprise)以及用于移动设备的语言。语言(移动)和嵌入式环境语言(嵌入式)。
但在本文中,任何广泛应用于超过2-3个标签字段的编程语言都将被称为“通用语言”,将C/C++和Java等语言与JavaScript和R. 很好的区别。我们首先回顾一下2021年编程语言的宏观发展情况,然后对比较有代表性的五种语言:Kotlin、Rust、Go、Julia、WebAssembly的具体发展情况进行纵向分析。
2021 年编程语言的核心趋势
通用语言:关注硬件性能和异构编程
近两年,业界出现了一个声音:摩尔定律已经过期。这主要是由于主流硬件厂商在14nm工艺上的长期停滞,以及NVIDIA首席执行官黄仁勋在2019年CES展会上的演讲:“摩尔定律过去每5年增长10倍,每10年增长100倍”但现在,摩尔定律每年只能增长几个百分点,也许每10年只能增长2倍,所以摩尔定律已经结束了。”
诚然,这一判决引起了很大争议。无论是苹果的M1芯片还是亚马逊云科技的Graviton3,他们在晶体管密度方面都延续了“摩尔定律”的判断。但所有担忧的背后,是IoT、AI乃至元宇宙对算力日益旺盛的需求与硬件技术限制之间的矛盾。
如今,它已经深刻影响了通用编程语言——的发展,从早期如何在单核环境下追求极致性能,到如今如何充分利用多核计算能力。
对协程的支持很好地反映了主流编程语言关注重点的转变。 2021 年最重要的进展就是Java 即将在2021 年11 月第三周支持虚拟线程(协程)的消息。该消息来自Oracle 提交的一份JDK 增强提案(JEP)草案,其中要求虚拟线程作为Java 标准版的一部分进行预览。
草案中提到,虚拟线程将补充Java的平台线程(代表操作系统线程),并采用轻量级的用户模式线程实现,这将更有效地利用可用硬件并大大降低成本。虚拟线程的目的是为了更好地支持编写和维护高吞吐量并发应用程序。
这个消息意味着所有最主流的编程语言都已经支持或正在支持协程,包括C++、Python、C# 和Go(原生)。这也代表了对硬件性能利用率的关注,已经成为各种编程语言的大趋势。 Python就是一个特别典型的例子。其与Google TPU 和TensorFlow 生态系统的高度集成,帮助其第五次荣获TIOBE 年度编程语言。
另一个值得一提的重要事情是异构编程。异构编程是“编程语言与硬件性能”这一主题在广度上的延伸。 2021年,华为发布了北冥分集计算融合架构,其中包括必胜C++等组件。这里的必胜C++主要服务于跨CPU和GPU计算能力的编程需求。这是国产基础软件在编程语言层面的一大进步。
如果我们从这个时间点往前看,我们会发现,2020年10月,Intel发布了oneAPI 1.0,目标是简化跨不同计算架构的应用程序开发; 2008年,苹果率先创建跨平台计算框架OpenCL;十多年前,NVIDIA发布了CUDA来支持GPU编程。
问题是异构编程无论是语言层面还是框架层面,都有非常高的学习成本。本质上,异构编程需要开发者深入洞察硬件之间的差异,能够根据硬件差异进行极其精细的性能调优。这就导致团队引入后研发效率(学习成本、迁移成本)相对较低。因此,常规通用语言也会提供异构编程接口作为妥协。例如,Java TornadoVM用于支持异构硬件的特性。
而且,异构编程底层支持工具的推出和更新,很大程度上依赖于各厂商自研硬件。然而,如今的硬件市场不但没有趋同,反而变得更加分散。各个公司的异构编程框架往往只专注于适配自己的系统,不愿意干涉其他行业的主流硬件,也没有足够的资源进行干涉。这也让底层开发人员的工作变得更加困难。
展望未来,开源或许是打破现有问题的更好的组织模式。
性能和安全要兼顾,研发效率需要专门讨论
这就导致了另一个矛盾:绩效和研发效率通常是矛盾的。在之前InfoQ 采访“Java 之父”James Gosling 时,他用Java 和JavaScript 的区别来说明这个问题。至于内存安全,长期以来,使用C/C++作为底层技术栈的开发组通常不考虑它。
Rust在2021年的流行为整个行业提供了新的灵感。在InfoQ 2021 编程语言排行榜中,Rust 在关注度和期望方面紧随Go 语言之后。仅从关注度增速来看,Rust 无疑是2021 年最引人注目的编程语言。尤其是2021 年12 月,Linux 内核和Rust on Linux 的主要开发者Miguel Ojeda 提交了新补丁(v2)到Linux 内核邮件列表,进一步推进Rust for Linux 的进展并引起公众对Rust 的关注。推向了新的高潮。
Rust最重要的优势在于它以堪比C/C++的性能解决了编程过程中的内存安全问题,从而成为系统级编程领域各个团队的重点研究对象。
C++已经有四十年左右的历史,相关的方法和技术已经成熟,诞生了无数的编程大师,但在2021年的今天,我们仍在寻找它的替代者。根本原因在于,人们逐渐认识到,在系统级编程语言中,性能并不是一切。随着软件逐渐接管物联网设备(尤其是自动驾驶汽车),内存溢出/指针悬空等内存安全问题不仅会造成经济损失。甚至威胁人身安全。与其以结果为导向,出现问题时修复bug,不如以过程为导向,从一开始就控制内存安全。
然而Rust的上手难度在一定程度上限制了该语言本身的普及(知乎有抱怨:为什么Rust实现链表这么难)。了解函数式编程可能对学习Rust有帮助,但未来编程世界的主流仍然是OOP(面向对象编程)。更大的问题是中小企业的重置成本。 —— 没有成熟的人才梯队,没有扎实的技术积累。直接采用Rust面临的问题是:无人招揽。目前准备采用Rust的公司几乎都是大公司或者创业团队。前者可以通过内部调动积累人才,而后者则是从一开始就围绕Rust 构建的创业理念。
与性能和安全相比,研发效率如今已成为一个模糊的问题。狭义地说,选择学习门槛低、开发效率高的语言,会提高研发效率;放眼更大的范围、更长的时间尺度,选择性能满足研发需求、生态成熟、内存安全有保障的语言,也能提高研发效率;选择社区完善、招募难度低的语言,有利于研发团队的快速组建,也变相提高了研发效率。
那么,2021年,研发团队应该如何选择适合自己的编程语言呢?在确定了性能要求和安全要求后,需要根据业务场景和公司发展阶段进行详细分析。
八仙过海,兑现诺言
除了通用语言之外,如果要用四个字来形容2021年各个垂直领域语言的发展,那么大概就是“八仙渡海”。垂直领域使用特定语言解决特定问题的趋势越来越明显,语言的“工具”属性越来越凸显。
在移动开发中,Kotlin 是独一无二的;在数据科学领域,Python和R语言被广泛使用;在网络上,越来越多的人尝试使用TypeScript。但需要注意的是,目前所谓的xx领域专用语言到2022年可能会发生翻天覆地的变化,如果你仔细想一想,你可能会发现这种变化正在发生,比如Kotlin和Julia。
WebAssembly 是一个相对另类的存在。它致力于让其他语言以接近本机语言的速度在Web上运行。目前最主流的应用是将C/C++编译成WebAssembly。其2021年具体进展将在下文《2021年主要编程语言具体发展》中单独讨论。
与此同时,编程语言也在兑现对开发者无数的承诺。那些社区早已知晓的前瞻性修改,终于在2021年完成了“填坑”。
2021年代表性编程语言发展概况
(关于Go、Rust、Julia的更多信息,请参考本盘点专项规划部分,文章链接见附录)
去
说到“填坑”,2021年最热门的莫过于Go语言了。作为近年来最流行的编程语言之一,Go长期以来因三个主要问题而被开发者诟病:模块管理工具、泛型语法支持,以及程序错误处理。
关于模块管理工具,Go语言开发团队已经基本解决或提供了路径;支持泛型就相当于一个结论;错误处理方法尚未找到合适的解决方案。 Go语言2021年的主要发展也围绕着模块管理工具和泛型。
GO111MODULE是一个系统环境变量,其目的是方便开发者在原有的GOPATH机制和新的go module机制之间切换。 Go团队在1.16版本中将GO111MODULE的默认值设置为on,这标志着go module机制的成熟。同时,这也表明Go团队已经开始正式普及go module机制。
从Go官方提供的标准工具来看,原有的go命令已经全面适配了go module机制。例如,现在可以使用go get 命令来调整Go 模块依赖关系,现在可以使用go install 命令来下载、编译和安装Go 模块,现在可以使用go test 命令来编译和测试Go 模块,等等。
模块管理中的配置文件还有另外三点值得注意:
模块图修剪:go.mod文件中,主模块的直接依赖模块记录和间接依赖模块记录已经变得完整;新指令:在1.16 版本中,Go 团队在go.mod 文件中添加了一个新指令。该命令的名称是retract。我们这里可以理解为“撤回”,用于撤回当前模块的已发布版本;新注释:在1.17 版本中,Go 团队在go.mod 文件中添加了弃用注释,以丢弃整个模块。对泛型的支持可以追溯到2018 年,但直到2021 年8 月,Go 团队才发布了最终的设计方案:类型参数提案(https://github.com/golang/proposal/blob/master/design/43651-type-parameters.md) )。至此,一个与Go语言紧密贴合的通用模型正式发布了。 Go语言1.17版本已经包含了一些自定义泛型相关的代码,但是如果想要自由使用泛型,还得等到1.19甚至更进一步的版本。
此外,2021年,Go在标准命令、标准库、语法、性能等方面都有更新。我们在这里简单列出来供参考:
标准命令:
在1.16版本中,Go官方改进了go install命令,使其可以接受一个版本后缀(如:@v1.0.0),并用它来下载、编译和安装(以下统称安装)某个代码包具体版本;从1.16版本开始,Go官方建议开发者仅使用go install命令来安装go module机制下的代码包,并强烈建议使用go get命令时携带-d标志;标准库:
添加了三个新的代码包:runtime/metrics包(获取运行时指标,涉及垃圾回收、内存使用情况、并发调度等)、io/fs(代表新的文件系统模型)、embed(在可执行文件中嵌入额外的代码)资源);已弃用io/ioutil 包;句法:
支持切片到数组指针的转换。更具体地说,[]T 类型的切片现在可以正确转换为*[N]T 类型的数组指针;
表现:
在64位Linux操作系统上,链接速度比1.15版本快20%-25%,链接操作占用的内存空间也减少5%-15%。此外,由于更积极的符号修剪,Go 程序通常会生成更小的二进制文件。在1.17 版本中,Go 团队实现了一种使用寄存器而不是堆栈来传递函数参数值和结果值的新方式。这种新方法将Go程序的运行性能提高了大约5%。此外,Go 程序生成的二进制文件通常要小2% 左右。目前,Go语言在Linux、macOS和Windows操作系统的64位计算结构上自动启用了该功能。锈
2021 年,Rust 的受欢迎程度不亚于Go 语言,但本次评测特约专家张汉东说得很好:“Rust 的出现不是要重写世界上已经存在的一切,而是要让未来会更好。”
它特别适合目前已经引起很多关注的Rust。
2021 年,Rust 包的总下载量为11,012,362,794 次,即110 亿次。
随着下载量的增加,Rust语言内存安全的初步成果也已经显现。根据2021 年12 月31 日在arXiv 上发表的论文《SOK: On the Analysis of Web Browser Security》:
比较四种浏览器架构,浏览器中的内存安全问题在过去十年中仍然是主流。例如,Firefox 通过氧化项目(Rust)替换了12% 的组件。自2015 年以来,Firefox 的内存安全漏洞数量小幅但稳步下降,其中渲染器中的内存安全漏洞大幅下降。
Oxidation 是一个致力于将Rust 代码集成到Firefox 中的项目。自Firefox 54 起,所有平台都需要Rust 支持,第一个主要Rust 组件在Firefox 56 (encoding_rs) 和57 (Stylo) 中发布。展望未来,Oxidation 的目标是让Firefox 中的Rust 使用更加简单、高效,并相应增加Firefox 中Rust 代码的数量。
可以说,经过六年的应用,Rust语言的内存安全保障终于看到了初步成果。该论文建议浏览器供应商遵循这一最佳实践,并逐步将其浏览器过渡到内存安全语言。
下面简单列出2021年Rust语言及相关生态的一些亮点:
Rust 编译器引入了一个新的实验性GCC 后端,以及另一个基于gcc 的实现(两者目前都在进行中)。 Rust 正在进入Linux 内核,它还对语言和库进行了一些改进,以促进这一壮举。 Rust 首次进入Redmonk 指数前20 名,并连续第六年获得Stack Overflow 调查中“最受欢迎的编程语言”称号。 IEEE 2021 年编程语言排名,Rust 位列第17 位。按趋势排名,Rust 排名第十。 Rust基金会于2021年初刚刚成立,截至年底已有25名来自不同领域的成员,并取得了一定的成就。并且基金会也开始实施一些具体安排,比如组织专业的crates.io运营。瑞士Concordium 基金会宣布了DevX 计划,以赞助Rust 生态系统的维护者。乐鑫正式聘请mabez 开发对eso 芯片的Rust 支持:esp-rs。嵌入式Rust生态已经取得了长足的进步:嵌入式并发框架已经达到1.0,嵌入式异步框架正在大力开发,支持STM32、nRF和RP2040平台,也深刻影响了Rust异步的完善,以及嵌入式开发并发布了调试工具。新的探测工具已经发布,新版本的嵌入式smoltcpTCP/IP堆栈已经发布,新版本的嵌入式图形库Matrix已经发布,新的嵌入式实时操作系统Hubirs已经开源。 WebAssembly 域。前面提到的字节码联盟的wasmtime 的Cranelift 编译后端已经完成了新的后端架构变更,并且还获得了IBM 大型机的支持,引入了新的s390x 后端。两个与Rust 相关的Wasm 项目进入CNCF:WasmEdge 和WasmCloud。在图形计算领域:rust-cuda和rust-gpu是两个已经开始推动Rust成为GPU计算第一语言的项目。前者使Rust 成为GPU 的第一个语言,而后者则推动Rust 成为第一个用于图形渲染的现代着色语言。国内Rust岗位招聘增多:字节跳动、海智行图(图数据库)、非凸科技(量化)、大唐科技(分布式存储)、Datebend(数据仓库)都需要大量Rust人才。 GUI 领域的SixtyFPS 和tQCS 等咨询公司建立了合作伙伴关系,找到了第一批客户,并招募了新成员。 tQCS 提供全球第一的Qt 咨询和UI/UX 设计服务。选择与SixtyFPS 合作也是Rust 在GUI 领域的一个里程碑。 Embark Studios 在其游戏后端使用Rust 发布了他们的第一款3A 游戏。 Embark Studios 是Rust Games 工作组的成员,致力于将Rust 推广到游戏开发中。 rust-gpu 库是他们的开源项目之一,该公司还赞助了许多游戏和图形相关的Rust 生态库。 Rust 还被用于音频和视频领域。 Signal 使用Rust 开发了一项支持40 人高质量语音群组通话的服务。 Rust 也成为前端基础设施的一部分:Next.js 公司用swc 和Rust 完全取代了Babel(转译)和Terser(压缩)。版本更新方面,Rust Edition 目前已确认每三年发布一次—— 版本。这意味着每三年Rust 就会围绕一个引领Rust 发展的主题。
2021年版的主题是“成熟”。 2021版并没有引入太多新功能,而是清理了一些技术债务,比如继续重构和改进Rust编译器,包括内部使用的新trait系统chalk和查询系统(开源版本:https://github.com/nikomatsakis) /萨尔萨舞)。此外,还解决了一些向后兼容性问题,并持续投入了一些影响未来发展的关键功能,例如常量泛型、泛型关联类型等。
我们之前也提到过,Rust 今年的一个重要进展是它对Linux 内核的支持。到2022 年,我们可能会看到Linux 内核中的实验性Rust 编程语言支持成为主流。 Rust团队在2021年12月6日上午发布的更新补丁中,介绍了内核中处理Rust的初步支持和基础设施。
本次更新包括:
升级到最新的稳定编译器和Rust 2021 版本。因此,我们可以摆脱之前const_fn_transmute、const_panic、const_unreachable_unchecked、core_panic和try_reserve这些不稳定的特性。自定义核心和分配。为alloc 添加了更多模块化选项,以禁用一些不需要的功能:no_rc 和no_sync,主要是为上游Rust 项目添加的。更严格的代码、文档和新的lint。抽象和驱动程序更新。添加了串行锁、电源管理回调、io 内存(readX/writeX)、irq 芯片和高级流处理程序、gpio 芯片(包括irq 芯片)、设备、amba 设备和驱动程序以及证书的抽象。此外,Ref(refcount_t 支持)对象得到了改进和简化,并用它替换了Rust 的Arc 的所有实例。从分配箱中完全删除了Arc 和Rc。从现在开始,Rust for Linux 团队将开始定期提交补丁,大约每两周一次。
关于Rust,还有一件事不得不提的是年底审查团队(mod团队)的集体辞职。但当尘埃落定后,很难评价事件本身的性质,这涉及美国特有的政治、文化和种族问题。张汉东在采访中表示:
“2020 年Rust 1.44 版本发布时,官方博客是这样说的:“技术是而且永远都是政治性的。”我对美国文化了解不多,曾经嘲笑过审核小组存在的重要性。现在我感受到了审查小组的存在对于像Rust一样文化和政治复杂性深厚的美国来说是多么重要。我终于明白为什么Rust官方说这个背景比较复杂了。真心希望Rust 团队能够解决这个问题。对此我们能做些什么呢?也许我只能祈祷世界和平。 ”
科特林
2021 年恰逢Kotlin 诞生10 周年。今年,Kotlin 发布了两个版本:1.5 和1.6。最新版本是Kotlin 1.6.10。如果要总结关键动态的话,可以分为以下四点:
K2编译器:目标是构建一个新的编译器架构,提供更好的性能,为多平台开发奠定良好的基础。 Kotlin Multiplatform Mobile(KMM)持续更新,预计于2022 年春季发布Beta 版本; Kotlin/JS:新的IR编译器Beta版发布,更多JS库迁移到新的IR编译器; Compose Multiplatform 1.0:可用于桌面和Web Kotlin 的声明式UI 框架使Android 开发人员更容易从Jetpack Compose 开始; K2编译器是Kotlin 2021年最重要的更新。编译器分为前端和后端。其功能包括生成语义信息的IR(中间表示),并将其转换为相应目标平台(JVM、JS、Native)的可执行文件。 Kotlin 1.5 版本已经开始支持K2 编译器。目前,Kotlin/JVM 是稳定版本,Kotlin/JS 是Beta 版本。
Kotlin 的开发生态系统非常活跃。目前Kotlin 团队约有100 名开发人员,超过360 名开源贡献者参与开发工具。 2021 年,GitHub 上创建了约25 万个Kotlin 相关代码存储库。
有两份报告供我们参考:
开发者和开源贡献者数据:
https://kotlinlang.org/lp/10yearsofkotlin/present/
Kotlin 开发生态系统概览:
https://www.jetbrains.com/zh-cn/lp/devecosystem-2021/kotlin/
2021年,整个Kotlin生态的活跃度也印证了这些官方团队的努力。
和开源贡献者的工作成果。生态进展如下:
JetBrains 方面:
UI 框架:Compose Multiplatform 1.0Server-side:Ktor 2.0 beta,Kotless 0.2.0Data Science 及 ML:Kotlin API for Spark,Kotlin DataFrame library,KotlinDL工具:Dokka 1.6(文档引擎),Kover(代码覆盖率),Qodana(静态分析器)社区方面:
Spring NativeArrow (Kotlin library for functional programming) release 1.0Koin (dependency injection framework) release 3.0KorGE (Game engine) release 2.0Okio (I/O library for Kotlin Multiplatform) release 3.0Apollo (GraphQL client) release 3.0此外,Kotlin 也很重视中国开发者的生态建设,2021 年,他们与 Kotlin User Group 合作,举办了中文开发者大会,吸引了 1500+ 观众参加。
Kotlin 2022 年的发展重点可以总结为如下四点:
持续发展 K2 编译器:优化性能、编译速度及支持插件的能力改善开发者体验:优化 Kotlin IDE 插件,提升稳定度及性能,让修改、测试除错循环可以更高效深化支持 Kotlin 在 Server-side 的应用:更多是 Spring 及 Ktor 方面的应用推出新版 Kotlin Multiplatform Mobile(KMM):预计在 2022 年春天推出 Kotlin Multiplatform Mobile Beta,并持续改善共享代码的开发体验(具体路线图可参考:https://kotlinlang.org/docs/roadmap.html)
而在这背后,是 Kotlin 积极地向多平台语言演进的努力,用本文的话语体系来讲,就是“通用型语言”。我们可以看到 JetBrains 提供了多个支持多平台的库如 kotlinx.coroutines,kotlinx.serialization,kotlinx-datetime,而 Kotlin 社区也紧跟着这样的趋势发展,出现了愈来愈多的库、框架来支持多平台,如 Arrow、Okio、Apollo 等在新版本中都支持了多平台开发。
令 Kotlin 社区工作者苦恼的是,自 2017 Google 发表声明后,Kotlin 总被当成是安卓专用开发语言。实际上,Kotlin 极有可能在接下来的两个领域成为主流编程语言:
Desktop:设计 Kotlin 的初衷就是要拿来开发 IntelliJ IDEA,随着 Compose Multiplatform 的发布,使用 Kotlin 开发 Desktop 软件将更加轻松;Server-side:Kotlin 100% 与 Java 互操作的特性让许多 Java Server-side 开发者转而使用 Kotlin,现也有 Spring 官方的支持及 JetBrains 推出的 Ktor 框架,使用 Kotlin 开发 Server-side 应用将有机会成为主流。2021 年 使用 Kotlin 做 Server-side 开发的用户提升了 40%,可见其潜力;同时,Kotlin 对 WebAssembly 的支持工作也提上了议程,未来也将成为 Web 端编程语言的可选项之一。
就这一点而言,我们倒不妨大胆畅想 Kotlin 2022 年的发展态势,看其在未来几年内,能否重现当初 Objective-C 两夺年度最佳编程语言的盛况。
Julia
在刚刚过去的 2021 年,Julia 编程语言社区依然保持了高速发展。据统计,目前 Julia 的全球总用户量已超过一百万,有一万多家公司和一千五百多所高校下载和使用了 Julia。此外,一些世界名校,如北京大学,MIT、Stanford 和 Berkeley 等,已经在教学中使用 Julia 语言。Julia 默认的注册表中新增了 1128 个包,累计达到了 5397 个。详细的信息可以前往 JuliaHub.com 查看,获取各个库下载信息的方法也已在官方论坛中公布。
2021 年,Julia 发布了两个重要版本,分别是 Julia@v1.6 和 Julia@v1.7。此外,在 Julia@v1.7.0 于 11 月 30 日发布的同时,社区正式宣布 Julia@v1.6 为新的长期支持版(LTS)。Julia 官方博客中详细介绍了 Julia@v1.7 的一些新特性,这里我们列出尤其值得关注的几点:
全新的多线程特性:解决了许多运行时的竞态条件,优化了多线程之间任务的调度,同时让默认的随机数生成器对多线程更加友好,此外还新增了一类原子操作作为基本的语言特性;包管理的更新:新版的包管理工具会自动识别出该包是否已经注册,如果是的话,则会提示你是否要自动安装;对 Apple Silicon 的支持:Julia@v1.7 是首个能运行在 Apple Silicon 上的版本,但对该平台的支持还仅处于 tier 3 (即仅处于实验性质,编译 / 测试有可能失败);BLAS/LAPACK:运行时的后端切换;编译延迟和运行时体积优化;更好的类型推断、代码分析和检查;而在社区和生态方面,Julia 的进展和动态极多。关于社区,我们尚可简述重点:FluxML 社区于 12 月 1 日正式宣布挂靠在 NumFocus;JuliaComputing 完成 A 轮融资。
以及国内镜像站进一步增加,包括:
北京外国语大学 (https://mirrors.bfsu.edu.cn/julia)清华大学 (https://mirrors.tuna.tsinghua.edu.cn/julia)上海交通大学(https://mirrors.sjtug.sjtu.edu.cn/julia)中国科学技术大学 (https://mirrors.ustc.edu.cn/julia)南方科技大学 (https://mirrors.sustech.edu.cn/julia)南京大学 (https://mirrors.nju.edu.cn/julia)但关于生态,以及 Julia 在行业内的实践,则受限于篇幅,需要你移步附录中的特别策划了。总的来说,Julia 的发展和 Kotlin 有共通之处,都在由特定领域的专用语言,转而向多领域通用语言发展。
WebAssembly
于 WebAssembly 而言,2021 年发生了一件大事。
就在 2021 年的 10 月, Photoshop 发布了 Web 版本,大量使用了 WebAssembly。Photoshop 是传统的巨型桌面软件,代码库完全基于 C++ 编写。这次成功发布 Web 版本,验证了大型、高复杂度、基于传统高级语言编写的软件,是完全可以通过 WebAssembly 运行在 Web 端的。
而在区块链智能合约领域,WebAssembly 因为对 Web 的兼容,且允许使用 C++、Rust 编写高性能程序,已成为事实上的王牌语言。在 IoT、可信计算、轻量级容器等领域内,WebAssembly 都有十分契合的特性。这让开发者群体对 WebAssembly 的关注度迅速增长。
2021 年,WebAssembly 语言技术值得关注的发展包括:
WebAssembly 开源项目开始支持 GC(垃圾回收器),为实现 WebAssembly 支持像 Java、Kotlin 这样的前端语言做准备;WebAssembly SMID 可变长度取得关键进展,帮助 WebAssembly 应用充分获得 CPU 向量化计算加速能力;WebAssembly 模块化取得关键进展,为进一步构建 WebAssembly 的生态提供了核心的支撑;源码调试能力的增强,WebAssembly Micro Runtime 和 WASMTIME 等开源项目都提供了源码的调试能力,极大促进应用开发的效率另一个重要动态是“字节码联盟(Bytecode Alliance)”正式成为了非营利性实体组织,致力于开发基于 WebAssembly 和 WASI 的安全开源软件栈,建立一个默认安全的 WebAssembly 生态系统,让应用程序开发人员和服务提供商能够自信地在任何基础设施、任何操作系统或设备上运行不受信任的代码。字节码联盟发展十分迅速,其成员包括 Fastly、英特尔、微软、Google、Amzaon、Arm、 西门子等企业。业界普遍期望字节码联盟可能会更有效率地推进 WebAssembly 的更新和迭代工作。
更多的编程语言,如 Python、Swift……我们难以在同一篇文章中全部盘点,只能寄希望于 2022 年,我们继续关注编程语言领域的核心动态。相信在 2022 ,各大编程语言也会为开发者带来新的惊喜。
附录:2021 编程语言盘点特别策划及 Java 2021 部分动态盘点
解读 Julia 的 2021:逐步迈向主流编程语言:https://url.cy/Sr7oU1
解读 Go 语言的 2021:稳定为王:https://mp.weixin.qq.com/s/9LKyPfhwldgZY7H4iS7sjg
解读 Rust 的 2021 (上):https://mp.weixin.qq.com/s/aTCogUxyUwE6Sa4Nfs9CYA
Java 2021 部分动态盘点:https://www.infoq.cn/theme/125