1 Star 1 Fork 0

falang / fa

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 7.10 KB
一键复制 编辑 原始数据 按行查看 历史
fawdlstty 提交于 2022-01-28 20:07 . update readme

fa

license csharp csharp

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

C#
1
https://gitee.com/falang/fa.git
git@gitee.com:falang/fa.git
falang
fa
fa
main

搜索帮助