- 主题:c++反射提案正式进入标准
你说的是标准委员会吧,包管理不属于必须的东西,很难通过的
话说回来,倒是微软能把vcpkg做这么恶心,我是没想到的,还好我很少弄windows..
【 在 quicker 的大作中提到: 】
: C++依然是大内高手们智力和高水平的标志,即便是21世纪过去1/4了,他们还是没有给C++造出一个统一好用的包管理工具
--
FROM 114.242.210.*
TL;DR 简要回答:
因为 C++ 标准委员会(ISO C++)只制定语言和标准库本身,而不管理生态和工具链。再加上历史包袱、生态碎片、平台多样性等因素,导致 C++ 没有统一的官方包管理器。
一、标准委员会的职责决定了它“不管这事”
ISO C++ 的目标是定义:
语法(如模板、范围 for)
标准库(如 STL、线程、正则)
ABI、行为规范(如未定义行为)
但它不负责:
编译器实现(GCC、Clang、MSVC)
构建系统(Make、CMake、Meson)
包管理器(vcpkg、conan、hunter)
标准委员会不干涉工具生态,这是它一贯的方针。
—— Herb Sutter(C++ 核心专家)
二、历史包袱:C++ 太早出现了
C++ 诞生于 1980 年代,那时网络尚不普及、没有中央仓库概念。
开发者习惯于:
手动下载源码
写 Makefile 编译
把 .h、.cpp 拷贝进项目
C++ 是一个在 包管理之前就广泛使用 的语言。
它的历史比 npm、pip、cargo、go mod 等都早。
三、生态高度碎片化
C++ 在 平台、编译器、构建系统、ABI 等方面都不统一,导致包管理器实现困难:
方面 状况
编译器 GCC, Clang, MSVC 等 ABI 不兼容
构建系统 CMake, Make, MSBuild, Autotools 各自为政
平台 Windows、Linux、macOS 差异大
包形式 有的只提供源码、有的预编译、有的静态、有的动态
一个包可能在 Windows 用 vcpkg,Linux 用 apt,Mac 用 brew,在构建时还得兼容不同编译器。
四、社区内缺乏统一意志
vcpkg(微软)、conan(JFrog)、hunter、Buckaroo、spack、biicode 等工具争相竞争,但没有一个成为真正的共识性标准。
这导致开发者和厂商各用各的,你的包我装不了、我的 ABI 你编译不了。
CMake 虽然几乎成了构建的事实标准,但它本身不是包管理器。
五、标准化包管理器的现实障碍
若委员会标准化一个包管理器,还要考虑:
安全性(依赖信任)
后向兼容(老包支持)
实现维护(谁维护仓库和服务?)
法律合规(哪些国家能访问?)
这相当于做一个“开源界的 C++ App Store”,很难落地。
六、未来方向?
虽然 ISO C++ 不直接管包管理器,但**正在推动模块化(C++20 Modules)**来间接帮助生态改进:
模块有助于加快编译、清晰依赖
模块可与包管理器(如 vcpkg)结合得更紧密
将来可能形成基于模块的生态系统,但还在缓慢推进
【 在 quicker 的大作中提到: 】
: C++依然是大内高手们智力和高水平的标志,即便是21世纪过去1/4了,他们还是没有给C++造出一个统一好用的包管理工具
--
FROM 114.245.255.*
按理水木平均年龄不小了,就算年纪大不喜欢学东西,也得明白不懂就少说点吧
【 在 butcher 的大作中提到: 】
: 总搞move,forward这种雕虫小技有鸡毛用。
: 转移控制,看着真恶心。
论坛助手,iPhone
--
FROM 58.246.155.*
由此看来,C++标准委员会对自己的定位还不如PSF(The Python Software Foundation)呢。人家PSF不光对python语言本身有指导,还能实现一个cpython,还能自带一个强大的标准库。除此之外,人家还建立了一个软件包仓库: pypi·org/ ,拥有庞大的第三方库。人家还有一个文档网站 docs·python·org 及社区。
相比之下,C++标准委员会干了啥?自己就会扒扒故纸堆,动动嘴皮子出标准,剩下的事(compiler、doc、library、社区)全扔给别人干,到现在也没有一个package management system,总体呈现一盘散沙、没人管的状态。就那个C++标准还不是免费提供的吧?
【 在 z16166 的大作中提到: 】
: TL;DR 简要回答:
: 因为 C++ 标准委员会(ISO C++)只制定语言和标准库本身,而不管理生态和工具链。再加上历史包袱、生态碎片、平台多样性等因素,导致 C++ 没有统一的官方包管理器。
: 一、标准委员会的职责决定了它“不管这事”
: ISO C++ 的目标是定义:
: 语法(如模板、范围 for)
: 标准库(如 STL、线程、正则)
: ABI、行为规范(如未定义行为)
: 但它不负责:
: 编译器实现(GCC、Clang、MSVC)
: 构建系统(Make、CMake、Meson)
: 包管理器(vcpkg、conan、hunter)
: 标准委员会不干涉工具生态,这是它一贯的方针。
: —— Herb Sutter(C++ 核心专家)
: 二、历史包袱:C++ 太早出现了
: C++ 诞生于 1980 年代,那时网络尚不普及、没有中央仓库概念。
: 开发者习惯于:
: 手动下载源码
: 写 Makefile 编译
: 把 .h、.cpp 拷贝进项目
: C++ 是一个在 包管理之前就广泛使用 的语言。
: 它的历史比 npm、pip、cargo、go mod 等都早。
: 三、生态高度碎片化
: C++ 在 平台、编译器、构建系统、ABI 等方面都不统一,导致包管理器实现困难:
: 方面 状况
: 编译器 GCC, Clang, MSVC 等 ABI 不兼容
: 构建系统 CMake, Make, MSBuild, Autotools 各自为政
: 平台 Windows、Linux、macOS 差异大
: 包形式 有的只提供源码、有的预编译、有的静态、有的动态
: 一个包可能在 Windows 用 vcpkg,Linux 用 apt,Mac 用 brew,在构建时还得兼容不同编译器。
: 四、社区内缺乏统一意志
: vcpkg(微软)、conan(JFrog)、hunter、Buckaroo、spack、biicode 等工具争相竞争,但没有一个成为真正的共识性标准。
: 这导致开发者和厂商各用各的,你的包我装不了、我的 ABI 你编译不了。
: CMake 虽然几乎成了构建的事实标准,但它本身不是包管理器。
: 五、标准化包管理器的现实障碍
: 若委员会标准化一个包管理器,还要考虑:
: 安全性(依赖信任)
: 后向兼容(老包支持)
: 实现维护(谁维护仓库和服务?)
: 法律合规(哪些国家能访问?)
: 这相当于做一个“开源界的 C++ App Store”,很难落地。
: 六、未来方向?
: 虽然 ISO C++ 不直接管包管理器,但**正在推动模块化(C++20 Modules)**来间接帮助生态改进:
: 模块有助于加快编译、清晰依赖
: 模块可与包管理器(如 vcpkg)结合得更紧密
: 将来可能形成基于模块的生态系统,但还在缓慢推进
--
修改:seablue FROM 111.200.40.*
FROM 111.200.40.*
不针对你,不客气地说
年龄大,不愿意学,是懒
年龄大,无知还乱喷,是蠢
【 在 butcher 的大作中提到: 】
: 跟年龄大小有鸡毛关系。
: 你这逻辑思维都有问题还说话?
论坛助手,iPhone
--
FROM 180.153.219.*
用 c++ 主要是现实的考虑。
理论上应该存在比 c++ 更适合的语言的。可惜到现在似乎都还没出现。
【 在 butcher 的大作中提到: 】
: 小心被咬。
: 为了效率,别的都是屎。
: 效率第一,只关心效率。
: ...................
--
FROM 110.84.121.*
C++标准委员会如果能把精力放在library上,反而能从语法中解放出来,促进C++的发展。
【 在 butcher 的大作中提到: 】
: 小心被咬。
: 为了效率,别的都是屎。
: 效率第一,只关心效率。
: ...................
--
FROM 111.200.40.*
说那么多,把python依赖的.so都扔掉试试呗
都是靠C/C++负重前行好吧
【 在 seablue 的大作中提到: 】
: 由此看来,C++标准委员会对自己的定位还不如PSF(The Python Software Foundation)呢。人家PSF不光对python语言本身有指导,还能实现一个cpython,还能自带一个强大的标准库。除此之外,人家还建立了一个软件包仓库: pypi·org/ ,拥有庞大的第三方库。人家还有一个文档网站 docs·python·org 及社区。
: 相比之下,C++标准委员会干了啥?自己就会扒扒故纸堆,动动嘴皮子出标准,剩下的事(compiler、doc、library、社区)全扔给别人干,到现在也没有一个package management system,总体呈现一盘散沙、没人管的状态。就那个C++标准还不是免费提供的吧?
:
--
FROM 111.221.231.*
贴硬件的,除了汇编,就C/C++了,还有哪一个呢
【 在 hgoldfish 的大作中提到: 】
: 用 c++ 主要是现实的考虑。
: 理论上应该存在比 c++ 更适合的语言的。可惜到现在似乎都还没出现。
:
--
FROM 111.221.231.*
zig 也算。
rust 理论上也贴近硬件。
【 在 overcomeunic 的大作中提到: 】
: 贴硬件的,除了汇编,就C/C++了,还有哪一个呢
--
FROM 110.84.121.*