LWN:Rust 开发者们要入侵啦!

️Rust 移动端开发体验 当下(2022)Rust 在移动端的开发体验如何 没有 Java/Kotlin 代码,不使用 AndroidStudio 和 Gradle, 秒级编译并打包 Apk 运行 Rust 编译静态库打包到 XCFramework, 发布 Cocoapods 阅读详情

关注了就能看到更多这么棒的文章哦~

Rustaceans at the border

By Jonathan Corbet
April 14, 2022
DeepL assisted translation
https://lwn.net/Articles/889924/

对 Rust 语言开发的支持正朝着内核的前进,尽管不确定何时会在 mainline 上出现。不过,Rust patch 确实正在取得进展,并开始吸引到内核社区之外的关注了。当两种语言——以及两个不同的开发社区——走到一起时,可能会产生一种文化冲突。Rust in the kernel 就出现了一些早期迹象。如果由此产生的摩擦能够被解决,那么很可能可以为每个人提供更好的开发环境。

最新一轮的 Rust patch 是由 Miguel Ojeda 在 3 月 17 日发布的。这一次,Rust 支持代码已经推进到了 Rust 语言 1.59.0 版本,这个版本中已经把几个重要的功能(对内核而言)稳定了下来。这些 patch 增加了一个新的模块(module),把对硬件随机数生成器的访问抽象了出来。还为 C 字符串增加了 CString 类型。spinlock 的实现也得到了改进。总的来说,这组已经在 linux-next 仓库中的 patch set,增加了超过 35000 行的代码和文档,这个工作是一个相当大的体量了。

目前还没有公开讨论过这些补丁何时可以进入内核 mainline。Rust 的支持甚至连开发者自己也都认为是 "实验性的";这种情况可能会持续一段时间(甚至持续到这项工作被并入 mainline 之后),直到这种语言能证明自己适合内核开发工作。

显然,一些开发者已经开始使用它了,而且他们并不都是传统的内核开发者。最近,Nándor Krácser 在 Rust-for-Linux 邮件列表中询问了将 crates.io 仓库中的 Rust 模块纳入内核构建的可能性。这个请求,似乎不是那么容易:

目前我正在试验会用在我的 module 里面的各种 crate,序列化库、数学库等,甚至还有更复杂的那些,真的很难直接作为源码库(source library)拉进来(也就是把代码复制到模块中),如果他们还有互相依赖关系,那就更复杂了。

此后不久,Chris Suter 也提出了类似的要求。那些在开发 kernel module 的 Rust 开发者似乎想要更多的功能,而不是目前的 kernel crate 提供的那些。

这应该并不让人感到意外。跟许多较新的语言一样,Rust 是跟语言相关的包管理系统以及相应的中心存储库紧密关联在一起的;在 Rust 环境里就是 Cargo 包管理器和 crates.io。这类语言的开发者很快就会习惯于用一个简单的命令来把新的模块(以及它们可能有的任何依赖关系)都加入进来,并习惯于在构建新程序时能让 build 系统神奇地处理好依赖关系。对于这些开发者来说,非常难以接受那些在加入一个复杂的库是无法通过几个命令简单完成的工作环境。

不过,内核并不是按他们期望的方式工作的。对于我们这些没有在这种开发环境中长大的人来说,那些花哨功能看起来就像一个会导致臃肿、错误以及安全问题的毒瘤。依赖中心存储库就会使项目出现问题,比如著名的 leftpad 事件,或者更糟的是有人会故意植入恶意软件。并且缺乏对 API 兼容性的关注,导致需求的版本各有不同,解决包之间的依赖性问题也非常困难,以至于现在开始有用机器学习系统来处理这些问题。另外,这一切看起来都是那么无序和混乱。

至少对这种开发模式的一些批评是合理的,但也不难发现有一点斯德哥尔摩综合症的迹象。对我们中的许多人来说,在我们职业生涯的大部分时间里,已经习惯了要花费很长时间来从源代码中 build 出一个新的程序,也就是习惯了 "尝试 build,再找出它下一步缺失的依赖,安装依赖" 的这种循环。当依赖的模块也有相应的依赖缺失问题时,还会出现递归的情况。习惯于这种工作方式之后就帮助我们更好地理解了我们的系统,而且必定会在某种程度上帮助我们建立了更好的道德品质,所以我们无法理解为什么现在的孩子就是不喜欢这样生活。

