# fa **Repository Path**: falang/fa ## Basic Information - **Project Name**: fa - **Description**: fa 语言编译器 - **Primary Language**: C# - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-12-24 - **Last Updated**: 2022-06-21 ## Categories & Tags **Categories**: scripting-language **Tags**: None ## README # fa [![license](https://img.shields.io/github/license/fa-org/fa?color=09f)](./LICENSE) [![csharp](https://img.shields.io/lgtm/alerts/github/fa-org/fa?logo=lgtm)](https://lgtm.com/projects/g/fa-org/fa) [![csharp](https://img.shields.io/lgtm/grade/csharp/github/fa-org/fa?logo=lgtm)](https://lgtm.com/projects/g/fa-org/fa) fa语言是一款不容易误解、简单易学的编程语言。目前处于测试阶段,可以编译简单的功能代码。 ### **qq交流群:1018390466 欢迎一起讨论语法/实现/轮子** ## 目标 - 极简(编译器控制变量位于栈上、堆上、是否引用计数、是否原子化等)(暂未实现) - 安全(船新错误处理方案,确保能编译的代码无异常。ps:系统异常除外)(暂未实现) - 元编程(变量加上 "@" 前缀即代表编译期计算)(暂未实现) - 高性能(llvm ir后端输出,原生指令运行,simd优化)(暂未实现) - 所有权及释放(通通编译器处理)(暂未实现) - 强制开发范式(比如强制实现DDD模型)(暂未实现) ## TODO - 自举 - 判断浮点数时误差处理 - 可空类型变量switch - 类型switch - 线程锁 - 标准库 ## 进度 - ~~基于C++语言,Antlr前端,llvm binding API后端,实现初版fa语言编译器(废弃)~~ - 基于C#语言,Antlr前端,C#后端,实现初版fa语言编译器 + Hello World (√) + 可空类型(√) + 类,对象,表达式,循环(√) + 枚举类型(√) + switch(√) - 基于fa语言,fa前端,llvm ir后端,实现自举fa语言编译器 + 元编程 + 函数降级 + 状态机 + 继承 ## 特性 - 可选类型 + 任意类型后接问号表示,比如 `int?` + 可以储存此类型的值(`void?` 除外),也可以储存一条错误信息 + 可选类型可与原始类型计算,结果为可选类型 + 通过它代替异常实现机制 + 当函数返回类型为可选类型时,代表计算出错自动返回调用者 ``` int? func1 () { int? a = 5 / 0; // 此时a为除0异常 int b = a + 3; // 异常结果b无法存放,异常信息在此处return,不执行后面代码 return b; } int func2 () { int? a = 5 / 0; // 此时a为除0异常 int b = a + 3; // 异常结果b无法存放,函数返回类型也无法接收,编译报错 return b; } ``` - 全局异步任务(暂未实现) + 方法默认纯异步实现,方法体内无异步代码可转同步方式实现 + 无future、async、await等关键字或概念,用户只需要撸代码 + 通过独立线程实现所有异步锁的占用及控制 fa语言快排实现: ![compile](imgs/20211222001053.jpg)