.NET/CLR 上的 Scala 中的具体化泛型

2024-01-02

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(使用前将#替换为@)

.NET/CLR 上的 Scala 中的具体化泛型 的相关文章

  • 如何让CQRS适应项目? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我发现了一个新术语 名叫CQRS 命令查询职责分离 http martinfowler com bliki CQRS html其中指出 概念模型
  • 在Python3.6中调用C#代码

    由于完全不了解 C 编码 我希望在我的 python 代码中调用 C 函数 我知道有很多关于同一问题的问答 但由于一些奇怪的原因 我无法从示例 python 模块导入简单的 c 类库 以下是我所做的事情 C 类库设置 我使用的是 VS 20
  • 在 Scala 中反转地图的优雅方法

    目前正在学习Scala 需要反转Map 来进行一些反转值 gt 键查找 我一直在寻找一种简单的方法来做到这一点 但只想到了 Map origMap map kvp gt kvp 2 gt kvp 1 有人有更优雅的方法吗 假设值是唯一的 则
  • 无法转换类型为“NHibernate.Collection.Generic.PersistentGenericBag”的对象

    public List
  • .NET PInvoke 可以从用户指定的目录动态加载本机 dll 吗?

    我有一个 NET 应用程序 需要加载一个本机库 其位置由用户指定 PInvoke 看起来只会从全局搜索路径 或编译时指定的路径 加载 最好的方法是创建一个在运行时调用 LoadLibrary 的 C CLI 程序集吗 C CLI 会比 C
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • 如何在.NET Core上直接调用F#编译器?

    UPD 我想直接从 NET Core SDK 调用 F 编译器 即 fsc 我了解 dotnet build co 但当我只需要编译一个简单的问题时 即 fsc file fs 就足够的情况下 我不想涉及它们 我尝试在 NET Core S
  • 如何在scala中生成n-gram?

    我正在尝试在 scala 中编写基于 n gram 的分离新闻算法 如何为大文件生成 n gram 例如 对于包含 蜜蜂是蜜蜂中的蜜蜂 的文件 首先它必须选择一个随机的 n 元语法 例如 蜜蜂 然后它必须寻找以 n 1 个单词开头的 n 元
  • 在 Scala 中创建任意类作为 monad 实例

    为了使任何东西都可以在 monad 上下文中操作 如果使用 Haskell 我只需在任何地方为给定类型添加类 Monad 的实现 所以我根本不接触数据类型定义的来源 像 人造的东西 data Z a MyZLeft a MyZRight a
  • 将新行添加到表后如何更新 datagridview 的行列表

    我有一个 datagridview 在表单的加载事件上填充了表集合 我还有一个由用户填写的表单 并将新行添加到表 onclick 事件 我想在向该表添加新行后更新 datagridview表 我使用绑定到绑定数据源的 sqladapter
  • 是否需要连续编号?

    我正在开发一个 winform NET 应用程序 其中包括订单 发票 服务订单 票务等 这些实体在对其 ID 进行编号时是否必须按顺序排列 国际海事组织没有 以一个订单为例 它只有通过业务层才有效 在此过程中 可能已经创建了另一个订单 批准
  • 使用自定义 TTF 字体进行 DrawString 图像渲染

    我在服务器端使用 GDI 创建图像 并将其传输到用户的浏览器 没有一个标准字体符合我的要求 因此我想加载 TrueType 字体并使用此字体将字符串绘制到图形对象 using var backgroundImage new Bitmap b
  • WPF Window 类的 IDisposable 成员

    当我将 IDisposable 类成员添加到 Windows 窗体 Form 类时 我将处置代码添加到 Form 的 Dispose 方法中 当我将 IDisposable 类成员添加到 WPF Window 类 不是 IDisposabl
  • 在 C++/CLI 中实现 IEnumerable

    我在实施时遇到问题IEnumerable
  • DropDownListFor 具有带有 - 属性名称的自定义属性?

    问题 我需要创建一个像这样的下拉列表
  • 如何从DataFrame中获取最后一行?

    我有一个DataFrame 该DataFrame有两列 value 和 timestamp timestmp 是有序的 我想获取DataFrame的最后一行 我该怎么办 这是我的输入 value timestamp 1 1 4 2 3 3
  • 从另一个命令 Handle() 方法中调用命令

    嗨 我正在使用简易注射器 https simpleinjector orgDI 库并一直在关注一些关于围绕命令模式设计的架构模型的非常有趣的材料 同时 在我的架构的命令方面 https cuttingedge it blogs steven
  • 如何将 JVM 选项传递给 SBT 以在运行应用程序或测试用例时使用?

    我想在运行我的应用程序或通过 SBT 对应用程序进行测试时指定 JVM 选项 具体来说 我需要能够为 JVM 提供 Djava security policy 参数 以便加载我的策略并用于测试 我怎样才能用 SBT 做到这一点 With x
  • 单元测试验证失败

    我正在运行我的单元测试PostMyModel路线 然而 在PostMyModel 我用的是线Validate
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl

随机推荐

  • 使用 IE 和 Chrome 匹配正则表达式时 javascript 挂起

    我的正则表达式有问题 w w 当它尝试测试它是否与字符串匹配时 ffffffffffb3ffffffffffafffffffffffabffffffffffc2ffffffffffa7e 它会导致 IE 和 Chrome 挂起 不过FF的效
  • 在iPhone应用程序中按顺序显示图像

    I want to display a series of images like 谁能告诉我 是否有任何API可以让我显示演示图像中所示的图像 这是一些封面流程
  • Velocity 2.0:NoClassDefFoundError:org/apache/velocity/runtime/log/CommonsLogLogChute

    在使用 Velocity 2 0 启动我的 Web 应用程序时 我收到以下错误 Caused by java lang NoClassDefFoundError org apache velocity runtime log Commons
  • 在x64和x86环境中使用PresentationCore和WindowsBase dll

    PresentationCore dll 和 WindowsBase dll 均包含在 Microsoft NET Framework 3 0 中 并且每个 dll 的两个版本都安装到磁盘上 C Program Files Referenc
  • 调用未定义的方法 Closure::query()

    我有以下关闭 dbhProvider function Create connection instance new mysqli localhost USERNAME PASSWORD BLOG return instance 我有以下实
  • Swisscom 应用程序云更新后 Spring Boot HTTPS 重定向循环

    我们正在使用 Swisscom Application Cloud 来运行我们的 Spring Boot 应用程序 在 2018 年 2 月 22 日 迁移到多云环境 之后 瑞士电信状态页 https status developer sw
  • Jquery 隐藏多个div onclick

    我正在制作一个健身应用程序 在每个锻炼页面上我都有一个显示 信息 数据输入 和 进度 的按钮 然而 当单击按钮时 这工作正常 div 层彼此重叠并同时显示 我想要的是主要显示的信息 但当用户单击其他按钮时 其他按钮 div 被隐藏 因此一次
  • spring3 mvc @Valid注释找不到

    我尝试使用 Valid注释 但eclipse总是给出 Valid无法解析为类型 错误 我正在使用 spring3 库 我已将 hibernate validator 4 1 0 Final jar 导入到 WEB INF lib 目录中 然
  • LNK2019:VS 单元测试中未解析的外部符号

    我收到标题中所述的错误 我保证了以下几点 包含目录 包含库和附加包含目录设置正确 在属性中 子系统设置为 CONSOLE 对我的代码的评论 LifeLib 是一个项目 其中包含我想测试一些方法的类 这些类在命名空间 LifeLib 中定义
  • 滚动时保持 SVG 对象静态

    在我的 Web 应用程序中 我正在生成一个 SVG 文件 其中包含一个 标题 当用户向下滚动图像时 我希望该文件在窗口顶部保持可见 我可以想到两种方法来实现这一目标 但我正在寻找任何其他好主意 我的两个想法是 生成两个单独的 SVG 一个是
  • vb.net 中的 Excel 文件

    如何在 vb net 中打开 编辑 读取 Excel 列 例如 我想知道 B 列的值 直到它包含值的单元格 谢谢 使用 ADO Net Here s a link http www dotnetjohn com articles aspx
  • PostgreSQL - 按时间戳值分组?

    我有一张表 其中存储了采购订单 每行都有一个时间戳 指示下订单的时间 我希望能够创建一个报告 指示每天 每月或每年的购买数量 我想我会做一个简单的 SELECT COUNT xxx FROM tbl orders GROUP BY tbl
  • 如何抑制绘制树状图但仍然在seaborn中聚类?

    我想在seaborn中绘制一个聚类图 按行和列进行聚类 我不想绘制树状图 Setting row cluster False or col cluster False删除树状图 但也停止聚类 如何仍然进行 2D 聚类但抑制树状图 这个问题
  • 如何在 iOS 中查找 Couchbase Mobile DB 文件?

    我想在 iOS 中找到 Couchbase Mobile DB 文件位置 并请描述如何打开 db 文件 Thanks 如果您使用的是 CBM 1 4 或更早版本 您可以按照此处所述找到 cblite2 db 文件的位置 https deve
  • 如何将具有固定值的路径缩放为动态可组合大小?

    我有一个简单的Box我想将其剪辑为自定义形状的可组合项 但每当我尝试它时 形状的尺寸仍然非常僵硬且很小 我尝试使用在路径级别上进行缩放Matrix 但无济于事 这是示例 const val clockHand M0 80 52L2 86l2
  • Flex 4 Spark 面板有一个丑陋的灰色顶部

    我有一个 Flex 4 Spark 面板 我通过 PopUpManager 弹出 但它的顶部有一个我无法摆脱的灰色部分 那是什么以及如何删除它 UPDATE 下面是一个示例面板 我只是简单地打电话PopUpManager addPopUp
  • C 中 scanf 中的扫描集行为

    我尝试用 scanf 中的 scanset 做一些事情 但卡在某个地方 当我写的时候 char s1 250 scanf A Z s1 input AHJHkiuy Output AHJH 有了这个 scanf n s1 input abc
  • Joi 验证显示自定义错误消息

    嗨我正在使用 hapi joi 15 1 1 不幸的是 我现在无法更新到最新的 Joi 版本 这是我的验证架构 const schema name Joi string allow max 30 addLine1 Joi string re
  • 使用 NSTask 创建 zip 存档,其中包含包含文件的第一级文件夹

    我的方法适用于从先前创建和填充的临时目录中压缩文件 NSURL destURL self archiveDestURL NSTask task NSTask alloc init task setCurrentDirectoryPath s
  • .NET/CLR 上的 Scala 中的具体化泛型

    Scala 至少在JVM https en wikipedia org wiki Java virtual machine uses 类型擦除 https stackoverflow com tags type erasure info以实