赞
踩
Microsoft可以从使用C,C ++和C#切换到其他语言吗? 微软安全响应中心(MSRC) 最近的一篇博客文章表明,它很可能正在寻找替代方法,目的是降低其代码的风险。 正如MSRC的首席安全工程经理Gavin Thomas指出的那样,向MSRC报告的Microsoft代码中的错误的主要原因之一是内存损坏,使内存被覆盖或访问应受保护的内存的错误。
长期以来,内存安全一直是一个重要的问题,但是MSRC所做的统计工作表明,这一问题并没有消失。 从Microsoft自己的“安全开发生命周期”到使用更新的内存安全语言(例如C#),您都有许多工具可以帮助编写安全代码。 但是这些方法都需要权衡:与C ++相比,它们产生的代码速度较慢,并且可以在更高级别上工作。
[ 什么是Rust? 安全,快速,轻松地进行软件开发的方式 。 | 下一页:在InfoWorld教程中了解如何开始使用Rust 。 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]
对于面向客户的代码,这不是问题。 C ++开发的用户体验与C#内置的用户体验没有感知上的区别。 但是在系统级别上,用于构建操作系统和设备驱动程序的代码却有很大的不同。 当您在系统级别上工作时,处理器周期很重要,正如Thomas在他的博客文章中指出的那样,像C ++和C这样不受保护的语言实际上是历史上在该级别上唯一可用的工具。
显然,高级语言使用的内存安全方法不适用于系统级。 困扰微软失败的Longhorn项目的许多问题是由于试图在.NET平台上构建整个操作系统而引起的。 那么如何才能将内存安全性带入系统开发的基础呢?
答案来自新一代的系统编程语言,例如Go和Rust ,这些语言具有C和C ++速度的.Net内存安全设计。 微软已经在Azure中广泛使用Go,因为它是Kubernetes编写的语言。但是,这些方法尚未进入Windows,因为C ++仍然是系统编程之王。
在他的博客文章中,Thomas提出将Mozilla的Rust用作Windows的安全系统语言的观点。 这是一个有趣的建议,并且已经得到了一个重要的证明:语言设计师Mozilla已经在其最新的Web浏览器版本中使用了它,它在Mozilla的当前和下一代渲染引擎中提供了支持。 其他主要的Rust用户包括JavaScript模块存储库NPM,Dropbox和Oracle。 甚至Microsoft也已经在使用它,并且在其某些Azure IoT Edge工具中使用了Rust代码。
开始进行Rust开发的明显地方是Visual Studio Code 。 在其扩展市场中,您可以找到几个安装了Rust语言服务器的扩展,这些扩展具有完整的语言支持以及用于从Visual Studio Code构建Rust应用的工具。 我一直在使用Rust语言团队的官方Rust扩展 。 其他工具提供了对用于启动开发的代码段的支持,以及其他调试和测试工具。 甚至还有用于为您的代码构建文档的工具。 值得在您的Visual Studio Code Ruse环境中安装Rust扩展包 ,因为这会添加其他工具来使用Rust自己的开发工具。
首先,您需要安装Rust编译器和Cargo软件包管理器 。 Rust的官方安装站点将检测您使用的Windows版本并提供适当的下载。 如果您将WSL用作Unix开发工具链的一部分,则甚至还包含在Linux的Windows子系统(WSL)上安装Rust的说明。 运行Rustup安装程序将下载语言组件并设置Windows PATH 。 您可以选择自定义安装,但是实际上最好接受默认设置。
如果您使用C或C ++编程,则向Rust的过渡相对容易。 两种语言之间有很多相似之处,尽管Rust的所有权概念使其具有内存安全性。 所有权使Rust可以管理变量的范围,从而使它们仅在范围内才有效。 如果不使用它们,则它们不在内存中。 一些变量是文字,不可变的值被硬编码到您的代码中。 但是更复杂的变量类型可以在设置时请求内存,在其他许多语言中,该过程要求您显式分配内存,然后在不再需要变量或对象时释放内存。 Rust将其自动化,将内存使用作为其范围管理的一部分进行处理。
创建Rust的Mozilla团队对内存安全以及在安全环境中可能发生的取舍进行了深思。 结果是一种既安全又快速的语言,它具有管理内存堆栈和堆的工具。 给函数赋值会改变其所有权,将其从一个作用域移到另一个作用域。 类似的过程管理从函数调用返回的值。
所有权是一个复杂的概念,但它是一个重要的概念。 它保护内存,并且即使拥有变量的引用,也只允许拥有值的函数对其进行更改。 由于Rust将引用视为借用变量,因此除非您声明可变变量,否则尝试对其进行修改只会产生错误。
重要的是要记住,Rust仍然是一种年轻的语言,并且您在Windows开发中理所当然的许多功能都不存在。 没有与Win32或其他核心Windows SDK的直接集成,如果不安装其他库,您将找不到对Windows GUI工具的任何支持。 但是,这并不是您可能想到的问题:Rust和Go一样,是一种系统编程语言。 这是一个低级工具,快速又安全。 这使得它非常适合构建用于处理数据,处理数字和处理数组的代码。 不要使用正在处理大量内存的C ++例程,而应使用Rust,以减少与内存损坏相关的风险。
如果确实要在Rust中开发GUI应用程序,则可以选择使用多个UI库之一。 也许最容易使用的是Kiss-ui ,它支持Windows和Linux GUI开发,并具有Win32 API访问权限以及对跨平台GTK的支持。 其他库添加了更深入的Win32 API支持。
即使Microsoft最终不直接支持Rust,也有很多社区支持。 虽然组装完整的工具链仍然可能是选择所需的各种元素并使用Rustup之类的工具来安装它们的问题,但Visual Studio Code扩展和扩展包的到来似乎可以简化此过程。 定期更新表明,这是一个非常实时的项目,Rust团队和许多第三方贡献者正在为此工作。
使用内存安全语言的基本原理是一项重要的原则,并且很高兴看到MSRC的专家解决这个问题。 在正式发布内存安全的低级系统编程语言之前,一定要给Rust一次以上的经验。 如果Microsoft确实选择了它,那么您将领先于游戏。
在Windows之外,Rust是WebAssembly开发的关键语言,应在即将推出的Chromium驱动的Edge版本中帮助交付功能更强大的Web应用程序,这也是仔细研究它的另一个原因。
From: https://www.infoworld.com/article/3410796/get-started-with-rust-in-windows-programming.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。