您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > 百科

Rust、Zig,能够干翻Java、C?

时间:2023-11-17 14:23:34  来源:51CTO  作者:

撰稿 | 云昭

出品 | 51CTO技术栈(微信号:blog51cto)

众所周知,由于其根源于 Mozilla,Rust 在历史上与系统编程联系在一起,它对安全性、速度和并发性的承诺,使其在基础设施层面得到了广泛采用。这种地位的上升引发了一个有趣的问题:Rust 在传统上由动态语言主导的领域是否拥有更高的地位?

近日,一场汇聚了新兴语言的主要开发者的会议P99 CONF ,为我们带来了Rust与Zig如何相互借鉴,并让与会者们参与了挑战C++、Go甚至JAVA等主流语言的探讨。且让我们一探Rust与Zig的未来。

一、Zig可以借鉴Rust,反之亦然

世界上伟大的事物往往是完全开放,既可以和而不同,又可以相互借鉴。Zig与Rust之所以快速成为全球编程社区的“宠儿”,也是做到了开放与借鉴。 

1.Zig学习Rust哪些?

Bun的创建者Jarred认为,Zig可以Rust那里引进“有限的编译时概念”,比如在各种类似作用域的情况下的一些借用检查器。此外,Zig安全方面还比较欠缺,两个明显的例子就是,还可以返回指向堆栈内存的指针,例如堆栈分配的缓存区,这都是不应该做的。

Zig语言还非常新,但诞生之初就懂得借鉴。比如向Go借鉴了延迟(defer),即延迟键盘和语言。与Go实现的区别在于,它是针对每个作用域的,而不是针对每个函数的。在 Go 中,defer 会将其附加到函数的末尾,而对于 Zig 来说,它位于作用域的末尾。这通常就是开发者进行资源清理的方式。 

但Zig的延迟做的还不够好, 至少有某种形式的析构函数,因为它很容易被忘记。“有时我确实希望有构造函数和析构函数……但我的心情很复杂。”

2.Rust羡慕Zig什么? 

Rust主要开发者Carl,则表示了Rust对于Zig编译速度的羡慕。“Zig 的编译速度肯定要快得多。Rust 肯定会从中受益。”

Rust目前的一个痛点就是:一旦你摆脱借用检查器而使用 Rust 进入不安全代码,它就很不符合人体工程学,而事实上,在编写nice的不安全代码方面,Rust其实有许多地方可以改进。Carl表示:我们编写的不安全代码比典型的应用程序开发人员多得多,因为我们正在构建这些类型的原语。Zig在这方面可以给Rust以灵感。

P99 CONF 的长期支持者Glauber,认为 Zig 有两件事可以让 Rust 受益匪浅。第一个是comptime。comptime 是Zig一个非常好的特性,即在编译期引入自身作为胶水语言来生成代码的能力,甚至被Glauber称为天才之举,“我希望每种语言都有这样的功能。

C++中的模板系统与 comptime 相比……根本不在同一个级别。”

可能很多人不太熟悉comptime, 简单来说,它允许开发者在编译时评估任意代码。许多语言都有类似模板的语法,然后还有一些其他变体,一些其他方式来具有编译时标志、功能和参数。这也是类型系统的工作原理。例如,标准库中的 ArrayList 类型接收 comptime 类型参数,然后就有一个该类型的切片。这有点像编译时的duck-typing类型。 

举例来说,Zig用它来生成用于源映射解析的查找表。sourcemaps 使用这种编码 VLQ。“如果我们生成此查找表,则源映射编码速度将比以前快 18%。最初,我们是在运行时执行的。”Zig 使其变得非常简单,因为只需传递关键字即可。顶级作用域中的任何内容都是 comptime,否则,就可以将其传递到作用域中的关键字 comptime 中。

第二个,是 Rust交叉编译到不同的平台,是一个非常痛苦的事情。这方面Go 做得非常好, Zig 也比 Rust 做得更好。

