写点什么

C++ 之父 Bjarne Stroustrup:我会为全球数十亿行 C++ 代码带来一个崭新的解决方案

  • 2023-12-05
    北京
  • 本文字数:2834 字

    阅读完需:约 9 分钟

大小:1.24M时长:07:13
C++之父Bjarne Stroustrup:我会为全球数十亿行 C++ 代码带来一个崭新的解决方案

在 CppCon C++ 会议上,这位 C++ 的创建人明确了该编程语言中迫切需要的安全措施具体都有哪些。

Bjarne Stroustrup,这位 72 岁的 C++ 创建者上个月在编程语言年度大会上发表了前瞻性的主题演讲。

 

当 C++ 社区聚集在科罗拉多州奥罗拉市参加“CppCon”C++ 会议时,Bjarne Stroustrup 在一场演讲中向观众承诺,他将首先明确该编程语言所需的安全措施的具体类型,“然后我将向大家展示几十年来我们一直在这方面努力的成果。”

 

Stroustrup 花了一些时间来回应批评。批评者说问题出在 C++ 本身,解决方案应该是改用另一种语言。他还具体介绍了一项提案,该提案增加了新的安全工具来解决批评者指出的问题,最终会为全球数十亿行 C++ 代码带来一个崭新的解决方案。

反对更换编程语言的案例

在演讲一开始,Stroustrup 分享了一张题为“安全不仅仅是类型安全”的幻灯片,列出了从资源泄漏和溢出到内存损坏和计时错误的各种各样的安全问题。这里有并发错误、终止错误——当然还有类型错误。 “人们一般提到的安全性只涉及内存安全——但这还远远不够……而且与其他语言(包括 C++ 和 C)互操作的需求往往缺乏关注。而且转换编程语言的成本可能会非常高。很少有人提到这一点……”

 

“再说了——到底选哪种语言来代替呢?就我从目前大家的建议来看,我们将用大约七种不同的语言来取代 C++。到替换完成时(40 年后),我们可能会有 20 个不一样的语言选项,而且它们必须能够互操作。这会是一大难题。”

 

Stroustrup 在演讲中还指出,“许多所谓的‘安全’语言将所有低级内容外包给 C 或 C++”,用这种办法来暂时逃避使用它们的语言来访问硬件资源甚至操作系统(通常是用 C 语言编写的),乃至“可信代码”的需求,这些代码实际上可能非常古老,隐藏在外部库中……或者是用完全不同的编程语言编写的。

Stroustrup 称我们目前的情况是“处于使用渐进和渐进方法的趋势中,而非只采取全新的方法。”一张幻灯片的结尾甚至引用了加尔定律:“一个有效的复杂系统总是由一个有效的简单系统演化而来。”

 

正如 Stroustrup 所见,“这种只在一头构建一个新系统,而不存在任何旧系统问题的想法是一种幻想。但这是一个非常流行的幻想。”

“我们接下来要走向何方?”

演讲进行到大约 54 分钟时,Stroustrup 告诉听众,“现在我想谈谈未来的事情:我们现在会走向何方……? ”

 

Stroustrup 将我们目前的情况称为“一个机会”,提醒大家自 C++ 诞生以来,类型和资源安全一直是其目标。 “我们当时拥有的硬件无法保证完全安全,现在也无法保证所有语言和所有用例的安全。”但 Stroustrup 不希望看到 C++ 的内容表达受到限制,事实上,他设想了一种仍然遵守该语言 ISO 标准的解决方案。 “我们需要它是 C++。也就是说,我们能做的事情不应该受到限制,尽管我们做事的方式可能会受约束。”

 

Stroustrup 也不希望看到大量额外的运行时开销。 “性能不应该有任何下降……实际上,一些编写安全代码的技术可以提高性能。我主要说的是编译器和静态检查,因为它是免费的,或者真的可以提高性能。”

 

Stroustrup 找到了他的解决方案:配置文件。 (指的是需要遵循的一组规则,可以实现特定的安全保证。)它们由 ISO C++ 标准定义,解决常见的安全问题,例如指针和数组范围。在回答观众后来提出的,关于添加新工具的困难的问题时,Stroustrup 指出,C++ 编译器本身现在是一个相当复杂的静态分析器,并且还可以负责满足配置文件的要求。因此,谈到添加安全改进工具时,“我认为配置文件注释应该有助于解决这个问题。”

 

