当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-11-01 09:19:20 471观看
导读整理丨诺亚出品 | 51CTO技术栈(微信号:blog51cto)在不久前TIOBE发布的10月编程语言排行榜上,C++一举越过Java,摘得探花位,仅次于Python和C。年过四旬的C++依然是全球最流行的编程语言之一,不过近年来一些巨头的动向也让C++的

整理丨诺亚5pM28资讯网——每日最新资讯28at.com

出品 | 51CTO技术栈(微信号:blog51cto)5pM28资讯网——每日最新资讯28at.com

在不久前TIOBE发布的10月编程语言排行榜上,C++一举越过Java,摘得探花位,仅次于Python和C。年过四旬的C++依然是全球最流行的编程语言之一,不过近年来一些巨头的动向也让C++的安全性频频走向争议的中心。5pM28资讯网——每日最新资讯28at.com

前有微软透露正基于Rust 语言改写 Windows 11 内核,部分替代之前的 C++,后有谷歌声称正在将 Android 原生代码从 C++ 迁移到 Rust,从而进一步减少安全漏洞。5pM28资讯网——每日最新资讯28at.com

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

图片图片5pM28资讯网——每日最新资讯28at.com

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

对于那些认为问题出在C++本身、解决方案是改用另一种语言的批评人士,这位已经72岁的大佬予以了驳斥。5pM28资讯网——每日最新资讯28at.com

第一,安全性指的不仅仅是内存安全。5pM28资讯网——每日最新资讯28at.com

第二,语言之间的互操作性需求往往会被忽视。5pM28资讯网——每日最新资讯28at.com

第三,语言切换的成本通常会被低估。5pM28资讯网——每日最新资讯28at.com

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

“从我所看到的观点来看,我们将用大约7种不同的语言来取代C++。也许在距今四十年后,我们可能会有20种不同的语言,它们必须相互操作。这将会很困难。”5pM28资讯网——每日最新资讯28at.com

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

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

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

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

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

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

“我们需要它是C++。也就是说,我们能做什么不应该受到限制,即使我们如何做可能会受到限制。”5pM28资讯网——每日最新资讯28at.com

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

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

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

Stroustrup列出了一般策略:使用静态分析来消除潜在的错误。但Stroustrup补充说:“全局静态分析是负担不起的。”5pM28资讯网——每日最新资讯28at.com

“所以基本上我们需要规则来简化我们正在编写的内容,使其能够高效、低成本地分析——本地静态分析……然后提供库,使依赖这些规则变得可行。”5pM28资讯网——每日最新资讯28at.com

另外,他还指出了这种策略的另一个优势:“支持从旧代码到提供担保的现代代码的逐步转换。”将有一套标准的“基本”担保,以及更大、更开放的可用担保。Stroustrup说:“我想象的是类型和资源安全,内存安全,范围安全。诸如算术安全之类的东西是可以标准化的。”此外,还将制定规则,对不同的代码片段应用不同的保证。代码甚至可以得到应用了哪些保证的显式表达式(从而使将来的读者放心)。5pM28资讯网——每日最新资讯28at.com

Stroustrup简要说明了一点:“小心”是行不通的。因此,虽然核心指导方针可能建议安全的编码实践,但“我们需要强制执行的规则”。5pM28资讯网——每日最新资讯28at.com

“我们必须制定安全使用的规则。我们必须提供方法来验证人们是否真的在做他们想做的事情。”Stroustrup指出,他所描述的大部分内容已经被尝试过,甚至有规模化的实践。“但这些都没有被整合成一个一致的、连贯的整体。这就是我认为我们应该做的。”5pM28资讯网——每日最新资讯28at.com

“卫生规则+静态分析+运行时检查”就是被提炼出的公式。Stroustrup说C++可以消除许多常见的错误,包括未初始化的变量,范围错误,空指针解引用,资源泄漏和悬空引用。5pM28资讯网——每日最新资讯28at.com

在演讲接近尾声时,Stroustrup谈到了更多的细节。“我建议你采用基于模块的控件。”5pM28资讯网——每日最新资讯28at.com

export My_module[[provide(memory_safety)]];import std [[enable(memory_safety)]];import Mod [suppress(type_safety)]];

还在开发中的是代码内控件,用于代码片段。5pM28资讯网——每日最新资讯28at.com

[[suppress(type_safety)]] X[[enforce(type_safety)]] X

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

目前这项工作还在进行中,你可以查到与之相关的论文和讨论。Stroustrup谈到:“从经典的C,从‘带类的C’,到C++11,我们已经走了很长很长的路。”    5pM28资讯网——每日最新资讯28at.com

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

Stroustrup创建了一个 GitHub 存储库,“人们可以在那里提出建议,我将把我的草稿等放在那里,这样我们就可以创建一个社区,致力于在合理的时间内完成这些事情。5pM28资讯网——每日最新资讯28at.com

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

图片图片5pM28资讯网——每日最新资讯28at.com

参考链接:

https://thenewstack.io/bjarne-stroustrups-plan-for-bringing-safety-to-c/5pM28资讯网——每日最新资讯28at.com

https://www.youtube.com/watch?v=I8UvQKvOSSw&t=4371s5pM28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-16296-0.htmlC++“中年危机”有救了!C++之父新动作!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 压测工具合集:解锁您应用程序的真正性能潜力

下一篇: 互联网高并发设计的手段:架构、算法、代码

标签:
  • 热门焦点
  • 一加Ace2 Pro官宣:普及16G内存 引领24G

    一加官方今天继续为本月发布的新机一加Ace2 Pro带来预热,公布了内存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引领,还有呢?#一加Ace2Pro#,2023 年 8 月,敬请期待。”同时
  • Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 如何通过Python线程池实现异步编程?

    线程池的概念和基本原理线程池是一种并发处理机制,它可以在程序启动时创建一组线程,并将它们置于等待任务的状态。当任务到达时,线程池中的某个线程会被唤醒并执行任务,执行完任
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库:让你的应用更亲民友好,实现视频通话无痛接入! 除了基本用法外,还有一些进阶用法可以更好地利用该库。自定义 STUN/TURN 服务器配置WebRTC.Net 默认使用 Google 的
  • AI芯片初创公司Tenstorrent获三星和现代1亿美元投资

    Tenstorrent是一家由芯片行业资深人士Jim Keller领导的加拿大初创公司,专注于开发人工智能芯片,该公司周三表示,已经从现代汽车集团和三星投资基金等
  • 英特尔Xe HPG游戏显卡:拥有512EU,单风扇版本

    据10 月 30 日外媒 TheVerge 消息报道,英特尔 Xe HPG Arc Alchemist 的正面实被曝光,不仅拥有 512 EU 版显卡,还拥有 128EU 的单风扇版本。另外,这款显卡 PCB
  • 三翼鸟智能家居亮相电博会,让用户体验更真实

    2021电博会在青岛国际会展中心开幕中,三翼鸟直接把“家”搬到了现场,成为了展会的一大看点。这也是三翼鸟继9月9日发布了行业首个一站式定制智慧家平台后的
Top