实用的Scala泛函编程
既然谈到实用编程,就应该不单止了解试试一个新的编程语言那么简单了,最好通过实际的开发项目实例来演示如何编程。心目中已经有了一些设想;想用Scala泛函编程搞一个开源的数据平台应用系统,也就是在云平台PaaS层对上一层后台的数据应用平台。想想当电子商务和云应用真正普及后将会出现一大批没有云应用软件开发能力的用户。将来真正的云服务提供商,单提供虚拟机租赁服务是远不足够的,如果能提供一个具备计算资源自动扩展收缩、支持多种数据库以及一套简单的后台系统配置脚本语言(DSL:Domain Specific Language)的后台数据应用平台就能真正满足这些新用户对电子商务系统开发的需求。他们不需要掌握高深的分布式云应用软件开发技术,只要通过系统配置脚本语言就可以按所租赁虚拟机数量配置分布计算任务以及对各种数据库进行存取操作了。后台系统配置脚本语言DSL隐蔽了复杂的后台运行体系,用户面对的是抽象到Web Service层后面的一个应用层。这样他们可以沿用习惯的前台网页开发技术实现整个云应用软件系统的开发、实施。上面所提到的所谓开源项目是指在一定时间条件成熟后能有业内有共识的朋友一同参与到整个项目的开发。
顺便把这个数据平台应用系统的初步计划透露一下。因为整个开发过程是以Scala泛函编程为主体并且会涉及到许多新的软件、中间件、子功能、开发技术,所以在这里先过一下:数据应用平台是一个寄存在云端的通用数据应用后台系统,与云端虚拟环境紧密结合,以一套定制的API对外开放。数据管理包括了实时交易数据库管理以及批次型大数据HDFS(Hadoop类型)数据管理,通过搜索引擎钻取数据。下面是一些子系统和可能使用的开发技术清单:
1、交易型数据库:MySql(固定格式数据表), MongoDb(自由格式文件类型数据库),PosgreSql(近期走热的开源固定格式数据库)
2、交易型数据库中间件:Slick
3、大数据数据库:Hbase(取其通用)、Accumulo(取其安全)
4、大数据环境:Hadoop、Spark
5、应用平台:Akka,可以跨JVM的分布式应用平台
6、Search:Lucent,可以用Scala调研现成的Lucent java库;修改或增加一些新功能如定制行业字典
7、Web Server: Jetty, 一个功能全面又紧凑简洁的开源软软件
8、Web Service: Spray, 与Akka紧密集成的开发框架
9、前端:Play, 当今运行效率最高的前端网页应用架构
实用的Scala泛函编程的更多相关文章
- 怎样学习Scala泛函编程
确切来说应该是我打算怎么去学习Scala泛函编程.在网上找不到系统化完整的Scala泛函编程学习资料,只好把能找到的一些书籍.博客.演讲稿.论坛问答.技术说明等组织一下,希望能达到学习目的.关于Sca ...
- scala泛函编程是怎样被选中的
现在计算机技术发展现象是:无论硬件技术如何发展都满足不了软件需求:无论处理器变得能跑多快,都无法满足软件对计算能力的需要.按照摩尔定律(Moore's Law)处理器(CPU)每平方面积上包含的半导体 ...
- 新一代编程:scala泛函编程技术-唠叨
准备了半年后,终于决定在这里开始我的scala编程技术学习体验撰写之旅.初步打算在这里把我学习.体验.掌握scala编程的过程与有兴趣的朋友分享.我想,虽然我这不是正式论文或者教课书之类的,但写个开场 ...
- 泛函编程(29)-泛函实用结构:Trampoline-不再怕StackOverflow
泛函编程方式其中一个特点就是普遍地使用递归算法,而且有些地方还无法避免使用递归算法.比如说flatMap就是一种推进式的递归算法,没了它就无法使用for-comprehension,那么泛函编程也就无 ...
- 泛函编程(4)-深入Scala函数类
既然是泛函编程,多了解一下函数自然是免不了的了: 方法(Method)不等于函数(Function) 方法不是函数但可以转化成函数:可以手工转换或者由编译器(compiler)在适当的情况下自动转换. ...
- 泛函编程(24)-泛函数据类型-Monad, monadic programming
在上一节我们介绍了Monad.我们知道Monad是一个高度概括的抽象模型.好像创造Monad的目的是为了抽取各种数据类型的共性组件函数汇集成一套组件库从而避免重复编码.这些能对什么是Monad提供一个 ...
- 泛函编程(34)-泛函变量:处理状态转变-ST Monad
泛函编程的核心模式就是函数组合(compositionality).实现函数组合的必要条件之一就是参与组合的各方程序都必须是纯代码的(pure code).所谓纯代码就是程序中的所有表达式都必须是Re ...
- 泛函编程(27)-泛函编程模式-Monad Transformer
经过了一段时间的学习,我们了解了一系列泛函数据类型.我们知道,在所有编程语言中,数据类型是支持软件编程的基础.同样,泛函数据类型Foldable,Monoid,Functor,Applicative, ...
- 泛函编程(5)-数据结构(Functional Data Structures)
编程即是编制对数据进行运算的过程.特殊的运算必须用特定的数据结构来支持有效运算.如果没有数据结构的支持,我们就只能为每条数据申明一个内存地址了,然后使用这些地址来操作这些数据,也就是我们熟悉的申明变量 ...
随机推荐
- javascript无缝滚动示例
效果 图片大小均为200*200; 默认向左循环滚动; 鼠标悬浮暂停,鼠标移走继续滚动; 可以在此基础进行扩展. 下面是代码: <!doctype html> <html lang= ...
- react8 组件之间的通信
<body><!-- React 真实 DOM 将会插入到这里 --><div id="example"></div> <!- ...
- 总结baiduTemplate和djangoTemplate的学习
引入 开发工作中需要,除了今天要介绍的两种template,还有很多模板,但他们的终点都是相同的,都是为了开发的便利. 模板的作用 是一套模板语法,开发者可以通过写一 ...
- Uvaoj10054 - The Necklace
/* 题意:打印欧拉回路! 思路:开始时不明白,dfs为什么是后序遍历? 因为欧拉回路本身是一条回路,那么我们在dfs时,可能存在提前找到回路,这条回路可能不是欧拉回路, 因为没有遍历完成所有的边!如 ...
- Java多线程系列--“基础篇”06之 线程让步
概要 本章,会对Thread中的线程让步方法yield()进行介绍.涉及到的内容包括:1. yield()介绍2. yield()示例3. yield() 与 wait()的比较 转载请注明出处:ht ...
- C/C++定义全局变量/常量几种方法的区别
在讨论全局变量之前我们先要明白几个基本的概念: 1. 编译单元(模块): 在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ER ...
- (转)sql的join图解
假设我们有两张表,Table A是左边的表,Table B是右边的表. 其各有四条记录,其中有两条记录是相同的,如下所示: 1 id name id name 2 -- ---- ...
- 16种基于 CSS3 & SVG 的创意的弹窗效果
在去年,我给大家分享了<基于 CSS3 的精美模态窗口效果>,而今天我要与大家分享一些新鲜的想法.风格和趋势变化,要求更加适合现代UI的不同的效果.这组新模态窗口效果包含了一些微妙的动画, ...
- CSS 魔法系列:纯 CSS 绘制各种图形《系列六》
我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果.特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来. ...
- 使用Html5+C#+微信 开发移动端游戏详细教程 :(三)使用html5引擎搭建游戏框架
教程里的案例我们是通过H5游戏引擎开发,目前H5的游戏引擎比较好用的是白鹭,不过对于新手来说白鹭的开发环境和工具使用过于复杂,这里推荐一个国内大神编写的游戏引擎:lufylegend. 直接在页面引入 ...