1 Star 1 Fork 0

Z语言 / Z语言炼成记

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Z语言炼成记

介绍

Z语言是一门个人向的专注于学习和探索的编程语言。

我的设计目标是:做世界上最强的玩具语言!

Z语言的重心放在编程语言知识的学习和分享上。 更注重内容的广度而不是深度。麻雀虽小,五脏俱全。 别人有的我都有,但是并不多。 深度上则是由浅及深,换句话说就是我学了多深,就写多深。

Z语言最大的特色就是“面向场景编程”,且什么场景都有可能支持。

现阶段,Z支持的场景有:

  • 探索式编程:解释器+REPL
  • 脚本模式:z run
  • 静态编译:z build可以生成Linux和Windows两个版本的可执行文件
  • 后端开发:z c可以将Z语言转译成C语言,嵌入到任意C生态。
  • 科学计算和AI:z py可以将Z语言转译成Python,嵌入到任意Python生态。
  • 前端开发:z js可以将Z语言转译成JavaScript,嵌入到任意JS生态。

Z语言的实现放在https://gitee.com/z-lang/zc工程里。

《Z语言炼成记》这本书是Z语言实现的配套书籍, 我会把设计和开发过程中的点点滴滴都记录下来。 用这种方式来记录,希望能够提供更真切的“临场感”。

虽然本书分了章节,但每一节基本可以算做是一篇日志。 我每做出一点新功能,就就更新一节,并打上一个tag。

每个tag都尽量保测试通过,可以运行;如果后来发现问题,会打相应的补丁tag。

关于Z语言本身的介绍,可以参看引言中的“Z语言是什么”一节。

目录

引言

第一册:Z语言

第一章:基本框架

  1. 最简单的Z程序
  2. 最简单的编译器 - Windows版
  3. 最简单的编译器 - Linux版
  4. 最简单的转译器
  5. 最简单的交互器
  6. 组织代码结构
  7. 自动测试

第二章:算数运算

  1. 整数
  2. 词法分析
  3. 加法
  4. 四则运算
  5. 优先级
  6. 括号与负数

第三章:函数

  1. 函数初探
  2. 内置函数
  3. Z标准库
  4. 编译器调用
  5. 转译器调用
  6. 多条语句
  7. 第三方库

第四章:存量和语句

  1. 存量
  2. 哈希表
  3. 定量
  4. 布尔类型
  5. 条件语句
  6. 变量与赋值
  7. 循环语句

第五章:视野

  1. 新视野
  2. 自定义函数
  3. 模块

第六章:类型

  1. 类型标注
  2. 浮点数类型
  3. 数组
  4. 字典
  5. 自定义类型
  6. 方法
  7. 字符串

第七章:更多类型

  1. 集合
  2. 队列
  3. 枚举
  4. JSON

第八章:类型系统

  1. 接口
  2. 游标
  3. 编译期调用
  4. 组合
  5. 泛型函数
  6. 泛型类
  7. 类代数

附录

短期规划

2024年2月:

目标: - [x] 第五章:自定义函数、模块 - [x] 添加基本数据类型:浮点数 - [ ] 第六章:自定义类型、数组、集合、字典、JSON - [ ] 基本的JS导出支持:可以跑动一个简单的Canvas程序。

2024年1月:

生病住院,本月进度很少。

2023年12月目标:

  • 用例:
    • Python:Numpy库的基本支持;
    • JS:WebGPU的基本探索;
  • 书:完成5~6章。分别是:视野与复合类型。具体需求跟随《AI图形引擎》的进度。
  • 语言:完成v0.1版。重点:视野、复合类型(数组、字典)、自定义函数、自定义类型、模块化。
  • 工具链:
    • 完善REPL,支持Z/Python/JS模块的导入和脚本的调用。
    • 初步探讨LSP和vscode的插件。实现一个颜色高亮插件。

结果:由于《AI图形引擎一书》焦点转移,本月Z语言目标未达成。

2023年11月目标:

  • 书:写完前四章。第五章写一半,实现基本的面向对象:类型、方法和简单继承。
  • Z语言:实现v0.1版,一个可用的玩具语言,同时支持动态解释、静态编译,还能够转译成C、Python和JavaScript。

结果:

  • 书:写完了前4章。第五章还没开始写。原先预计的内容现在发现有7~8章左右。
  • Z语言:实现了从基础到函数、语句等大部分功能。但没能实现类型、方法和较复杂的自定义函数。

特性规划

Z语言v0.1版包括如下内容:

语言特性:

  • print
  • 字符串常量
  • 整数
  • 算数运算
  • 内置函数
  • 外部函数调用
  • 标准库雏形
  • 多条语句
  • 自定义函数
  • 定量
  • 布尔类型
  • 比较运算
  • if语句
  • for循环
  • when分支
  • 常量
  • 变量
  • 幻量
  • 视野
  • 类型标注
  • 浮点数类型
  • 递归函数
  • 基本模块化
  • 数组
  • 字典
  • 自定义类型
  • 方法
  • 动态类型any
  • 编译期函数调用

