标签

 rust 

相关的文章:

了解Rust轻量级微服务框架、速度测试、DragonOS等最新资讯,探讨C++是否会成为安全语言。

Rust.cc

Rust.cc -

Rust的静态链接问题

Mac系统下开发的一个程序,用 pkg-config crate 在 build.rs 里静态链接本地安装的库,build日志里能看到 -L /path/xxx -l static=xxx, 但生成的二进制文件里还是以动态库的形式依赖的,一旦本地库升级,二进制就因为找不到依赖的 dylib 而打不开,大家有遇到过这问题吗? build.rs 里是这样依赖的: pkg_config::Config::new().statik(true).probe("xxx").unwrap();

讨论了在Mac系统下使用pkg-config crate在build.rs中静态链接本地安装的库的问题。生成的二进制文件以动态库的形式依赖,导致无法打开。

相关推荐 去reddit讨论
解道jdon.com

解道jdon.com -

Rust开发游戏三年后吐槽:上下文不灵活

这篇文章是一位游戏开发者关于他们使用 Rust 进行游戏开发的经历和决定停止使用 Rust 的详细阐述。文章中提到了他们对 Rust 语言和其社区的看法,以及他们为什么认为 Rust 不适合他们的游戏开发需求。以下是文章的一些关键点:Rust 学习曲线和生产力:作者指出,尽管 Rust 社区经常告诉人们随着经验的增长,语言中的问题将会消失,但作者通过多年的使用和超过10万行代码的编写后发现,许多问题并没有因为经验丰富而消失。借用检查器(Borrow Checker):Rust 的借用检查器会在最不方便的时候强制进行代码重构。作者认为这与编写好代码的自然流程相冲突,因为好代码是通过迭代和尝试不同

这篇文章详细阐述了一位游戏开发者使用Rust进行游戏开发的经历和决定停止使用Rust。作者提到了Rust学习曲线、借用检查器、重构和迭代速度、间接性、ECS、泛型系统、全局状态、GUI开发、编译时间、生态系统和炒作等问题。作者认为Rust在游戏开发中上下文不灵活,对全局状态厌恶,生态系统建立在炒作上。作者还提到了一些积极的方面和未来计划。

相关推荐 去reddit讨论
Rust.cc

Rust.cc -

想转rust的前端

我自己本身是六年的前端,react、vue 写的很熟练,复杂的业务也做过很多,仅限前端;rust 自学了一段时间,也做了一个微项目,实现了一些增删改查(actix-web sqlx redis)。想要转后端rust/全栈,缺少机会。有大佬可以带带我,微信 glfisj

作者是一位有六年前端经验的开发者,熟练掌握React和Vue,并在复杂业务中有丰富经验。自学了一段时间Rust,并完成了一个微项目,实现了一些增删改查功能。作者希望能有机会转向后端Rust或全栈开发,寻求大佬的指导。联系方式:微信glfisj。

相关推荐 去reddit讨论
Rust.cc

Rust.cc -

【求职】Rust 开发

10+年开发经验,以前主要做Java后端,有丰富的架构及带团队开发经验。使用Rust编程3年,有实际开发经验,求捞。 可以接受的岗位城市:南宁,珠海,佛山,广州,深圳。目前人在南宁。 微信:xailabs

作者有10+年的开发经验,擅长Java后端和Rust编程,求职于南宁、珠海、佛山、广州和深圳。联系方式:微信xailabs。

相关推荐 去reddit讨论
Rust.cc

Rust.cc -

推荐一个 Rust 练手项目

