.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 中的具体化泛型 的相关文章

  • 主动解决方案平台 VS 项目平台 VS 目标平台

    我希望我的应用程序是针对 x64 构建的 因为我使用的是 x64 dll 在配置管理器中 我已将 活动解决方案平台 设置为 x64 但是在项目列表中平台设置为 x86 项目属性中的 平台目标 也设置为 x86 我完全困惑有三个地方可以设置目
  • 在 XAML 中设置依赖项属性时,为什么会在运行时绕过 .NET 属性包装器?

    我正在阅读 Adam Nathan 的书 WPF 4 Unleashed 第 82 页有以下警告 在 XAML 中设置依赖属性时 NET 属性包装器会在运行时被绕过 虽然 XAML 编译器依赖于 编译时的属性包装器 WPF 调用底层 直接在
  • 更改实体的可访问性

    我想建立一个内部实体 我已将实体 其标量属性和导航属性更改为内部 当我尝试构建它时出现此错误 错误 6036 EntityType 文件 具有 内部 可访问性 EntitySet 文件 具有具有 公共 可访问性的 get 属性 Entity
  • 多选DataGridView没有CTRL键没有闪烁?

    我在表单 Form1 vb 上有一个 DataGridView 控件 需要允许用户在不使用 CTRL 键的情况下多选行 没有可用的键盘 他们使用触摸屏 我已启用 mutliselect 属性 并在 Form 类中包含以下代码 我的 Data
  • 需要澄清令人困惑的 Http4s 消息类型 `Response[F]` / `Request[F]`

    我很难理解为什么Request and Response参数化为F 类似的东西是猫效应数据类型资源 从文档中 https typelevel org cats effect docs std resource https typelevel
  • .NET 或 Windows 同步原语性能规范

    我目前正在写一篇科学文章 我需要非常准确地引用 有人可以向我指出 MSDN MSDN 文章 一些已发表的文章来源或一本书 我可以在其中找到 Windows 或 NET 同步原语的性能比较 我知道这些是按性能降序排列的 互锁 API 关键部分
  • 打印任何类型的数组和列表的通用方法[重复]

    这个问题在这里已经有答案了 每当我调试一段涉及整数 双精度 字符串等数组或列表的代码时 有时我更喜欢打印它们 我为此所做的是为不同类型编写重载的 printArray printList 方法 for e g 我可能有这 3 种方法来打印各
  • 如何使用实体框架设置连接字符串

    我将 EF6 与 MySQL 结合使用 并有一个用于多个数据库的模型 我希望能够在我的表单中设置连接设置 如何以编程方式设置模型的连接字符串 你应该使用EntityConnectionFactory这就是您所需要的 public strin
  • 推断“x => { throw .. }”的 Lambda 与重载方法中的 Func 匹配吗?

    我不明白为什么 C 最终在以下 LINQPad 代码中执行不正确的扩展方法 void Main Actual Sync Action Expected Sync Action Run x gt x Dump Actual Async Tas
  • 如何在 Visual Studio 中调试时强制异常?

    我正在调试模式下运行我的应用程序 并且我想手动抛出异常 即不是从代码内部抛出异常 有什么办法可以做到这一点吗 当然 跑步throw new Exception My forced exception 在命令或立即窗口中不起作用 编辑 我希望
  • 从 .NET 文本中提取关键字

    我需要计算每个关键字在字符串中重复出现的次数 并按最高次数排序 NET 代码中用于此目的的最快算法是什么 编辑 下面的代码将唯一标记与计数分组 string target src Split new char var results tar
  • 更改 NHibernate Session.Save 命令超时

    我们有几个长时间运行的后端进程 其运行时间超过默认的 30 秒 我们的NHibernate版本是2 0 1 4000 Spring NET是1 2 0 20313 NHibernate 通过 Spring NET 进行配置
  • .Net 6 控制台应用程序:WebApplication.CreateBuilder 与 Host.CreateDefaultBuilder

    我正在研究 NET 6 并希望构建一个简单的控制台应用程序 并进行一些依赖项注入 据我所知 为了使启动 现在只是程序 文件更具可读性 已经做了很多工作 让我有点困惑的是 所有改进似乎都是针对 API 项目中使用的 WebApplicatio
  • Java 泛型/类型调度问题

    考虑以下程序 import java util List import java util ArrayList public class TypeTest public static class TypeTestA extends Type
  • 如何在WebBrowser控件中注入Javascript?

    我试过这个 string newScript textBox1 Text HtmlElement head browserCtrl Document GetElementsByTagName head 0 HtmlElement scrip
  • 如何在每行中添加行号?

    假设这些是我的数据 Maps and Reduces are two phases of solving a query in HDFS Map is responsible to read data from input location
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 将 System.Windows.Forms.Keys 序列转换为 Char

    有没有办法转换由 Keys 枚举表示的击键序列 即System Windows Forms Keys 在一个字符中 例如 Keys Oem4进而Keys A产生 char 它一定存在于 WinAPI 中的某个地方 因为当我在文本框中按下按键
  • 如何在.NET Core上直接调用F#编译器?

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

随机推荐

  • 使用 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以实