Skip to content

【Zig 日报】Zig 很酷,但 C 更酷 #274

@jiacai2050

Description

@jiacai2050

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 在中文群体中的使用,有多种方式可以参与进来:

  1. 供稿,分享自己使用 Zig 的心得
  2. 改进 ZigCC 组织下的开源项目
  3. 加入微信群Telegram 群组

Metadata

Metadata

Assignees

No one assigned

    Labels

    日报daily report

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions