首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Rust 与 C 速度比较

本文中,我专门将 Rust 与 C 进行比较,因为与 C++ 相比,将会有更多“如果”和“但是”,而我并不想深入讨论。 简而言之: Rust 抽象是把双刃剑。...但实际上,C 抽象较少,标准库很原始,依赖情况也很糟糕,我真的没有时间每次都重新“发明轮子”。...对结构体字段进行重新排序,减少数据结构填充(padding)。当用 -Wpadding 编译 C 语言时,会显示我有多经常忘记这个细节。 字符串大小“胖”指针中进行编码。...Rust 已经有了很多库,如数据并行、线程池、队列任务、无锁数据结构等。有了这类构件帮助,再加上类型系统强大安全网,我就可以很轻松地并行化 Rust 程序了。...今日好文推荐 90亿美元Java纠纷案反转:安卓复制代码属于合理使用 Java 微服务能像 Go 一样快? 用Rust重写Linux内核,这可能

1.7K30

篇一 | 想全面了解 Rust 语言 ? 你想知道都在这里

学习 Rust 语言需要高智商Rust Better C++ Rust 学习曲线高? 零基础能否学 Rust 语言? 学 Rust 语言是否可以跳过 C 语言?...要学习 Rust,就要自己亲自了解下 Rust 语言及其生态信息。 Rust 基金会目前也积极筹备,据说放在了瑞士,Rust 未来可期。 Rust 一门什么样语言?...掌握 Rust 并不能给你带来智商优越感,但一定会让你重新爱上编程。 Rust Better C++ Rust 语言刚发布时候,很多人拿 RustC++ 比较。...从上面对 Rust “考古”,我们看得出来,Rust其实更像是对 C 语言一种重新实现。而这种实现,是为了满足新时代安全和性能并重需求。未来,安全并不是仅仅是一个可选项。...综上所述,说 Rust Better C++,并不是一个严谨说法。Rust 更像是一个开启新时代通用 “C” 语言。 Rust 学习曲线高? 首先,Rust学习曲线有的。

1.6K30
您找到你想要的搜索结果了吗?
是的
没有找到

我们为什么选 Rust 重写核心服务?

即使世界上最好 C++ 团队(如构建 Windows™或 Chrome™团队),做出来代码也有约 70% CVE 来自于内存安全性问题——诸如释放后使用、缓冲区溢出、两次释放等,这可能会导致内存访问控制和特权升级攻击...将整个端到端路径迁移到 Rust 并消除瓶颈之后,我们客户应该能看到巨大性能提升。同时,我们会将端点迁移至 Rust重新设计数据库和扩展服务,尽一切努力来提高性能和可靠性。...正确 Kraken 绝对至关重要,而 Rust 现代语言结构让我们更容易编写正确而健壮代码。... Rust 可以肯定,编译后更改不会出现数据争用(并发错误主要来源之一)和内存安全问题(我们大多数代码都用 safe Rust)。...尽管现在情况有所好转,但异步框架分裂严重损害了生态系统。如果 Rust 能够提供一种构造,允许任务调度子系统被抽象出来而无需额外开销,那会是很大改进。

51620

我们为什么选 Rust 重写核心服务?

即使世界上最好 C++ 团队(如构建 Windows™或 Chrome™团队),做出来代码也有约 70% CVE 来自于内存安全性问题——诸如释放后使用、缓冲区溢出、两次释放等,这可能会导致内存访问控制和特权升级攻击...将整个端到端路径迁移到 Rust 并消除瓶颈之后,我们客户应该能看到巨大性能提升。同时,我们会将端点迁移至 Rust重新设计数据库和扩展服务,尽一切努力来提高性能和可靠性。 ?...正确 Kraken 绝对至关重要,而 Rust 现代语言结构让我们更容易编写正确而健壮代码。... Rust 可以肯定,编译后更改不会出现数据争用(并发错误主要来源之一)和内存安全问题(我们大多数代码都用 safe Rust)。...尽管现在情况有所好转,但异步框架分裂严重损害了生态系统。如果 Rust 能够提供一种构造,允许任务调度子系统被抽象出来而无需额外开销,那会是很大改进。