Stroustrup 提出了总体策略:使用静态分析来消除潜在错误。但“全局静态分析是无法承受的,”Stroustrup 补充道。 “所以基本上我们需要一些规则来简化我们正在编写的内容,以便有效且廉价地进行本地静态分析......然后提供一些库来更好地依赖这些规则。”

 

一张幻灯片还指出了另一个优点:“支持从旧代码到提供安全保证的现代代码的逐步转换。”该幻灯片强调,将有一套标准的“基本”保证,以及更广泛、开放的可用保证。 Stroustrup 说:“我想到的是类型和资源安全、内存安全、范围安全。算术安全之类的事情可以标准化。”并且还会有对不同代码片段应用不同保证的规则。

 

代码甚至可以得到应用保证的明确表达(从而让未来的读者放心)。 Stroustrup 又切回了前面的幻灯片,也就是那张标题为“安全不仅仅是类型安全”的幻灯片,强调了资源泄漏、溢出、内存损坏、计时错误、并发错误、终止错误——当然,还有类型错误。

 

一张幻灯片简洁地说明了这一点:“小心”并不能扩展。因此,虽然核心指南可能建议安全的编码实践,但“我们需要强制执行的规则。”正如 Stroustrup 所说,“我们必须制定安全使用规则。我们必须提供方法来验证人们是否确实做了他们想做的事情。”Stroustrup 指出,他所描述的大部分内容都已经被尝试过,甚至是规模化的实践。 “但没有哪里会将这一切整合成一个一致、连贯的整体。这就是我认为我们应该做的。”

 

一张幻灯片用六个词列出了公式:卫生规则 + 静态分析 + 运行时检查。Stroustrup 放了一张幻灯片,表示 C++ 可以消除许多常见错误,包括未初始化的变量、范围错误、空指针取消引用、资源泄漏和悬空引用。

 

演讲接近尾声时,Stroustrup 进一步阐述了细节。 “我建议你采用基于模块的控制。”该幻灯片展示了它在代码中的工作机制。

export My_module[[provide(memory_safety)]];import std [[enable(memory_safety)]];import Mod [suppress(type_safety)]]; 
复制代码

代码内控件也在开发中,它可应用于代码分段。

[[suppress(type_safety)]] X[[enforce(type_safety)]] X
复制代码

Stroustrup 还对首批标准配置文件提出了建议。 (类型安全、范围和算术)。 Stroustrup 放了一包含 11 个新关键字的幻灯片,说道:“这里从语法方面总结了如何做到这一点。”

“这项工作正在进行中,”Stroustrup 告诉观众。 “有相关论文,你可以去查一下。也有相关讨论。不过总体上我们还没有成型。”但是“我们在经典 C、‘带类的 C’以及 C++ 11 后已经走了很长一段路。”

 

最后一张幻灯片说的是“你能提供什么帮助”,Stroustrup 建议用户可以帮助完善配置文件,正式确定它们的规格。 (“我的理想是像 Profiles Light 这样的东西,它提供了配置文件的大部分保证,但没法大包大揽,因为静态分析器还无法做到这一点。”)

 

