Scala(至少在JVM https://en.wikipedia.org/wiki/Java_virtual_machine) uses 类型擦除 https://stackoverflow.com/tags/type-erasure/info以实现 Java 兼容性。这feature https://softwareengineering.stackexchange.com/questions/55047/what-is-the-greatest-design-flaw-you-have-faced-in-any-programming-language is widely https://stackoverflow.com/questions/1357906/is-it-possible-for-scala-to-have-reified-generics-without-changing-the-jvm held https://stackoverflow.com/questions/8582479/overloading-generic-event-handlers-in-scala to https://stackoverflow.com/questions/1094173/how-do-i-get-around-type-erasure-on-scala-or-why-cant-i-get-the-type-paramete suck https://stackoverflow.com/questions/8605329/reified-generics-in-scala-2-10. 在 JVM 上修复这个问题会很困难 https://stackoverflow.com/questions/1357906/is-it-possible-for-scala-to-have-reified-generics-without-changing-the-jvm.
Does Scala 的 .NET 实现 http://www.scala-lang.org/node/168使用它们?如果不是,可以吗?否则使用具体化会导致什么问题?
这项工作正在进行中,小心不要破坏 JVM 和 .NET 之间的 Scala 语义。
早在 2011 年,我就在 scala-tools 邮件列表上提出了这个问题,Miguel Garcia 给出了答案,他在其中概述了总体情况:
一些引言:
(1) Scala.Net 预览版目前的用途。正如你所注意到的,
擦除阶段也作为管道的一部分运行。这是一个
预览版的“功能”,必须包含的“功能”
因为还没有对 CLR 泛型的支持(更多关于这个
以下)。然而,运行 JVM 风格有一个很大的优势
Scala.Net 中的擦除:所有依赖于的 Scala 程序
Scala 库已经可以在 .Net 上编译,无需等待
为 CLR 泛型做好准备。那些依赖Java JDK的程序
也可以编译,但需要 IKVM 对 JDK API 的支持
问题[1]。
(2) Scala.Net 中对 CLR 泛型的支持。主要动机是
支持它正在获得与现有组件的互操作性。在
获得互操作性后,将注意不要脱离
来自 Scala 语义。换句话说,任何有效的 Scala 程序都会
在 JVM 和 .NET 上运行并产生相同的结果。这给我们带来了
正在进行的工作[2]。最初的原型仅处理 C#
Scala 的子集。所以现在我要谈谈剩下的事情。这比工作还多
最初是预期的,但覆盖整个语言很重要。
关于与 .NET 程序集互操作的更多评论,请参见
特定的本土问题。是的,CLR 程序集可以使用
“native int”(不同CPU上的不同大小),P/Invoke
由 .dll 等导出的 C 函数。 Scala.Net 的目的不是做
那种低级的诡计。感兴趣的程序集互操作性是
在“通用语言规范”的级别,即什么
通常从任何 C#、VB.NET 等编译器获取(“通常”,即
除非使用“[DllImport]”属性和相关的 C++-isms)。
引用 CLI 规范:
--- 开始引用 --- 公共语言规范 (CLS) -- CLS 是语言设计者和框架之间的协议(即
类库)设计师。它指定了 CTS 的一个子集(通用
类型系统)和一组使用约定。
语言为用户提供了最大的访问能力
通过至少实施 CTS 的那些部分来构建框架
CLS 的一部分。同样,如果满足以下条件,框架将得到最广泛的使用:
他们公开导出的方面(例如,类、接口、方法、
和字段)仅使用属于 CLS 一部分且遵循以下规则的类型
CLS 约定。
--- 引用结束 ---
请参阅整个线程:
https://groups.google.com/forum/?fromgroups#!topic/scala-tools/JDjstK1_uvM https://groups.google.com/forum/?fromgroups#!topic/scala-tools/JDjstK1_uvM
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)