内核社区似乎比其他社区更有可能出现抵制较新的开发方法的开发者。内核必须独立存在,它的开发者对它具有的外部依赖一直在坚定地进行控制。内核代码库包含了构建一个可以正常工作的内核所需的全部代码。开发者可以安装很少的一套工具来完成 build 工作,但是安装外部的库才能构建内核的想法是不会被接受的。

因此,当开发者看到像 Suter 发布的这个清单时:

就像我说的,我对未来更感兴趣。为什么它有用:Async Rust 可以说比其他形式的多线程处理更常见,更容易使用。我喜欢的其他 crate 有:anyhow, bincode, byteorder, log, once_cell, pin-project, rand, serde, slab, static_assertions, uuid 加上一些更少见的。

看到这些的第一反应就是想逃掉和躲藏起来,或者以一种可能不符合任何人的行为准则的方式作出回复。

这有一些很好的理由。正如 Greg Kroah-Hartman 所指出的,那些针对用户空间中的有用的代码几乎肯定不会再符合那些强加给内核代码的约束。例如,"Async Rust" 对内核线程或在内核中如何进行上下文切换就是一无所知的。比如说内核代码在分配内存时必须非常小心,也不能使用浮点运算,还不能在 stack 中存储大尺寸的数据结构,不能使用无限制的递归(unbounded recursion),以及还有许多其他规则。大多数用户空间的代码,如果没有考虑到这些规则,在 kernel 环境中运行就会表现得很糟糕。由于这个原因,Kroah-Hartman 说,Rust 程序所需要的任何功能都必须专门编写,并在专门的 kernel crate 中提供。

Rust-for-Linux 的开发者很了解这种情况,并没有设想用 Cargo 这样的工具来添加模块。因此,有趣的是,长期从事内核开发的 Kent Overstreet 是主张采取不同方法的人。他说:"世界正在发生变化",也许现在是时候让内核社区也跟着改变了。他说,如果能在用户和内核空间中运行相同代码,会有很多种好处,而目前实现这个效果会是很痛苦的,对两边的开发者都是一个问题:

解决这类问题的办法是停止认为内核空间和用户空间必须是完全不同的情况,毕竟它们真的并不是必须要不一样的!并开始鼓励不同的思维和工具改进,使我们的生活更容易。

内核和用户空间之间的界限在过去几年中确实变得更加松散。各种子系统提供了 hook,允许以前一些非要内核完成的任务在用户空间进行,而用户空间可以使用 BPF 来运行内核内的代码。但是,这两种环境仍然是完全不同的,其中一个环境中可以运行的代码通常不能在另一个环境里运行。一直以来,人们都没有花很大力气去思考如何缩小这种鸿沟,也许现在真的是改变这种状况的时候了。Rust 语言可能正是这种转变可能可以发生的合适环境。正如 Overstreet 所说:

Rust 的条件编译和泛型故事比我们过去在 C 和 C++中的情况要好得多,这意味着编写在用户空间和内核空间都能工作的 Rust 代码要比过去更有合理性了。

如果这样的倡议能够成功,它可以大大降低未来内核开发者的入门门槛,同时为内核社区提供大量有用的代码。这将是一个不同于我们现在所熟悉的内核的项目,但它可能是一个更有趣、更有生产效率的项目。

当移民者出现在一片新的土地上时,往往会发生有趣的事情。他们往往会在那些已经在那里的人中引起一些反弹——毕竟,新来的人穿着很奇怪,他们做的饭闻起来也很奇怪,有些人甚至把螃蟹当作他们的吉祥物。但他们也可以带来激情和想法,震动他们的新家,使其对每个人来说都更加丰富。如果一群 Rust 开发者来到内核社区,我们可能会看到这样的事情发生。最终的结果可能我们都认不出来了——也许会比我们之前的任何东西都要好。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

49c63d91eab63e30094212f592b95030.png

使用Rust编写 Windows dll 并注入进第三方进程后对 Windows API MessageBoxW 进行 Hook hook 方式 这里采用编译成 dll 后注入,这里有两点需要注意: 目标程序为 32/64 位 rust 编译工具链也需要对应 32/64 位 编译需要用 release 模式,防止注入编译器在 debug 下为了调试附加的数据 Cargo.toml 中需要说明将其编译为库且类型为动态的,如果编译时显示找不到编译目标则手动添加一行路径: [lib] crate-type = ["dylib"] path = "src/lib.rs" 当然你还可以通过创建远程线程来 hook,不过过程比较繁琐这里就提 阅读详情

相关推荐

一个新的舒适的 rustaceans 后端框架。

