据我所知,Gosu 只是用于 JVM 的 C#(这是一件好事)。这是真的吗?Gosu 和 C# 之间有什么区别(除了类库和它在 JVM 上运行的事实)?
2 回答
我们没有将 Gosu 构建为 JVM 的一种或另一种语言。相反,我们将 Gosu 构建为对 JVM有用的语言。此外,我们认识到 Gosu 需要熟悉大量对命令式、面向对象模型最熟悉的现有程序员。为了实现这一点,我们大量借鉴了几种语言,例如 Java、C#、EcmaScript、Ruby 和其他一些语言。我们认为,结果是一种在 JVM 上具有独特定位的语言。
然而,Gosu 的独特之处在于它的开放类型系统。
Gosu 的类型系统由可配置数量的类型加载器组成。类型加载器的主要职责是解析其域中的类型名称并返回 Gosu 的 IType 接口的实现。这就是 Gosu 最独特的地方——它的类型系统对其他领域开放,以一流的表示形式参与。我经常使用术语 DST(域特定类型)来理解这个想法。例如,Gosu 不区分 Gosu 类、Java 类或 XML 类型或你有什么;它们都只是 Gosu 编译器的类型。查看DynamicType 示例在下载中了解开放类型系统提供的功能和广度。本质上,该示例演示了 C# 的“需要的动态类型”可以简单地成为 Gosu 中的新类型加载器域。或者查看 Ronin 框架,了解 Web 和数据库域如何轻松地无缝映射到 Gosu。
重要的是要了解并非 Gosu 中的所有类型加载器域都需要生成字节码。那些确实实现了获取相应 Java 类的接口。那些不分别为反射 MethodInfo 和 PropertyInfo 评估提供调用处理程序和属性访问器的那些。注意所有类型都提供 TypeInfo,参见 IType.getTypeInfo()。例如,解析器使用 TypeInfo、MethodInfo 等抽象作为不同类型之间公平竞争环境的手段。然而,在运行时,除非类型提供 Java 字节码类,否则 MethodInfos 和 PropertyInfos 也负责处理调用。
不。如果您查看“显着差异”页面(Java 和 Gosu 之间的差异),您会看到很多类似于 C# 的东西,但也有 C#中没有的东西,例如不区分大小写和制作半-冒号可选。还有一些东西当然没有提到,但它们是 C# 的一部分:
- 自定义值类型
- 运算符重载
- LINQ
- 需要时动态输入
我认为将 Gosu 视为“用于 JVM 的 C#”而不是“混合了 Java、C# 和其他语言的一些位的 JVM 语言”是错误的。