工具链:

  • 解释器:zi
  • 编译器:zc
    • gas: GNU X86_64汇编
    • masm64: Microsoft Assembly 64bit
  • 转译器:
    • z2c
    • z2py
    • z2js
  • REPL:zir
  • run:z run

中长期规划

复合类型

  1. 数组
  2. 方法初探
  3. 哈希
  4. 字符串
  5. 字典
  6. 元组
  7. 浮点数
  8. 向量
  9. 矩阵
  10. 自定义类型
  11. JSON
  12. 模块化

面向对象

  1. 方法
  2. 接口
  3. 组合
  4. 隐私
  5. 继承
  6. 多态
  7. 反射

完善基本类型

  1. 其他整数
  2. 比特
  3. UTF8
  4. 中文字符串
  5. 中文名称
  6. 内嵌字符串

第二册:生态

函数进阶

  1. 完整函数
  2. 匿名函数
  3. 可变参数
  4. Lambda
  5. 闭包
  6. 函数多态
  7. 编译期函数
  8. 函数式编程
  9. 算法

改进标准库

  1. Math
  2. IO
  3. Net
  4. Thread
  5. Http
  6. 面向场景编程SOP

高阶特性

  1. 异步
  2. Coroutine
  3. 生成器
  4. 编译期脚本
  5. 泛型
  6. 静态反射
  7. 动态反射
  8. 代码生成
  9. DSL

内存管理

  1. 手动内存管理(malloc/free)
  2. 引用计数
  3. 垃圾回收
  4. 内存池
  5. 弱引用和借用
  6. 生命周期管理
  7. 自动引用计数(ARC)
  8. 自动内存释放(Auto Free)

跨语言

  1. FFI:C
  2. FFI:Python
  3. FFI:JS
  4. Binding: C
  5. Binding: Python
  6. Binding: JS
  7. c2z
  8. py2z
  9. js2z
  10. bash2z
  11. 跨语言REPL

完善工具链

  1. 测试框架
  2. 性能工具
  3. zb: Z Builder
  4. 包管理,repo
  5. LSP/IDE插件
  6. 社区工具

优化

  1. AST优化
  2. IR
  3. SSA
  4. Passes
  5. JIT

打通生态

C生态:

  1. HTTP服务
  2. redis/数据库访问
  3. 图形库
  4. GUI库
  5. 游戏引擎
  6. 多媒体库

Python生态:

  1. numpy
  2. plot
  3. pandas
  4. tensorflow
  5. pytorch
  6. Stable Diffusion

JS生态:

  1. 前端GUI(vuejs)
  2. wasm
  3. webgpu
  4. vscode

应用展示

  1. REPL:zcalc,带有记忆功能的可编程计算器。
  2. 编译器:用FFI的形式,调用C语言的库,实现一个最简单的HTTP服务。
  3. 转译C:调用SDL库,实现一个最简单的2D游戏,并借用Emscripten转译成WASM。
  4. 转译Python:调用pyplot库,绘制一个K线图。
  5. 转译JavaScript:调用vuejs库,实现一个最简单的前端页面,并展示上面两个成果。

第三册:应用

如果能做到这个地步,Z语言应当已经比较成熟,且打通了C/Python/JS的生态,拥有了完整的应用库了。

这时候就可以开始实现我最初的梦想了:用Z语言开发自己的应用。

我大致有如下几个方向的设想:

  1. Zap(Z App Platform),前后端开发无缝链接的UI框架。需要打通C/JS生态。
  2. Zeco (Z Editor for Coders),类似于VSCode的通用编辑器,也是Z语言的官方IDE。主要基于C生态;但还需要实现一个WEB版,因此也需要JS。
  3. Zire(Z Interactive REPL Environment),融合bash、python、js的交互环境,提供一站式探索式编程的交互环境。需要打通C/Python生态。
  4. Zif (Z Image Fusion),基于Stable Diffusion的图像处理工具。主要基于Python生态,再加上基于JS的界面。
  5. Zaige(Z AI Graphics Engine,读作/ˈzeɪg/), AI图形引擎。需要C/Python/JS。

Zaige引擎是我的最终目标,也是我学习并开发Z语言的初衷。 这个引擎需要同时打通C/Python/JS的生态,所以我才会选择它们作为Z语言的目标语言。 这个引擎已经开始了最初的开发工作,并且会伴随着Z语言一起发展。

Zaige引擎作为Z语言的驱动工程,与Z语言的关系类似于Unix与C,或者Firefox与Rust。

Zaige工程地址参见:https://gitee.com/z-lang/zaige

它也有一本开源书:https://gitee.com/z-lang/zaige_book

其他的几个项目,随着Z语言的发展,我会在合适的时机开启。也欢迎大家一起来开发!

空文件

简介

Z语言设计与开发的记录 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/z-lang/devlog.git
git@gitee.com:z-lang/devlog.git
z-lang
devlog
Z语言炼成记
master

搜索帮助