红茶重开发下,不能在生产环境中使用。语言:英语|简体中文您要来一杯温热的红茶吗?主页和文档:红茶(建设中) Discord:红茶Black Tea 是一个新的基于 hyper 的 Rust 后端框架。我们热衷于为开发人员提供一些增强的功能和舒适的编码体验。快速开始在Cargo.toml添加依赖Cargo.toml :[dependencies ]blacktea =" 0.1.1"tokio = {version =" 1" ,features = [" full" ] }# Enable logging# log = "0.4"# pretty_env_logger = "0.4"示例代码以下代码仅适用于 GitHub 上的版本,发布版本请参考 Crates。HttpResponse { let params = cxt.path_params("msg");if let Some(msg) = params { HttpResponse::Ok().text(&msg) } else { HttpResponse::Ok().text("Echo!") } } #[toki

探索 Rust 的极致之旅 ——《Rustaceans 的 Rust》开源项目解析与推荐

探索 Rust 的极致之旅 ——《Rustaceans 的 Rust》开源项目解析与推荐 在编程的星辰大海中,Rust 语言以其独特的魅力,成为了安全、并发和系统级开发的新宠儿。今天,我们聚焦于一个专为 Rust 爱好者打造的宝藏项目——rust-for-rustaceans.com,这不仅是对 Jon Gjengset 所著《Rust for Rustaceans》一书的深度探索,更是一个聚集智...

gitblog_00041的博客 797

ESP32-CAM图像糊成马赛克?OV2640参数调优保姆级教程(亮度/对比度/饱和度)

本文提供了一份详细的ESP32-CAM图像调优教程,针对OV2640摄像头常见的图像模糊问题,从分辨率设置、亮度/对比度/饱和度调整到高级寄存器配置,帮助用户优化网页显示画质。通过代码示例和实用技巧,解决马赛克、色彩暗淡等问题,提升摄像头性能。

weixin_30410119的博客 596

Rust 笔记 - 基础编程概念、Ownership

Rust编程语言笔记。来源:Book。

qq_43505867的博客 429

金融科技数据源

数字金融开放研究平台

平平淡淡,戒急用忍,一生学闭嘴。 1758

局部路径规划算法 - B样条曲线(B-spline Curves)

本文详解了B样条以及代码实现

BigDavid123的博客 6506

为什么 Rust 是开发者中最受推崇的语言

在 Stack Overflow 的年度开发者调查中, Rust 连续第八年位居“最受欢迎的编程语言”榜首。超过 80% 的开发人员表示他们希望明年再次使用该语言,您不得不想知道一种不到 20 年前创建的语言如何俘获了世界各地开发人员的心。在本文中,我们将了解 Rust 的历史、它的常用用途、为什么开发人员如此喜爱它,以及一些可帮助您开始学习 GitHub 上增长最快的语言之一的资源。

极客点儿 557

使用DeepSeek、MCP和AKShare实现智能金融问答系统技术方案

