scala范函编程是怎样被选中的

现在计算机技术发展现象是:无论硬件技术如何发展都满足不了软件需求;无论处理器变得能跑多快,都无法满足软件对计算能力的需要。按照摩尔定律(Moore‘s Law)处理器(CPU)每平方面积上包含的半导体晶体管数量每18个月将会增加一倍。发展到现在,所有CPU厂商都再也无法按照摩尔定律在一定面积上成倍增加半导体了,大家也都只能朝着增加CPU内核数量上努力了。多核CPU已然成为现代计算机技术发展趋势。现代软件对计算能力的需求暴增主要归咎于现代社会中数据应用的普及和泛滥。这种数据量级单凭增加处理器和存储能力是无法应付的,必须通过分布式计算模式来有效处理。

无论我们如何通过垂直拓展(Scale Up)增加CPU、内存、硬盘始终都无法解决数据通道(Bus)的无限扩张。只有通过水平拓展(Scale Out),即分布拓展通过增加计算机服务器然后用分布计算技术把计算任务切细分派给各分散独立的服务器进行处理;这也就是大数据技术的核心。

可以预见的是,我们将来面对的是:分布式数据、高并发处理、并行运算、NOSQL及超大型互动复杂的网络平台编程。作为一个算是老资格的程序员,经历了从BIOS到云平台应用开发全过程,面对这些新的硬件环境和软件要求还是觉着力有不及。我自己分析了一下;如果依赖自己目前所掌握的技术和经验,用java或者C#这几种面向对象编程语言(OOP)再加上现有的资源库去面对分布式(distributed)、并行运算(parallelism)、高并发(concurrency)软件的开发,感觉还是力犹不及,像Mission Impossible。

通过一段时间的调研,发现Scala能够比较简单地解决心目中的难题。Scala是一种JVM编程语言,与java在bytecode层面相等(不只兼容)。我觉着可以说Scala是java的升级,一方面保持bytecode的兼容,另一方面从功能上又简化解决了许多以前java编程中遇到的难题。有关Scala编程语言方面的资料还是比较容易找到的。它到底是一个什么样的编程语言、功能如何强大、特点如何,这些自不用我多说。Scala是面向对象编程(OOP)和泛函编程(FP)的完美混合体。Scala针对多核CPU并行运算及高并发处理这方面主要是通过泛函编程范畴(Functional Programming Paradigm)来实现的。我发现在国内互联网上有关Scala泛函编程的教材非常匮乏,Scala语言教程倒是比较容易找到。我下面一系列的文章就不会描述那些Scala编程语言的语法语意,而是以展示如何从OOP编程思维转换到泛函编程模式为主。

之所以选择了Scala主要还是它是我在寻找解决方案时第一个碰巧遇到的一个新的编程语言,能够解决一直以来思考的那些在java开发工作中所遇到的问题。后来为了进一步了解泛函编程又看了其它一些编程语言资料,包括Haskell, Clojure,Erlang等。不过最终还是选择了Scala,基于以下理由:

1、Scala是JVM编程语言,与java高度兼容,可以充分利用现有的java程序资源

2、Scala是OOP和FP混合体,有些问题可以通过OOP形式来解决,是良好的OOP到FP编程模式的转换过渡

3、新发布的java 8中新增了许多Scala的特长(Features)。将来这两款编程语言是不是会逐步接近,越来越相似或者在某些方面进行合并?当java能解决所有问题时我们可能又回归到java编程;又可以充分利用java经验和资源积累了。

4、Scala构建工具SBT是Maven后的强大工具。可以完整构建大型软件系统及实现团队开发管理

5、已经有一些知名企业使用Scala开发了自己的平台如Tweeter, Gilt, Foursquare等。大型的成功项目最著名的是 Spark

时间: 2024-10-15 05:39:08

scala范函编程是怎样被选中的的相关文章

第70讲:Scala界面GUI编程实战详解

