随笔分类 -  Scala

上一页 1 ··· 6 7 8 9 10 11 12 13 14 下一页
JVM编程语言
摘要:fs2的多线程编程模式不但提供了无阻碍I/O(java nio)能力,更为并行运算提供了良好的编程工具。在进入并行运算讨论前我们先示范一下fs2 pipe2对象里的一些Stream合并功能。我们先设计两个帮助函数(helper)来跟踪运算及模拟运算环境: log是个运算跟踪函数。 randomDel 阅读全文
posted @ 2016-08-27 14:11 雪川大虫 阅读(476) 评论(0) 推荐(0)
摘要:fs2在处理异常及资源使用安全方面也有比较大的改善。fs2 Stream可以有几种方式自行引发异常:直接以函数式方式用fail来引发异常、在纯代码里隐式引发异常或者在运算中引发异常,举例如下: 我们可以用非函数式方式处理异常: 当然,我们会选择用纯代码方式处理异常: 我们在上一篇讨论中介绍过fs2提 阅读全文
posted @ 2016-08-25 10:49 雪川大虫 阅读(378) 评论(0) 推荐(0)
摘要:fs2是scalaz-stream的最新版本,沿用了scalaz-stream被动式(pull model)数据流原理但采用了全新的实现方法。fs2比较scalaz-stream而言具备了:更精简的基础组件(combinator)、更安全的类型、资源使用(type safe, resource sa 阅读全文
posted @ 2016-08-24 10:04 雪川大虫 阅读(720) 评论(0) 推荐(0)
摘要:长久以来,函数式编程模式都被认为是一种学术研究用或教学实验用的编程模式。直到近几年由于大数据和多核CPU的兴起造成了函数式编程模式在一些实际大型应用中的出现,这才逐渐改变了人们对函数式编程无用论的观点。通过一段时间对函数式编程方法的学习,我们了解到Free Monad的算式/算法关注分离(separ 阅读全文
posted @ 2016-08-19 11:31 雪川大虫 阅读(769) 评论(0) 推荐(0)
摘要:从上面多篇的讨论中我们了解到scalaz-stream代表一串连续无穷的数据或者程序。对这个数据流的处理过程就是一个状态机器(state machine)的状态转变过程。这种模式与我们通常遇到的程序流程很相似:通过程序状态的变化来推进程序进展。传统OOP式编程可能是通过一些全局变量来记录当前程序状态 阅读全文
posted @ 2016-08-12 10:03 雪川大虫 阅读(457) 评论(0) 推荐(0)
摘要:如果scalaz-stream真的是一个实用的数据流编程工具库的话,那它应该能处理同时从多个数据源获取数据以及把数据同时送到多个终点(Sink),最重要的是它应该可以实现高度灵活的多线程运算。但是:我们说Process代表了一串可能是无穷的元素。这个一串的意思是多个按序排列的元素。也就是说如果我们有 阅读全文
posted @ 2016-08-03 14:44 雪川大虫 阅读(435) 评论(0) 推荐(1)
摘要:scalaz-stream支持无穷数据流(infinite stream),这本身是它强大的功能之一,试想有多少系统需要通过无穷运算才能得以实现。这是因为外界的输入是不可预料的,对于系统本身就是无穷的,比如键盘鼠标输入什么时候终止、网站上有多少网页、数据库中还有多少条记录等等。但对无穷数据流的运算又 阅读全文
posted @ 2016-07-25 13:29 雪川大虫 阅读(604) 评论(0) 推荐(1)
摘要:一个完整的scalaz-stream有以下几个部分组成:Source -> Transducer -> Sink,用直白文字来描述就是:“输入 -> 传换 -> 输出”。我们已经在前面几篇讨论中介绍了Source和Transducer的基本情况,这篇讨论我们探讨一下Sink。scalaz-strea 阅读全文
posted @ 2016-07-21 10:25 雪川大虫 阅读(913) 评论(0) 推荐(2)
摘要:在上一篇讨论里我们介绍了Source,它的类型款式是这样的:Process[F[_],O]。Source是通过await函数来产生数据流。await函数款式如下: await函数的作用是:运算F从外界数据源获取数据A,如:从数据库读取记录、从网络读取网页或读取键盘鼠标输入等。获取数据A后输入函数rc 阅读全文
posted @ 2016-07-19 11:11 雪川大虫 阅读(544) 评论(0) 推荐(0)
摘要:scalaz-stream是一个泛函数据流配件库(functional stream combinator library),特别适用于函数式编程。scalar-stream是由一个以上各种状态的Process串联组成。stream代表一连串的元素,可能是自动产生或者由外部的源头输入,如:一连串鼠标 阅读全文
posted @ 2016-07-07 17:48 雪川大虫 阅读(789) 评论(0) 推荐(0)
摘要:我们在上一节讨论了scalaz Future,我们说它是一个不完善的类型,最起码没有完整的异常处理机制,只能用在构建类库之类的内部环境。如果scalaz在Future类定义中增加异常处理工具的话,用户就会经常遇到Future[Throwable\/A]这样的类型,那么在进行Monadic编程时就必须 阅读全文
posted @ 2016-06-16 10:44 雪川大虫 阅读(948) 评论(0) 推荐(1)
摘要:scala已经配备了自身的Future类。我们先举个例子来了解scala Future的具体操作: 这是一个标准的异步运算;在成功完成运算事件上绑定callback来获取在其它线程中的运算结果。我们也可以进行异常处理: 又或者同时绑定运算成功和失败事件的callback函数: scala Futur 阅读全文
posted @ 2016-06-15 11:36 雪川大虫 阅读(556) 评论(0) 推荐(0)
摘要:完成了对Free Monad这部分内容的学习了解后,心头豁然开朗,存在心里对FP的疑虑也一扫而光。之前也抱着跟大多数人一样的主观概念,认为FP只适合学术性探讨、缺乏实际应用、运行效率低,很难发展成现实的软件开发模式。Free Monad的出现恰恰解决我心中的疑问,更正了我对FP的偏见:Free Mo 阅读全文
posted @ 2016-06-04 13:31 雪川大虫 阅读(1480) 评论(0) 推荐(0)
摘要:我们在前面花了几期时间讨论Free Monad,那是因为FP既是Monadic programming,Free Monad是FP模式编程的主要方式。对我们来说,Free Monad代表着fp从学术探讨到实际应用的转变,因为我们已经示范了如何用Free Monad的算式算法关注分离模式来实现真正的软 阅读全文
posted @ 2016-06-02 16:24 雪川大虫 阅读(567) 评论(0) 推荐(0)
摘要:我们不断地重申FP强调代码无副作用,这样才能实现编程纯代码。像通过键盘显示器进行交流、读写文件、数据库等这些IO操作都会产生副作用。那么我们是不是为了实现纯代码而放弃IO操作呢?没有IO的程序就是一段烧CPU的代码,没有任何意义,所以任何类型的程序都必须具备IO功能,而在FP模式中对IO操作有特别的 阅读全文
posted @ 2016-05-10 18:56 雪川大虫 阅读(811) 评论(0) 推荐(0)
摘要:在上一篇讨论里我在设计示范例子时遇到了一些麻烦。由于Free Monad可能是一种主流的FP编程规范,所以在进入实质编程之前必须把所有东西都搞清楚。前面遇到的问题主要与scalaz Free的FreeC类型有关系。这个类型主要是针对一些非Functor的F[A]特别设计的。FreeC是Coyoned 阅读全文
posted @ 2016-04-26 12:29 雪川大虫 阅读(847) 评论(0) 推荐(1)
摘要:一直感觉FP比较虚,可能太多学术性的东西,不知道如何把这些由数学理论在背后支持的一套全新数据类型和数据结构在现实开发中加以使用。直到Free Monad,才真正感觉能用FP方式进行编程了。在前面我们已经花了不小篇幅来了解Free Monad,这次我想跟大家讨论一下用Free Monad来编写一个真正 阅读全文
posted @ 2016-04-18 11:17 雪川大虫 阅读(2767) 评论(0) 推荐(0)
摘要:很多函数式编程爱好者都把FP称为Monadic Programming,意思是用Monad进行编程。我想FP作为一种比较成熟的编程模式,应该有一套比较规范的操作模式吧。因为Free能把任何F[A]升格成Monad,所以Free的算式(AST)、算法(Interpreter)关注分离(separati 阅读全文
posted @ 2016-04-12 11:14 雪川大虫 阅读(744) 评论(0) 推荐(0)
摘要:我一直在不断的提示大家:FP就是Monadic Programming,是一种特殊的编程风格。在我们熟悉的数据库编程领域能不能实现FP风格呢?我们先设计一些示范例子来分析一下惯用的数据库编程过程: 我这里模拟了一个培训学校内的一些业务。上面设计的是一些基本函数,可以分别对学员、导师、座位进行查询和更 阅读全文
posted @ 2016-03-30 12:25 雪川大虫 阅读(608) 评论(0) 推荐(0)
摘要:在上面几期讨论中我们连续介绍了Free Monad。因为FP是纯函数编程,也既是纯函数的组合集成,要求把纯代码和副作用代码可以分离开来。Free Monad的程序描述(AST)和程序实现(Interpretation)关注分离(separation of concern)模式恰恰能满足FP要求。我们 阅读全文
posted @ 2016-03-28 11:46 雪川大虫 阅读(545) 评论(0) 推荐(0)

上一页 1 ··· 6 7 8 9 10 11 12 13 14 下一页