71820

编程语言中变革者 | 敢于打造理想世界 Rust

C/Cpp,处理这类问题,一般都是靠开发者本身能力来决定,但是 Rust 里,不管是什么水平开发者,必须先通过编译器这一关。这就有效保证了程序正确性。...Rust 零成本抽象基础 trait。 trait 对 类型 行为抽象。它有四个作用: 1. 作为接口。 2. 泛型限定。 3. 标签。...了解Rust语言特性之后,第一印象是,Rust 语言冲着C/C++应用领域而去。...Rust 当下唯一一门,抽象表达能力比肩高级动态语言,性能和底层控制能力比肩C/C++语言,学习 Rust 过程,会把你对于底层操作系统、网络、范式抽象、设计模式等基础都训练一遍。...养成先思考,再动手编码习惯,避免一把梭。 2. 对内存安全、线程安全等基础建立一个系统认知,可以高效地产出正确程序。 对于企业来说,那你就是一个合格且更优秀开发者。

2.2K40

安全设计白皮书 | 谷歌对内存安全洞察

与此相关,谷歌还在努力解决同一个二进制文件混合使用 RustC++ 时可能发生跨语言攻击[11]问题。...最近,Rust 作为一种语言出现,它以编译时检查类型纪律为基础,体现了安全编码方法,从而实现了最小运行时开销。 数据显示,安全编码对内存安全非常有效,即使性能敏感环境也是如此。...它们可以发现可靠性、正确性和其他安全问题,例如: 基于属性模糊测试可以找到违反应用程序级不变性输入,例如开发人员编码正确性属性。例如,cryptofuzz 加密库中发现了 150 多个错误。...安全抽象 根据我们经验,消除错误类别的关键识别导致这些错误编程结构(API 或语言本地结构),然后常见编程实践消除对这些结构使用。...Rust Rust ,不安全内存代码明确地划定并限制 unsafe 块Rust 一种类型安全语言。安全 Rust 强制要求所有值都被初始化,并在必要时添加边界检查以确保空间安全。

21510

Rust 接棒 C 语言 :Rust for Linux 中正在发生技术变革

Drik: 所以你Rust 代码?你正在审查 Rust 代码。 Linus: 我一直阅读(审查)Rust 代码,以便其中包含了某种可怕事情,我需要做出判断。...Drik: 你认为你会在 Linux 提交代码中看到大模型生成代码? Linus: 我认为这件事很可能已经发生了。也许人们一个更小代码规模上使用它来辅助编码。...没有用户情况下,相关抽象层无法被合并,而同时,依赖这些抽象代码又在多个子系统陷入等待。因此,Rust 开发人员不得不依赖大量补丁来保证代码正常运作。...具体情况,目前 Tomonori Fujita 正在为物理层(PHY)驱动程序添加一些 Rust 抽象。已经进行了大量审查,并且根据这些审查意见频繁地重新制定了补丁集。...因为Rust 抽象,尤其 Unsafe Rust 安全抽象是需要专门设计;但是 Linux 某些模块开发和合并速度太快,人手严重不足,以及 C 那边的人认为 API 后面修改也可以,这是有误解

35110

Rust 接棒 C 语言 :Rust for Linux 中正在发生技术变革

Drik: 所以你Rust 代码?你正在审查 Rust 代码。 Linus: 我一直阅读(审查)Rust 代码,以便其中包含了某种可怕事情,我需要做出判断。...Drik: 你认为你会在 Linux 提交代码中看到大模型生成代码? Linus: 我认为这件事很可能已经发生了。也许人们一个更小代码规模上使用它来辅助编码。...没有用户情况下,相关抽象层无法被合并,而同时,依赖这些抽象代码又在多个子系统陷入等待。因此,Rust 开发人员不得不依赖大量补丁来保证代码正常运作。...具体情况,目前 Tomonori Fujita 正在为物理层(PHY)驱动程序添加一些 Rust 抽象。已经进行了大量审查,并且根据这些审查意见频繁地重新制定了补丁集。...因为Rust 抽象,尤其 Unsafe Rust 安全抽象是需要专门设计;但是 Linux 某些模块开发和合并速度太快,人手严重不足,以及 C 那边的人认为 API 后面修改也可以,这是有误解

