Scala 为了在 JVM 上运行做出了哪些妥协?

2024-05-20

Scala 是一种很棒的语言,但我想知道如果它有自己的运行时,如何改进?
IE。由于 JVM 的选择,做出了哪些设计选择?


我所知道的两个最重要的妥协是:

  • 类型擦除 http://java.sun.com/docs/books/tutorial/java/generics/erasure.html ("反思类型 http://programming-scala.labs.oreilly.com/ch12.html”):必须管理清单 https://stackoverflow.com/questions/1094173/how-do-i-get-around-type-erasure-on-scala-or-why-cant-i-get-the-type-parameter绕过 Java 编译(出于向后兼容性的原因,独立于 JVM)。
  • collection of primitive type: e.g.: arrays http://www.scala-lang.org/sid/7

    Scala 2.8 中处理数组的新方案。该方案依赖于隐式转换和清单来集成数组,而不是装箱/拆箱和其他编译器魔法

在管理泛型类型(有边界)时,这是 JVM 的两个主要限制: Java JVM 不会保留泛型对象中的确切类型使用,并且它具有“原始”类型。


但你也可以考虑:

  • 尾调用优化是尚未得到 JVM 的完全支持 http://blog.richdougherty.com/2009/04/tail-calls-tailrec-and-trampolines.html, was 无论如何都很难做到 https://stackoverflow.com/questions/105834/does-the-jvm-prevent-tail-call-optimizations(然而 Scala 2.8 引入了the @tailrec注解 http://n4.nabble.com/scala-Manifest-implicits-and-apply-for-DSL-td2001264.html#a2001264)
  • UAP(通用接入原则) http://southernbits.com/index.php/category/jvm/scala/需要模拟(Java不支持),很快就会为价值持有者完成(@proxy) http://n4.nabble.com/scala-universal-access-principle-mutable-properties-and-ValueHolder-type-objects-td2004283.html#a2004283
  • 还需要模拟所有混合机制
  • 更一般地说,大量静态类型 http://creativekarma.com/ee.php/weblog/comments/static_typing_and_scala/Scala 引入的(对于大多数)需要在 Java 中生成:

