撰稿丨千山
审校 | 云昭
51CTO读者成长计划社群招募,咨询小助手(微信号:CTOjishuzhan)
微软正在用 Rust 编程语言重写核心 Windows 库。
在以色列特拉维夫举办的 BlueHat IL 2023 上,Windows 操作系统安全总监 David “dwizzle” Weston 宣布 Rust 进入操作系统内核。
“实际上,在接下来的几周或几个月内,你将在内核中使用 Rust 启动 Windows,这真的很酷,”他说。“这里的基本目标是将其中一些内部 C++ 数据类型转换为它们的 Rust 等价物。”
微软的这一举措并非一时兴起,早在几年前,微软就表现出了拥抱 Rust 的意向。
在微软看来,这门语言是一种在代码落入用户手中之前捕获和消除内存安全漏洞的方法。简单来说,Rust 专注于内存安全和类似的保护,这减少了结果代码中不良错误的数量。
Windows 的 Rust 改造始于 2020 年,由 DWriteCore 开始。DWriteCore 是 Windows 的 DWrite 引擎的 Windows App SDK 实现,用于文本分析、布局和渲染。DWriteCore 现在由大约 152000 行 Rust 代码和大约 96000 行 C++ 代码组成。
随着行业对内存安全编程的支持越来越多,微软对 Rust 的探索变得更加热情。
Microsoft Windows 图形设备接口 (Win32 GDI) 正在移植到 Rust 上,到目前为止已包含 36000 行 Rust 代码。最新版本的 Windows 11 使用 Rust 版本启动,该版本通过了所有 GDI 测试,但 Rust 端口目前在功能标志后面被禁用。另据 Weston 透露,Windows 内核中现在有一个 SysCall,是采用 Rust 实现的。
当然,微软对 Rust 的这种拥抱还是有限度的。正如 Weston 所说,“在 Rust 中重写 Windows 可能不会很快发生。虽然我们喜欢 Rust,但我们需要一种策略,包括保护更多的原生代码。”
尽管来自微软的支持是有限的,但其代码贡献也将使 Rust 更有活力,这对于整个开源社区的发展是积极向上的。
Python Web 框架 Flask 的作者 Armin Ronacher 在一封电子邮件中表示,微软对 Rust 的承诺对这门语言来说非常棒。
“特别是,因为我希望微软重用现有的编译器,我希望这样做将带来更好的 PDB(程序数据库)支持,”他说。“今天在 Windows 上,开发人员工具支持落后于基于 DWARF 的‘使用属性记录格式进行调试’平台支持。”
Pydantic 的创始人 Samuel Colvin 则在接受外媒采访时表示:“微软的这种前瞻性思维给我留下了深刻的印象……如果你现在正在构建一个性能关键或低级别的应用程序,那么 Rust 在这一点上是不费吹灰之力的。”
同时,他认为,找到优秀的 Rust 工程师比找到优秀的 C/C++ 工程师更容易。虽然拥有丰富 Rust 经验的人较少,但有很多工程师有兴趣尝试学习这门语言。而且编写安全代码的难度很大,在 Rust 中要容易一个数量级。
“对于我们这些依赖 Rust 的人来说,微软正在使用它,并希望能够支持它,这真的很令人兴奋。”
近年来,Rust 舆论声量日益渐涨,在火了的同时发展也渐趋稳定。
在 Tiobe 发布的四月编程语言排行榜中,Rust 进入了前 20 名,尽管差不多是守门员的位置(位列 19),但也可以窥见其发展态势。

图源:TIOBE Index - TIOBE
或许可以归因于之前 Linux 内核 6.1 版正式采用了 Rust,为使用 Rust 编写驱动程序扫清了一部分障碍。不过日前 Rust 基金会关于商标政策的迷之操作一度引发社区争议,“平稳发展中又暗流涌动”或许可以概括 Rust 的现状。
而且随着 Rust 逐渐冒头,C++ 与 Rust 之间也是硝烟弥漫。
去年微软 Azure 的首席技术官 Mark Russinovich 公开表示,开发人员应该避免在新项目中使用 C 或 C++,而是使用 Rust,因为它具有内存安全优势,甚至敦促业界宣布弃用这些语言。
随后 C++ 之父 Bjarne Stroustrup 在接受采访时隔空回怼:“新语言通常需要多年时间和重大努力才能在其广泛的应用领域与成熟语言相匹配。爱好者很少看到这一点,并且他们的评论往往是片面的。”
值得一提的是,C++ 在年初时被 Tiobe 评为 2022 年度最佳编程语言。当时 Tiobe 首席执行官 Paul Jensen 如此评价:“C++ 流行的原因是它作为一种高级面向对象语言的出色性能。因此,可以用 C++ 开发快速而庞大的软件系统(超过数百万行代码),而不大会出现‘维护噩梦’。”
虽然双方各执一词,但就现状来看,Rust 还无法撼动 C++ 的地位。相较 C++ 的历史沉淀,Rust 的流行明显还需时日。而且 Rust 陡峭的学习曲线也限制了其快速的规模化普及。曾有开发者感慨:“试图用 Rust 重写公司核心组件,学习曲线是真的陡,Java 用了一周上手,Rust 用了一个月才玩明白。”
除了新手不友好外,关于 Rust 在长时间内“叫好不叫座”的原因,近日,前 Deepin CTO 王勇也在推特上分享了自己的观点:Rust 语言很有力量,但他对这个语言并不感冒。原因如下:
1、世界上有很多业务性的逻辑是需要创造力和编程心流体验的,而 Rust 编译器总是打断你方向性的思考, 强制让你关注设计阶段不重要的细节,丧失了很多编程乐趣。