27110

Rust 接棒 C 语言 :Rust for Linux 中正在发生技术变革

Drik: 所以你Rust 代码?你正在审查 Rust 代码。 Linus: 我一直阅读(审查)Rust 代码,以便其中包含了某种可怕事情,我需要做出判断。...Drik: 你认为你会在 Linux 提交代码中看到大模型生成代码? Linus: 我认为这件事很可能已经发生了。也许人们一个更小代码规模上使用它来辅助编码。...没有用户情况下,相关抽象层无法被合并,而同时,依赖这些抽象代码又在多个子系统陷入等待。因此,Rust 开发人员不得不依赖大量补丁来保证代码正常运作。...具体情况,目前 Tomonori Fujita 正在为物理层(PHY)驱动程序添加一些 Rust 抽象。已经进行了大量审查,并且根据这些审查意见频繁地重新制定了补丁集。...因为Rust 抽象,尤其 Unsafe Rust 安全抽象是需要专门设计;但是 Linux 某些模块开发和合并速度太快,人手严重不足,以及 C 那边的人认为 API 后面修改也可以,这是有误解

25410

先别急着“用Rust重写”,可能没有说那么安全

从本质上讲,Rust 和 C/C++ 不能直接交互——它们类型、内存管理和控制流方面都采取了截然不同方法。...具体有哪些安全问题 本节,我们将具体探讨实际场景下将 C/C++ 组件移植至 Rust 所引发安全漏洞。...由于 C/C++ 程序和 Rust 库之间会共享内存,所以对于来自 Rust此类输入任何不正确处理,都可能在整个程序引发内存安全错误。...我们还考虑了其他一些项目:Encoding_C,一个编码标准 Rust 实现,用于取代 Firefox C++ 实现;Ockam,一个安全端到端通信库;Artichoke,Ruby 语言 Rust...更重要将 C/C++ 系统迁移至 Rust 时,开发者必须通过 FFI 层来协调这些差异,其困难程度可见一斑。

32530

听GPT 讲Rust源代码--srctools(11)

Rust语法分析器,代码分析器需要一些特定功能来进行正确语法分析和效果性代码建议。...Rust,编译器通常以rustc命令形式执行,而rust-analyzer需要通过调用编译器来获取程序抽象语法树等信息。...它定义了三种不同编码方式:Utf8、Utf16和Utf32。这些编码方式计算字符偏移时考虑了不同编码字符长度。 LineEndings一个表示行结束符枚举类型。...操作队列并发编程中非常常见,它用于处理多个操作并保证它们按照正确顺序执行,以避免竞态条件和数据不一致性。OpQueue一个操作队列具体实现。...local字段:表示一个本地操作队列,用于将操作缓存在同一线程。 finish_all字段:表示是否等待所有操作执行完毕后再结束队列。 task字段:表示当前要执行任务一个函数指针。

13610

Rust日报】2021-02-17 - Rust 圆桌年话

