【科普】C++标准与标准委员会,你不得不知的那些事

ISO标准

这里直接照搬百度百科:https://baike.baidu.com/item/ISO%E6%A0%87%E5%87%86/9818656?fr=aladdin

ISO标准是指由『 国际标准化组织 (International Organization for Standardization), ISO 』制订的标准。 国际标准化组织是一个由国家标准化机构组成的世界范围的联合会,现有140个成员国。根据该组织章程,每一个国家只能有一个最有代表性的标准化团体作为其成员,中国原国家质量技术监督局以CSBTS名义国参加ISO活动。

ISO的前身是国际标准化协会(ISA),ISA成立于1926年(1926年美、英、加等七国标准化机构第三次代表联席会议决定成立国际标准化协会,并于1928年成立)。第二次世界大战的爆发,迫使ISA停止工作。战争结束后,大环境为工业恢复提供了条件,于是1946年10月,来自25个国家标准化机构的领导人在伦敦聚会,讨论成立国际标准化组织的问题,并把这个新组织称为ISO,即International Organization for Standardization的简称。会议一致通过了ISO章程和议事规则。1947年2月23日ISO开始正式运行,ISO的中央办事机构设在瑞士的日内瓦。中国既是发起国又是首批成员国。

ISO的组织机构包括:ISO全体大会、主要官员、成员团体、通信成员、捐助成员、政策发展委员会、合格评定委员会(CASCO)、消费者政策委员会(COPOLCO)、发展中国家事务委员会(DEVCO)、特别咨询小组、技术管理局、技术委员会TC、理事会、中央秘书处等。

C 委员会 与 C++ 委员会

https://www.open-std.org/jtc1/sc22/wg21/
https://isocpp.org/std/the-standard

上面第一个链接可以看到一堆paper,第二个链接则可以看到标准。草案不需要购买,但是标准是需要购买的。

通过这个网站:
https://www.open-std.org/jtc1/sc22/
在这里插入图片描述
可以看的 JTC1/SC22 的成员,有 C(WG14)、C++(WG21)、Linux(WG14)

国际 C++ 标准委员会正式名称为 ISO/IEC JTC1/SC22/WG21,它是 C++ 发展的核心。

同时我们参考维基百科,可以看到:
https://en.wikipedia.org/wiki/C%2B%2B
在这里插入图片描述
主要受到 Simula 和 C 的影响,同时 C++ 影响了众多语言。

如何制定标准

传统上,ISO 标准每十年左右修订一次。例如,我们有 C89、C99 和 C11。如此长的修订周期是有问题的,如果新特性错过了特性冻结,我们就会要再等上 12 年左右才能将它加入标准。人们自然就会主张将即将通过的标准拖延一两年:“这个特性太重要了,不能等,因此得延迟一下标准的发布!”这就是为什么原本的 C++0x 结果成了 C++11,在 C++98 后过了 13 年。

在 C++11 之后,一些委员会成员希望缩短周期,召集人 Herb Sutter 建议我们采用列车模型。也就是说,列车在预定时间出发,任何没上车的人将不得不等待下一班。大家喜欢这个建议,也花了挺长时间讨论标准修订之间的合适间隔。我主张短点,3 年,因为再长(例如 5 年)就容易被“这个特性非常重要,等不了”这样的说法拖累,导致发布延迟。我们商定了三年的发布周期,Herb Sutter 补充建议采用交替发行大版本和小版本的英特尔“滴答”模型。这也得到了同意,因此在 C++11(§4)三年后,我们发布了 C++14(§5),它纳入了之前被延迟的特性并纠正了早期使用中发现的小问题。C++17 也按时交付,但可惜并不是一次大升级(§8)。C++20 在 2019 年 2 月通过投票,确定了完整的发布特性。最终技术性投票于 2020 年 2 月在布拉格完成。

显然,如此庞大的组织和个人组成的群体代表着千差万别的兴趣和技术背景,需要一个组织结构来运作。会议是围绕工作组(WG)和研究组(SG)进行组织的。

在 WG 和 SG 里,每个出席者都可以投一票。委员会全体会议的正式投票则是每个到会的组织一票(这样,大型组织就不会有多票),再加上国家标准机构的票数。“技术性投票”和国家机构投票必须一致才算达成共识。
在这里插入图片描述
如上图,易知C++标准库是标准的一部分的。

其实我个人是极其佩服C++之父的,他崇尚只有少数人能决定标准,来确保未来走向。但是这也导致一个特性正式被采纳标准变得非常慢。比如C++之父早在03年就发表了对概念(concept)的论文,在06年就进入了标准草案,但在09年被委员会放弃。 而对于像 Go、C# 等则是公司主导的编程语言,Python、PHP 则是个人英雄主义+社区主导的语言。

C++ 的实现

我们在wiki上可以看到他的主要实现:GCC, LLVM Clang, Microsoft Visual C++, Embarcadero C++Builder, Intel C++ Compiler, IBM XL C++, EDG

而从前端来说主要的一般是 Clang、EDG、GCC 和 微软,而对于后端实现上则少说有十几个。