之前写过一个 Go 语言的 mini-bitcask,实现了一个基于 bitcask 存储模型的极简 KV 存储引擎。 可以结合之前的文章食用:https://mp.weixin.qq.com/s/s8s6VtqwdyjthR6EtuhnUA 这次重新用 Rust 实现了一个版本,代码量和之前的差不多,包含了常用的方法,例如 Set、Get、Delete、Scan、PrefixScan、Merge。 项目地址:https://github.com/rosedblabs/mini-bitcask-rs Set pub fn set(&mut self, key: &[u8], value: Vec<u8>) -> Result<()> { let (offset, len) = self.log.write_entry(key, Some(&value))?; let value_len = value.len() as u32; self.keydir.insert( key.to_vec(), (offset + len as u64 - value_len as u64, value_len), ); Ok(()) } Set 逻辑比较直观简洁,写入磁盘日志,并且更新内存索引结构。 Get Get 则是先从内存中获取索引,再从磁盘中获取 Value。 pub fn get(&mut self, key: &[u8]) -> Result<Option<Vec<u8>>> { if let Some((value_pos, value_len)) = self.keydir.get(key) { let val = self.log.read_value(*value_pos, *value_len)?; Ok(Some(val)) } else { Ok(None) } } Delete delete 的逻辑和 Set 类似,只是写入了一个空的值,并且从内存中对应的 key 移除。 pub fn delete(&mut self, key: &[u8]) -> Result<()> { self.log.write_entry(key, None)?; self.keydir.remove(key); Ok(()) } Scan scan 功能主要借助了 Rust 自带的内存数据结构 BTreeMap 的迭代器进行实现,非常简洁和方便。 impl<'a> Iterator for ScanIterator<'a> { type Item = Result<(Vec<u8>, Vec<u8>)>; fn next(&mut self) -> Option<Self::Item> { self.inner.next().map(|item| self.map(item)) } } impl<'a> DoubleEndedIterator for ScanIterator<'a> { fn next_back(&mut self) -> Option<Self::Item> { self.inner.next_back().map(|item| self.map(item)) } } Merge merge 的逻辑其实也比较简单,将内存中的数据全部重写,并且替换旧的文件即可。 pub fn merge(&mut self) -> Result<()> { // 创建一个新的临时用于用于写入 let mut merge_path = self.log.path.clone(); merge_path.set_extension(MERGE_FILE_EXT); let mut new_log = Log::new(merge_path)?; let mut new_keydir = KeyDir::new(); // 重写数据 for (key, (value_pos, value_len)) in self.keydir.iter() { let value = self.log.read_value(*value_pos, *value_len)?; let (offset, len) = new_log.write_entry(key, Some(&value))?; new_keydir.insert( key.clone(), (offset + len as u64 - *value_len as u64, *value_len), ); } // 重写完成,重命名文件 std::fs::rename(new_log.path, self.log.path.clone())?; new_log.path = self.log.path.clone(); // 替换现在的 self.log = new_log; self.keydir = new_keydir; Ok(()) } 通过这个简单的项目,可以学习到 Rust 的大多数基础语法,例如: 数据类型,数组、整型等 match 表达式 函数 结构体 错误处理 迭代器 Iterator 和 DoubleEndedIterator 文件读写操作 BufWriter 和 BufReader 单元测试撰写 项目地址:https://github.com/rosedblabs/mini-bitcask-rs 觉得有帮助的话请不用吝啬你的 Star ⭐️ 哦!

这篇文章介绍了使用Rust实现的一个基于bitcask存储模型的极简KV存储引擎。文章详细介绍了该引擎的常用方法,如Set、Get、Delete、Scan和Merge,并提供了相应的代码示例。通过这个项目,读者可以学习到Rust的基础语法和常用操作。

相关推荐 去reddit讨论
Rust.cc

Rust.cc -

mac rust ld: library not found for -lglib-2.0 clang: error: linker command failed with exit code 1 (use -v to see invocation)

这个错误表明链接器无法找到 libglib-2.0 库。在 macOS 上,通常需要确保你的系统中已经安装了 GLib 库,并且链接器能够找到它。 你可以通过以下步骤来解决这个问题: 安装 GLib 库:你可以使用 Homebrew 或者 MacPorts 等软件包管理器来安装 GLib 库。在终端中运行以下命令可以使用 Homebrew 安装 GLib: brew install glib //检查是否正确安装 brew list glib 告诉链接器 GLib 的位置:在你的 Rust 项目中,确保链接器知道 GLib 库的位置。你可以通过设置 PKG_CONFIG_PATH 环境变量来告诉 pkg-config 在哪里查找 GLib。例如: export PKG_CONFIG_PATH="/usr/local/opt/glib/lib/pkgconfig" 或者你可以直接在 Cargo.toml 中指定链接库的位置。在你的 Cargo.toml 文件中添加如下内容: toml [build] rustc-link-lib=glib-2.0 rustc-link-search=/usr/local/opt/glib/lib 请注意,你可能需要根据你的系统和 GLib 的安装路径进行相应的调整。 重新构建项目:在设置好链接库路径后,尝试重新构建你的 Rust 项目,看看是否仍然出现链接错误。 export DYLD_LIBRARY_PATH="/usr/local/opt/glib/lib:$DYLD_LIBRARY_PATH"

