`
dengkane
  • 浏览: 42377 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Scala语言会取代Java的吗?

阅读更多

  曾经有人问Java的创始人高斯林这样一个问题,“除了Java语言以外,您现在还使用JVM平台上的哪种编程语言?”他毫不犹豫的说是Scala。

 

  Scala到底是什么?在目前众多的JVM语言当中,Scala无疑是最引人注意的语言之一。Scala是一个静态语言,更适合大型工程项目,Scala直接编译成Java字节码,性能接近Java。Scala是一个多范式的语言,你可以混合使用函数式和面向对象编程,混合使用可变类和不变类,混合使用Actor和传统的Java并发库。

 

  短短一个月的时间,Scala于本月冲进了TIOBE的前五十名。一个 Twitter 的开发人员说过,Scala 将会成为现代 Web2.0 的发起语言。LinkedIn 也用这种语言。同样许多其他大的公司如 Sony Picture, EDF, SAP 也开始使用这种语言。为什么Scala发展这么迅猛,可以获得如此热烈的社区支持。

 

  曾冠东还表示,Scala不是Java的杀手,它无法取代Java的地位,也突破不了JVM的限制、Java实现不了的功能它也实现不了。我们可以将Scala形象的理解成大量语法糖的Java。

 

  Scala 开发团队发布了最新的2.9.2稳定版本,Scala 语言的特性有许多,例如高阶函数和对象、抽象类型绑定,actor 使得函数在 Scala 中能是一个子类成为可能,Scala 中的设计模式使得面向对象和函数编程无缝结合。Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的 Actor 模型应用。它已经成功运用在电信行业。Spark 是一种可扩展的数据分析平台,它整合了内存计算的基元,因此,相对于 Hadoop 的集群存储方法,它在性能方面更具优势。Spark 是在 Scala 语言中实现的,并且利用了该语言,为数据处理提供了独一无二的环境。

 

Scala 编译器可以生成字节码,直接运行在使用JVM上。该语言(它实际上代表了可扩展语言)被定义为可直接集成到语言中的简单扩展。

 

  Scala作为一门静态语言,它的主要特性有哪些?

 

  · Scala是面向对象的

  Scala是一个纯面向对象语言,在某种意义上来讲所有数值都是对象。对象的类型和行为是由class和trait来描述的。Class的抽象可由子类化和一种灵活的基于mixin的组合机制(它可作为多重继承的简单替代方案)来扩展。

 

  · Scala是函数式的

  Scala还是一个函数式语言,在某种意义上来讲所有函数都是数值。Scala为定义匿名函数提供了一种轻量级的语法,它支持高阶(higher-order)函数、允许函数嵌套、支持局部套用(currying)。Scala的case类及其内置支持的模式匹配模型代数类型在许多函数式编程语言中都被使用。

 

  · Scala是静态类型的

  Scala配备了一套富有表现力的类型系统,该抽象概念以一种安全的和一致的方式被使用。

 

  · Scala是可扩展的

  Scala的设计承认了实践事实,领域特定应用开发通常需要领域特定语言扩展。Scala提供了一个独特的语言组合机制,这可以更加容易地以类库的形式增加新的语言结构:任何方式可以被用作中缀(infix)或后缀(postfix)操作符闭包按照所期望的类型(目标类型)自动地被构造两者结合使用可方便地定义新语句,无需扩展语法,也无需使用类似宏的元编程工具。

 

  · Scala可与Java和.NET进行互操作

  Scala设计时就考虑了与流行编程环境良好交互,如Java 2运行时环境(JRE)和 .NET框架(CLR)。特别是与主流面向对象语言,如Java和C#尽量无缝交互。Scala有像Java和C#一样的编译模型(独立编译,动态装载类),允许访问成千上万的高质量类库。

 

  在并发性方面,与 Scala 在 .NET 领域中的姐妹语言 F# 相似,Scala 是针对 “并发性问题” 的解决方案之一,让开发人员能够更加轻松地专注于问题的实质,而不用考虑并发编程的低级细节。Actor 编程模式让高度并行应用程序的开发更加简单。Scala把Erlang风格的基于actor的并发带进了JVM。我们可以利用Scala的actor模型在JVM上设计具伸缩性的并发应用程序,以自动获得多核心处理器带来的优势,而不必依照复杂的Java线程模型来编写程序。

 

Scala 为并发性提供了两种级别的支持,这与其他与 Java 相关的主题极为类似:

 

  首先,对底层库的完全访问(比如说 java.util.concurrent)以及对 “传统” Java 并发性语义的支持(比如说监控程序和wait()/notifyAll())。其次,这些基本机制上面有一个抽象层 Scala 提供了在稳定的高性能平台(Java 虚拟机)上生成的能力同时也是一门敏捷性语言。这一类型的语言也有其他的选择,例如 Jython, JRuby, Groovy 和 Clojure, 但是这些都是运行在 JVM 上的动态类型语言。Open Class 的效果让大家会觉得Scala是动态语言,但它是选择隐式转换来实现的,这也正好证明了Scala是静态语言。隐式转换(Implicit conversion)使 Scala 具有类型安全性,正如扩展方法(extension method)之于 C#,开放类(open class)之于 ruby。即:向未曾定义的类型添加方法(如字符串、列表、整数)。这是使得 Scala 符合 DSL(特定领域语言)模型的特性之一。

 

  Scala结合了面向对象和函数编程的优势,函数编程的一个好处就是你能够像运用一个数据那样运用函数,可以用来定义真正高层级的库,或者去定义新的领域特殊语言(DSL)。

 

  在谈及Java与Scala的对比时,曾冠东表示,Scala能调用绝大部分的Java,而Java调用Scala独有的东西会比较难。Java 拥有非常强的概念规范,因此任何一个 Java 程序之间具有非常多的相似之处,并且这样能够方便的进行程序员交替。但是 Scala 并没有这样的统一性,因为这是一门很有表现力的语言。现场曾冠东为我们演示了实际案例,如下图所示:

 

  正所谓,金无足赤,人无完人。Scala对二进制不兼容,语法也越来越复杂,不能突破Bytecode的限制、编译速度有所缓慢。当它被广泛用于单元测试、开发工具、Socket开发、以及面对多核挑战的并发应用。总而言之,Scala是一种函数式面向对象语言,它融汇了许多前所未有的特性,而同时又运行于JVM之上。正如JRuby 创建者之一Charles Nutter 所宣称的那样Scala就是 Java 王位的合法继承人。随着开发者对Scala的兴趣日增,以及越来越多的工具支持,无疑Scala语言将成为广大软件工程师手上一件必不可少的工具。更多精彩内容,请关注专题:http://www.it168.com/remen/qcon/。

分享到:
评论

相关推荐

    Scala入门学习教程.docx

    Scala 语言的设计目标是提供一种更简洁、更灵活和更高效的编程语言,旨在取代 Java 语言在某些领域的应用。 知识点二:Scala 语言的基本语法 Scala 语言的基本语法与 Java 语言非常相似,但有一些重要的区别。例如...

    Scala编程基础.docx

    JVM 语言大部分可能会想到 Java,但 Java 做出来的 API 太丑,或者想实现一个优雅的 API 太费劲。 Scala 编译器安装 1. 安装 JDK,因Scala 是运行在 JVM 平台上的,所以安装 Scala 之前要安装 JDK。 2. 安装 Scala...

    scala-sdk-2.12.3.rar

    Scala SDK 2.12.3 是一个针对Java平台的多范式编程语言的软件开发工具包,它提供了丰富的库和编译器,用于构建高效、可扩展的应用程序。Scala结合了面向对象和函数式编程的概念,使得它在处理并发和大数据分析等领域...

    Scala impatient

    Scala是一种多范式编程语言,它以其简洁、高效和兼容性等特性,在编程领域逐渐崭露头角,被业界认为是未来有望取代Java的重要候选之一。Scala的设计理念融合了面向对象编程与函数式编程的最佳实践,为程序员提供了一...

    scala tutorial pdf

    这篇文档是为已经有一定编程经验,特别是对Java有一定了解的程序员提供的一份快速Scala语言和编译器入门指南。Scala是一种多范式编程语言,它结合了面向对象和函数式编程的特点,由EPFL(瑞士洛桑联邦理工学院)的...

    有可能挑战Java优势的四种技术

    尽管动态语言可能无法完全取代Java,但它们在轻量级项目和快速原型设计中表现出色。 2. Continuations 在Web应用开发中,Continuations是一种强大的技术,能够解决传统Web框架中状态管理的复杂性。Continuations...

    java各种应用实例

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、健壮性和高效性而闻名。"Java各种应用实例"这个主题涵盖了Java在多个领域的实际应用,包括但不限于Web开发、桌面应用、移动应用、游戏开发、大数据处理、...

    Kotlin语言基础文档

    Kotlin语言,作为Google官方推荐的Android开发语言,正逐渐取代Java成为Android开发的主流选择。Kotlin以其简洁、安全、表达能力强等特点受到广大开发者的青睐。由于它能与Java完全互操作,开发者们能够将已有的Java...

    九卡后端:在Android上使用Scala构建的开源Android启动器

    在Android开发中,Java通常是首选语言,但Scala的引入可以带来更高的代码密度和更少的冗余,同时提供了许多现代编程语言特性,如类型推断、模式匹配和高阶函数。 项目标签中提到了几个关键的技术和库: 1. **cats*...

    java 反编译工具

    2. **Procyon:** 一款开源的反编译器,支持Java、Scala和Groovy等语言,具有较高的反编译准确度。 3. **FernFlower:** 一个俄罗斯开发的反编译器,以其简单和快速著称。 4. **JAD:** 早期流行的反编译工具,虽然...

    Java虚拟机的基本结构 (2)1

    3. **本地方法栈(Native Method Stack)**:与虚拟机栈类似,但主要服务于Java虚拟机调用的本地(Native)方法,即非Java语言编写的方法。 4. **方法区(Method Area)**:也称为永久代,是所有线程共享的区域,...

    为什么你一定要学习Python或Ruby语言.pdf

    与Lisp、Scala、Haskell、Closure和Erlang等更为专业的语言相比,Python和Ruby更主流,更适合初学者和中级开发者。这些语言具有独特的特性,对高级程序员的思维有提升作用,但Python和Ruby在功能和实用性之间找到了...

    南开大学复习资料-大数据开发技术(二).docx

    5. **Scala语言基础**:Scala是一种面向对象和函数式编程兼备的多范式语言,设计目标是融合两者的优点。它的每个值都是对象,函数也可作为值使用,且具有可扩展性。 6. **Scala中的类型系统**:Scala有表现型系统,...

    jdk1.7.0_05

    7. **动态类型语言支持**:Java 7允许在JVM上运行像Groovy、Scala这样的动态类型语言,通过JSR 292(invokedynamic指令)实现。 8. **改进的编码支持**:支持更多的字符集,包括对UTF-8编码的原生支持。 9. **元...

    weld-porting-package-tck11-2.2.0.Final.zip

    描述中提到的 "ScalaChefClient.zip" 和 "chefclientvery minimal chef server用scala和spray编写的异步客户机" 指出,这里包含的是一个使用Scala编程语言和Spray框架开发的轻量级Chef客户端。Chef是一个自动化基础...

    电脑编程有哪些,我来告诉你

    - **简介**:Scala 是一种多范式的编程语言,运行于Java虚拟机上。 - **特点**:结合了面向对象和函数式编程的优点。 - **应用场景**:大数据处理、分布式计算等。 ##### 15. Perl - **简介**:Perl 是一种通用的...

    Spark机器学习案例实战.pdf

    根据给定的内容,我们可以梳理出以下知识点,将它们归类...整个文档强调了Scala语言与Spark的结合使用,体现了两者之间的紧密关系和相辅相成的特点。通过这些知识点的学习,可以对Spark机器学习实践有一个全面的了解。

    tweetMap_Play_Akka_Java8:使用Akka群集和Java 8为云构建分布式应用程序

    【标签】"Java"表明此项目是用Java语言编写的,特别是利用了Java 8的特性。Java 8引入了大量改进,包括Lambda表达式、函数式接口、Stream API和日期时间API等,这些都极大地增强了Java在处理并发和数据处理时的能力...

    Spark SQL PDF

    Dataset则是DataFrame的类型安全版本,支持Scala、Java和Python,并提供了强大的编译时检查。 2. Dataset API: - 在Spark 1.6版本中引入,Dataset API 提供了强类型的数据集合,可以看作是RDD(弹性分布式数据集...

Global site tag (gtag.js) - Google Analytics