这些实现都需要围绕标准规格书来进行,需要符合标准。比如多线程,在C++11之前,我们只能根据不同平台操作系统提供的接口来调用对应API,可以参考 POSIX 线程(pthread):
https://baike.baidu.com/item/POSIX%E7%BA%BF%E7%A8%8B/15809676?fromtitle=Pthread&fromid=4623312&fr=aladdin
和 POSIX (可移植操作系统接口(英语:Portable Operating System Interface,缩写为POSIX))
https://baike.baidu.com/item/%E5%8F%AF%E7%A7%BB%E6%A4%8D%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E6%8E%A5%E5%8F%A3/12718298?fromtitle=POSIX&fromid=3792413

但是有了 11 制定的多线程标准后,所有C++的实现都会符合这个标准,因此我们只要符合标准的代码就能在各个平台上运行了!

注:
接触过 OpenGL 的同学有没有觉得有点像 OpenGL?OpenGL本身只是一个规范,而真正实现那些OpenGL函数的是你的显卡厂商。有的老师误以为 OpenGL 是一个库,这是不对的。

compiler intrinsic

这里我们有 compiler intrinsic 的概念,即编译器特有的拓展。这里我们拿字节对齐为例:

MSVC

#include <iostream>

int main()
{
    int x = 1;
    __declspec(align(8)) int y = 2;
    std::cout << __alignof(x) << std::endl;
    std::cout << __alignof(y) << std::endl;
}

这里的 __declspec 和 __alignof 便是 compiler intrinsic,但是我们在 GCC 下编译:g++ test.cc -std=c++17 -W{all,extra,error,pedantic}
在这里插入图片描述

GCC

#include <iostream>

int main()
{
    int x = 1;
    __attribute__((aligned(8))) int y = 2;
    std::cout << __alignof__(x) << std::endl;
    std::cout << __alignof__(y) << std::endl;
}

可以看到,GCC中我们需要改为 __attribute__((aligned(8)))__alignof__,这时候编译输出正确结果才是 4 8,但是显然在 MSVC 上会报错。

C++11 标准后

C++11标准制定了 alignas 与 alignof,如下:

#include <iostream>

int main()
{
    struct MyStruct
    {
        int x = 2;
        alignas(8) int x2 = 2;
    };

    std::cout << alignof(MyStruct) << std::endl;
}

这里 alignof 只能对类型使用,不能对某个变量使用。此时输出为 8,GCC 与 MSVC 皆可成功编译运行。

参考

https://github.com/Cpp-Club/Cxx_HOPL4_zh
《现代C++语言核心特性解析》

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 云计算综合标准化体系建设指南是一份指导云计算标准化工作的文件,它包括了云计算标准化的基本原则、标准化的目标和任务、标准化的组织和管理、标准化的技术和方法等方面的内容。该指南的主要目的是为了推动云计算标准化工作的开展,促进云计算产业的健康发展。 ### 回答2: 云计算综合标准化体系建设指南是为了促进云计算产业的健康发展而制定的。该指南旨在为云计算行业制定一套统一的标准体系,以便各个企业和机构在云计算领域的运作都能有一个明确的依据和约束。 云计算标准化体系的建设包括三个方面的内容:基础标准、应用标准和安全标准。 基础标准是指云计算的基本概念、架构、功能、接口等方面的规范,如云服务模型、云平台架构、云计算资源管理等。这些标准可以为云计算服务提供商提供一套统一的技术规范,使得不同服务提供商的产品能够互通。同时,基础标准还可以帮助用户更加方便地使用云计算服务。 应用标准是指在特定领域内使用云计算技术时需要遵守的规范,如云存储、云数据分析、云人工智能等。这些标准可以帮助企业和机构选择适合自己需求的云计算方案,提高云计算应用的效率和安全性。 安全标准是指云计算环境下保护用户数据安全和隐私的规范。云计算涉及大量用户的数据存储和处理,因此必须制定相应的安全标准,以保护用户的数据不受攻击和泄露。安全标准应包括数据加密、身份认证、访问控制等措施。 云计算综合标准化体系的建设指南将有助于推动云计算行业的规范化发展,促进各方共同遵守规范,提高云计算服务的质量和可信度。同时,标准化体系也将有助于降低用户的风险和成本,提高云计算技术的应用普及率。 ### 回答3: 云计算综合标准化体系建设指南是为了推动云计算产业健康发展而制定的指导性文件。它的主要目标是统一云计算相关领域的标准,促进云计算应用的互操作性和安全性。 首先,云计算综合标准化体系建设指南明确了标准的分类和体系结构。通过将标准分为基础标准、服务标准和管理标准等不同类别,确保了云计算标准的全面性和系统性。同时,指南还建立了标准组织和标准制定的程序,确保标准制定的科学性、公正性和严谨性。 其次,云计算综合标准化体系建设指南提出了一系列的具体标准要求。这些标准要求涵盖了云计算的各个方面,包括云基础设施、云服务模型、云安全和隐私保护等。通过制定这些标准,可以确保不同云计算产品和服务之间的互操作性,从而方便用户选择和使用云计算服务。 此外,云计算综合标准化体系建设指南还强调了云计算标准的更新和维护。它建立了标准的审查和修订机制,及时跟踪和反映云计算技术的发展和需求变化,保证标准的适应性和持续性。 总之,云计算综合标准化体系建设指南是一个重要的指导文件,对于推动云计算产业的发展和规范化起到了积极的作用。它为云计算标准的制定和实施提供了科学的依据和指导,促进了云计算应用的健康发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值