大家好,感谢邀请,今天来为大家分享一下区块链项目源码分享网站下载的问题,以及和区块链项目测评三答案的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
本文是“2021InfoQ年度技术盘点与展望”系列文章之一,由InfoQ编辑部制作呈现,重点聚焦编程语言领域在2021年的重要进展、动态,希望能帮助你准确把握2021年编程语言领域的核心发展脉络,在行业内始终保持足够的技术敏锐度。“InfoQ年度技术盘点与展望”是InfoQ全年最重要的内容选题之一,将涵盖架构、AI、大数据、大前端、云计算、数据库、中间件、操作系统、开源、编程语言十大领域,后续将聚合延展成专题、迷你书、直播周、合集页面,在InfoQ媒体矩阵陆续放出,欢迎大家持续关注。特此感谢·阿里云程序语言与编译器团队负责人李三红·Go语言编程专家郝林·Julia社区核心成员田俊、陈久宁·独立咨询顾问/《Rust编程之道》作者张汉东·JetBrains技术专家/布道师范圣佑·英特尔高级技术经理王鑫对本文的贡献。他们都以直接或间接的形式,参与建设该篇文章,部分内容还以特别策划的形式独立成文,出现在盘点合集中。可以说,他们的真知灼见,是该盘点能与大家见面的关键。
需要声明的是,编程语言不能算作一个真正意义上的“技术领域”,因此它在本系列盘点中,显得尤为特殊。通常,当我们谈及一个独立的技术领域时,往往意味着该技术存在相对独立的商业价值、产业链、开发者群体。但编程语言只是个实现工具,同时又是整个IT世界的基础设施,这种矛盾让对编程语言的盘点显得有点沉闷,却又非常必要。在电影《天国王朝》里,主角贝里安问萨拉丁,耶路撒冷有什么意义?萨拉丁回答道:“Nothing”,随后又说道:“Everything”。同样的台词,套用在“编程语言”身上,或许刚好合适。
另外需要指出的是,IEEE将编程语言以四个标签划分,分别是:用于开发网站和应用的语言(Web)、用于企业、桌面和科学应用的语言(Enterprise)、用于移动设备端的语言(Mobile)以及用于嵌入式环境的语言(Embedded)。
但在本文中,凡在超过2-3个标签领域都有广泛应用的编程语言,我们将其称之为“通用型语言”,以将C/C++、Java等语言和JavaScript、R等语言做好区分。我们将先对2021编程语言宏观层面的发展情况做个回顾,再对Kotlin、Rust、Go、Julia、WebAssembly五种较有代表性语言的具体发展作垂直解析。
2021编程语言核心趋势
通用型语言:关注硬件性能及异构编程
近两年业界出现一种声音:摩尔定律已经失效了。这主要源于主流硬件厂商在14nm工艺上的长时间停滞,以及英伟达CEO黄仁勋在2019年CES展会上的发言:“摩尔定律过去是每5年增长10倍,每10年增长100倍。而如今,摩尔定律每年只能增长几个百分点,每10年可能只有2倍。因此,摩尔定律结束了。”
诚然,这个判断所引起的争议是非常大的,无论是苹果M1芯片,还是亚马逊云科技的Graviton3都在晶体管密度上延续了“摩尔定律”的判断。但在所有担忧背后,是IoT、AI,乃至元宇宙引发的越来越旺盛的算力需求与硬件工艺极限之间的矛盾。
放在今日,则深刻地影响了通用型编程语言的发展——从早期如何追求单核环境下的极致性能,到今日如何充分利用多核算力。
对协程的支持,就很好地反映了主流编程语言关注点的转移。2021最重要的一个动态,当数2021年11月第三周,Java即将支持虚拟线程(协程)的消息。消息来自Oracle提交的一份JDK增强建议(JEP)草案,草案要求将虚拟线程作为Java标准版的一部分进行预览。
草案中提到虚拟线程将补充Java的平台线程(代表操作系统线程),采用轻量级的用户模式线程实现,将更有效地利用可用的硬件,并大大降低成本。虚拟线程目的是更好地支持编写和维护高吞吐量并发应用程序。
这则消息,意味着最主流的编程语言已经全部支持或正在支持协程,包括C++、Python、C#、Go(原生)。这也代表着对硬件性能利用率的关注,已成为各家编程语言的大势所趋。Python是其中尤为典型的例子,与GoogleTPU、TensorFlow生态的高度契合,助其第五次问鼎TIOBE年度编程语言。
另外需要重点提及的,是异构编程。异构编程是对“编程语言&硬件性能”这个议题在宽度上的延展。2021年,华为发布了北冥多样性计算融合架构,其中包含了毕晟C++及其他组件,而这里的毕晟C++,主要是服务于跨CPU、GPU算力编程的需求。这是国产基础软件,在编程语言层面向前迈进的一大步。
如果从这个时间点向前查找,我们会发现在2020年10月,英特尔发布了oneAPI1.0,目标在于简化跨不同计算体系结构的应用程序开发;2008年,苹果带头创建了跨平台计算框架OpenCL;而在更早的十余年前,英伟达就发布了CUDA,用于支持GPU编程。
问题在于,异构编程,无论在语言还是框架层面,学习成本都非常的高。从本质上讲,异构编程要求开发者对硬件之间的差异性有深刻的洞察,并能结合硬件差异做异常精细的性能调优。这导致团队引入后,研发效率相对降低(学习成本、迁移成本)。所以常规的通用型语言,也会提供异构编程接口作为折中,比如JavaTornadoVM就是用于支持异构硬件的特性。
况且,异构编程底层支持工具的推出和更新,重度依赖于自研硬件的各个厂商。但当今的硬件市场,不但没有收敛,反而有更加碎片化的趋势。各家的异构编程框架,往往只注重适配自己的体系,对其他的行业主流硬件既不愿过问,也没有足够的资源过问,这也为底层开发者的工作开展增加了难度。
放眼未来,开源,或许是打破现存问题的一种更好的组织模式。
我们既要性能也要安全,研发效能则需特别讨论
这随之引发了另一矛盾:性能和研发效率,通常是相悖的。在此前InfoQ对“Java之父”JamesGosling的采访中,他用Java和JavaScript的区别来说明这个问题。至于内存安全,在相当漫长的时间里,在以C/C++为底层技术栈的开发群体内,则通常不在考虑范围内。
Rust在2021年的大火,为全行业提供了新的启发。在InfoQ2021编程语言榜单中,Rust无论是关注度还是期望值,都紧随Go语言之后。若单论关注度的增速,Rust无疑是2021年最吸睛的编程语言。尤其是在2021年12月,Linux内核和RustonLinux的主要开发者MiguelOjeda向LinuxKernel邮件列表提交了一个新补丁(v2),进一步推进了RustforLinux的工作进展,将公众对Rust的关注推向了新的高潮。
Rust最重要的优势在于以媲美C/C++的性能表现,解决了编程过程中的内存安全问题,从而成为各团队在系统级编程领域的重点调研对象。
C++问世四十年,相关方法技巧已经成熟,催生了编程大神无数,但在2021年的今天,我们仍然在寻找其替代品。其根本原因在于,人们逐渐明了,性能并非系统级编程语言的全部,随着软件逐渐接管IoT设备(尤其是自动驾驶车辆),内存溢出/指针悬垂类的内存安全问题,已经不只会造成经济损失,更会威胁人身安全。与其面向结果,出了问题再改Bug,不如面向过程从一开始就把控好内存安全。
但Rust的上手难度,又在一定程度上,制约了语言本身的普及(知乎有一吐槽:为什么用Rust实现链表都这么难)。了解函数式编程或对学习Rust有所帮助,但编程世界未来的主流仍将是OOP(面向对象程序设计)。更大的问题在于中小型公司的替换成本——不存在成熟的人才梯队,不存在坚实的技术积累,直接采用Rust面临的问题是:无人可招。当下,几乎所有准备采用Rust的公司都是大型公司或创业团队,前者可以通过内部转岗积累人才,后者则从一开始就是围绕Rust构建的创业idea。
相比性能与安全,研发效能在今天反倒成为了一个模糊问题。狭隘地说,选择一门学习门槛低,开发效率高的语言,就是提升了研发效能;站在更大范围、更长的时间尺度来看,选择一门性能满足研发需求、生态成熟、内存安全有保障的语言,也是提升了研发效能;选择社区够完善,招聘难度低的语言,方便快速组建研发团队,也是变相提升了研发效能。
那么,在2021,一个研发团队应该如何选择适合自己的编程语言?在保证了性能需求和安全需求后,则需要结合业务场景、公司发展阶段具体分析了。
八仙过海,承诺兑现
除通用型语言外,如果要用四个字形容2021年各家垂直领域语言的发展,那么恐怕是“八仙过海”了。垂直领域用特定语言解决特定问题的趋势越发明显,语言的“工具”属性愈发突出。
在移动端开发,Kotlin独树一帜;在数据科学领域,Python和R语言应用甚广;在Web端,有越来越多的人开始尝试使用TypeScript。但需要注意的是,当下所谓的xx领域专用语言,或许到了2022年,就会产生天翻地覆的变化。如果细细琢磨,你可能会发现,这种变化正在发生,比如Kotlin、Julia。
WebAssembly是其中比较另类的存在,它致力于让其他语言都能以接近原生语言的速度在Web端运行,目前最主流的应用是将C/C++编译为WebAssembly。其在2021的具体进展,我们在接下来的“2021主要编程语言的具体发展”中单独讨论。
同时,编程语言也在兑现给开发者的无数承诺,那些在社区内早有风声的前瞻性修改,在2021最终完成了“填坑”。
2021代表性编程语言的发展概况
(关于Go、Rust、Julia的更多内容,可额外参考本次盘点特别策划部分,文章链接详见附录)
Go
说到“填坑”,2021当数Go语言最得人心。作为编程语言界最近几年最受欢迎的一员,Go却长期存在三个主要问题为开发者所诟病,即:模块管理工具、泛型语法支持,以及程序错误的处理方式。
关于模块管理工具,Go语言开发团队基本已经解决或给出路径;对泛型的支持,相当于有了定论;错误处理方式还未找到妥善的解决办法。而Go语言的2021主要动态,也是围绕着模块管理工具和泛型展开。
GO111MODULE是个系统环境变量,目的是方便开发者们在原始的GOPATH机制和新的gomodule机制之间做切换。Go团队在1.16版本中把GO111MODULE的默认值设置为了on,这标志着gomodule机制的成熟。同时,这也说明Go团队已开始正式普及gomodule机制。
从Go官方提供的标准工具来看,原有的那些go命令都已经完全适配了gomodule机制。比如,goget命令现在可用于调整Go模块的依赖关系,goinstall命令现在可用于下载、编译和安装Go模块,gotest命令现在也可用于编译并测试Go模块,等等。
围绕模块管理中的配置文件,另外有三点值得注意:
模块图修剪:在go.mod文件中,针对主模块的直接依赖模块记录和间接依赖模块记录已变得完整;新的指令:在1.16版本中,Go团队为go.mod文件增加了一个新指令。这个指令的名字叫做retract。我们在这里可以把它理解为“撤回”,用于撤回当前模块的某个已发布版本;新的注释:在1.17版本中,Go团队为go.mod文件增设了deprecation注释,用来废弃整个模块。
对泛型的支持,最早要追溯到2018年,但直到2021年8月,Go团队才放出了一个终极的设计方案:TypeParametersProposal(https://github.com/golang/proposal/blob/master/design/43651-type-parameters.md)。至此,一个紧密贴合了Go语言的泛型模型才算正式出炉。Go语言的1.17版本中已经包含了一些与自定义泛型有关的代码,不过要想自由地使用泛型,则要等到1.19甚至更远的版本了。
除此之外,2021年,Go在标准命令、标准库、语法、性能方面都有更新,我们这里简单列举,作为参考:
标准命令:
在1.16版本,Go官方对goinstall命令进行了改进,使它可以接受一种版本后缀(如:@v1.0.0),并以此来下载、编译并安装(以下统称为安装)某个代码包的特定版本;从1.16版本开始,Go官方推荐开发者在gomodule机制下只使用goinstall命令来安装代码包,并强烈建议,在使用goget命令的时候应该携带-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%左右。目前,在Linux、macOS和Windows操作系统的64位计算结构上,Go语言都自动启用了此功能。
Rust
2021,Rust的热度丝毫不逊于Go语言,但本次盘点特约专家张汉东有一句话说得很好:“Rust的出现不是为了重写这个世界已经存在的一切,而是为了让未来更加美好。”
对于当下本就关注度极高的Rust来说,分外适用。
2021年,Rustcrates的下载总量达到11,012,362,794次,即110亿次。
伴随着下载量的增长,Rust语言内存安全初步成果也已经显现。据2021年12月31日发布于arXiv的论文《SOK:OntheAnalysisofWebBrowserSecurity》中所言:
比较了四种浏览器架构,以及近十年来浏览器中内存安全问题依然是主流,比如Firefox就通过Oxidation项目(Rust)替换了12%的组件。自2015年以来,Firefox的内存安全漏洞数量出现了小幅但稳定的下降,其中,渲染器的内存安全漏洞明显下降。
Oxidation是专门用于将Rust代码集成到Firefox中的一个项目。Firefox54以来,所有平台都需要Rust支持,并且第一个主要的Rust组件是在Firefox56(encoding_rs)和57(Stylo)中发布的。展望未来,Oxidation的目标是让在Firefox中使用Rust变得更容易和更高效,并相应地增加Firefox中的Rust代码量。
可以说经过六年的应用,Rust语言的内存安全保障终于看到了初步的效果。该论文建议浏览器供应商遵循这一最佳实践,并逐步将他们的浏览器转向内存安全的语言。
Rust语言及相关生态在2021年一些看点简单罗列如下:
Rust编译器引入了一个新的实验性GCC后端,以及另一个基于gcc的实现(目前两者都在进行中)。Rust正在进入Linux内核,这也为语言和库带来了一些改进以促进这一壮举。Rust首次进入Redmonk指数前20名,并连续第六年获得StackOverflow调查的“最受欢迎的编程语言”桂冠。IEEE2021编程语言排行榜,Rust排17。按趋势来排,Rust在第十位。2021年初Rust基金会刚成立,到年末,已经有二十五家来自不同领域并且有一定建树的成员。并且基金会也开始落实一些具体安排,比如组织专业的crates.io运营。瑞士Concordium基金会宣布DevX计划,将赞助Rust生态的维护者们。Espressif(乐鑫)正式雇佣mabez针对eso芯片开发Rust支持:esp-rs。嵌入式Rust生态得到长足发展:嵌入式并发框架已经1.0、嵌入式异步框架正在大力开发且支持STM32,nRF和RP2040平台,并且还深深影响着Rust异步的改进、嵌入式开发和调试工具又发布了新的探针工具、嵌入式smoltcpTCP/IP栈发布了新版本、嵌入式图形库Matrix发布了新版本、新的嵌入式实时OSHubirs开源。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提供世界No.1的Qt咨询和UI/UX设计服务,选择和SixtyFPS合作,这也算是Rust在GUI领域的一个里程碑。EmbarkStudios发布了它们公司第一个3A游戏,在其游戏后端也用到了Rust。EmbarkStudios是Rust游戏工作组的成员之一,致力于将Rust推广到游戏开发中。rust-gpu库就是他们开源的项目之一,并且该公司也赞助了很多游戏和图形学相关的Rust生态库。Rust在音视频领域也得到了应用,Signal公司使用Rust开发了支持40人高质量语音群组通话的服务。Rust也成为前端基础设施的一员:Next.js公司用swc和Rust完全取代Babel(transpilation)和Terser(压缩)。
就版本更新而言,RustEdition现在已经确定了——每三年发布一个版次。这就意味着Rust每三年都会围绕一个引领Rust发展的主题。
2021Edition的主题是「成熟(Mature)」。2021edition并没有引入太多新特性,而是清理了一些技术债务,比如持续对Rust编译器进行重构和改进,包括内部使用的新的trait系统chalk和query系统(开源版本:https://github.com/nikomatsakis/salsa)。另外还处理了一些向后兼容的问题,以及持续投入一些影响未来发展的关键特性,比如常量泛型、泛型关联类型等。
前文我们也提到,Rust今年的一个重要动态就是对Linux内核的支持。到2022年,我们很可能会看到Linux内核中的实验性Rust编程语言支持成为主流。而在2021年12月6日早,Rust团队发出的更新的补丁中,则介绍了在内核中处理Rust的初始支持和基础设施。
这次更新的内容包括:
升级到了最新Stable编译器和Rust2021edition。因此可以摆脱了const_fn_transmute,const_panic、const_unreachable_unchecked、core_panic和try_reserve这几个之前未稳定的特性。自定义core和alloc。为alloc添加了更加模块化的选项,以便禁用一些他们不需要的功能:no_rc和no_sync,主要是为上游Rust项目添加。更严格的代码、文档和新的lint。抽象和驱动程序更新。添加了序列锁、电源管理回调的抽象,io内存(readX/writeX)、irq芯片和高级流处理程序,gpio芯片(包括irq芯片)、设备、amba设备和驱动程序以及证书。此外,也改进并简化了Ref(refcount_t支持)对象并用它替换了Rust的Arc的所有实例。完全地从alloccrate中删除了Arc和Rc。
从现在开始,Rustforlinux团队将开始定期提交补丁,每两周左右。
关于Rust,还有一点不得不提,那就是发生在年末的审核团队(modteam)集体离职事件。但当尘埃落定,事件本身的性质已经不好评价,涉及美国独有的政治、文化及种族问题。张汉东在采访中说道:
“2020年Rust1.44版本发布时,官方博客说过这么一句话:「techisandalwayswillbepolitical」。对于美国文化不太了解的我,之前还对审核团队存在的重要性嗤之以鼻,现在感觉审核团队的存在对于Rust这样深处文化政治复杂的美国是多么重要。我终于理解Rust官方团队所说这件事的背景相当复杂的原因了。真心希望Rust团队能处理好这件事。对此,我们能做些什么呢?也许只能祈祷世界和平。”
Kotlin
2021年刚好是Kotlin10周年,在这一年里,Kotlin共发布了1.5及1.6两个版本,目前最新版本为Kotlin1.6.10。如果要将其中的关键动态总结一下,那么会分为如下四点:
K2编译器:目标是全新打造的编译器架构,提供更好的性能并为多平台发展建立良好的基础。KotlinMultiplatformMobile(KMM)持续更新,预计在2022年春天发表Beta版本;Kotlin/JS:新的IR编译器发表Beta,更多JS库迁移到新IR编译器;ComposeMultiplatform1.0:可用于Desktop和Web的声明式UI框架,对安卓开发者来说,更容易从JetpackCompose切入;
K2编译器是Kotlin在2021年最重要的更新。编译器分为前端和后端,功能包含生成语义信息的IR(中间表示),并转为相应目标平台(JVM、JS、Native)的可执行文件。Kotlin1.5版本就已经开始支持K2编译器,目前Kotlin/JVM已是稳定版本,Kotlin/JS是Beta版本。
Kotlin的开发生态圈非常活跃,目前Kotlin团队共有约100位开发人员,超过360位开源贡献者参与开发工具,2021年约有25万个与Kotlin有关的代码仓库在GitHub上被创建出来。
有两份报告可供我们参考:
开发人员及开源贡献者数据:
https://kotlinlang.org/lp/10yearsofkotlin/present/
Kotlin开发生态系调查:
https://www.jetbrains.com/zh-cn/lp/devecosystem-2021/kotlin/
而2021年,Kotlin整个生态的活跃,也从侧面印证了这些官方团队和开源贡献者的工作成果。生态进展如下:
JetBrains方面:
UI框架:ComposeMultiplatform1.0Server-side:Ktor2.0beta,Kotless0.2.0DataScience及ML:KotlinAPIforSpark,KotlinDataFramelibrary,KotlinDL工具:Dokka1.6(文档引擎),Kover(代码覆盖率),Qodana(静态分析器)
社区方面:
SpringNativeArrow(Kotlinlibraryforfunctionalprogramming)release1.0Koin(dependencyinjectionframework)release3.0KorGE(Gameengine)release2.0Okio(I/OlibraryforKotlinMultiplatform)release3.0Apollo(GraphQLclient)release3.0
此外,Kotlin也很重视中国开发者的生态建设,2021年,他们与KotlinUserGroup合作,举办了中文开发者大会,吸引了1500+观众参加。
Kotlin2022年的发展重点可以总结为如下四点:
持续发展K2编译器:优化性能、编译速度及支持插件的能力改善开发者体验:优化KotlinIDE插件,提升稳定度及性能,让修改、测试除错循环可以更高效深化支持Kotlin在Server-side的应用:更多是Spring及Ktor方面的应用推出新版KotlinMultiplatformMobile(KMM):预计在2022年春天推出KotlinMultiplatformMobileBeta,并持续改善共享代码的开发体验
(具体路线图可参考:https://kotlinlang.org/docs/roadmap.html)
而在这背后,是Kotlin积极地向多平台语言演进的努力,用本文的话语体系来讲,就是“通用型语言”。我们可以看到JetBrains提供了多个支持多平台的库如kotlinx.coroutines,kotlinx.serialization,kotlinx-datetime,而Kotlin社区也紧跟着这样的趋势发展,出现了愈来愈多的库、框架来支持多平台,如Arrow、Okio、Apollo等在新版本中都支持了多平台开发。
令Kotlin社区工作者苦恼的是,自2017Google发表声明后,Kotlin总被当成是安卓专用开发语言。实际上,Kotlin极有可能在接下来的两个领域成为主流编程语言:
Desktop:设计Kotlin的初衷就是要拿来开发IntelliJIDEA,随着ComposeMultiplatform的发布,使用Kotlin开发Desktop软件将更加轻松;Server-side:Kotlin100%与Java互操作的特性让许多JavaServer-side开发者转而使用Kotlin,现也有Spring官方的支持及JetBrains推出的Ktor框架,使用Kotlin开发Server-side应用将有机会成为主流。2021年使用Kotlin做Server-side开发的用户提升了40%,可见其潜力;
同时,Kotlin对WebAssembly的支持工作也提上了议程,未来也将成为Web端编程语言的可选项之一。
就这一点而言,我们倒不妨大胆畅想Kotlin2022年的发展态势,看其在未来几年内,能否重现当初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的一些新特性,这里我们列出尤其值得关注的几点:
全新的多线程特性:解决了许多运行时的竞态条件,优化了多线程之间任务的调度,同时让默认的随机数生成器对多线程更加友好,此外还新增了一类原子操作作为基本的语言特性;包管理的更新:新版的包管理工具会自动识别出该包是否已经注册,如果是的话,则会提示你是否要自动安装;对AppleSilicon的支持:Julia@v1.7是首个能运行在AppleSilicon上的版本,但对该平台的支持还仅处于tier3(即仅处于实验性质,编译/测试有可能失败);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这样的前端语言做准备;WebAssemblySMID可变长度取得关键进展,帮助WebAssembly应用充分获得CPU向量化计算加速能力;WebAssembly模块化取得关键进展,为进一步构建WebAssembly的生态提供了核心的支撑;源码调试能力的增强,WebAssemblyMicroRuntime和WASMTIME等开源项目都提供了源码的调试能力,极大促进应用开发的效率
另一个重要动态是“字节码联盟(BytecodeAlliance)”正式成为了非营利性实体组织,致力于开发基于WebAssembly和WASI的安全开源软件栈,建立一个默认安全的WebAssembly生态系统,让应用程序开发人员和服务提供商能够自信地在任何基础设施、任何操作系统或设备上运行不受信任的代码。字节码联盟发展十分迅速,其成员包括Fastly、英特尔、微软、Google、Amzaon、Arm、西门子等企业。业界普遍期望字节码联盟可能会更有效率地推进WebAssembly的更新和迭代工作。
更多的编程语言,如Python、Swift……我们难以在同一篇文章中全部盘点,只能寄希望于2022年,我们继续关注编程语言领域的核心动态。相信在2022,各大编程语言也会为开发者带来新的惊喜。
附录:2021编程语言盘点特别策划及Java2021部分动态盘点
解读Julia的2021:逐步迈向主流编程语言:https://url.cy/Sr7oU1
解读Go语言的2021:稳定为王:https://mp.weixin.qq.com/s/9LKyPfhwldgZY7H4iS7sjg
解读Rust的2021(上):https://mp.weixin.qq.com/s/aTCogUxyUwE6Sa4Nfs9CYA
Java2021部分动态盘点:https://www.infoq.cn/theme/125
好了,文章到此结束,希望可以帮助到大家。