最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Scala 3.0 发布,有什么新功能 or 改进?

    正文概述 掘金(ShinyFace)   2021-05-17   1058

    即将到来的、令人兴奋的Scala 3新版本带来了许多改进和新功能。在这里,我们为你提供一个最重要变化的快速概述。如果你想深入挖掘,还有一些参考资料供你使用。

    • The Scala 3 Book:针对的是刚接触Scala语言的开发者。
    • 语法概要:为你提供了新语法的正式描述。
    • 语言参考: 详细描述了从Scala 2到Scala 3 的变化。
    • 迁移指南 :为你提供了从Scala 2迁移到Scala 3的所有必要信息。

    Scala 3 的新内容

    Scala 3是对Scala语言的一次彻底改造。在其核心部分,类型系统的许多方面都被改变了,变得更加原则化。虽然这也带来了令人兴奋的新功能(比如联合类型),但首先意味着类型系统(甚至)更少地妨碍你,例如类型推理和重载解决都得到了很大的改善。

    语法改进

    除了许多(小的)清理,Scala 3的语法还提供了以下改进。

    • 为控制结构提供了一种新的 "安静 "语法,如if,while, 和for (新的控制语法
    • new 关键字是可选的_(又称_ 创作者应用)。
    • 可选的大括号,支持无干扰、缩进敏感的编程风格
    • 将类型级通配符从_ 改为?
    • Implicits(和它们的语法)被大量修改。

    上下文抽象

    Scala的一个基本核心概念是(在某种程度上仍然是)为用户提供一小部分强大的功能,这些功能可以被组合成巨大的(有时甚至是不可预见的)表达能力。例如隐含的特性被用来模拟上下文抽象、表达类型级计算、模拟类型类、执行隐式强制、编码扩展方法等等。 从这些用例中学习,Scala 3采取了一个稍微不同的方法,关注意图而不是机制。 Scala 3没有提供一个非常强大的特性,而是提供多个定制的语言特性,允许程序员直接表达他们的意图。

    • 在上下文信息上进行缩减。使用子句允许程序员对调用上下文中可用的信息进行抽象,这些信息应该以隐式方式传递。作为对Scala 2隐含信息的改进,使用子句可以按类型指定,将函数签名从从未明确提及的术语变量名中解放出来。

    • 提供类型类实例。给定实例允许程序员定义某种类型的_典型值_。这使得使用类型类的编程更加直接,而不会泄露实现细节。

    • 追溯性地扩展类。在Scala 2中,扩展方法必须使用隐式转换或隐式类进行编码。相比之下,在Scala 3中,扩展方法现在直接内置于语言中,导致更好的错误信息和改进的类型推理。

    • 将一种类型视为另一种类型。隐式转换已经被重新设计为类型类的实例Conversion

    • 更高阶的上下文抽象。上下文函数的_全新_特性使上下文抽象成为一流的公民。它们是库作者的一个重要工具,允许表达简洁的特定领域语言。

    • 来自编译器的可操作反馈。如果一个隐式参数不能被编译器解决,它现在会提供可能解决这个问题的导入建议。

    类型系统改进

    除了极大地改进了类型推理,Scala 3的类型系统还提供了许多新的功能,为你提供了强大的工具来静态地表达类型中的不变量。

    • 枚举。枚举已经被重新设计,以便与案例类很好地融合,并形成表达代数数据类型的新标准。

    • 不透明的类型。隐藏在不透明类型别名后面的实现细节,而不需要为它的性能付出代价!不透明类型取代了值类,并允许你建立一个抽象的屏障,而不会造成额外的装箱开销。

    • 交叉和联合类型。将类型系统建立在新的基础上导致了新的类型系统特征的引入:交叉类型的实例,如A & B ,是A B 的实例。联合类型的实例,如A | B ,是AB 的实例_。_这两个结构允许程序员在继承层次结构之外灵活地表达类型约束。

    • 从属函数类型。Scala 2已经允许返回类型依赖于(值)参数。在Scala 3中,现在可以对这种模式进行抽象,表达依赖性的函数类型。在类型type F = (e: Entry) => e.Key ,结果类型_取决于_参数

    • 多态的函数类型。和从属函数类型一样,Scala 2支持允许类型参数的方法,但不允许程序员对这些方法进行抽象。在Scala 3中,多态函数类型(如[A] => List[A] => List[A] )可以抽象出除值参数外还接受_类型_参数的函数。

    • Type lambdas。在Scala 2中需要用编译器插件来表达的功能,现在在Scala 3中成为了一流的功能:Type lambdas是类型级别的函数,可以作为(更高类型的)类型参数传递,而不需要辅助的类型定义。

    • 匹配类型。Scala 3提供了对类型匹配的直接支持,而不是使用隐式解析来编码类型级计算。将类型级计算集成到类型检查器中,可以改进错误信息,并消除对复杂编码的需求。

    重新设计了面向对象的编程

    Scala一直处于函数式编程和面向对象编程的前沿--而Scala 3在这两个方向上都推动了边界的发展!上述类型系统的变化和上下文抽象的重新设计使得_函数式编程_比以前更容易了。 同时,以下新特性使得结构良好的_面向对象设计_成为可能,并支持最佳实践。

    • 传承。特质更接近于类,现在也可以接受参数,使其作为模块化软件分解的工具更加强大。
    • 为扩展做计划。在面向对象的设计中,扩展那些不打算扩展的类是一个长期存在的问题。为了解决这个问题,开放类要求库设计者_明确地_将类标记为开放。
    • 隐藏实现细节。实现行为的实用特征有时不应该是推断类型的一部分。在Scala 3中,这些特质可以被标记为透明的,向用户隐藏继承性(在推断类型中)。
    • 构成高于继承。这句话经常被引用,但实现起来却很繁琐。Scala 3的导出条款则不然:与导入条款对称,导出条款允许用户为对象的选定成员定义别名。
    • 不再有NPEs。Scala 3比以往任何时候都更安全:显式nulls将null ,帮助你静态地捕捉错误;安全初始化的额外检查可以检测对未初始化对象的访问。

    元编程

    Scala 2中的宏只是一个实验性的功能,而Scala 3为元编程提供了强大的工具库。宏教程中包含了不同设施的详细信息。特别是,Scala 3为元编程提供了以下功能。

    • 内联。作为基本的起点,内联功能允许在编译时减少数值和方法。这个简单的功能已经涵盖了许多使用情况,同时也为更高级的功能提供了入口。
    • 编译时操作。该包 scala.compiletime包含了额外的功能,可以用来实现内联方法。
    • 引述代码块。Scala 3增加了代码准引号的新功能,为构建和分析代码提供了方便的高级接口。构建加一加的代码就像'{ 1 + 1 } 一样简单。
    • 反射API。对于更高级的用例,quotes.reflect提供了更详细的控制来检查和生成程序树。

    如果你想进一步了解Scala 3中的元编程,我们邀请你参加我们的教程。


    起源地下载网 » Scala 3.0 发布,有什么新功能 or 改进?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元