对于 Scala 来说,类型擦除有什么优点吗?

2023-12-25

我听说过很多关于不同 JVM 语言的信息,这些语言仍处于蒸气软件模式,建议以某种方式实现具体化。我有一个半记得的(或者完全想象的,不知道是哪一个)的想法,我在某处读到 Scala 以某种方式利用 JVM 的类型擦除来完成具体化无法完成的事情。这对我来说并没有什么意义,因为 Scala 是在 CLR 和 JVM 上实现的,所以如果具体化导致某种限制,它会显示在 CLR 实现中(除非 CLR 上的 Scala 只是忽略具体化) 。

那么,对于 Scala 来说,类型擦除有好的一面吗?或者具体化是一个十足的好事吗?


See 奥拉·比尼的博客 http://olabini.com/blog/2010/07/questioning-the-reality-of-generics/。众所周知,Java 具有使用站点协方差,通过在您认为方差合适的地方打上一些问号来实现。 Scala 具有定义站点协变性,由类设计者实现。他说:

泛型是一个复杂的语言功能。就变得更加 当添加到已有的现有语言中时会变得复杂 子类型化。这两个功能不能很好地结合在一起 一般情况下,将它们添加到 语言。将它们添加到虚拟机中很简单,如果该机器 只需要提供一种语言 - 并且该语言使用相同的语言 仿制药。但泛型还没有完成。目前还不完全明白如何 正确处理并且新的突破正在发生(Scala 是 很好的例子)。此时就不能考虑泛型了 “做得对”。仿制药不仅只有一种类型——它们的不同之处在于 实施策略、功能和极端案例。

...

这一切意味着,如果您想将具体化泛型添加到 JVM,您应该非常确定该实现可以包含 两种静态语言都想在自己的领域进行创新 泛型的版本,以及所有想要创建一个 良好的实现和与 Java 的良好接口设施 图书馆。因为如果你添加具体化的泛型,则无法满足 这些标准,你会扼杀创新并使其如此 很难将 JVM 用作多语言 VM。

也就是说,如果我们在 JVM 中具体化泛型,那么这些具体化泛型很可能不适合我们真正喜欢的 Scala 功能,并且我们会陷入一些次优的困境。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对于 Scala 来说,类型擦除有什么优点吗? 的相关文章