今天又学习了王家林老师的scala学习讲座第70讲,关于scala的界面编程,让我们来初步学习一下scala中界面编程的过程. 信息来源于 DT大数据梦工厂微信公众账号:DT_Spark 关注微信账号,获取更多关于王家林老师的课程内容 王老师QQ:1740415547 微信号:18610086859 首先,scala中的界面编程是封装和改进了java的界面编程的swing库,当然我们在用scala进行界面编程的时候,要先引入此类库,下面让我们从代码实战出发. import scala.swing

Scala界面事件处理编程实战详解.

今天学习了一个Scala界面事件处理编程,让我们从代码出发. import scala.swing._import scala.swing.event._ object GUI_Panel extends SimpleSwingApplication{  def top = new MainFrame{//重写框架    title = "second GUI"//界面名称    val button = new Button{//定义按钮      text = "scal

使用预处理命令实现C的范型编程

一.引言 Generic programming is a style of computer programming in which algorithms are written in terms of types to-be-specified-later that are then instantiated when needed for specific types provided as parameters. 范型编程在1973年的ML语言中首次提出,是在C语言之后诞生的,你可以轻

学习进度十三(Scala独立应用编程)

环境如下: Hadoop 2.6.0以上 java JDK 1.7以上 Spark 3.0.0-preview2 一.Scala独立应用编程 1.安装sbt sbt是一款Spark用来对scala编写程序进行打包的工具,这里简单介绍sbt的安装过程,感兴趣的读者可以参考官网资料了解更多关于sbt的内容.Spark 中没有自带 sbt,这里直接给出sbt-launch.jar的下载地址,直接点击下载即可.我们选择安装在 /usr/local/sbt 中: sudo mkdir /usr/local

C++范型编程 -- <type_traits>头文件

在type_traits头文件中定义了许多非常好玩的东西,这里对着 c++ reference 翻译一丢丢 一,helper class , std::intergral_constant template< class T, T v > struct integral_constant; 我们知道对在模板参数中的非类型参数必须为常量,所以这个东西就是可以为类型T的任意一个常量v,做出来一个特定的类型,即integral_constant<T, v>的实例.通常用来保存int 和

泛函编程(3)-认识Scala和泛函编程

接着昨天的文章,再示范一个稍微复杂一点的尾递归tail recursion例子:计算第n个Fibonacci数.Fibonacci数第一.第二个数值分别是0,1,按顺序后面的数值是前面两个数的加合.例如:0,1,1,2,3,5... 1 def fib(n: Int): Int = { 2 @annotation.tailrec 3 def go(cnt: Int, prev: Int, cur: Int): Int = cnt match { 4 case m if (m < 0 ) =>

Scala链式编程内幕

1 package big.data.analyse.scala 2 3 /** 4 * 链式编程原理 5 * Created by zhen on 2018/12/16. 6 */ 7 class Computer{def code = this} 8 class PC extends Computer{def portable = this} 9 /** 10 * 使用type可以根据当前情况转化类型实现链式编程 11 */ 12 class Car{def run : this.type

scala界面GUI编程实战初步了解

示例代码: import scala.swing._ //SimpleSwingApplication继承自SwingApplication类(此类中有main方法,因此可以运行显示界面) object Hello_GUI extends SimpleSwingApplication { def top = new MainFrame{ //顶级容器 title = "Hello GUI" contents = new Button{ text = "Scala =>

Scala 面向接口编程

1.如果要实现一个接口,前边没有extends关键字就可以使用extends,如果有要使用with关键字 2.Scala 中的接口支持多种继承,类或者抽象类不支持多种继承 3.抽象属性:未被实例化的属性 定义一个抽象的属性: val name : String,在实现的子类中直接进行赋值. 4.处理类可以混入接口外,Scala类的实例的对象也可以混入接口,以扩展当前对象实例的功能 package com.dtspark.scala.basics trait Logger{ def log(mes