只学过 C 语言适合学 Rust 中国有多少开发者使用Rust编程语言? 我应该放弃 C++,学习 Rust ? 如何看待 Rust 应用前景?...写 wasm 项目选 C++ 还是 Rust? 关于 Rust 语言基金会成立,你有什么想说呢? 学Rust之前,是不是应该先学C++?...优先资格 提供工作或相关职业至少有2年经验,必须涉及:使用Rust和面向对象设计来设计和开发大规模分布式软件应用程序,工具,系统和服务。...具备有关完整软件开发生命周期专业软件工程实践和最佳实践知识,包括编码标准,代码审查,源代码管理,连续部署,测试和操作。 具有使用Rust语言进行开发经验。 具有设计SDK经验。...Oneshot动作 结果互动 高优先级即时操作 流可以作为动作附加到参与者 支持结果精简任务 子角色和任务终止顺序 计划行动 信号(可以收听CtrlC) tokio 兼容 WASM 兼容(进行

40520

初创数据库公司疯狂行为:删掉花7个月开发27万行C++代码,用Rust全部重写一遍

对于早期创业公司来说,这是一个疯狂决定。特别是竞争激烈环境,对科技初创公司来说,时间几乎就是一切。” C/C++ 用来构建数据库系统最流行编程语言之一。...所以云时代,“Flink 可能不再流处理最佳答案”。 为了简化流处理,他们重新审视了一个古老研究方向:流式数据库。...于是,经过约 7 个月开发阶段后,团队开始有了质疑:“C++ 语言编写新数据库系统正确选择?”...C++ 支持特性如此之多,以至于不同开发人员可以以截然不同风格编写 C++。不同背景开发人员一个团队,保持代码可读性有困难。...此外,C++ 代码 bug 很难识别,因此审查代码会变得令人生畏。 另外,流式数据库通常用于对延迟非常敏感关键任务

33850

从字符串来浅谈Rust内存模型

最近我尝试课设程序引入了Rust,理由很简单——Rust我心目中不可多得语言层面尝试改进内存安全与高性能现代编程语言。不过这种尝试确实相当前卫,以至于让Rust对初学者显得不是那么友好。...Rust内存管理 上一节已经介绍了C++字符串,可以看到C++强大表达能力下可以实现开销相对小字符串(个人觉得比较完美)。...Rust字符串类似C++,但是它将移动升级为语言一种核心机制,并配合其他机制共同保证内存安全。 所有权:转移安全 Rust,传参、返回甚至变量绑定等都默认进行移动操作。...("{}", a); // 错误:不可以再使用a } 拷贝、克隆 C++默认拷贝操作Rust变成了额外Copy trait(你可以理解成Copyable接口,类似JavaComparable...和字符串例子一样,指针使用意味着可能存在不安全代码。而Rust解决方案也和字符串一样:给指针引入管理对象。C++这种管理对象也叫智能指针,由标准库提供。

92010

【译】Rust in Production | Arroyo : 为简化流数据工程师工作而生

Flink 出现之前,我们只有一些非常简单系统,它们几乎不能保证任何正确性或完整性,更多围绕你自己逻辑进行一些简单编排。 职业生涯,我一直 Flink 上工作。...从很多方面来看,当前系统开发对之前使用 Java 编写系统一种反思。许多人发现,通过用像 C++Rust 这样非托管语言重新编写这些系统,可以显著提升性能并简化操作。...还是您在项目上开始学习? 答:实际上,我从 2014 年开始使用 Rust,但直到现在,我从未说服公司 Rust 中进行重大项目。大型组织引入 Rust 总是一项艰巨任务。...问:他们担心工程师学习如何使用Rust会太困难?如果我们重新组建团队,是否能够将这个项目移交给另一个团队?他们是否需要弄清楚如何使用它?我们是否能够雇佣足够多Rust工程师?...我想知道为什么他们选择了 C++ 而不是 Rust,因为 Rust 可能已经一个非常成熟替代方案了。为什么他们没有选择Rust呢?或者是因为Rust在那时还没有那么成熟

37511

到底该选 Rust 还是 Go,成2023年最大技术分歧

8 月 7 日,Rust 基金会发布了 2022 年度 Rust 调查报告结果,报告显示 Rust 采用率不断提高,超过 90% 调查受访者表示自己 Rust 用户;29.7% 受访者表示,他们在工作大部分编码工作都使用... C 和 C++ 等旧语言发展这几十年间,我们已经清楚地意识到,引发错误和 bug 核心原因之一,就是对内存不安全 / 不正确访问。...但公平地讲,C++、Java 或者 C# 用户所期望那种面向对象编程风格, Go 或者 Rust 确实不存在。...它可能迫使我们从根本上重构自己程序来避免此类问题——如果各位确实把正确性和可靠性当作首要任务,那这种严格要求显然件好事。 换个角度想,不改变编程方式新语言,能叫新语言?...Rust 强调并发性、安全性及 / 或性能任务更为强大,可学习曲线也确实比 Go 更陡峭。

81020

Rust漫画 #3 | 二次元 Rust Meetup 讨论会:Rewrite it in Rust 是否有害?

但是也需要 C/C++ 端不要错误调用回调函数。 异常安全问题 Rust 如果发生了跨 FFI 边界 Panic 会造成未定义行为,但目前处理这类问题主要依赖程序员自己编码。...理想解决方案 FFI 边界自动捕获 Panic,并把错误信息传递给 C/C++端。但 Rust 本身没有提供这方面的支持,完全依赖程序员自己实现。...“其实反过来 C/Cpp 端也是一样,需要自动捕获异常,传给 Rust 错误码。 Rust 类型不变量 Rust 代码往往高度依赖类型系统所保证不变量,借此确保内存安全和代码正确性。...粘合代码问题:很多问题源自需要通过 unsafe 代码进行参数转换和重建 Rust 抽象粘合代码。这些转换做了许多假设,容易被 C/C++非法参数破坏。...目前企业和社区 Rust 与 C/Cpp 安全交互主要有三种方法: 建立 《Rust 编码规范》 和 《Unsafe 代码安全评审指南》,并加强 Unsafe 代码安全评审 建立 RustC++

36010

三年全职 Rust 游戏开发,真要放弃 Rust

你看,Rust 设计非常聪明,如果某件事情做不到,那是因为设计有问题,它只是想强迫你走上正确道路...对?...我没有考虑“在这里获取一个随机生成器正确方法是什么”或“我可以假设这是单线程”或“我是否嵌套查询,如果我原型重叠会怎样”,而且之后我也没有得到编译器错误,也没有运行时借用检查器崩溃。...这种对生命周期和所有权严格要求,实际上强制了一种对代码组织和数据访问抽象 Rust ,这种抽象不仅仅是选择,更多时候编程模型和语言安全特性必然要求。...有点夸张,但那些从外部看 Rust 的人可能会惊讶地发现这有时多么接近现实。Rust 纯净Rust 正确Rust 安全C++ 糟糕、陈旧、丑陋、不安全和复杂。...事实上,共享可变状态很困难,无论本地还是全局,无论实现语言是什么。 他们绝对正确Rust 不仅仅是一个“完成任务工具”。它是一个能够以高性能正确完成任务工具。

20410

听GPT 讲Rust Cargo源代码(4)

File: cargo/src/cargo/core/compiler/job_queue/job.rs Rust Cargo,job.rs文件定义了cargo工作队列Job类型。...在编译过程,Cargo使用Job来表示各个编译任务,将这些任务放入工作队列,并按照一定规则调度执行顺序。Work结构体用于包装一个Job,并设置了相关标识符和依赖信息。...DrainState:这个结构体表示了任务队列处理状态,它用于处理任务队列期间跟踪和管理错误信息和警告信息。...Cargo源代码,这些定义用于不同步骤和场景中选择合适编译器和目标,以确保代码特定平台上能够正确编译和运行。...这是Cargo构建系统关键组件之一,确保不同环境能够正确地链接Rust程序。

6010

Rust 正在「吞噬」我们系统,CC++ 时候下课了

作者 | Rupert Goodw 译者 | 核子可乐 策划 | 李冬梅 1C/C++ 时候下课了,Rust 才是未来 Rust 正快速渗透我们系统。...让我们放下手头计算任务,看看上一代人和下一代人计算应用场景。有多少任务多少种操作系统实例上运行?这些代码部署在哪里?...遥想当年,对 bug 修复只能依靠发布新版本,这种方式如今这个时代可能立即影响到数百万人隐私安全,或者国家层级卫生系统给勒索软件留下可乘之机。...当然,Rust 并不是万金油,它只是更理解数据现代环境可能受到哪些意外疏忽影响,而且知道如何在编译时以不牺牲性能方式强制执行安全保护。...任何人都很难彻底放下自己磨练多年技艺,马上转投新语言怀抱,但只要这代表着新时代下实际生产力要求,我们就必须抛开成见、做正确选择。 其实我们这些经历过变革群体幸福一代人。

37540
领券