交叉编译方面,Carl还透露了Zig的情况。“现在在 Bun CI 中,我们在 linux 机器上为所有不同的平台、每个 Zig 部分构建每个目标文件。因为每台机器都有大量内存以使其编译速度更快。因此,我们在 Linux 上构建所有 Zig 代码,即使它是针对 mac OS 的。” 

二、用C的人为什么讨厌Rust,喜欢Zig

Rust 一直是注重性能的 P99 CONF 社区的宠儿。即使我们以 C++、Go 甚至 Java 的令人印象深刻的性能成就案例研究为特色,讨论也不可避免地转向“但为什么不是 Rust?”

很多人习惯于C,将C用于高效工作,因为C语言确实让你的移动速度快得令人难以置信(直到出现错误)。他们选择Rust,尝试像C一样编写Rust,最终都会遇到Rc<RefCell<...>>,unsafe{...}等。

这种大量的错误报告和“调试地狱”会带来非常强烈的负面反应。

但这并不意味着Rust太难了,其实有能力用C编写生产软件,就绝对有能力使用Rust。更多地在于,“当C方式对我很有帮助时,我不愿意学习Rust方式。”

这反而是Zig的利基市场。

如果您已经了解 C,您可以在几天内学习 Zig,并且比 C 更有效率。在我看来,这就是 Zig 的价值主张。它与 C 非常相似,您的大多数模式和根深蒂固的经验都可以利用。你学习了 Zig 的 comptime,然后,你就掌握了带泛型的 C 语言。您可以毫无障碍地依赖现有的 C 项目和库。Zig 是“我在 C 语言中很有生产力,但想要更好的功能”语言。

三、Java开发者不妨考虑学Rust

“Rust并不是太困难。我是一个巨菜的菜鸟,连我都可以在大约一个月内写出一些不错的Rust。”

虽然旧版 Java 很简单,但大部分时间都花在学习库、构建系统或非常复杂的应用程序服务器上。这3个部分非常复杂。编写 Spring MVC Web 应用程序非常复杂。

“我们公司迁移到 Rust,花了大约 1 个月的时间才适应 Rust,无需处理 C 指针、内存映射等低级内容。”

部署 Rust Web 应用程序比处理 Java 应用程序服务器和 WAR 容易得多。为什么Java应用服务器有这么多bug?

20 多年过去,它们仍然无法获得诸如重新加载而不泄漏或数据库连接池可靠而不挂起连接之类的东西。

“JDBC 的编写方式使得池无法强制关闭卡住的连接;卡住的连接会随着时间的推移而累积,直到服务器挂起。”

这表明Java J2EE应用服务器的整个概念是错误的。每个曾经使用过websphere的人,web logic都会把他们折磨到“地狱”。即使是最小化的 Tomcat 也远未消除错误。JVM 本身正在崩溃。“我还没有看到任何 Java 应用程序后端或 GUI 不会因为内部 JVM 错误而崩溃。”

Rust 需要的内存比 Java 少 10 倍,速度比 Java 快 4 到 10 倍,编译失败很快就会得到修复。不需要应用程序服务器和巴洛克式构建工具(变形的工具)。Rust 就可以,无需开始用 Java 编写新的应用程序。

Rust 有相当高级的库,如 Rocket.rs (rust) 和微型 Web 框架,如 scalatra.org (scala),这两种类型都非常容易上手。而且使用起来也要容易得多:所有内容均已键入,并且类型信息也可用作文档。

四、Rust在后端项目的软肋

也有一种观点认为,Rust不适合大型项目。因为Rust 项目是 AOT 编译的二进制文件,需要不断维护才能使其不断变化的包保持最新。此外,项目越大,linting 越慢,分析器越慢,构建时间也越慢。

也就是说,Rust 的借用检查器并不是大型项目中真正令人头疼的问题。然而,你需要学习如何移动、复制或借用内存的各种方法以及不自然的生命周期语法需要很长时间才能深入理解这些背后的真相。



