目录
类 C 语言 C3 是一种进化,而不是一场革命
C3 是基于 C 的编程语言,它是 C 的一种演变,其目标是在尽可能保留 C 相同语法情况下进行改进。
C3 编程语言特征
- 完全兼容 C ABI :
C3 完全与 C ABI 兼容,用户可以轻松的在同一项目中混合使用 C 和 C3 两种编程语言。 - 模块系统 :
C3 将函数、类型、变量和宏分组到称为模块的命名空间中。在构建时,任何 C3 文件都必须以 module 关键字开头,指定模块名。编译单个文件时,不需要指定模块,模块名假定为文件名,转换为小写,并将任何无效字符替换为下划线"_"。 - 泛型模块 :
泛型模块是参数化模块,允许为任意类型提供功能。 - 语义宏系统 :
C3 的宏功能涵盖了多种结构:宏(在调用时以 @ 前缀)、泛型函数、泛型模块、编译时变量(以 $ 前缀)、宏编译时执行(使用 i f 、 if、 if、for、 f o r e a c h 、 foreach、 foreach、switch)和属性。 - 一流 SIMD 向量类型 :
C3 支持向量类型的声明,向量与数组类似,但具有附加功能。 - 使用切片安全地访问数组 :
C3 提供内置数组、切片数组 - 除上述特征外还有 合约式设计、零开销错误处理、结构体子类型、易于使用的内联汇编、跨平台标准库,包括动态容器和字符串、LLVM 后端 等。详情参考官方说明
C3 设计原则
- 过程式“完成任务”类型的语言。
- 尽量接近 C,只改动真正必要的部分。
- 兼容 C ABI,且与 C 有出色的集成。
- C 程序员应该能轻松学习 C3。
- 数据是惰性的。
- 避免“过度的创意”和“多即是好”的谬论。
- 在有很大价值的地方引入一些更高层次的便利性。
安装 C3 编程语言
- C3 提供各平台预编译二进制包。可以直接到 C3 官网下载界面 或者 C3 github release 下载对应系统的二进制包并解压即可。更多安装方式请查看 C3 官网
第一个 C3 项目
- 创建一个新项目,目录结构如图所示。目录具体作用参考 C3 官网。
c3c init <project-name>
- 新建文件 hello_world.c3 编写第一个程序 “Hello World”
module hello_world;
import std::io;
fn void main()
{
io::printn("Hello, World!");
}
- 编译并运行代码
c3c compile hello_world.c3
./hello_world
- 运行结果: 终端将输出 “Hello, World”
$ c3c compile-run hello_world.c3
> Program linked to executable 'hello_world'.
> Launching hello_world...
> Hello, World
来源:
- https://c3-lang.org/
- https://github.com/c3lang/c3c
趣文:find + mkdir 是图灵完备
文章证明了仅使用 GNU 的 find
和 mkdir
命令的系统是图灵完备的。
证明思路:
- 构造循环: 利用
find
递归查找目录并使用mkdir
创建子目录,实现无限循环或有限次数的循环。 - 实现 FizzBuzz: 利用
find
的-regex
选项过滤文件名,结合循环实现 FizzBuzz 问题,展示条件分支能力。 - 实现 Rule 110: 将一维细胞自动机 Rule 110 的状态编码为文件路径,利用
find
和mkdir
模拟状态演化规则,证明其图灵完备性。
结论:
find
和 mkdir
的组合可以实现循环、条件分支和任意复杂度的计算,满足图灵完备性的要求。
其他:
- 代码实现依赖于 GNU 工具的特定行为,可能不适用于其他版本。
- 文件路径长度限制可能影响可计算问题的规模,但文中代码已尽量避免直接传递过长的文件路径。
来源:
- https://ogiekako.vercel.app/blog/find_mkdir_tc
更多内容请查阅 : blog-240801
关注微信官方公众号 : oh my x
获取开源软件和 x-cmd 最新用法
标签:mkdir,趣文,240801,hello,模块,C3,world,find From: https://blog.csdn.net/edwinjhlee/article/details/140843603