2 天前 / itfanr
C++ 编程语言已经不是用来构建数据库的最佳选择了吗?数据库初创企业 Singularity Data Inc.(中文简称奇点无限)最近发表了一篇博客文章,宣布他们完全删除掉了 RisingWave 的 27 万行 C++ 代码库,并用 Rust 语言从头开始重写了一遍系统。 RisingWave 于 2021 年初开始创建,决定重写时,他们已经花了 7 个月的时间进行开发。按创始人的话说,用 Rust 重写也意味着“七个月的努力都白费了。对于早期创业公司来说,这是一个疯狂的决定。特别是在竞争激烈的环境中,对科技初创公司来说,时间几乎就是一切。
26 天前 / kafeidou
通过 BSON 和零拷贝反序列化在 MongoDB Rust 驱动程序中解锁更高的性能 Rust BSON 库(bson crate)的 2.2.0 版本引入了一个“原始”BSON API,它使我们能够在 Rust MongoDB 驱动程序(mongodb crate)中实现一些内部性能改进,并且在某些情况下,可以用户利用它来显着提高查询性能,包括通过使用 serde 的零拷贝反序列化功能。在这篇文章中,我将演示如何使用这个新的 API,并提供一些例子来说明它可以帮助你加快阅读速度。文章链接,https://patrickfreed.github.io/rust/2022/04/27/unlocking-greater-performance-in-the-mongodb-rust-driver-via-raw-...
36 天前 / kafeidou
本书的链接如下:[https://github.com/Warrenren/inside-rust-std-library]本书有几个目的:给出 RUST 标准库的分析脉络 RUST 的所有权,借用,生命周期是难点,这个难点不是能依靠基本指南书籍就搞定的,必须要通过分析代码,形成肌肉记忆,才可以在编程中有效的规避。本书针对标准库中代码和所有权,借用,生命周期有关的部分做了大量标注,解决了标准库原有注释缺失的这个细节,帮助程序员更清晰的理解这三个概念在代码的坑在哪里。RUST 数据结构与其他语言不同之处除了以上三点外,主要体现在内存和类型系统之间的转换,不同智能指针类型之间的转换上。
38 天前 / kafeidou
作者 | Daniel Bulant 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 刚开始从事编程工作的时候,我使用的是 PHP。个人感觉,PHP 的语法有点笨拙且不自然,有时甚至很讨厌(为什么我必须在每个变量前加上 $ 前缀?常量前面没有 $,它不是照样能理解吗?)在学习了其他语言之后,我就不喜欢 PHP 了,但 PHP 的有些地方还是还招人喜欢的,比如数组循环很容易,而且还有多种编程范式:函数式、面向对象以及 trait 等。 后来,我又学习了 JS,它很像 C 语言,而且随处可见。期间,我也做过一些 Java 和 C#的项目,但后来还是回到了 JS。
51 天前 / 莫若
译者 | 弯月译者 | 弯月 责编 | 欧阳姝黎 出品 | CSDN(ID:CSDNnews)Rust 的异步功能很强大,但也以晦涩难懂著称。在本文中,我将总结之前提过的一些想法,并给出一些新的点子,看看这些想法放在一起能产生什么效果。 本文只是一个思想实验。对 Rust 进行大改造很麻烦,因此我们需要一个精确的方法来找出优缺点,并确定某个改动是否值得。我知道一些观点会产生完全相反的看法,所以我建议你用一种开放的心态阅读本文。 在对 Rust 中实现异步的不同方式进行探索之前,我们应该首先了解何时应该使用异步编程。毕竟,异步编程并不像仅仅使用线程那么容易。
55 天前 / Bookee
作为 Rust 语言初学者,往往会忽视不可变性与 mut 关键字的使用,难以理解 Cell 和 RefCell 设计逻辑及其使用场景。 通过阅读这篇文章,期望大家能对 Rust 语言一些架构设计上的选择及使用有全面理解。 一、不可变性和可变性 不可变性 Immutability,其实在我们日常生活中经常遇见比如:我们说过的话,走过的路,发出去的信息,都会成为历史,是不能改变的,也不会改变,它具有明显的时间属性。 为了更正我们前面已发出去的信息,我们往往会重新发一条新信息,如此循环,以达到沟通交流的目的。 在会计记账时,也是类似的情况,提交过的帐本不容许再修改。
67 天前 / reesunhuang
引子 Rust 在服务端和嵌入式领域已经有很多跨平台模式的应用案例了,本文主要是来探究一下 Rust 在移动开发领域的跨平台开发模式。 本文中涉及所有信息均来自于互联网,如有错漏,请及时反馈。 Rust 语言 对 iOS 和 Android 平台支持状态目前 Rust 对 iOS 和 Android 平台 Target 都是 Tier 2 和 Tier 3 级别的支持,并且都支持 std 。 Tier 2 表示在 Rust 项目的 CI 中会检查这些 Target 可以顺利构建,但不保证测试能通过。一般情况下,Tier 2 级的 Target 会正常工作。Tier 3 则不会在 Rust 项目的 CI 中出现。所以,在相应的平台下,不一定会构建成功。
73 天前 / hyper0x
作者:中弈 - sealos 作者 | TOP 10 经常忘记写的分号 fn add_with_extra(x: i32, y: i32) -> i32 { let x = x + 1; // 语句 let y = y + 5; // 语句 x + y // 表达式}当你是从 golang 刚转过来,你一定经常忘记写分号, 对于 Rust 语言而言,区分语句和表达式的方式是非常重要,而且很多时候有了表达式会很方便, 比如不用再写 return,或者在匹配的时候使用。 语句执行一些操作无返回值,表达式会求值后返回一个值,所以分号‘;’就很重要了。
87 天前 / u561252
Wasmer 2.2 发布 Wasmer 2.2 发布!该版本具有显着的进步,可以在很大程度上影响 Web3.0 和区块链。Wasmer 正在为 Singlepass 编译器重新兼容 Aarch64 而努力完善。借助新版的 Singlepass 编译器,Web3.0 和区块链开发人员可以在 Windows、Linux 和 macOS 上使用 Singepass 高效运行 Wasmer Runtime。(不过新版本还完全支持备受期待的 Apple M1 处理器)原文链接:https://wasmer.io/posts/wasmer-2.2Singlepass 编译器是什么:https://github.com/wasmerio/wasmer/tree/master/lib/compiler-singlepass 去容器化! 如何在 k8s 上借助 Rust 运行 WasmWasm...
90 天前 / kafeidou
整理 | 于轩 出品 | CSDN(ID:CSDNnews)近日,人工智能非营利组织 OpenAI 的 CTO 格雷格·布劳克曼(Greg Brockman)在推特上发表了他对编程中的一些错误信息的看法。他表示,编程中最不被重视的技能之一就是写出不令人沮丧的错误信息。一个好的错误信息应该是显而易见的,包括:1.用户做了什么;2.可接受的输入是什么;3.如何解决这个问题。这可以决定你对库的爱或恨。 随后,“网络冲浪达人”马斯克在评论区表示了对布劳克曼的认可,甚至还讨论起了编译器的性能。马斯克说:编译器也可以做得更好,但在这方面花费的精力还不够多。
93 天前 / kafeidou
PopOS 正在与 Relm4 配合,以帮助用 Rust 在 PopOS 上开发 GTK 程序 PopOS 是要开发 Rust Linux 发行版的 System76 的 Linux 发行版,现在正致力于和 Relm4 合作,帮助用 Rust 在 PopOS 上更容易地开发 GTK 程序。Relm4 是基于 GTK 上层的一套框架,提供类 Elm 的编程模式。Link:https://www.reddit.com/r/rust/comments/sxwi46/popos_collaboration_with_relm4_writing_gtk/AWS:为什么我们要持续投资 RustRust 虽然相比 Java,js,python 算小众语言,但是已经进入 Linux kernel, Windows, Chrome, Android 等基础设施了。
93 天前 / HueiFeng
作为两门新语言,很多人可能将 Rust[1]和 Go[2] 视为相互竞争的编程语言,但 Rust 和 Go 团队并不这样认为。相反,两个团队非常尊重各自正在做的事情,并将这些语言视为对整个软件开发行业现代化的共同愿景的补充。本文的两位作者,一位是 Go 开发组成员,Hugo、Viper、Cobra 等优秀开源项目的作者;另一位是 Rust 开发组成员。 本文将讨论 Rust 和 Go 的优缺点以及它们如何相互补充和支持,同时给出什么场景最适合哪门语言的建议。 目前已经有一些公司发现同时使用这两种语言具有互补价值。
103 天前 / 柴树杉
2.1. 加减法表达式在前一节我们通过最小编译器将一个整数编译为可以返回相同状态码的程序。现在我们尝试将加法和减法的表达式编译为同样的程序。 比如有 1+3-2 表达式,手工编写对应的LLVM汇编程序如下: define i32 @main() {; 1 + 3 - 2%t0 = add i32 0, 1 ; t0 = 1%t1 = add i32 %t0, 3 ; t1 = t0 + 3%t2 = sub i32 %t1, 2 ; t2 = t1 - 2ret i32 %t2}如果将输入的1+3-2转化为vec!["1", "+", "3", "-", "2"] 形式,我们则可以通过以下代码输出对应的汇编程序: fn gen_asm(tokens: &[&str]) -> String {let mut result = String::new();result.push...