他创建了一个 GitHub 存储库(https://github.com/BjarneStroustrup/profiles),“大家可以在其中提出建议,我也可以在里面放我的草稿等,这样我们就可以创建一个社区,设法在合理的时间内完成这些工作。”

 

这个存储库提出的问题是怎样才能让配置文件成为“满足各种 C++ 安全需求的全行业工具”,并将该概念称为一个框架。 “必须开发并部署许多组件才能让工具广泛流行。大家已经做了很多工作,但广泛应用的工具却相对较少。这里是一个愿望清单。请尽你所能提供帮助。”

 

视频链接:https://youtu.be/I8UvQKvOSSw

 

原文链接https://thenewstack.io/bjarne-stroustrups-plan-for-bringing-safety-to-c/

2023-12-05 15:006679

评论 2 条评论

发布
用户头像
最好还是从语言层面上改进,编写出来就内存安全。而不是还要借助配置文件。
2023-12-06 09:44 · 广东
回复
用户头像
新的方案就是Rust
2023-12-05 15:33 · 广东
回复
没有更多了
发现更多内容

文心一言 VS 讯飞星火 VS chatgpt (25)-- 算法导论4.2 7题

福大大架构师每日一题

福大大 ChatGPT 文心一言 讯飞星火

设计模式之模板方法模式

越长大越悲伤

设计模式

一块显存为 12GB 的 GPU 卡能够在CST 时域求解器仿真的最大网格数是多少?

思茂信息

cst cst使用教程 cst操作 cst电磁仿真 cst仿真软件

可逆计算理论中的Delta合并算法

canonical

硬核!阿里2023版Spring全家桶进阶笔记流出,堪称Java跳槽神器

Java你猿哥

spring Spring Boot spring security Spring全家桶 Spring Cloud Aliababa

GitHub上开源24小时获星96K的,从零到实战Java架构师成长手册

Java你猿哥

架构 架构师 高可用架构 高性能架构 高可扩展

2023数博会丨软通智慧发布“一屏统揽”TongView 数字政府慧治平台解决方案

说山水

Health Kit文档大变样,一起尝鲜!

HarmonyOS SDK

HMS Core

MatrixOne 助力开启分布式计算格局新征程

MatrixOrigin

分布式数据库 HTAP MatrixOrigin MatrixOne 矩阵起源

为什么要用线程池?

javacn.site

创建矢量图形:Patternodes 3 免激活版

真大的脸盆

Mac Mac 软件 矢量图形创作 创建矢量图形

解锁人机交互新技术 华为开发者联创日·全栈AI黑客松大赛等你来

说山水

如何科学地利用MTTR优化软件交付流程?

SEAL安全

DevOps MTTR 企业号 5 月 PK 榜

刚入职的后端开发问我SpringBoot如何跨域配置?我表示

Java你猿哥

Java Spring Boot ssm 跨域

5月书讯 | 《这就是ChatGPT》来了!

图灵社区

数学 书单 书单推荐 GPT

4 种 MySQL 同步 ES 方案,yyds!

Java你猿哥

Java MySQL sql elasticsearch Binlog

一次错误的解码处理导致Netty堆外内存泄漏问题的分析

Java你猿哥

Java Netty ssm RSS 逻辑

5月书讯 | 《这就是ChatGPT》来了!

图灵教育

数学 书单 GPT

阿里架构组分布式架构技术使用心得:全在这一份文档里面了

Java你猿哥

架构 分布式 ssm 分布式架构 安全架构

Solaris Network:BSC上首个链上合成资产解决方案

鳄鱼视界

500行代码手写docker-实现硬件资源限制cgroups

蓝胖子的编程梦

容器 k8s ,docker Cgroups #k8s

2023-05-29:给你一个由 n 个正整数组成的数组 nums 你可以对数组的任意元素执行任意次数的两类操作 如果元素是 偶数 ,除以 2 例如,如果数组是 [1,2,3,4] 那么你可以对最后一

福大大架构师每日一题

golang 算法 rust 福大大

量子程序设计基础 | 从经典计算到量子计算

TiAmo

量子计算 经典计算

前端开发如何更好的避免样式冲突?级联层(CSS@layer)

vivo互联网技术

CSS 级联 @layer

深度理解:Redis Hash(散列表)实现原理

Java你猿哥

redis 开源 ssm hash 散列表

GitHub发布即百万!字节内网超实用 java性能优化手册,star超十万

Java你猿哥

Java ssm jvm调优 Java性能优化

【1对1咨询】土木女生,挖掘个人优势转行程序员

程序员晚枫

程序员 求职 转行

基于WebGPU的AI原生3D引擎迎来新机遇!Orillusion在GOTC上演讲!

Orillusion

开源 渲染引擎 元宇宙 webgpu AIGC

华为云UniXcoder-VESO-v1问鼎CodeXGLUE榜单第一名

华为云PaaS服务小智

算法 代码 华为云 代码语义

使用 Node.js、Socket.IO 和 GPT-4 构建 AI 聊天机器人

devpoint

node.js websocket GPT-4

引领下一代云计算技术的变革:无服务器架构

xfgg

云计算 severless

C++之父Bjarne Stroustrup:我会为全球数十亿行 C++ 代码带来一个崭新的解决方案_技术选型_David Cassel_InfoQ精选文章