本文介绍了解决macOS上链接器找不到libglib-2.0库的问题的两种方法:安装GLib库和告诉链接器GLib库的位置。最后建议重新构建项目并设置DYLD_LIBRARY_PATH环境变量。

相关推荐 去reddit讨论
Rust.cc

Rust.cc -

【Rust日报】2024-04-23 C++ 中的问题在 Rust 中仍然存在吗

C++ 中的问题在 Rust 中仍然存在吗 这是 Reddit 上的一个讨论帖,主要讨论集中在 C++ 中存在的一些问题是否仍然存在于 Rust 中,以及这些问题如何影响开发者使用 Rust。具体问题包括: 泛型和模板的单态化:C++ 的模板和 Rust 的泛型都需要通过单态化处理,这会导致编译时间长和生成的二进制文件大。避免这一问题需要以完全不同的方式重写代码。 对 libc 的依赖:两种语言的标准库都依赖于平台的 libc,这不仅导致了典型的二进制文件体积大,还带来了各种开发难题。 RAII 机制和资源处理错误:C++ 和 Rust 都使用 RAII 机制管理资源,但在资源释放时不能很好地处理错误,尤其是在文件关闭可能报错的情况下。 编译和测试时间相似:尽管Rust在许多方面提供了改进,但在编译和测试时间上与 C++ 相似,仍然较长。 看来在大家眼里,从 C++ 到 Rust 虽有许多改进,但某些核心问题仍未得到解决 原帖链接 gitoxide 的性能优化 gitoxide 项目中引入了 status() 迭代器,它使得在处理 git 仓库状态时更加高效。此外,项目还实现了无需使用 git2 库的 onefetch 功能,显著提升了性能。 新的 gix-status 库允许并行处理且支持重命名跟踪,而 gix-dir 库则用于遍历目录并找到未跟踪的文件。这些改进使gitoxide能更高效地处理文件状态和目录遍历。 通过增加并行处理和优化 API 的设计,gitoxide 在多个知名的代码仓库中展示了比 git2 更好的性能表现(gitoxide的新功能已被应用到 Cargo 项目中,并提高了API的可用性) github discussion 链接 Rust Analyzer 更新日志 Rust Analyzer 的最新改进,包括新功能、修复和内部改进,新功能主要有: 增加了一个辅助功能来包装或解包 #[cfg_attr] 属性。 新增一个辅助功能,可以将 From trait 转换为 TryFrom trait。 增加了对 minimal cargo-script 的支持。 允许 .rs 文件被用作 linkedProjects 此外还包含了一些 bugfix,详情请见原文 changelog 链接 -- From 日报小组 RustPlumber 社区学习交流平台订阅: Rust.cc 论坛: 支持 rss 微信公众号:Rust 语言中文社区

本文讨论了C++中的问题是否在Rust中仍然存在,并探讨了这些问题对开发者使用Rust的影响。文章指出了泛型和模板的单态化、对libc的依赖、RAII机制和资源处理错误以及编译和测试时间相似等问题。另外,文章还介绍了gitoxide项目中的性能优化和Rust Analyzer的最新改进。

相关推荐 去reddit讨论
Rust.cc

Rust.cc -

【Rust日报】2024-04-22 Thunderbird 引入 Rust

Thunderbird 引入 Rust Thunderbird计划在2024年7月版本中原生支持Exchange邮件功能,并选择Rust语言开发新功能,这是由于 Rust 强调内存安全、性能和易维护性。 原文链接 CrabGrab: Rust 的跨平台屏幕捕获库 从屏幕和应用程序捕获视频可能非常困难,当你想在一个跨平台应用程序中做到这一点时,情况甚至会更糟。CrabGrab 让持续的frame捕获变得简单,这可以用于单独的截图或视频捕获。它还包括枚举屏幕和应用程序所需的常见功能。你可以在几行代码中从一个窗口转到一个像素缓冲区,这些代码在 Windows 和 MacOS 上都能工作。 使用 CrabGrab,你甚至可以构建像一个能看到你屏幕的 AI 助手。就如 Snippy 项目一样 github 地址 Rust编写的LAVD内核调度器为Linux游戏带来了更多展望 在北美开源峰会上,Igalia的Changwoo Min展示了优化Linux游戏的内核调度器工作。这一工作意在减少游戏时的卡顿,不仅针对Valve的Steam Deck,还能广泛惠及Linux游戏体验。 演讲重点介绍了基于Rust语言编写且适用于sched_ext框架的延迟感知虚拟截止时间(LAVD)调度器。在Linux 6.9-rc1内核上的测试显示,LAVD调度器在平均FPS和1%低帧率方面有出色的表现,与EEVDF调度器相当或更佳。 原文链接 -- From 日报小组 BobQ, FBI小白 社区学习交流平台订阅: Rustcc论坛: 支持rss 微信公众号:Rust语言中文社区

