Tenshi中关于数据结构部分的设计
Tenshi的类型系统<续>

Tenshi中关于类型系统的设计

太阳神上 posted @ 2008年4月11日 15:08 in Tenshi with tags Tenshi , 1431 阅读

  在几乎所有的脚本语言中,它的类型都是动态的,类型都是由运行时决定的,这样的确可以更灵活,使用起来也更方便。但是有时却带来一些在静态语言中所没有的隐患。
  在最初用C++时,我用的得动态类型,本来嘛,这是脚本语言特色之一,但是使用过一些脚本语言(如Ruby)后,发现动态类型常常出现一些运行时错误,特别严重是拼写错误,由于动态类型,这些不能算是语法上的错误,但是逻辑上出了问题。后来看到了Lua,慢慢重效率的思想抬头,决定使用静态类型,也算是Tenshi区别于其它脚本语言上的特点。
  但是解释器的运行都是执行期的,所以对于其实现来说,两者相较,动态类型可能更好做一些。而且可以享受到很多动态类型所带来的便利,例如一个如果表示一个整数没有设定,我们可以直接赋其为nil,而在C#中则得使用int?这样的可空类型。而且在函数定义时,也不须指定参数和返回值,其代码要简洁很多。
  考虑到这些便利之处,我想采取一种较为折衷的方案,默认是静态,可提高效率与一些编译期错误检查,另一方面再提供动态类型(称为Vishnu类型),以提高编程的灵活性与方便性。但这样同时提供两种类型,却同时加大了一些编程上的困难与语法设计上的复杂性,这必然又会使语言本身变成复杂。
  现在我的想法是,语义上是动态类型,但是在生成中间码时加入静态类型的优化。如假如a,b都是整数类型,则在c=a+b时,直接使用整数加法,而不是动态地判定。
  基本上,设计的思路变化为
动态类型->静态类型->动静折衷->语义为动态,编译时静态优化。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter