最近二战在家,闲得发慌,想找点事做做。于是尝试写了门解释性语言,取名为Fight, 战斗!
写到现在,已经相对完善了。现在已经颇具规模了,我将已经实现的功能文档投给gpt, 它对这门语言的总结如下:
Fight语言:
- 语言特性概述:
Fight语言是一门动态类型、解释执行的高级编程语言。它融合了多种主流编程语言的特性,包括Python、JavaScript、Ruby等,同时也有一些独特的设计。
- 主要特点:
- 动态类型系统
- 支持函数式编程特性(高阶函数、lambda表达式等)
- 面向对象编程支持(类、继承、接口等)
- 丰富的数据结构(列表、字典、集合等)
- 异常处理机制
- 模块化支持
- 元编程能力(反射等)
- 语法特色:
- 使用let关键字进行变量声明
- 函数定义支持多种形式(def、lambda、箭头函数)
- 类定义使用class关键字,包含fields和methods块
- 支持模板字符串
- 独特的match表达式和switch语句
- 支持解构赋值
- for-in循环可遍历多种数据类型
- 数据类型和结构:
- 基本类型:数字、字符串、布尔值
- 复合类型:列表、字典、集合
- 特殊类型:枚举(enum)、结构体(struct)
- 函数和方法:
- 支持默认参数和命名参数
- 闭包和高阶函数
- 方法可以使用this关键字
- 面向对象特性:
- 类继承
- 接口实现
- 构造函数(init方法)
- 静态方法和属性
- 异常处理:
- try-catch-finally结构
- 复用Python的异常体系
- 模块化:
- 支持模块导入,但具体实现细节未提供
- 元编程:
- 反射API(获取函数参数、调用方法等)
- 函数注解(类似Python装饰器)
- 标准库:
- 复用了部分Python标准库(如os、random、math等)
- 提供了一些内置函数和方法(如类型转换、集合操作等)
- 其他特性:
- 支持注释(#符号)
- 彩色打印函数
- 时间相关操作
- 类型转换
总结:
Fight语言综合了多种现代编程语言的优秀特性,同时也有一些独特的设计。它似乎旨在提供一个灵活、表达力强的编程环境,适合快速开发和原型设计。该语言的设计反映了对编程语言发展趋势的深入理解,以及对提高开发效率和代码可读性的重视。
建议:
- 考虑添加静态类型检查选项,以增强大型项目的可维护性。
- 可以进一步完善标准库,特别是在文件I/O、网络编程等方面。
- 考虑增加并发编程支持。
- 可以开发专门的IDE或编辑器插件,以提供更好的开发体验。
- 编写详细的语言规范文档和教程,有助于语言的推广和使用。
总的来说,Fight语言展现了很大的潜力,可以在特定领域或场景中发挥独特作用。
下面是几个代码片段,展现了Fight语言的灵活性和可扩展性。
1, 类似js的语法,更灵活
filter函数在fight中的使用
let xlist = [1, 2, 3, 100, 101];
// 筛选元素
let result = xlist->filter(def(x){
return x > 10;
});
// map方法
@println("result:", result);
let mapped = xlist->map(def(x){
return x+1;
})
2, 高阶函数
支持传入和返回高阶函数
let inc = def(x){
return x+1;
};
@inc(10);
// 支持传入回调函数
// 支持箭头函数
let call = << callback,list, >> =>{
@callback(list);
};
// lambda函数
let inc = lambda x: x+1;
@inc(1);
// 返回函数
def getCb(){
return def(){
@println("callback function");
};
}
let cb = getCb();
@cb();
3, 注解
支持函数注解,让函数更加强大和灵活
@annotation(returnType = "number", paramNum = 1)
def inc(x){
return x+1;
}
// 获取注解
let annot = GetAnnotations(inc);
@println(annot{"returnType"}); // 获取注解信息
4, 丰富的类型和表达能力
// list类型
let list = [1,2,3,True,"Fight"];
// set类型
let names = set<1,2,3>;
// object类型
let o ={name:"Fight",power: 1000};
// enum
enum Color{
RED,BLUE,GREEN
}
// struct
struct Person{
name, height
}
5, 丰富的控制结构和语句类型
// match表达式
let x = 2;
let result = match(x){
1 => "one",
2 => [1,2]
3 => True
};
// if三目
let result = if(x>2) x:2 ;
// loop循环
loop(x>10){
x--;
}
// if elif else
if(x==10){
// code
}elif(x==11){
}else{
}
// for in循环遍历列表、set、object、字符串
for(element in [1,2,3]){
// code
}
// for to循环,遍历数字
for(idx: 1 to 10){}
// 逆序
for(id: 10 to -1){
// code
}
除此之外,Fight语言已经为基本数据类型的操作提供了大量的内置函数和方法,包括类型转换、类型获取、list\object\sftr等类型的常见方法、多种输出函数、类机制(还不完善)、异常机制、常见内置函数如math os random模块、for in语法等等。凡你所想,皆可实现,要强要大就是Fight的口号!
这门语言现在仍然在"火热"更新中, 特性也在不断完善。如果您有什么好的想法和建议,或者对这门语言感兴趣,那就加入我吧。😊😁 让我们写出自己的第一门语言! 还在等什么,等你来Fight!
项目地址: Fight语言