Thunderbird计划在2024年7月版本中原生支持Exchange邮件功能,并选择Rust语言开发新功能。Rust的跨平台屏幕捕获库CrabGrab简化了屏幕和应用程序捕获视频的过程。Rust编写的LAVD内核调度器为Linux游戏带来了更多展望。

相关推荐 去reddit讨论
Rust.cc

Rust.cc -

Rust训练营拼车

https://u.geekbang.org/subject/rust 极客时间的这个课程还挺好的,陈老师之前的Rust编程第一课我也买了,课程质量很高。这个训练课就贵了很多,囊中羞涩,有道友拼车的吗

极客时间的Rust编程课程质量高,但价格较贵,希望有人拼车。

相关推荐 去reddit讨论
Tony Bai

Tony Bai -

Gopher的Rust第一课:Rust的那些事儿

本文永久链接 – https://tonybai.com/2024/04/22/gopher-rust-first-lesson-all-about-rust 要说这两年后端编程语言谁最火,Rust说自己第二,没人敢说第一。Rust连续8年霸榜stackoverflow最受推崇的编程语言,甚至被推特之父Jack Dorsey称为“完美的编程语言”: 注:最火:仅代表人气最旺,最受欢迎,但并不代表使用者最多。 如果你经常读我的博客,你可能会问:“你不是Go语言布道师吗?怎么也要转Rust了?”其实不然,学习Rust不是要蹭热度,而是实际开发的需要。这些年在汽车行业这个赛道上,云端和车端都要兼顾。目前车端基础软件的开发语言主要是C/C++,但内存安全、性能不输C且高可靠的Rust日益受到车载软件开发的青睐,AUTOSAR组织在2022年成立了Rust工作组就是一个重要的信号。并且据我所知,一些国内造车新势力已经或正在将一些Rust开发的中间件或应用放到了量产车或即将量产的车上。 注:AUTOSAR (Automotive Open System Architecture) 是一个面向汽车电子系统的开放式软件架构标准,由汽车制造商、零部件供应商和电子供应商共同发起并持续维护的一个全球性标准化组织。 不过,Rust语言在某些领域的崛起确实引发了其他编程语言社区的一些不满和争议。特别是Rust社区的一些人提出“Rewrite Everything in Rust”的观点,让很多编程语言社区,尤其是C++社区十分不安。Go社区则相对更加开放和友好的,主流观点是Go与Rust是可以互补的,两种语言在各自的优势领域发挥作用,通过合作而非对抗的方式,能为开发者提供更好的选择。更多细节,可以参考几年前我曾翻译过的前Go团队产品经理、gohugo的作者Steve Francia联合创作的一篇文章《Rust vs. Go:为什么强强联合会更好》。 也就是说Go依然是我的主力语言,但考虑工作上的需要,我要系统学学Rust了。为了避免“从入门到放弃”,我打算采用边学习边输出的方式,一方面可以督促自己学习,另一方面也希望能和读者及时互动,纠正学习中的错误理解。 我的Go语言第一课专栏广受欢迎,其知识结构想必也是大家认可的,这里我就仿照其形式,写一下学习Rust的第一课这个入门系列。 正如我在Go语言第一课专栏所说的那样:我一直认为,当你开始接触一门新语言的时候,你一定要去了解它的历史和现状。因为这样,你才能建立起对这门语言的整体认知,了解它未来的走向。而且,也能建立起学习的“安全感”,即相信它能够给你带来足够的价值和收益,更加坚定地学习下去。 在这篇文章中,我就先来了解一下Rust的诞生历史和现状发展,以及它独特的设计哲学。并与Go语言做个简单对比,希望能够让自己和读者对Rust有一个初步的认识。 1.1 Rust的历史与现状 1.1.1 Rust的诞生与演进 Rust诞生于2006年,这比Google三巨头“密谋”创建Go语言还要早上一年。不过和Go的三位创始人:图灵奖获得者、C语法联合发明人、Unix之父肯·汤普森(Ken Thompson),Plan 9操作系统领导者、UTF-8编码的最初设计者罗伯·派克(Rob Pike),以及Java的HotSpot虚拟机和Chrome浏览器的JavaScript V8引擎的设计者之一罗伯特·格瑞史莫(Robert Griesemer)相比,Rust之父格雷登·霍尔(Graydon Hoare)的身份和江湖地位却没有那么“显赫”。彼时的他只是Mozilla Research的一位加拿大籍的、不到30岁的开发人员: 注:Graydon Hoare这个人非常低调,极少在公开场合露面,因此在网络上很难找到他的肖像,上面图中的肖像来自https://www.crunchbase.com/person/graydon-hoare,我这里甚至不能保证这个肖像就是Hoare本人的。 新生代编程语言的诞生都伴随着一段轶事,比如Go语言的创始人们在Google内部经常遇到C++项目漫长的编译时间问题,每当他们启动一个C++项目的编译,都要等很长时间,期间都能喝上几杯咖啡。这让他们深有感触并意识到需要设计一门编译速度更快的新语言,于是Go语言就这样诞生了。和Go语言“喝咖啡,等C++项目编译”类似,Rust的诞生也有一段轶事: 2006年,29岁的Hoare有一天回到温哥华的家中,但他发现电梯坏了,电梯软件崩溃了!他不得不爬楼梯回到位于21层的家中。当他爬上楼梯时,他感到很恼火。他想:“我们做计算机编程的人居然无法制造出一部可以正常工作而不崩溃的电梯!” Hoare知道,许多此类崩溃都是由于程序使用内存的问题造成的。电梯等设备内部的软件通常是用C++或C语言编写的,这些语言以允许程序员编写运行速度非常快且相当紧凑的代码而闻名。问题是这些语言也很容易意外引入内存错误,这些错误会导致崩溃。Hoare决定对此做点什么。于是他打开笔记本电脑,开始设计一种新的计算机语言,他希望这种语言能够编写小而快速的代码,而不会出现内存错误,他将其命名为Rust。 这段轶事显然不可考证了。但可以确定的是从2006年开始的若干年里,Hoare创建的个人语言项目Rust并没有真正的用于改善电梯系统的程序,而是在得到了Mozilla的赞助下,用在了持续开发Mozilla的浏览器引擎Servo上了,Mozilla在2010年官宣了该项目,Hoare在2010年的一次演讲中也第一次介绍了Rust语言: Rust开源的第一行代码也是在2010年完成的: 此外,最初的Rust编译器是由OCaml实现的,2011年Rust团队使用Rust基于LLVM重新实现了编译器并实现了自举。同年,Rust也有了自己的LOGO,其设计灵感来自于自行车齿盘: 2012年,Graydon Hoare接受InfoQ专访,谈及他带领Rust team在Mozilla开发的系统编程语言Rust,包括Rust的特性、Rust相对于C/C++/Java/Go的优势与不同以及Rust的1.0版本发布计划。 但是,就在下一年,即2013年,Graydon Hoare就因为精力耗尽而辞去了Rust team的领导职务,离开了自己的Rust team,并从此远离了Rust开发。Hoare的离开对Rust team和语言本身来说是一次重大的损失,但Rust社区和团队采取了积极的措施来确保Rust的持续发展和演进。 2014年11月,Rust官宣了cargo和crates.io,前者是Rust项目构建管理器,后者则是Rust官方维护的Rust代码的中央包存储库,通过cargo可以轻松构建和发布包到crates.io,或从crates.io上拉取Rust代码的依赖。 2015年5月15日,Rust迎来了一个里程碑的时刻:Rust 1.0正式发布! [...]

Rust是一种流行的后端编程语言,以其内存安全性和性能而闻名。它在汽车行业中越来越被用于开发汽车软件。然而,它的崛起也在其他编程语言社区引起了一些争议。Rust的核心价值包括内存安全性、性能和生产力。它在流行度上排名低于Go,但在AWS、华为、谷歌、微软和Meta等公司中的采用率正在增长。Rust在系统编程、Web开发、网络和嵌入式系统等各个领域都有应用。它的设计理念注重内存安全性、性能和生产力。相比之下,Go强调简单性、安全性和可扩展性。

相关推荐 去reddit讨论

热榜 Top10

Dify.AI
Dify.AI
观测云
观测云
eolink
eolink
LigaAI
LigaAI

推荐或自荐