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
scala泛函编程是怎样被选中的的更多相关文章
- 怎样学习Scala泛函编程
确切来说应该是我打算怎么去学习Scala泛函编程.在网上找不到系统化完整的Scala泛函编程学习资料,只好把能找到的一些书籍.博客.演讲稿.论坛问答.技术说明等组织一下,希望能达到学习目的.关于Sca ...
- 实用的Scala泛函编程
既然谈到实用编程,就应该不单止了解试试一个新的编程语言那么简单了,最好通过实际的开发项目实例来演示如何编程.心目中已经有了一些设想:想用Scala泛函编程搞一个开源的数据平台应用系统,也就是在云平台P ...
- 新一代编程:scala泛函编程技术-唠叨
准备了半年后,终于决定在这里开始我的scala编程技术学习体验撰写之旅.初步打算在这里把我学习.体验.掌握scala编程的过程与有兴趣的朋友分享.我想,虽然我这不是正式论文或者教课书之类的,但写个开场 ...
- 泛函编程(4)-深入Scala函数类
既然是泛函编程,多了解一下函数自然是免不了的了: 方法(Method)不等于函数(Function) 方法不是函数但可以转化成函数:可以手工转换或者由编译器(compiler)在适当的情况下自动转换. ...
- 泛函编程(34)-泛函变量:处理状态转变-ST Monad
泛函编程的核心模式就是函数组合(compositionality).实现函数组合的必要条件之一就是参与组合的各方程序都必须是纯代码的(pure code).所谓纯代码就是程序中的所有表达式都必须是Re ...
- 泛函编程(29)-泛函实用结构:Trampoline-不再怕StackOverflow
泛函编程方式其中一个特点就是普遍地使用递归算法,而且有些地方还无法避免使用递归算法.比如说flatMap就是一种推进式的递归算法,没了它就无法使用for-comprehension,那么泛函编程也就无 ...
- 泛函编程(27)-泛函编程模式-Monad Transformer
经过了一段时间的学习,我们了解了一系列泛函数据类型.我们知道,在所有编程语言中,数据类型是支持软件编程的基础.同样,泛函数据类型Foldable,Monoid,Functor,Applicative, ...
- 泛函编程(5)-数据结构(Functional Data Structures)
编程即是编制对数据进行运算的过程.特殊的运算必须用特定的数据结构来支持有效运算.如果没有数据结构的支持,我们就只能为每条数据申明一个内存地址了,然后使用这些地址来操作这些数据,也就是我们熟悉的申明变量 ...
- 泛函编程(24)-泛函数据类型-Monad, monadic programming
在上一节我们介绍了Monad.我们知道Monad是一个高度概括的抽象模型.好像创造Monad的目的是为了抽取各种数据类型的共性组件函数汇集成一套组件库从而避免重复编码.这些能对什么是Monad提供一个 ...
随机推荐
- Atitit. Api 设计 原则 ---归一化
Atitit. Api 设计 原则 ---归一化 1.1. 叫做归一化1 1.2. 归一化的实例:一切对象都可以序列化/toString 通过接口实现1 1.3. 泛文件概念.2 1.4. 游戏行业 ...
- atitit 研发管理 要不要自己做引擎自己实现架构?.docx
atitit 研发管理 要不要自己做引擎自己实现架构?.docx 1.1. 目前已经有很多引擎了,还要自己做吗??1 1.2. 答案是自己做更好,利大于弊1 2. 为什么要自己做??1 2.1. 从历 ...
- ES6 对象解构
ES6 对象解构 第一眼看到,什么鬼? const { body } = document `` 其实等于: const body = document.body ``` http://es6.rua ...
- vs xamarin android StartActivity
跳转无需intent,直接给要跳转的activity的type就可以了 StartActivity(typeof(Login));
- MAC下安装与配置MySQL
MAC下安装与配置MySQL MAC下安装与配置MySQL 一 下载MySQL 访问MySQL的官网http://www.mysql.com/downloads/ 然后在页面中会看到“MySQL ...
- JavaScript及兼容性笔记
1. Json to String JSON.stringify(jsonobj)//(IE8+,Chrome 1+,FF 3+) //参考 http://www.nowamagic.net/libr ...
- java实现将汉字转为拼音
有时候为了方便操作程序的开发,需要将汉字转为拼音等操作.下面这个是自己结合网上的资料,加上自己在公司项目中的亲自实践.完整的实现了将汉字转为拼音的操作.这个Demo只是负责将其转换,在main方法中测 ...
- 【环境配置】Linux环境下下载、配置java环境、安装eclipse、建立eclipse快捷方式详解
一.首先是下载Java JDK 到目前为止的最新版本为(jdk1.8.0_60),有两种方式进行下载: 1.使用shell来进行下载,可使用如下命令直接进行下载: wget --no-check-ce ...
- 对比MFC资源文件谈谈WPF布局方式
对比MFC资源文件谈谈WPF布局方式 MFC方式 对于传统的MFC基于UI的应用程序设计通常分两步走,首先是设计UI,使用的是RC文件,然后是代码文件,对RC文件进行操作,如下面Figure 1 的基 ...
- Python 3.0(一) 简介
Python 3.0(一) 简介 [目录] 1.简介 2.python特点 3.安装 简介: Python是可以称得上即简单又功能强大的少有的语言中的一种.你将会惊喜地发现,专注于问题的解决方案而不是 ...