Tags:Rust   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
在Rust中使用Serde的详细指南
在处理HTTP请求时,我们总是需要在一种数据结构(可以是enum、struct等)和一种可以存储或传输并稍后重建的格式(例如JSON)之间来回转换。Serde是一个库(crate),用于高效、通用地...【详细内容】
2024-03-26  Search: Rust  点击:(13)  评论:(0)  加入收藏
Rust 写脚手架,Clap你应该知道的二三事
有感而发最近,在和前端小伙伴聊天发现,在2024年,她们都有打算入局Rust学习的行列。毕竟前端现在太卷了,框架算是走到「穷途末路」了,无非就是在原有基础上修修补补。所有他们想在...【详细内容】
2024-03-11  Search: Rust  点击:(20)  评论:(0)  加入收藏
前端开始“锈化”?Vue团队开源JS打包工具:基于Rust、速度极快、尤雨溪主导
Vue 团队已正式开源Rolldown &mdash;&mdash; 基于 Rust 的 JavaScrip 打包工具。Rolldown 是使用 Rust 开发的 Rollup 替代品,它提供与 Rollup 兼容的应用程序接口和插件接口...【详细内容】
2024-03-09  Search: Rust  点击:(11)  评论:(0)  加入收藏
Rust中的数据可视化指南
可视化是数据分析和解释的一个关键方面。虽然Rust主要以其性能和安全特性而闻名,但它也为数据可视化提供了强大的工具。在这个全面的指南中,我们将深入研究Rust中的数据可视化...【详细内容】
2024-03-07  Search: Rust  点击:(29)  评论:(0)  加入收藏
如何在Rust中操作JSON,你学会了吗?
sonic-rs ​还具有一些额外的方法来进行惰性评估和提高速度。例如,如果我们想要一个 JSON​ 字符串文字,我们可以在反序列化时使用 LazyValue​ 类型将其转换为一个仍然带有斜...【详细内容】
2024-02-27  Search: Rust  点击:(47)  评论:(0)  加入收藏
记一次Rust内存泄漏排查之旅
在某次持续压测过程中,我们发现 GreptimeDB 的 Frontend 节点内存即使在请求量平稳的阶段也在持续上涨,直至被 OOM kill。我们判断 Frontend 应该是有内存泄漏了,于是开启了排...【详细内容】
2024-02-27  Search: Rust  点击:(12)  评论:(0)  加入收藏
Rust 最受欢迎的这些库
今天分享主题是,关于一些值得注意的 Rust 库,这些库可以根据它们的功能和在编码中的受欢迎程度进行选择。什么是 Rust 库?在 Rust 中,常被称为 “crate” 的库,是一个打包的单元...【详细内容】
2024-02-19  Search: Rust  点击:(50)  评论:(0)  加入收藏
异步Rust:构建实时消息代理服务器
在本文中,我们将深入研究使用Rust构建实时消息代理服务器,展示其强大的并发特性。我们将使用Warp作为web服务器,并使用Tokio来管理异步任务。此外,我们将创建一个WebSocket客户...【详细内容】
2024-02-01  Search: Rust  点击:(57)  评论:(0)  加入收藏
在 Rust 编程中使用泛型
本文的内容将涉及泛型定义函数、结构体、枚举和方法, 还将讨论泛型如何影响代码性能。1.摘要Rust中的泛型可以让我们为像函数签名或结构体这样的项创建定义, 这样它们就可以...【详细内容】
2024-01-09  Search: Rust  点击:(89)  评论:(0)  加入收藏
什么是Rust语言 ,特点是什么,跟其它语言对比有什么优势
什么是RustRust是一种系统编程语言,旨在提供高性能和安全性。它是由Mozilla和其开发社区创建的开源语言,设计目标是在C++的应用场景中提供一种现代、可靠和高效的选择。Rust的...【详细内容】
2024-01-09  Search: Rust  点击:(203)  评论:(0)  加入收藏
▌简易百科推荐
用于人工智能开发的主流编程语言都有哪些?
在人工智能开发领域,编程语言的选择至关重要。目前,主流的编程语言主要包括Python、Java、C++、JavaScript和Swift等。这些语言各具特色,适用于不同的人工智能开发场景。首先,Py...【详细内容】
2024-01-31    简易百科  Tags:编程语言   点击:(129)  评论:(0)  加入收藏
探究微处理器开发中的汇编语言的优势与挑战
在计算机编程中,汇编语言是一种低级语言,它可以直接控制计算机的硬件资源。与高级语言相比,汇编语言具有更高的运行效率和更好的控制能力,但同时也更加复杂和难以理解和维护。在...【详细内容】
2023-12-19  松鼠宝贝    Tags:汇编语言   点击:(98)  评论:(0)  加入收藏
选择适合微服务的编程语言,让你的工作事半功倍!
讨论编程语言就像是一场政治辩论。每个开发者都会过分捍卫他/她所使用的编程语言。然而,编程语言应该被看作是它们真正是的东西,即一种工作工具。每种编程语言都有特定的目的...【详细内容】
2023-12-14  爱发白日梦的后端  微信公众号  Tags:编程语言   点击:(177)  评论:(0)  加入收藏
编程语言大比拼:Python、Java、C、C++、Go 实现 'Hello World' 和九九乘法表"
应该90%的IT专业的朋友写的第一段代码就是打印"holle world",每个大学老师都会通过这个方式吸引你对课程产生兴趣。也许有的朋友学的是JAVA开发,有的学的是c,在几年前应该很...【详细内容】
2023-12-11  IT仔的笔记本  微信公众号  Tags:编程语言   点击:(216)  评论:(0)  加入收藏
TypeScript中的null和undefined的区别
在TypeScript中,null和undefined是两个特殊的值,用于表示变量的缺失或未定义。尽管它们在某些情况下可能看起来相似,并且都可以表示"没有值",但它们在语义和用法上存在一些重要...【详细内容】
2023-12-07  科学随想录  微信公众号  Tags:TypeScript   点击:(132)  评论:(0)  加入收藏
面向AI开发的六种最重要的编程语言
作者丨FATIH K&Uuml;&Ccedil;&Uuml;KKARAKURT 译者 | 布加迪审校 | 重楼出品 | 51CTO技术栈(微信号:blog51cto)在AI开发界,你使用的编程语言很重要。每种语言有其独特...【详细内容】
2023-12-07    51CTO  Tags:编程语言   点击:(121)  评论:(0)  加入收藏
NLP问题实战:基于LSTM(RNN)和Transformer模型
译者 | 朱先忠审校 | 重楼简介GPT等语言模型最近变得非常流行,并被应用于各种文本生成任务,例如在ChatGPT或其他会话人工智能系统中。通常,这些语言模型规模巨大,经常使用超过数...【详细内容】
2023-11-29    51CTO  Tags:NLP   点击:(271)  评论:(0)  加入收藏
一文了解低级和高级编程语言
中文是一种尽量用简短文字表达更多含义的语言,所以很多时候一句话的含义很容易曲解成别的意思。最近,有人提出C语言是一种中级语言的概念,所以特意介绍一下低级语言和高级语言...【详细内容】
2023-11-23  数字随行  微信公众号  Tags:编程语言   点击:(232)  评论:(0)  加入收藏
JetBrains 发布 2023 调研报告:77% 开发者使用 ChatGPT
IT之家 11 月 21 日消息,JetBrains 日前公布了《2023 开发人员生态系统现状》调研报告,汇集了来自全球 26,348 位开发者的调研结果。《开发者生态系统现状报告》涵盖广泛的主...【详细内容】
2023-11-21    IT之家  Tags:JetBrains   点击:(236)  评论:(0)  加入收藏
Go vs Rust:文件上传性能比较
一、设置所有测试都在配备16G内存的 MacBook Pro M1 上执行。软件版本为: Go v1.20.5 Rust v1.70.0测试工具是一个基于 libcurl 并使用标准线程的自定义工具,能够发送多部分请...【详细内容】
2023-11-20  技术的游戏  微信公众号  Tags:Rust   点击:(173)  评论:(0)  加入收藏
站内最新
站内热门
站内头条