-
Notifications
You must be signed in to change notification settings - Fork 1
Description
Zig 是一门令人印象深刻的语言,但 C 语言已经存在了五十年,是现代计算的基础。C 语言一直在进化,C23 标准增加了类型推断、安全空指针和精确整数类型等特性,同时保持了语言的简洁和稳定。Zig 感觉新颖而充满活力,而 C 语言已经在几乎所有你能想到的机器上证明了自己。
Compiler and Toolchain
Zig 因易于设置而备受赞誉,但 C 语言几十年来也在默默地解决同样的挑战。主要的区别在于 C 语言的工具已经成为了计算环境的一部分。
Portability and Presence
C 语言是为可移植性而构建的,每个重要的计算机架构都有 C 语言编译器。每个操作系统都将 C 语言作为一等公民支持。
Cross Compilation
交叉编译在 Zig 中看起来是一个突出的特性,但 C 语言开发者几十年来一直在做同样的事情。Zig 通过将编译器、链接器和目标库捆绑到一个工具链中来简化了这个过程,但底层仍然依赖于 GCC 和 Clang 后端。
Composable Toolchains
Zig 的编译器是独立的,而 C 语言的工具链是可组合的。编译器、链接器、构建系统和包管理器都是独立的组件,可以自由升级或替换。
Tooling Depth
C 语言的工具链已经经过了半个世纪的改进,包括静态分析、内存诊断、性能分析器和调试器等先进工具。
Integration with Hardware and Vendors
硬件供应商在设计时考虑到了 C 语言,系统 API 首先以 C 语言接口的形式公开。
Real-World Scale
现代世界运行的软件依赖于 C 语言编译器。当你用 C 语言编译时,你正在加入构建整个操作系统、浏览器和数据引擎的同一个管道。
Everyday Experience
对于个人开发者来说,C 语言的生态系统感觉很自然。你可以安装一次编译器并永远使用它。
Installation and Environment
Zig 使设置看起来很简单,而 C 语言的编译器和库已经成为系统的一部分。
Zig's Setup
安装 Zig 提供了一个即时环境,可以为多个平台生成二进制文件。
C on Every Platform
C 语言构建在计算的基础设施中,编译器知道如何查找头文件并链接到系统库。
Integration and Cross Compilation
C 语言中的交叉编译已经存在了几十年,可以针对任何架构安装正确的编译器。
Reproducibility and Flexibility
Zig 通过将所有内容保存在一个二进制文件中来确保可重现性。C 语言通过开放和透明来实现相同的可靠性。
Embedded and Hardware Targets
C 语言仍然是硬件级编程的首选语言。
Developer Workflow
日常使用感觉毫不费力,编译器总是准备就绪。
Stability and Longevity
C 语言的工具链已经经过了几十年的改进,代码可以长期编译和运行。
Language Simplicity
Zig 提倡现代的简洁愿景,旨在清理旧语言留下的粗糙之处。C 语言也通过 C11、C17 和 C23 标准获得了新的特性,同时保持了其精简和透明的特性。
The Original Design Goal
Unix 的创建者设计他们的语言是为了实用,而不是装饰。
Explicit Types and Conversions
Zig 强制执行显式类型转换。C 语言的编译器提供了严格的检查和静态分析工具来处理其余的事情。
The Clarity of Minimal Syntax
C 语言的语法简洁易懂,几十年前编写的代码今天仍然易于阅读和教授。
Transparency in Behavior
C 语言显示了在内存和控制流中实际发生的事情。
Loops and Control Flow
循环结构清晰易读,从一开始就具有通用性和表现力。
Readability and Predictability
程序按照它们出现的样子执行。
Expressive Without Excess
核心特性保持较小,但足以构建完整的系统。
Modern Refinement
C23 更新引入了实用的改进,同时保留了相同的结构。
Modularity and Structure
Zig 将其模块系统描述为现代和干净的。然而,模块化设计的基础已经存在了几十年,它来自 C 语言的文件基础的规则。
The Essence of Modularity
模块化始于一个简单的规则:将接口与实现分离。
Encapsulation Through Visibility
封装来自链接规则而不是关键字。
Independent Compilation and Linking
每个源文件编译成一个目标文件,这使得可以进行部分构建、增量更新和快速反馈。
Dependency and Structure
C 语言中的依赖关系是显式的,不需要包管理器或元数据文件。
Header Files as Contracts
头文件描述了一个模块承诺提供的功能。
Symbol Control and Linking Discipline
该语言可以精确控制符号可见性。
Cross-Language Modularity
由于模块边界由头文件和目标文件定义,因此相同的设计可以在不同的语言中使用。
Build System Freedom
编译器不强加一种构建模型。
Long-Term Maintainability
分离头文件和源代码使软件易于演进。
Zig 对模块化的方法感觉优雅而自动化。C 语言基于文件的系统感觉永恒,因为它在每个平台、工具链和语言中继续工作。
Memory and Bit Control
Zig 强调内存安全是其主要优势之一。然而,这些想法都建立在 C 语言很久以前建立的基础之上。C 语言的精确性和显式控制使得现代系统编程成为可能。
The Original Philosophy of Memory
当 Dennis Ritchie 创建 C 语言时,他的目标是以程序员可以阅读和维护的形式描述硬件的工作方式。
Manual Allocation and Ownership
C 语言中的手动分配代表了对开发者的信任。
Predictability and Abstraction
Zig 通过抽象来增加安全性。C 语言通过可见性来提供安全性。
Memory Alignment and Structure Layout
C 语言可以完全控制数据结构在内存中的对齐方式。
Bit Manipulation and Performance
C 语言的设计考虑到了位级操作,它提供了移位、掩码和位域作为核心语法的一部分。
The Purpose of Testing in C
C 语言中的测试遵循一个明确的想法:测试只是另一个程序。
Simplicity of Independent Test Files
Zig 的内联测试块适用于小型示例,而 C 语言通过将实现与验证分开来保持项目结构的清洁。
Frameworks and Ecosystem
随着时间的推移,C 语言开发了广泛的测试框架集合,每个框架都有特定的重点。
Integration with Build Systems
测试自然地融入到 C 语言的模块化构建过程中。
Advantages of External Testing
当测试保存在主源文件之外时,它们保持独立和可维护。
Safety Through Instrumentation
C 语言支持通过编译器检测进行强大的运行时分析。
Continuous Testing and Automation
C 语言在开发环境中的普遍存在使得可以轻松地自动化测试。
Testing for Embedded and Systems Code
C 语言在硬件和操作系统开发中的根源创造了独特的测试实践。
The Clarity of Standalone Functions
C 语言将函数视为独立、一流的元素,它们与数据分开运行。
Structs with Functional Relationships
C 语言缺乏内置的类或方法,但其结构和函数的结合创造了相同的组织形式。
Function Pointers and Dynamic Behavior
函数指针为 C 语言提供了动态灵活性。
Encapsulation through Naming and Linkage
C 语言使用命名约定和链接来组织代码,而不是内置的命名空间或模块。
Composition Instead of Inheritance
C 语言提倡组合和委托而不是继承。
Inline Functions and Performance
C 语言的 inline 关键字使开发者可以精细地控制性能。
Function Design as Documentation
C 语言的函数签名充当了自己的文档。
Static Polymorphism through Function Tables
C 语言可以通过函数指针表模拟面向对象的多态性。
Error Handling through Return Codes
C 语言的错误处理方法依赖于显式的返回值而不是异常或联合。
Why C23 Matters
C23 代表了 C 语言演进过程中的下一个深思熟虑的步骤。
Type Inference with auto
C23 引入了使用 auto 关键字进行局部类型推断。
The nullptr Constant
C23 引入了 nullptr 作为具有自己类型的真正的空指针常量。
Bit-Level Control with _BitInt(N)
新的 _BitInt(N) 类型允许开发者定义任意位宽的整数。
Binary Literals and Digit Separators
C23 增加了二进制文字和数字分隔符,提高了操作原始数据或大型常量的代码的可读性。
Safer Memory Functions
C23 扩展了标准库,其中的函数旨在降低安全风险并提高可靠性。
Compatibility with C++ and Other Languages
C23 通过将语法和属性与现代 C++ 约定对齐来提高跨语言的互操作性。
Improved Macros and Preprocessing
C 预处理器仍然是该语言的基石,C23 强化了它。
Portability and Backward Compatibility
每个 C23 编译器仍然理解早期的标准,例如 C89、C99、C11 和 C17。
Finale
Zig 是一门经过深思熟虑的语言,它改进了 C 语言引入的许多思想,并使它们更容易被新开发者使用。C 语言已经存在了五十多年,因为它专注于一个基本目标:让程序员直接控制软件在真实机器上的运行方式。Zig 使低级编程再次焕发新生。C 语言更酷,因为它永远不需要被取代。
c/articles/zig-is-cool-c-is-cooler.md at main · little-book-of/c
加入我们
Zig 中文社区是一个开放的组织,我们致力于推广 Zig 在中文群体中的使用,有多种方式可以参与进来:
- 供稿,分享自己使用 Zig 的心得
- 改进 ZigCC 组织下的开源项目
- 加入微信群、Telegram 群组