C++ 之父:Rust 等内存安全语言的安全性并不优于 C++
在美国国家安全局 (NSA) 建议组织从 C/C++ 切换到内存安全语言 (如 C#、Rust、Go、Java、Ruby 或 Swift) 之后。C++ 之父 Bjarne Stroustrup 回应称,在他看来,NSA 报告中提到的“安全”编程语言在重要应用程序中实际上并不优于 C++。
Bjarne 指出,NSA 的这一判定忽略了 C/C++ 三十多年来的进步;且许多 C++ 的用例也停留在遥远的过去而忽视了改进,其中就包括极大地提高安全性的方法。
现在,如果我认为这些"安全"语言中的任何一种在我关心的使用范围内都比 C++ 优越,我就不会认为 C/C++ 的淡出是一件坏事,但事实并非如此。另外,正如所描述的那样,"安全"仅限于内存安全,而忽略了一种语言可能(并且将会)被用来违反某种形式的安全和保障的十几种其他方式。
Bjarne 表示,自己几十年来一直致力于实现更好、更安全、更高效的 C++。特别是关于 C++ Core Guidelines 的工作,旨在为有需要的人提供静态保证的类型安全和资源安全的 C++。符合 C++ Core Guidelines 的良好静态分析器可以为 C++ 代码安全提供必要的保证,且比升级到更新的安全编程语言要简单得多。
他批评 NSA 的报告只关注内存处理问题,而忽略了许多其他影响项目安全性和可靠性的编程语言问题。并建议使用代码注释和编译器选项来控制规则的包含,以确保类型和资源得到安全处理。考虑到可能对项目造成的破坏,他保证 C++ 社区不会忽视安全问题,但只关注安全问题也不行。因此他计划列出一份可被视为安全问题(包括 UB)的问题清单,并找到预防这些问题的方法。
此外,Bjarne 在与日前 InfoWorld 的邮件沟通中补充道,“太多人谈论神话般的 C/C++ 语言,但转头却去关注 C 部分的弱点。许多这些弱点在 C++ 中是可以避免的,通常可以通过编写更高效的代码来更直接地表达程序员的意图”。
邮件中 Bjarne 也分享了他对安全的定义:目标是类型和资源安全,即每个对象都根据其类型使用,没有资源泄漏。对于 C++,这意味着一些运行时范围检查,消除通过悬空指针的访问,并避免误用强制转换和联合。C++ 提供 high-level 工具,例如容器、span、range-for 循环和变体,它们可以在不损害生产力或效率的情况下提供保证。关于 NSA 引用的所谓安全语言,Bjarne 则表示,所有这些语言都容易受到未经静态验证的代码的攻击。此外,每个系统都必须使用硬件,而有效的硬件访问很少是安全的。
Bjarne 还概述了他安全使用 C++ 的策略:
- 静态分析以验证没有不安全的代码被执行。
- 简化代码的编码规则,使工业规模的静态分析可行。
- 使此类简化代码相当容易编写并确保在需要时进行运行时检查的库。
目前共存在数百万 C++ 程序员和数十亿行 C++ 代码,该语言目前的主要用途包括航空航天、医疗仪器、人工智能/机器学习、生物医学、高能物理学等。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
OpenAI 亲自上阵,推出 AI 文本检测工具
前两天,我们刚报道了斯坦福大学研究出了一个名为 DetectGPT 模型,该模型可以检测出文本段落是否是由一个给定的大型语言模型(LLM)生成的,斯坦福大学将使用 DetectGPT 来应对学生使用 ChatGPT 等 AI 工具作弊和生成论文的现象。 这才没过几天,ChatGPT 的开发商 OpenAI 就决定亲自上阵发布了一个免费的网络工具 AI Text Classifier(需登录 OpenAI 账号使用),这个工具的目的跟 DetectGPT 一样,也是帮助用户识别某一段文本是由人类还是机器写的。 这个工具的使用方式也很简单,用户只需要将一段文字复制到文本框中,系统会对该文本是由 AI 系统生成的可能性进行判断,判断结果从「非常不可能 —— 很有可能」共分成了 5 个等级。 AI Text Classifier 不仅可以检测 ChatGPT 生成的文本,还可以检测其他同类 AI 工具生成的文本。只不过根据 OpenAI 的说法,该工具的准确性目前似乎不是很高。 AI Text Classifier 可以正确地将 26% 的 AI 生成文本识别为「可能是 AI 写的」,而将人类...
- 下一篇
Kotlin 已发布 2023 年路线图:K2 编译器、完善文档教程...
JetBrains 更新了 2023 年的 Kotlin 路线图。 最新的路线图主要集中在以下这几项工作: K2 编译器:针对 Kotlin 编译器的重写,在速度、并行性和统一性上进行优化,还会带来许多预期的语言功能。 基于 K2 的 IntelliJ 插件:主要是更快的代码完成、突出显示和搜索,以及更稳定的代码分析。 Kotlin Multiplatform Mobile:通过提高工具链稳定性和文档,确保兼容性保证,将 Kotlin 移动端技术推向稳定。 完善相关生态:借助 Kotklin 库作者的经验,整合一批有助于设置、开发和发布 Kotlin 库的文档和工具。 更细分一点,按子系统划分的 Kotlin 路线图: 语言 为until运算符引入特殊语法 为Enum.values()提供现代和高性能的替代品 支持非本地break和continue 针对对象toString设计和实施解决方案 编译器 发布 K2 测试版 修复与 JVM 上的内联类相关的问题 稳定 JVM 特定的实验特性 实现 Kotlin/Wasm 编译器后端的实验版本 多平台 将Kotlin Multiplatfor...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8编译安装MySQL8.0.19
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境