[240801] 类 C 语言 C3 是一种进化,而不是一场革命 | 趣文: find + mkdir 是图灵完备

112 阅读2分钟

类 C 语言 C3 是一种进化,而不是一场革命

C3 是基于 C 的编程语言,它是 C 的一种演变,其目标是在尽可能保留 C 相同语法情况下进行改进。

C3 编程语言特征

  1. 完全兼容 C ABI :
    C3 完全与 C ABI 兼容,用户可以轻松的在同一项目中混合使用 C 和 C3 两种编程语言。
  2. 模块系统 :
    C3 将函数、类型、变量和宏分组到称为模块的命名空间中。在构建时,任何 C3 文件都必须以 module 关键字开头,指定模块名。编译单个文件时,不需要指定模块,模块名假定为文件名,转换为小写,并将任何无效字符替换为下划线"_"。
  3. 泛型模块 :
    泛型模块是参数化模块,允许为任意类型提供功能。
  4. 语义宏系统 :
    C3 的宏功能涵盖了多种结构:宏(在调用时以 @ 前缀)、泛型函数、泛型模块、编译时变量(以 前缀)、宏编译时执行(使用前缀)、宏编译时执行(使用if、forfor、foreach、$switch)和属性。
  5. 一流 SIMD 向量类型 :
    C3 支持向量类型的声明,向量与数组类似,但具有附加功能。
  6. 使用切片安全地访问数组 :
    C3 提供内置数组、切片数组
  7. 除上述特征外还有 合约式设计、零开销错误处理、结构体子类型、易于使用的内联汇编、跨平台标准库,包括动态容器和字符串、LLVM 后端 等。详情参考官方说明

C3 设计原则

  • 过程式“完成任务”类型的语言。
  • 尽量接近 C,只改动真正必要的部分。
  • 兼容 C ABI,且与 C 有出色的集成。
  • C 程序员应该能轻松学习 C3。
  • 数据是惰性的。
  • 避免“过度的创意”和“多即是好”的谬论。
  • 在有很大价值的地方引入一些更高层次的便利性。

安装 C3 编程语言

第一个 C3 项目

  1. 创建一个新项目,目录结构如图所示。目录具体作用参考 C3 官网
c3c init <project-name>

c3lang.png

  1. 新建文件 hello_world.c3 编写第一个程序 "Hello World"
module hello_world;
import std::io;

fn void main()
{
    io::printn("Hello, World!");
}
  1. 编译并运行代码
c3c compile hello_world.c3
./hello_world
  1. 运行结果: 终端将输出 "Hello, World"
$ c3c compile-run hello_world.c3
> Program linked to executable 'hello_world'.
> Launching hello_world...
> Hello, World

来源:

趣文:find + mkdir 是图灵完备

文章证明了仅使用 GNU 的 findmkdir 命令的系统是图灵完备的。

证明思路:

  1. 构造循环: 利用 find 递归查找目录并使用 mkdir 创建子目录,实现无限循环或有限次数的循环。
  2. 实现 FizzBuzz: 利用 find-regex 选项过滤文件名,结合循环实现 FizzBuzz 问题,展示条件分支能力。
  3. 实现 Rule 110: 将一维细胞自动机 Rule 110 的状态编码为文件路径,利用 findmkdir 模拟状态演化规则,证明其图灵完备性。

结论:

findmkdir 的组合可以实现循环、条件分支和任意复杂度的计算,满足图灵完备性的要求。

其他:

  • 代码实现依赖于 GNU 工具的特定行为,可能不适用于其他版本。
  • 文件路径长度限制可能影响可计算问题的规模,但文中代码已尽量避免直接传递过长的文件路径。

来源:




更多内容请查阅 : blog-240801


关注微信官方公众号 : oh my x

获取开源软件和 x-cmd 最新用法