您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > C/C++/C#

C++“中年危机”有救了!C++之父新动作!

时间:2023-11-02 11:19:43  来源:  作者:51CTO

在不久前TIOBE发布的10月编程语言排行榜上,C++一举越过JAVA,摘得探花位,仅次于Python/ target=_blank class=infotextkey>Python和C。年过四旬的C++依然是全球最流行的编程语言之一,不过近年来一些巨头的动向也让C++的安全性频频走向争议的中心。

前有微软透露正基于Rust 语言改写 windows 11 内核,部分替代之前的 C++,后有谷歌声称正在将 Android 原生代码从 C++ 迁移到 Rust,从而进一步减少安全漏洞。

就在外界纷纷揣测C++如何应对突如其来的中年危机,是否真的应该让位于后起之秀时,近日C++之父Bjarne Stroustrup在上个月举办的编程语言年度大会上公开表态:他将增加新的安全工具应对批评,为全球数十亿行C++代码带来新的解决方案。

C++“中年危机”有救了!C++之父新动作!

1、反驳:切换到新语言,没那么简单

对于那些认为问题出在C++本身、解决方案是改用另一种语言的批评人士,这位已经72岁的大佬予以了驳斥。

第一,安全性指的不仅仅是内存安全。

第二,语言之间的互操作性需求往往会被忽视。

第三,语言切换的成本通常会被低估。

Stroustrup首先指出“通常提到的安全性只是内存安全——这是不够的......与其他语言(包括C++和C)进行互操作的需求往往不会被提及。而且转换的成本可能非常高。这一点很少被提及......”

“从我所看到的观点来看,我们将用大约7种不同的语言来取代C++。也许在距今四十年后,我们可能会有20种不同的语言,它们必须相互操作。这将会很困难。”

Stroustrup还指出,“许多所谓的‘安全’语言将所有底层的东西都外包给了C或C++”,暂时脱离原始语言来访问硬件资源,甚至操作系统(通常是用C编写的)——甚至可能是极为古老的、藏在外部库中的“可信代码”……

Stroustrup把我们目前的情况称为“一种渐进式和进化式的方法,而不是一味追求全新的方法。”就像盖尔定律:“一个有效的复杂系统势必是从一个有效的简单系统发展而来的。”

归根结底,就像Stroustrup所指出的,切换语言可能看起来是在构建一个新系统,但是想越过所有旧系统的问题来解决一切,只是一个幻想。切换语言所要付出的代价可能远比你理想中的要高。

2、出新:“小心”是行不通的,“我们需要强制执行的规则”

Stroustrup提到了安全性的许多概念,重点介绍了资源泄漏、溢出、内存损坏、计时错误、并发错误、终止错误——当然还有类型错误。随后,他就C++安全性的发展趋向进行了详细阐释。

Stroustrup称当前是“一个机会”,他强调,类型和资源安全从C++诞生之初就一直是它的目标。“我们当时的硬件无法提供完全的安全性,现在也无法对所有语言和所有用例提供完全的安全性。”但是Stroustrup也不希望看到对C++表达的限制,事实上他设想了一个仍然遵循该语言的ISO标准的解决方案。

“我们需要它是C++。也就是说,我们能做什么不应该受到限制,即使我们如何做可能会受到限制。”

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

Stroustrup找到了他的解决方案:配置文件。也就是说,一套规则,只要遵守,就能实现特定的安全保证。它们将由ISO C++标准定义,解决常见的安全问题,如指针和数组范围。

至于添加新工具的困难,Stroustrup指出,C++编译器本身现在是一个相当复杂的静态分析器,也可以满足配置文件的要求。因此,在添加提高安全性的工具时,“我认为配置文件注释应该有助于解决这个问题”。

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

3、合力:面向开发者的愿望清单

目前这项工作还在进行中,你可以查到与之相关的论文和讨论。Stroustrup谈到:“从经典的C,从‘带类的C’,到C++11,我们已经走了很长很长的路。”

面向开发者,Stroustrup建议用户可以帮助完善配置文件并将其规范形式化。“我梦想着像 Profiles Light 这样的东西,它提供了配置文件的大部分保证,但不能做所有最后的事情,因为,比如说,静态分析器还不能做到这一点。”

Stroustrup创建了一个 Github 存储库,“人们可以在那里提出建议,我将把我的草稿等放在那里,这样我们就可以创建一个社区,致力于在合理的时间内完成这些事情。