随机推荐

  • 如何在 C# 中将固定字节/char[100] 转换为托管 char[]?

    在 C 中将固定字节或 char 100 转换为托管 char 的最佳方法是什么 我最终不得不使用指针算术 我想知道是否有更简单的方法 比如 memcpy 或其他方法 using System using System Collection
  • 使用故事板将数据从注释传递到详细视图 iOS

    我正在尝试将当前通过 Google Places API 加载到注释中的数据传递到我通过带有 segue 的故事板创建的详细视图控制器 单击每个注释上的详细信息披露后 我可以正确加载详细视图控制器 但我现在正在尝试传递数据 void map
  • IdentityServer4中的签名凭证是什么?

    我们正在使用 NET Core Web 应用程序实现 Identity Server 4 我浏览了身份服务器文档 配置身份服务器 使用 DI 时有以下行 AddTemporarySigningCredential 我试图理解这个签名凭证是什
  • 循环内的堆栈分配

    在 C 语言中 当你编写这样的代码时 void some function void while something char buf 4096 是否分配buf调用函数时会发生什么 或者循环的每次迭代都会发生单独的分配 如果我声明以下内容
  • 如何在 Android 中暂停录音?

    我的目标是暂停录制文件 我在 Android 开发者网站上看到它 但 Media Recorder 没有暂停选项 Java 支持以编程方式合并两个音频文件 但在 android 中它不起作用 从 Java 加入两个 WAV 文件 https
  • MapQuest API 密钥不再有效

    我们已经使用 MapQuest API 密钥几年了 但在过去 24 小时左右的某个时刻 地图已停止工作 我们收到错误 此密钥未获得此服务的授权 我登录后发现我们的旧密钥已被删除 并自动为新的 Open Maps API 生成了一个新密钥 我
  • Spark sql中如何使用outer apply

    我是 Spark sql 的新手 我正在将现有的 sql 查询转换为 Spark sql 我现有的 sql 查询包含需要在 Spark sql 中工作的外部应用函数 Spark sql 中的外部应用的替代方案是什么 非常感谢任何帮助 提前致
  • 为什么 0.1 + 0.2 在 JavaScript 中返回不可预测的浮点结果,而 0.2 + 0.3 则不会?

    0 1 0 2 gt 0 30000000000000004 0 2 0 2 gt 0 4 0 3 0 2 gt 0 5 我知道这与浮点有关 但这里到底发生了什么 根据 Eric Postpischil 的评论 这不是重复的 那只涉及为什么
  • 无法通过本地 IIS 进行 Windows 身份验证

    因此 我使用 Intranet 模板创建了一个新的 ASP NET MVC 项目 web config 包含适当的值 例如
  • Service Fabric 资源平衡器使用陈旧的报告负载

    在研究 Service Fabric 上的资源平衡器和动态负载指标时 我们遇到了一些问题 运行 devbox SDK GA 2 0 135 在 Service Fabric Explorer 门户和独立应用程序 中 我们可以看到平衡运行非常
  • 从 Android JNI 程序调用的 Log API 是什么?

    我想通过将日志消息插入到 logcat 来调试 JNI C 应用程序 执行此操作的 C API 是什么 像这样 include
  • 无法在 Android 中配置 Fiddler 代理来解密 HTTPS

    我正在尝试设置 Fiddler 代理来捕获来自 Xamarin 应用程序的流量 我已完成以下步骤 在Windows机器上安装了Fiddler v5 0 20173 50948 Set 允许远程计算机连接和港口8888 Set 捕获 HTTP
  • javascript - Express.js 中的 app.set('port', 8080) 与 app.listen(8080)

    我一直在尝试使用 Express js 来启动一个网站 起初 我使用的是app set port 8080 但浏览器无法连接到该页面 后来我把代码改成了app listen 8080 并且网页正常显示 这让我想知道 这两个函数有什么区别 a
  • R Shiny - 使用 updateSelectizeInput 优化页面加载时间

    我们的闪亮页面有多个selectizeInput控件 其中一些在下拉框中有很长的列表 因此 初始加载时间很长 因为需要预先填充所有下拉框selectizeInput控制 编辑 请参阅下面的示例 显示加载长列表如何影响页面加载时间 请复制以下
  • 图中的颜色点根据值向量的不同而不同

    我正在使用 R 绘制下图plot 功能 这是一个向量图shiftTime的时间转变 我有另一个向量intensity强度值范围从 3到 9 我想根据具有颜色渐变的这些值对图中的点进行着色 在示例中 我可以在实际绘制点的值上找到颜色 因此在本
  • 如何让 Knockout.js 设置属性的命名空间 URI?

    在 svg 中 如果我使用淘汰赛来设置xlink href属性为a节点 属性的命名空间设置不正确 因此a单击时不能用作链接 例如 请考虑以下包含两个链接的椭圆的 svg 有其一xlink href属性是硬编码的 另一个是通过淘汰赛设置的da
  • 在discord.py中我该如何制作才能使机器人仅在一台服务器上工作

    在discord py 中 我该如何让机器人只在一个上运行 有没有办法做到这一点 x channel id if x 12454431344645423 this is the channel id print hi 最简单的方法是不将其添
  • 如何确定 cv::Mat 是否为零矩阵?

    我有一个根据以下代码动态更改的矩阵 for It all frames begin It all frames end It ItTemp It subtract ItTemp Base NewData cout lt lt The siz
  • Android ArrayAdapter 和 JSONArray

    我是 Android 开发新手 考虑到 JSON Carrier 相对于 XML 的轻便性 我纯粹喜欢在我的简单应用程序中使用 JSON 对象和数组 我在使用 ArrayAdapter 填充 ListView 时遇到了挑战 这就是我克服的方
  • 对于 Scala 来说,类型擦除有什么优点吗?

    我听说过很多关于不同 JVM 语言的信息 这些语言仍处于蒸气软件模式 建议以某种方式实现具体化 我有一个半记得的 或者完全想象的 不知道是哪一个 的想法 我在某处读到 Scala 以某种方式利用 JVM 的类型擦除来完成具体化无法完成的事情