图源:推特
2、Rust 社区的人似乎不懂得市场经济和成本概念,一个好的软件不仅仅只是内存安全和绝对性能,代码可读性,场景适合性,认知深刻和持续维护的软件对用户才有价值,重写完一个软件,证明 Rust 比别的语言快和自己厉害,马上就弃坑的软件没有价值。
3、Rust 社区推崇内存的细腻控制,有时候就和 C++ 的开发人员一样讨厌,把指针或者生命周期控制能力当作比较的炫耀资本,Rust 更像是一种证明自己比别人厉害的工具。我不是说 Rust 不好,而是不喜欢这种认为 Rust 就是天下第一的思想,什么都要用 Rust 重写的想法。
4、Rust 的强制内存管理,在编写复杂逻辑的时候,编译器打断太生硬了,导致人无法安静的思考最重要的架构设计。Rust 对于底层库或者实时性这些不需要 GC 或者性能苛刻的场景很适合,为了内存安全可以忍受编译器严格。但是现实大部分场景不是都是内存安全优先的,而是创造力和逻辑清晰优先的。
最后王勇强调,无论学习何种语言,掌握多少种语言,都是为了学习各种语言的设计思想和看问题角度,主要价值在于提升认知。而不是为了在编程语言之争中踩在制高点抒发优越感。“ 语言只是工具,我们不能拿着锤子到处去攻击别人炫耀自己,那样其实很傻。”
https://www.theregister.com/2023/04/27/microsoft_windows_rust/
https://www.tiobe.com/tiobe-index/

我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
我在目录“C:\DocumentsandSettings\test.exe”中有一个文件,但是当我用单引号编写命令时`C:\DocumentsandSettings\test.exe(我无法在此框中显示),用于在Ruby中执行命令,我无法这样做,我收到的错误是找不到文件或目录。我尝试用“//”和“\”替换“\”,但似乎没有任何效果。我也使用过系统、IO.popen和exec命令,但所有的努力都是徒劳的。exec命令还使程序退出,这是我不想发生的。提前致谢。 最佳答案 反引号环境就像双引号,所以反斜杠用于转义。此外,Ruby会将空格解
我在安装“redcarpet”gem时遇到以下错误。它在我friend的机器上安装没有问题。(我想安装它来运行yard)ruby版本:1.9.3命令输出:D:\Learning\Common_POM_FW\SampleProjects>yard[error]:Missing'redcarpet'gemforMarkdownformatting.Installitwith`geminstallredcarpet`D:\Learning\Common_POM_FW\SampleProjects>geminstallredcarpetTemporarilyenhancingPATHtoinc
我们正在开发一个需要推送通知的WP8应用程序。为了测试它,我们使用CURL命令行运行推送通知POST请求,确保它实际连接,使用客户端SSL证书进行身份验证并发送正确的数据。我们确实知道,当我们收到对设备的推送时,这项工作是有效的。这是我们一直用于测试目的的CURL命令:curl--certclient_cert.pem-v-H"Content-Type:text/xml"-H"X-WindowsPhone-Target:Toast"-H"X-NotificationClass:2"-XPOST-d"MytitleMysubtitle"https://db3.notify.live.ne
我在Windows7上运行Jekyll时遇到问题。当我运行时jekyll出现以下错误C:\temp\jekyll\kouphax.github.com>jekyllConfigurationfromC:/temp/jekyll/kouphax.github.com/_config.ymlBuildingsite:C:/temp/jekyll/kouphax.github.com->C:/temp/jekyll/kouphax.github.com/_siteunit-testingYouaremissingalibraryrequiredforTextile.Pleaserun:$[s
我正在尝试使用本手册让Jekyll在Windows8x64上运行:RunningJekyllonWindows我正在使用来自rubyinstaller.org的以下两个下载:ruby2.0.0-p0(x64)DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe所以我根据手册设置了Ruby和DevKit(希望它是更新的版本)。我尝试运行一点HelloWorld.rb脚本,它工作正常,路径变量已设置。然后我尝试运行geminstalljekyll并得到以下输出:geminstalljekyll-outputonpastebin.com问题似乎出在名为f
在Windows上通过ruby2.0.0安装iconv时出错通过ruby2.0.0在Windows上安装iconv时出错我正在尝试安装iconv,但是当我运行以下命令时:geminstalliconv我的结果:TemporarilyenhancingPathtoincludeDevKit...Buildingnativeextensions.Thiscouldtakeawhile...Error:Errorinstallingiconv:ERROR:Failedtobuildgemnativeextension.C:/Ruby/Ruby200/bin/ruby.exe-r./s