【发布时间】:2012-11-24 05:31:11
【问题描述】:
我为静态类型语言构建了一个小型编译器。在了解了静态语言的工作原理后,我很难进入像 groovy 这样的动态语言。
在构建编译器时,我知道一旦生成机器级代码,就无法更改它! (即它的run-time)。
但是,Groovy 是如何做到这些神奇的事情的,比如在如下语句中推断类型:
def a = "string"
a.size()
就我而言,groovy 必须在运行a.size() 行之前找到a 的类型为string。似乎它是在编译时这样做的(在构建 AST 时)!但是这种语言被称为动态的。
我很困惑,请帮我弄清楚。
谢谢。
【问题讨论】:
-
类型推断 != 动态类型
-
也许这个页面会有所帮助:groovy.codehaus.org/Runtime+vs+Compile+time,+Static+vs+Dynamic。基本上 groovy 可以在静态和动态类型之间切换。
标签: dynamic compiler-construction groovy static