自制脚本语言(11) 类型系统

摘要:介绍了自制语言的类型系统。包含了基本类型、数组、类、接口、泛型等。

在我的自制YF语言中,基本类型有int,double,string,character,bool。字面量和变量就不细说了。

数组类型。与java比较相似。用一个元素类型和一个维数来表示数组类型的signature。

复合类型有class,interface,语义与java比较接近,class可以extends class,也implement interface。支持多继承,但是会检查多继承的classes的fields、methods互相没有命名冲突(目前没有加入public、private等控制,但保留了关键字。以后会把这个功能加进去。无非是查找符号表时,访问者带一个状态,表明自己代表哪个作用域来查找,查找符号时看是否有访问权限。关于符号表及其作用域的控制,后面会详细介绍。)。

function也是类型。每个function类型,有个signature,类似于int(int,int)这样,表示参数类型和返回类型。而function这个关键字,是表示动态函数类型,用于高阶函数表示。function类型的变量可以赋值,可以作为高阶函数送到函数参数里。目前的设计是高阶函数会在运行期检查类型,但未来会把部分的类型推导放在编译期,因为牵涉到泛型,类型推导比较麻烦。

泛型。YF语言的泛型设计与java和C++都不同。既不是擦除,也不是编译期生成模板。泛型作为一个独立的动态类型,与变量更为相似。泛型的核心类型是class或interface。一个泛型类型与类型参数绑定,保留在环境中,运行中需要取用类型参数就在环境中查找。例如,<T>class A是定义class类型,而A<T>是泛型类型,用在定义变量的语句里。这样的动态类型会有一些性能开销,但毕竟不追求性能,也是为了语言未来的扩展。比如:从类型动态生成,到类型变量的计算,也可以做成依赖类型。

变量定义与赋值的类型检查。

函数定义的类型检查。

类、接口定义的类型检查。

运算符的类型检查。

函数调用的类型检查。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值