Scala—OOP到FP的变迁.pdf
We Scala! 暨Scala研学社邀请会 微博: Scala 研学社 Scala概况 第一版发布于2003年 以融合OOP和FP两大范式为己任 Scala之父Martin 师从 Pascal 之父 Niklaus Wirth Java 标准委员会成员, Java 泛型机制设计者 美誉 Java之父James Gosling If I were to pick a language to use today other than Java, it would be Scala Groovy之父James Strachan I can honestly say if someone had shown me the Programming in Scala book by Martin Odersky, Lex Spoon & Bill Venners back in 2003, I'd probably have never created Groovy. 编程范式的转变 早期范式 例: List + map/filter/reverse/foldl/. 针对固定数据类型应用多种 API 模拟及GUI程序促成了OOP的兴起 例: Car/Road/Cell/. + nextStep/toString/. 例: Menu/Button/Image. + move/redraw/. 针对多种数据类型调用一组固定的 API 编程范式的转变(续) 多核(并行)及云计算(分布式)正成为FP走 上历史舞台的催化剂 2000 ECOOP 3 x ICFP OOPSLA 10 x ICFP 2012 ICFP 2 x ECOOP OOPSLA 不再是独立会议 可变状态三宗罪 多核、多GPU、集群并行 对 Cache 一致性不友好 异步事件处理 造成竞态条件 分布式系统 引入复杂的版本控制 FP的本质 Concentrate on transformations of immutable values instead of stepwise modifications of mutable state 并行及分布式背景下的新OOP 以往: “Objects are characterized by state, identity, and behavior” (Booch) 如今: “Eliminate or reduce mutable state” “Structural equality instead of reference identity” “Concentrate on functionality (behavior)” Scala的定位 在OOP到FP的范式转变阶段承上启下 融合 OOP 和 FP ,兼容并蓄 继承 OOP 的问题分析方法与设计方法 OOP 是手段, FP 是目的 Scala 标榜的对 Java 的深度兼容 本质上是对根深蒂固的 OOP 范式的深度兼容 Scala 的应用 底层支撑系统 LinkedIn 消息队列 /PubSub : Kafka 流式处理: Samza Typesafe 分布式 Actor 框架: Akka Yahoo、阿里云 分布式计算系统: Spark 上层应用系统 Twitter Foursquare Quora Yahoo 广告系统 Tumblr VMware LinkedIn Yammer 阿里 19楼 HSBC(汇丰) UBS(瑞银) Kill Apps 消息队列/PubSub Kafka 分布式计算 Spark 分布式SQL数据库 Shark Web框架 Play2 并发分布式框架 Akka