有人知道吗 管理 在.NET上实现的编程语言,其中包含一个专门的数据类型,该数据类型未映射到通用类型系统/fcl/bcl或没有发货的.NET等效的一种(例如,已发货的标准类型,例如System.Strys.String,System.int32) )?

这个问题可能是从某人移植编译器的角度出现的(尽管我没有这样做)。

它是否像在BCL/FCL之外为其专门类型创建新的数据类型的语言一样简单?如果是这样,则这种阻碍了编程语言之间的互操作性,这些语言否则习惯于将所有内置数据类型映射到BCL/FCL中的内容,例如Visual Basic和C#?

我可以想象,如果某种晦涩的语言编译器被移植到.NET上,则可能会出现这种情况,该编译器没有直接将其隐式数据类型直接映射到已发货框架中。

总体上如何支持或允许这种情况?编译器和通用语言运行时的期望是什么?

有帮助吗?

解决方案

.NET的Delphi实现了Delphi语言的类变量概念(可以保存对类类型的引用),虚拟类方法和虚拟构造函数(通过类参考调用)。这些在CLR中没有任何直接的类似物,CLR中的静态方法都不是虚拟的,并且构造函数不能虚拟。

由于CLR拥有如此丰富的运行时类型信息,因此在CLR中不需要这些文物。如果要在代码中在运行时构建一个类型的实例,该实例在编译时不知道确切类型,则可以使用反射或其他技术来完成此操作。 Delphi语言的这些功能从限制运行时类型信息的天然编译的Win32产品中增长。这一切都是在.NET 1.0和1.1上实现的,早在DLR之类的东西出现之前。

这些Delphi语言功能可以使用反射在CLR中模仿,但是出于性能原因,我们选择通过创建“元类”类型直接在IL中实现它们,该类型是Delphi中每种类型的辅助类型。如果Delphi代码将Delphi类类型分配给类参考变量,我们生成了IL代码,将相应Meta类的Singleton实例分配给该变量。通过类参考变量调用虚拟方法调用代码为iL虚拟方法在元类实例上调用,后者在相应的类类型中反弹到实际的静态方法实现。这允许类虚拟方法调用仍然以多态性能(调用适合拨打调用的实例类型的实现),并且以最低的运行时性能成本。该实现也是类型的安全性和可验证的。

这些虚拟类方法功能仅适用于Delphi语法中声明的类,仅在Delphi语法中使用。我相信,元类型被标记为非CLS符合性,因此其他.NET语言(很可能)在使用Delphi中创建的类时会忽略它们。其他.NET语言无法利用这些Delphi特定的语言功能(除非开发人员真正确定并爬过脚手架,以使适当的电话/通过丑陋的命名元类拨打))

通常,您不应该期望其他语言会使用/为您的语言创建的非CLS工件。如果您希望其他语言使用由您的语言创建的内容,则需要弄清楚如何以合理的方式以合理的方式表示您的特殊调味料。这可能取决于特殊调味料的性质。

Delphi虚拟类方法可作为普通静态方法可用于其他.NET语言。多态性的性质并没有暴露于其他.NET语言,这主要是因为CLS(或其他语言)根本无法表达这种概念。

理想情况下,每种语言都可以很好地表达每个可想象的结构。但实际上并非如此。某些图形功能更容易在笛卡尔坐标中表达,而另一些图形功能则通过使用极坐标大大简化。编程语言也是如此。

即使在CLR上实施,也可以以您自己的语言发明新的表达方式。只需确保清楚地定义您的类型在语言之外工作的程序员的外观,如果您期望他人的语言代码被他人调用。您的实现将具有二元性:您的语言用户的外观以及您的语言以外的用户的外观。

脚注:我认为这不适用于.net,Delphi Prism的新Delphi产品。我认为Delphi Prism不支持虚拟类方法。

其他提示

并不真地。任何语言都有必须能够在商品硬件上运行才能成功的最终负担。对于可以在当前硬件上有效处理的类型,CTS是一个很好的模型。

可能需要的是大量的运行时支持,以适应语言的类型系统和CLI。一个经典的例子是DLR,即Python和Ruby等动态语言的运行时支持系统。从本质上讲,它可以执行这种语言解释器必须做的事情,它具有可比的perf。没有技巧,顺便说一句,一切都是纯C#代码。

当语言具有根本无法使用的功能时,这样的运行时支持库可能会变得慢。例如,多个继承。它被CLR和JIT编译器本地“支持”。您可以使用任何使用MI的标准符合标准的C ++程序,并使用 /CLR选项通过C ++编译器运行,最终将获得一个包含纯ill的组件,该组件将在运行时汇总出来。您无法将结果称为托管程序,它将无法验证,并且不会使用垃圾收集器。解决将需要一个必须模拟多重继承的支持库。可能,我怀疑这会具有竞争力。

好吧,有C ++/CLI。在那里,您可以创建.NET中不可见的C ++类。那是你追求的吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top