为了覆盖尽可能多的可能性,Scala 提供了:

  • 常规班级类型,
  • 值类类型,
  • 不可空类型,
  • 单子类型,
  • 特质类型,
  • 单例对象类型(过程模块、实用程序类等),
  • 复合类型,
  • 功能类型,
  • 案例课,
  • 路径依赖类型,
  • 匿名类型,
  • 自我类型,
  • 输入别名,
  • 通用类型,
  • 协变泛型类型,
  • 逆变泛型类型,
  • 有界泛型类型,
  • 抽象类型,
  • 存在主义类型,
  • 隐式类型,
  • 增强类型,
  • 查看有界类型,以及
  • 当其他一切都失败时允许鸭子类型的结构类型
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala 为了在 JVM 上运行做出了哪些妥协? 的相关文章

  • C# 中 switch 的空情况是否与下一个非空情况合并? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 使用以下代
  • 为什么Scala语言中的++:运算符这么奇怪?

    我正在使用 运算符来获取两个集合的集合 但是我使用这两种方法得到的结果不一致 scala gt var r Array 1 2 r Array Int Array 1 2 scala gt r Array 3 scala gt r res2
  • 我在 Scala 中将资源放在哪里?

    在学习使用 Scala 和 JavaFX 时 我在 a 中遇到了以下代码ProScalaFX 示例 https github com jpsacha ProScalaFX val resource getClass getResource
  • Scala 泛型函数值(匿名函数)- 缺少参数类型(错误)

    我是 Scala 新手 Scala 代码运行器版本 2 7 7 final 我真的不明白为什么当我们使用高阶函数时它要求调用者提供参数类型 在下面的示例中 我有一个独立的对象 Util 具有一个功能 但在Main块中 调用者必须将参数类型传
  • 写入 Delta 表时检测到架构不匹配 - Azure Databricks

    我尝试将 small radio json json 加载到 Delta Lake 表 在此代码之后我将创建表 我尝试创建 Delta 表 但收到错误 写入 Delta 表时检测到架构不匹配 可能与分区有关events write form
  • Scala 2.10、Double.isNaN 和拳击

    在 Scala 2 10 中 是someDouble isNaN预计装箱 运行我的代码调用 isNaN通过反编译器 我仍然看到对double2Double在我的代码中 鉴于新的AnyVal在 2 10 中工作 我希望它不会比java lan
  • Either 相当于受检查的异常吗?

    从 Scala 开始并阅读有关Either我很自然地将新概念与我所知道的东西 在本例中来自 Java 进行比较 与之前有什么区别吗concept检查异常和Either 在这两种情况下 失败的可能性在方法中明确注释 throws或返回Eith
  • 在 Android 上运行 Java 字节码 - DalvikVM 之上的 Sun JVM

    由于 java 实现 OpenJDK 和Android的虚拟机DalvikVM是开源的 因此必须可以在Google的DalvikVM之上实现Sun的JavaVM 这将使运行基于 JVM 的应用程序和语言成为可能 Clojure Jython
  • 简单的 Scala actor 问题

    我确信这是一个非常简单的问题 但很不好意思地说我无法理解它 我有一个 Scala 值列表 我想使用演员来并行地对每个值进行一些 外部 调用 我想等到所有值都已处理完毕 然后继续 没有共享值被修改 有人可以建议吗 Thanks Scala 中
  • 将列表拆分为多个具有固定元素数量的列表

    如何将元素列表拆分为最多包含 N 个项目的列表 例如 给定一个包含 7 个元素的列表 创建 4 个组 最后一组可能包含较少的元素 split List 1 2 3 4 5 6 seven 4 gt List List 1 2 3 4 Lis
  • 哪些 ORM 与 Scala 配合得很好? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 JAVA_OPTS 环境变量?

    我该如何使用JAVA OPTS变量来配置Web服务器 Linux服务器 我该如何设置 Djava awt headless true using JAVA OPTS JAVA OPTS是一些服务器和其他 Java 应用程序附加到执行调用的标
  • Java / Scala Future 由回调驱动

    简洁版本 我怎样才能创建一个Promise
  • 逆变方法参数类型

    wiki 逆变方法参数类型 https en wikipedia org wiki Covariance and contravariance 28computer science 29 Contravariant method argum
  • 了解 Scala 中的中缀方法调用和缺点运算符(::)

    我对 Scala 编程语言相当陌生 当我遵循以下网站的讲义时 我正在尝试一些萦绕在我脑海中的东西 here http horstmann com sjsu cs152 04 closures1 html 我想我无法真正理解 cons 运算符
  • 如果我使用最新的 JDK 编译 Java 文件,较旧的 JVM 是否能够运行 .class 文件?

    字节码是否取决于创建它所用的 Java 版本 如果我在最新的 JDK 中编译了 java 文件 较旧的 JVM 是否能够运行 class 文件 这取决于三件事 The actual Java versions you are talking
  • 有没有办法捕获 Spark 中使用通配符读取的多个 parquet 文件的输入文件名?

    我使用 Spark 将多个 parquet 文件读取到单个 RDD 中 并使用标准通配符路径约定 换句话说 我正在做这样的事情 val myRdd spark read parquet s3 my bucket my folder parq
  • 如何发现 Scala 远程 Actor 已死亡?

    在 Scala 中 当另一个 远程 actor 终止时 可以通过设置 trapExit 标志并以第二个 actor 作为参数调用 link 方法来通知一个 actor 在这种情况下 当远程参与者通过调用 exit 结束其工作时 第一个参与者
  • 通用特征的隐式转换

    我正在实现一个数据结构 并希望用户能够使用任何类型作为密钥 只要他提供一个合适的密钥类型来包装它 我有这个关键类型的特质 这个想法是进行从基类型到键类型的隐式转换 反之亦然 实际上 只使用基类型 该特征看起来像这样 trait Key T
  • Scala:类似 Option (Some, None) 但具有三种状态:Some、None、Unknown

    我需要返回值 当有人询问值时 告诉他们以下三件事之一 这是值 没有价值 我们没有关于该值的信息 未知 情况 2 与情况 3 略有不同 示例 val radio car radioType 我们知道该值 返回无线电类型 例如 pioneer

随机推荐