存储库询问需要什么才能使配置文件成为“满足各种 C++ 安全需求的全行业工具”,并将该概念称为框架。“为了实现广泛使用,必须创建和安装许多部件。虽然我们已经做了很多工作,但广泛可用的相对较少。这是一个愿望清单。请尽你所能提供帮助。”

C++“中年危机”有救了!C++之父新动作!

参考链接:

https://thenewstack.io/bjarne-stroustrups-plan-for-bringing-safety-to-c/

https://www.YouTube.com/watch?v=I8UvQKvOSSw&t=4371s



Tags:C++   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
C++常见避坑指南
C++ 从入门到放弃?本文主要总结了在C++开发或review过程中常见易出错点做了归纳总结,希望借此能增进大家对C++的了解,减少编程出错,提升工作效率,也可以作为C++开发的避坑攻略。...【详细内容】
2024-04-03  Search: C++  点击:(4)  评论:(0)  加入收藏
C++ 之父反驳白宫警告:自诞生第一天起,C++ 的目标就一直是提高安全性
整理 | 郑丽媛上个月,美国白宫国家网络主任办公室(ONCD)在一份主题为《回到基础构件:通往安全软件之路》的 19 页 PDF 报告中,呼吁开发人员停止使用容易出现内存安全漏洞的编程语...【详细内容】
2024-03-25  Search: C++  点击:(4)  评论:(0)  加入收藏
八个 C++ 开源项目,帮助初学者进阶成长
通过参与或阅读开源项目的源代码,你可以获得丰富的实践机会。实际的项目代码比简单的教程更具挑战性,可以帮助你深入理解 C++ 的各种概念和技术。1.ThreadPool一个简单的 C++1...【详细内容】
2024-03-22  Search: C++  点击:(21)  评论:(0)  加入收藏
C++多线程编程:解锁性能与并发的奥秘
今天我们将深入探讨C++中的多线程编程,揭示多线程如何解锁性能潜力,提高程序的并发性能。什么是多线程?在计算机科学中,多线程是指一个进程(程序的执行实例)中的多个线程同时执行...【详细内容】
2024-02-03  Search: C++  点击:(68)  评论:(0)  加入收藏
C++代码优化攻略
今天我们将深入探讨C++性能优化的世界。在当今软件开发的浪潮中,高性能的代码是必不可少的。无论是开发桌面应用、移动应用,还是嵌入式系统,性能都是关键。1. 选择合适的数据结...【详细内容】
2024-01-26  Search: C++  点击:(113)  评论:(0)  加入收藏
C++质数检测器的设计与实现​
质数,作为数学中的一个基本概念,一直以其独特的性质吸引着众多研究者和爱好者。质数是指大于1的自然数中,除了1和它本身以外不再有其他因数的数。在实际应用中,质数检测也扮演着...【详细内容】
2024-01-15  Search: C++  点击:(111)  评论:(0)  加入收藏
指针变量在C/C++中的内存占用
在编程领域,尤其是C和C++这类底层语言中,指针是一个核心概念,它允许程序直接操作内存地址。然而,关于指针本身在内存中占用的空间大小,却常常让初学者感到困惑。本文将深入探讨这...【详细内容】
2024-01-09  Search: C++  点击:(95)  评论:(0)  加入收藏
C++的面向对象编程:深入解析与理解
当我们谈论C++时,面向对象编程(OOP)是一个无法回避的话题。那么,C++的面向对象究竟是什么?为什么它如此重要?本文将从基本概念到实际应用,为您详细解析C++中的面向对象编程。一、面...【详细内容】
2024-01-03  Search: C++  点击:(95)  评论:(0)  加入收藏
有什么好用的C/C++源代码混淆工具?
开始使用ipaguard前言iOS加固保护是直接针对ios ipa二进制文件的保护技术,可以对iOS APP中的可执行文件进行深度混淆、加密。使用任何工具都无法逆向、破解还原源文件。对APP...【详细内容】
2023-12-29  Search: C++  点击:(118)  评论:(0)  加入收藏
C++中new与malloc:内存分配机制深度解析
本文旨在深入探讨C++中new和malloc两种内存分配机制的区别。通过对比它们在内存分配、初始化、错误处理、调用构造函数/析构函数、类型转换和使用便捷性等方面的不同,我们将...【详细内容】
2023-12-27  Search: C++  点击:(127)  评论:(0)  加入收藏
▌简易百科推荐
C++常见避坑指南
C++ 从入门到放弃?本文主要总结了在C++开发或review过程中常见易出错点做了归纳总结,希望借此能增进大家对C++的了解,减少编程出错,提升工作效率,也可以作为C++开发的避坑攻略。...【详细内容】
2024-04-03  腾讯技术工程    Tags:C++   点击:(4)  评论:(0)  加入收藏
C++ 之父反驳白宫警告:自诞生第一天起,C++ 的目标就一直是提高安全性
整理 | 郑丽媛上个月,美国白宫国家网络主任办公室(ONCD)在一份主题为《回到基础构件:通往安全软件之路》的 19 页 PDF 报告中,呼吁开发人员停止使用容易出现内存安全漏洞的编程语...【详细内容】
2024-03-25    CSDN  Tags:C++   点击:(4)  评论:(0)  加入收藏
八个 C++ 开源项目,帮助初学者进阶成长
通过参与或阅读开源项目的源代码,你可以获得丰富的实践机会。实际的项目代码比简单的教程更具挑战性,可以帮助你深入理解 C++ 的各种概念和技术。1.ThreadPool一个简单的 C++1...【详细内容】
2024-03-22  AI让生活更美好  微信公众号  Tags:C++   点击:(21)  评论:(0)  加入收藏
C# 中15个值得收藏的开源项目推荐
在开源的世界里,C# 编程语言也占有一席之地。这些开源项目涵盖了多个领域,从框架、库到工具,它们为C#开发者提供了丰富的资源和工具,帮助他们更高效地开发、测试和部署应用程序...【详细内容】
2024-03-20  程序员编程日记  微信公众号  Tags:C#   点击:(29)  评论:(0)  加入收藏
C#异步编程:Task.Run vs. async-await,掌握基础与高级用法
概述:C#中的异步编程有两主要方式:Task.Run用于在后台线程执行同步操作,而async-await更适用于清晰表达异步流程。基础用法展示了它们的简单应用,高级用法则演示了它们的结合使...【详细内容】
2024-03-09  架构师老卢  今日头条  Tags:C#   点击:(23)  评论:(0)  加入收藏
C++多线程编程:解锁性能与并发的奥秘
今天我们将深入探讨C++中的多线程编程,揭示多线程如何解锁性能潜力,提高程序的并发性能。什么是多线程?在计算机科学中,多线程是指一个进程(程序的执行实例)中的多个线程同时执行...【详细内容】
2024-02-03     AI让生活更美好  Tags:C++   点击:(68)  评论:(0)  加入收藏
C++代码优化攻略
今天我们将深入探讨C++性能优化的世界。在当今软件开发的浪潮中,高性能的代码是必不可少的。无论是开发桌面应用、移动应用,还是嵌入式系统,性能都是关键。1. 选择合适的数据结...【详细内容】
2024-01-26  AI让生活更美好  微信公众号  Tags:C++   点击:(113)  评论:(0)  加入收藏
C# 线程本地存储为什么线程间值不一样
为什么用 ThreadStatic 标记的字段,只有第一个线程拿到了初始值,其他线程都是默认值,让我能不能帮他解答一下,尼玛,我也不是神仙什么都懂,既然问了,那我试着帮他解答一下,也给后面类...【详细内容】
2024-01-26  一线码农聊技术  微信公众号  Tags:C#   点击:(67)  评论:(0)  加入收藏
C++质数检测器的设计与实现​
质数,作为数学中的一个基本概念,一直以其独特的性质吸引着众多研究者和爱好者。质数是指大于1的自然数中,除了1和它本身以外不再有其他因数的数。在实际应用中,质数检测也扮演着...【详细内容】
2024-01-15  鲨鱼编程  微信公众号  Tags:C++   点击:(111)  评论:(0)  加入收藏
C# 登顶!超越Java或非空想
整理丨诺亚出品 | 51CTO技术栈(微信号:blog51cto)近日,TIOBE编程社区公布年度编程语言,此次摘得这一桂冠的是C#。这也是C#在TIOBE二十多年评选历史中首次赢得这一年度大奖。C#虽...【详细内容】
2024-01-15    51CTO  Tags:C#   点击:(114)  评论:(0)  加入收藏
站内最新
站内热门
站内头条