一些杂乱知识的总结与比较
C++ 是谁在维护
C++ 是一种通用的编程语言,由 Bjarne Stroustrup 在 1980 年代开发。自那时以来,它已经发展成为一种广泛使用的编程语言。C++ 的维护和 发展主要由 ISO C++ 委员会(也称为 WG21)负责。ISO C++ 委员会是一个国际组织,由来自世界各地的 C++ 专家组成,他们定期会面并通过讨论、审查和投票来改进和标准化 C++ 语言。
该委员会负责制定 C++ 的国际标准,确保语言的稳定性和兼容性。迄今为止,C++ 已有多个标准版本,包括 C++98、C++03、C++11、C++14、C++17 和 C++20。委员会会继续开发新的特性和功能,并将其纳入未来的 C++ 标准。
Clang / LLVM / G++ 有什么区别
Clang、LLVM 和 G++ 都与 C++ 编程语言相关,但它们扮演着不同的角色。下面是对它们的简要概述:
- Clang:Clang 是一个 C、C++、Objective-C 和 Objective-C++ 编程语言的编译器。它是 LLVM 项目的一部分,旨在提供一个 GCC(GNU 编译器套件)的替代方案。Clang 的目标是提供更好的性能、更快的编译时间、更友好的错误和警告信息以及更严格的源代码兼容性。Clang 通常与 LLVM 后端一起使用,但也可以与其他后端(如 GCC)一起使用。
- LLVM:LLVM(Low-Level Virtual Machine)是一个编译器基础设施项目,为各种编程语言提供一套模块化和可重用的编译器和工具链技术。LLVM 包括许多不同的子项目,如编译器前端(如 Clang)、中间表示(IR)、优化器和代码生成器。LLVM 提供了一种通用的中间表示(LLVM IR),使其能够用于多种编程语言,并为各种硬件平台提供优化和代码生成支持。
- G++:G++ 是 GNU 编译器套件(GNU Compiler Collection,简称 GCC)中的 C++ 编译器。GCC 最初是一个 C 语言编译器,后来发展成为一个支持多种编 程语言的编译器套件,包括 C++、Objective-C、Fortran、Ada、D、Rust 等。G++ 是一个成熟的编译器,广泛应用于许多操作系统(尤其是基于 Linux 的系统)和硬件平台上。
总之,Clang 是一个编译器前端,用于将 C++ 源代码转换成中间表示;LLVM 是一个编译器基础设施项目,提供编译器前端、优化器和代码生成器等组件;而 G++ 则是 GNU 编译器套件中的 C++ 编译器。这些工具都有各自的特点和优势,开发者可以根据项目需求和个人喜好选择使用。
C++ 有官方网站吗
C++ 并没有一个官方的中心化网站,但有一些非常重要和有价值的资源,它们可以帮助您学习和了解 C++ 语言以及其生态系统。以下是一些建议的资源:
- ISO C++ 委员会官方网站( https://isocpp.org/ ):这个网站是一个重要的资源,提供有关 C++ 标准化进程、新闻、博客、论文和事件的信息。您还可以找到有关 C++ 标准的详细文档。
- C++ 参考( https://en.cppreference.com/ ):这是一个广泛使用的在线 C++ 参考资料,提供了对 C++ 语言特性、标准库和语法的详细描述。这个网站对于学习 C++ 语言和库的细节非常有用。
- Cplusplus.com( https://www.cplusplus.com/ ):这个网站提供了丰富的 C++ 教程、参考和文章,可以帮助初学者和有经验的开发者学习和了解 C++ 语言和库。
虽然 C++ 没有官方的中心化网站,但通过访问上述资源,您可以获得大量关于 C++ 的知识和信息。此外,还有许多其他在线论坛、博客和教程,可以帮助您学习和了解 C++ 编程。
C++ 开源吗 盈利吗
C++ 本身是一种编程语言,而不是一个具体的实现。C++ 的标准和规范由 ISO C++ 委员会制定,但这个标准本身不是开源的。然而,有许多 C++ 编译器和库的实现是开源的,这意味着您可以查看和修改它们的源代码。例如,GCC(GNU Compiler Collection)和 Clang/LLVM 是两个广泛使用的、基于开源许可证的 C++ 编译器。
关于 C++ 是否盈利,这个问题应该从不同的角度来看。C++ 语言本身不会产生盈利,但许多公司和组织都在使用 C++ 开发商业软件,这些软件可以产生收入。此外,有些公司为 C++ 开发者提供支持、培训和工具,这些服务也可能产生收入。
总的来说,C++ 作为一种编程语言,其价值主要在于它所创建的软件和应用程序,而不是直接产生盈利。但是,通过使用 C++ 开发商业软件和提供相关服务,许多公司和开发者可以实现盈利。
标准不开源怎么实现的编译器
虽然 C++ 标准本身不是开源的,但它是公开可用的。ISO C++ 委员会发布了一系列的文档,详细描述了 C++ 语言和库的规范。这些文档可以免费在线获取,允许开发者查看和理解 C++ 的规范。因此,实现一个 C++ 编译器不需要访问源代码,而是需要遵循这些公开的规范和文档。
基于这些规范,许多开发团队和组织创建了各种 C++ 编译器和工具,其中一些是开源的。例如,GCC(GNU Compiler Collection)和 Clang/LLVM 是两个广泛使用的、基于开源许可证的 C++ 编译器。这些编译器的开发者阅读了公开的 C++ 规范,然后实现了一个遵循这些规范的编译器。这些编译器可以解析、编译和执行 C++ 源代码,从而使开发者能够使用 C++ 编程语言构建应用程序。
简而言之,虽然 C++ 标准本身不是开源的,但公开的规范允许开发者实现遵循这些规范的编译器。许多这样的编译器是开源的,允许开发者查看和修改它们的源代码。
LLVM Core 是什么
LLVM Core,通常简称为 LLVM,是一个编译器基础设施项目,提供一套模块化、可重用的编译器和工具链技术。LLVM 是 Low-Level Virtual Machine(低级虚拟机)的缩写,尽管如今它已经不仅仅局限于虚拟机概念。LLVM 的核心组件包括一系列库,这些库可以用于构建编译器、静态分析器、代码生成器、链接器等各种工具。
LLVM Core 的主要组件有:
- LLVM IR(中间表示):LLVM 提供了一种语言无关的、类型化的、低级别的中间表示。这种中间表示用于在编译器优化和代码生成阶段传递程序信息。它允许 LLVM 支持各种编程语言,并为多个硬件平台提供优化和代码生成。
- 优化器:LLVM 包含一套丰富的编译器优化算法,这些算法作用于 LLVM IR。优化器可以执行各种传统的编译器优化,如常量传播、死代码消除、循环不变量代码移动等,以生成更 高效的目标代码。
- 代码生成器:LLVM 提供了一套代码生成器,用于将 LLVM IR 转换为多种硬件平台和指令集体系结构(ISA)的目标代码。这使得 LLVM 可以用于为各种处理器和设备生成高效的机器代码。
LLVM Core 旨在提供一套高度模块化、可扩展和可重用的编译器组件,使得开发者可以构建自定义的编译器和工具链。这使得 LLVM 成为了许多编程语言编译器(如 Clang、Rust、Julia、Swift 等)的基础设施。
LLVM 的前端有什么,后端有什么
LLVM 提供了一套模块化的编译器基础设施,这意味着它可以与各种编程语言的前端和多种硬件平台的后端一起使用。以下是 LLVM 的一些常见前端和后端组件:
前端:
- Clang:Clang 是一个用于 C、C++、Objective-C 和 Objective-C++ 的编译器前端。它负责将源代码解析成 LLVM IR(中间表示),以便进行优化和代码生成。
- Swift:Swift 编译器是为 Apple 开发的 Swift 语言创建的编译器前端。它将 Swift 代码转换为 LLVM IR,然后利用 LLVM 的优化器和代码生成器。
- Rust:Rust 编程语言的官方编译器(rustc)也使用 LLVM 作为其后端。它将 Rust 源代码转换为 LLVM IR,进而生成目标代码。
- Julia:Julia 编程语言使用 LLVM 作为其 JIT(即时编译)和 AOT(预先编译)编译器的后端,将 Julia 源代码转换为 LLVM IR。
这些只是使用 LLVM 作为后端的许多编程语言中的一部分。还有其他许多语言和项目使用 LLVM 作为其编译器基础设施。
后端:
LLVM 支持许 多不同的处理器架构和指令集。以下是一些常见的 LLVM 后端:
- X86/X86-64:用于 Intel 和 AMD 的通用处理器。
- ARM:用于许多嵌入式系统和移动设备的处理器。
- AArch64:用于 ARMv8 架构的 64 位处理器。
- PowerPC:用于 IBM 和其他制造商的 PowerPC 架构处理器。
- MIPS:用于 MIPS 架构的处理器。
- WebAssembly:用于在浏览器环境中运行的虚拟指令集体系结构。
这些只是 LLVM 支持的一部分后端。LLVM 项目不断发展,支持更多的处理器架构和指令集。
通过与各种前端和后端组件的结合,LLVM 为编译器开发者提供了一套灵活、模块化的编译器基础设施。这使得 LLVM 成为了构建许多编程语言编译器和工具链的理想选择。
libc++ 是什么,为什么在 Windows 上不能用
libc++ 是一个 C++ 标准库实现,它是 LLVM 项目的一部分。C++ 标准库包含了 C++ 语言所需的一些基本功能,如输入/输出操作、字符串处理、容器和算法等。libc++ 的设计目标是提供一个高度模块化、高效且易于扩展的实现,以支持 C++11 及以后的标准。
在 Windows 上,C++ 标准库的默认实现是 Microsoft Visual C++ 运行时库(MSVCRT)。然而,libc++ 本身并非不能在 Windows 上使用,但由于它没有得到与 MSVCRT 相同程度的集成和支持,因此在 Windows 上使用 libc++ 可能会面临一些挑战。
libc++ 可以在 Windows 上与 Clang 编译器一起使用,但您可能需要进行一些配置。在 Windows 上使用 libc++ 的一个方法是 通过安装 LLVM 工具链和使用 Clang 编译器。然后,您需要告诉编译器使用 libc++ 而不是默认的 MSVCRT。这可以通过在编译命令行中添加以下参数来实现:
-stdlib=libc++
值得注意的是,在 Windows 上使用 libc++ 可能导致与其他 Windows 特定库和 API 的兼容性问题,因为它们可能依赖于 MSVCRT。在这种情况下,您需要仔细评估是否有必要在 Windows 上使用 libc++,或者坚持使用默认的 MSVCRT。
总之,虽然 libc++ 本身可以在 Windows 上使用,但由于它在 Windows 上的集成程度较低,可能会遇到一些兼容性和配置问题。在 Windows 上使用 libc++ 的情况相对少见,大多数情况下,开发者会选择使用默认的 MSVCRT。