DeepSeek是由深度求索公司开发的大规模语言模型,最新版本DeepSeek-V3采用混合专家(MoE)架构,拥有671B参数,激活37B参数,在多项基准测试中表现优异3。要使用DeepSeek的API服务:访问DeepSeek平台注册账号获取API Key(形如AKShare是基于Python的金融数据接口库,提供股票、基金、期货、宏观经济等领域的海量数据。主要特点包括:免费开源,数据源丰富支持多种数据格式(DataFrame/JSON)持续更新维护安装命令。

Kin 3173

Rust工程维护技巧-patch篇

rust语言实现的webrtc.rs在嵌入式设备(luckfox rv1106)方面的移植

armer_song的专栏 765

深入解析摄像头硬件接口:DVP、MIPI-CSI2与USB的技术对比与应用场景

本文深入解析了摄像头三大主流硬件接口DVP、MIPI-CSI2与USB的核心技术差异。DVP接口作为并行传输的“老兵”,成本低但带宽和抗干扰能力有限;MIPI-CSI2凭借差分串行设计成为移动高清设备的首选,具备高带宽和强抗干扰性;USB接口则依托UVC标准实现了跨平台的即插即用。文章通过对比传输方式、带宽、应用场景等关键维度,为智能硬件、嵌入式系统等领域的工程师提供了清晰的选择指南。

c7d8e的博客 515

进芯AVP28335烧录避坑全记录:CCS、Uniflash、C2Prog、SDFlash四大工具配置详解

本文详细解析了进芯AVP28335芯片在烧录过程中遇到的常见问题及解决方案,涵盖CCS、Uniflash、C2Prog和SDFlash四大工具的配置要点。针对国产器件AVP28335的特殊需求,提供了从开发环境准备到烧录验证的全流程指南,帮助开发者高效完成程序烧录,避免常见陷阱。

weixin_30836759的博客 589

Rustaceans:请保留一个变更日志!

I’ve been coding Rust during my free time for a few months now (mostly on the spaceapi server, the telegram groups bot and rpsrtsrs). Something I noticed lately is that very rarely projects keep a cha...

cumei1658的博客 558

DDR5 JEDEC标准简析:一次读懂DDR5的核心规范!

JEDEC,全称是,中文名称是「电子元件工程联合委员会」,它是全球权威的存储接口标准制定机构。我们常见的 DDR2、DDR3、DDR4、DDR5 都是它搞出来的。📌 JEDEC 就像存储接口界的“裁判+编剧”——规定谁该怎么跑,怎么演,怎么配合。

weixin_43199439的博客 2571

Rust 安装及简单操作

官方文档有安装说明:   https://www.rust-lang.org/zh-CN/learn/get-started Linux或macOS安装 终端运行 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 显示如下,按1回车 default host triple: x86_64-unknown-linux-gnu default toolchain: stable (default)

weixin_43932656的博客 2424

TPAMI 2024 | MO-MIX:基于深度强化学习的多目标多智能体协同决策

深度强化学习(RL)已被广泛应用于解决复杂的决策问题。在许多现实世界的场景中,任务通常有多个相互冲突的目标,并且可能需要多个智能体进行合作,这些是多目标多智能体决策问题。然而,在这个交叉领域的研究工作还相对较少。现有的方法仅限于单独的领域,并且只能处理具有单一目标的多智能体决策,或者具有单一智能体的多目标决策。在本文中,我们提出了MO-MIX来解决多目标多智能体强化学习(MOMARL)问题。我们的方法基于集中训练与分散执行(CTDE)框架。

小白学视觉 1129

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Nervos 双周报第 8 期:用爱发电的 RustCon Asia

Apr, 24, 2019文| Sherry编辑|Kelly写在返杭路上:此次为期 4 天的 RustCon Asia 让来自世界各地的 Rustaceans 齐聚...

NervosNetwork的博客 527

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Rustaceans 请留意,TiDB 性能挑战赛 预热在线直播

目前直播已结束,后面会发视频出来。以下是公告。为了帮助大家快速上手玩转性能挑战赛,我们准备了一场线上直播,为大家介绍参赛流程和规范。如果大家对比赛有疑问,也可以在直播过程...

Rust语言学习交流 631

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【Rust日报】2021-09-21 Rustacean 中秋节快乐

所有 Rustaceans,中秋节快乐。组合 Axum, Hyper, Tonic 和 Tower 一起,开发一个混合的 web/gRPC 应用:第四部分本系列已经更新到第四部分了,也是终...

Rust语言学习交流 403

Rust第一课——rust简介以及安装

 一:Rust简介      Rust是Mozilla开发的注重安全、性能和并发性的编程语言。“Rust”,由web语言的领军人物Brendan Eich(js之父),Dave Herman以及Mozilla公司的Graydon Hoare 合力开发。          Rust是针对多核体系提出的语言,并且吸收一些其他动态语言的重要特性,比如不需要管理内存,比如不会出现Null指针等等...

黄晃晃亚亚 3931

入门 Rust 开发 WebAssembly

本文来自 AirCloud 的知乎投稿:https://zhuanlan.zhihu.com/p/104299612写在前面可以用于开发 WebAssembly 的语言比较多,笔者之前也...

Rust语言学习交流 3184

LWN:使用Rust进行Linux kernel开发!

Supporting Linux kernel development in RustAugust 31, 2020This article was contributed by Nel...

Linux News搬运工 1085

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 406

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 235

【每天一个 Python 小案例30】Python 基础知识综合小项目:我的工具盒

作为系列收官,本篇把前 29 篇的知识点合成一个能直接用的命令行工具"我的工具盒":计算器(用 ast 解析表达式,不碰 eval)、单位换算与温度转换(一张换算表 + 特例分支)、记账与分类统计(Decimal + JSON 持久化)、以及用"字典当命令表"把菜单和业务逻辑解耦的主循环。文中对比了 eval 的安全隐患与 ast 白名单的做法,解释了 lambda 闭包在字典里的写法与晚绑定陷阱,并在最后给出整个系列的知识地图,把变量、数据结构、控制流、函数、类、异常、文件、标准库八块内容对应到具体篇目。

xinjiyaya的博客 426
上一篇: LWN:user event,不过还未完工!
下一篇: LWN:扩展内核里的TLS支持!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值