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提供一个 ...
随机推荐
- PHP面向对象05_接口与多态
抽象类与接口 2014-9-2 9:14:32 摘要: 1.抽象类(abstract) 2.接口(interface) 3.多态的应用 1.抽象类(abstract) 特点: 1)抽象类使用abstr ...
- Atitit 图像处理--图像分类 模式识别 肤色检测识别原理 与attilax的实践总结
Atitit 图像处理--图像分类 模式识别 肤色检测识别原理 与attilax的实践总结 1.1. 五中滤镜的分别效果..1 1.2. 基于肤色的图片分类1 1.3. 性能提升2 1.4. --co ...
- Atitit 软件项目非法模块与功能的管理与 监狱管理的对比 原理与概论attilax总结
Atitit 软件项目非法模块与功能的管理与 监狱管理的对比 原理与概论attilax总结 软件项目中的非法模块非法功能非法分子与人类中的非法分子很是相似,必须要建议不同的的约束管理标准化... 软 ...
- fir.im Weekly - 当技术成为一种 “武器”
最近纷纷扰扰,快播公开庭审,携程事件仍在升级,百度还在继续无底线.我们相信技术本身并不可耻,但是用技术作恶就是可耻.当技术成为一种武器,Do not be evil. 好了,继续本期的 fir.im ...
- android 股票数据通过日K获取周K的数据 算法 源码
目前的数据是从新浪接口获取的, http://biz.finance.sina.com.cn/stock/flash_hq/kline_data.php?symbol=sh600000&end ...
- 如何制作自己的yum源
在 /etc/yum.repos.d下创建一个以.repo结尾的文件如aaa.repo,其内容如下(一定要以repo结尾) [aaa] name=aaa baseurl=http://mirror ...
- 美团(iPad)顶部界面的简单实现, 及开发时常见bug
项目功能介绍:1.支持横竖屏旋转,界面正常显示2.通过点击界面顶部"美团",可展示出左右双tableView分别显示服务类列表和子类列表3.通过点击界面顶部"广州&quo ...
- 菜鸟级别的WCF入门学习
这两天学习WCF,看了MSDN上的入门教程,和查找了一些网上给的例子,简单的实现了一下,感觉应该很适合我这种菜鸟级的选手看了. 1.新建一个项目--WCF--WCF服务应用程序 用的是MSDN上的加减 ...
- 用MVVM做了一个保存网页的工具-上篇
前言: 你是否有过收藏了别人博客或文章,当想用的时候却找不到?你是否有过收藏了别人博客或文章,却因为没有网络而打不开网页?OK,下面是我做的一个工具,有兴趣的同学们可以download 玩下,哈哈^. ...
- 编译原理简单语法分析器(first,follow,分析表)源码下载
编译原理(简单语法分析器下载) http://files.cnblogs.com/files/hujunzheng/%E5%8A%A0%E5%85%A5%E5%90%8C%E6%AD%A5%E7%AC ...