AICon全球人工智能与机器学习技术大会周四开幕,点击查看完整日程>> 了解详情
写点什么

《F# Deep Dives》书评与作者问答

  • 2015 年 3 月 27 日
  • 本文字数:3167 字

    阅读完需:约 10 分钟

由 Tomas Petricek 与 Phillip Trelford 所共同编写的《F# Deep Dives》(F#深度钻研),是一本展示F#在实践中能够带来怎样的商业价值的新书。本书描述了11 个真实的相关产业的场景,并展示了F#是怎样让领域专家们使用函数试优先的途径解决这些场景中的问题的。

本书的每一篇章分别由一位不同的作者编写,分别描述了一个学习案例。每个篇章的开始部分首先简单地介绍了本章的目标,以及完成该目标会遇到的各种困难。随后详细地描述了如何通过F#实现该目标,并详细解析了解决该问题时所选择的途径。这些学习案例涵盖了多个不同的领域,从游戏开发到商业系统、从富用户界面到社交网络分析、从文本解析到基于代理编程,不一而足。在许多案例中,只要合适,所描述的解决方案都会包括F#之外的多种技术的整合,例如C#、R 和JavaScript;各种数据格式,例如CSV、JSON 和XAML;以及各种开发实践,例如单元测试、性能分析,验收测试等等。

本书的目标群体并非初学者,它假设读者已经具备了F#的基本知识,不过在附录中依然收录了F#语言的基本知识。每个篇章都是完全自包含的,可独立阅读而不受阅读顺序的限制。尽管如此,各个篇章的顺序还是按照每个场景的复杂度,以及这些场景所涵盖的技术丰富程度进行排列的。

每个篇章都包括一个示例项目,其中包含完整的代码与对应的数据。所有的项目都可以在 GitHub 上找到。

InfoQ 有幸与 Tomas Petricek 进行了一次访谈,向他询问了关于本书和 F#的一些问题。

InfoQ:嗨 Tomas,你能够描述一下这本书的诞生过程吗?编写这本书的重要性又体现在哪里呢?

这本书出现的目的是回答某个我们已经多次听到过的问题:“怎样在一个生产环境中的大型项目中实际应用 F#?”我和 Phil 都认识许多成功地在生产环境中应用了 F#的同行,因此我们打算将他们的经验分享给广大社区中的成员。这也是本书与其它许多有关 F#的书籍所不同的地方,它是基于实际行业中的 F#的用例而形成的,并且也展示了多种不同的应用 F#的途径。

InfoQ:本书以一种渐进式的方式实现了“深度钻研”,从简单的案例开始,逐渐过渡到更复杂的案例中。你决定选择哪些主题的标准是什么呢?

我们实际上是按照相反的方式进行选择的。首先我们从我们所知的行业中的 F#用户中收集各个篇章的灵感,随后将这些篇章按照逻辑进行分组,并(一定程度上)按照它们的复杂度进行排序。因此,本书并不是按照预先设定的计划进行编写的,而是真实地反映出了 F#的应用领域。

InfoQ:在本书中所描述的所有场景中,哪个场景更接近于类似于 F#这门语言的“杀手级场景”?在怎样的应用程序中,该语言的特性确实提供了超过其它语言的优势,包括函数式和命令式语言?

我们尝试尽量扩展各种主题的宽度,因此本书并没有一个统一的主题,但我发觉数据科学这一领域是非常有趣的。F#中拥有类型提供器特性(第六章),这是一个独特的特性,它让数据访问变得非常简单,并让使用者能够轻易地编写各种复杂的算法(第四章),并且能够让结果可视化并进行探索(第五章)。并且现在使用 F#进行数据科学计算方面的优秀开源类库已经变得越来越多了。

InfoQ:在微软研究院时,你就已经开始使用 F#的早期版本了。你能够为我们分享一下,在当时你在 F#使用方面的经验,以及 F#所带给你的价值吗?

是的,我的第一篇关于 F#的博客帖子写于 2006 年(不过千万不要去阅读该帖子,因为其中的代码已经不能运行了!)在我在 2007 年初次进行实习时,我所参与的项目是将 F#代码转换为 JavaScript,这一项目催生了日后的 WebSharper 和 FunScript 等工具。

当时的经历为我带来了许多乐趣,有一周我参与了该项目中的某些工作,并且多次使用各种疯狂的临时方案以实现功能需求。然后,我将工作成果展示给 Don Syme。就在该周末结束之后,我从 Don 那里得到了某个新版本的 F#编译器和类库,结果所有的代码都无法运行了!但新版本的设计确实好了许多,因此我能够删除所有的临时方案。因此,这一次尝试很可能帮助 WebSharper 和 FunScript 工具变得更加出色了。

InfoQ:有一组编程语言使得很大范围上的应用程序实现了某种程度上的“函数式重生“,F#正是这一组语言之一。F#对于函数式语言的振兴起到了怎样的作用?

对我来说,主要的一点在于 F#并非严格属于函数式语言。我们更乐于叫它“函数式优先“,意味着函数式风格是首选,但使用其它类型的范式也能够运行良好。

InfoQ**:F#是紧密地依赖于.NET平台的。你是怎样看待微软最近在大规模开源 F#**代码方面的行为的?这对于 F#的将来意味着什么?

F#社区对于开源持有非常友好的态度,F#本身也能够通过 Mono 在 Linux 和 Mac 平台上运行良好,并且可以通过 Xamarin 工具运行在 Android 平台上。因此,我们非常乐于见到微软在开源方面的贡献!

InfoQ**:F#的发展非常稳定。本书中使用的代码是 F# 3,而 F# 4**如今也准备就绪。你如何描述或概括 F#的发展?在这些年中,F#在哪些方面成长为一个更成熟的语言了呢?

如果你能够比较一下该语言的变化,以及类库的演化,你就能够非常清楚地看到该语言的成熟度。F# 3 中新引入的类型提供器特性并不需要对于该语言的语法做出很大的改动,但它却为该语言加入了非常强大的功能,我认为这是 F#未来的一个良好的走向。因此,我认为在创建优秀的 F#类库,或是像类型提供器这样的扩展功能方面,能做的事还有很多。

InfoQ:C#与 F#之间的相互影响体现在哪些地方?如果有人说,C#是微软的旗舰语言,而 F#只是一个试验台,其中的新思想会最终转化为 C#特性,这种说法是否正确呢?

我认为“试验台”这种方法并不正确。C#团队确实一直对 F#进行着密切的关注,但 F#确实是一门独立的语言,它有着不同的背景,以及不同的编程风格。这意味着像类型提供器这样的特性非常适合于 F#,但要在 C#的上下文中实现却是比较麻烦的。即使是 async 特性,也是首先出现在 F#语言中,随后再加入对 C#的支持的,这说明确实有许多特性是不太适合于 C#语言的

InfoQ**:你在 fsharpWorks **从事 F#的顾问工作。哪些软件产业行业中会更多地采用函数式编程方式,尤其是 F#呢?

我与蓝山资本有着许多合作经历,这是一家基于纽约的投资公司,它们对于 F#的开源生态系统有着积极的贡献。因此,金融行业正是一种大量应用函数式编程的行业。不过,如果你看一看 F# Testimonials 网站,你会看到许多在不同行业中的应用。毫无疑问,最吸引人的一个示例,是 Goswin Rothenthal 使用 F#进行阿布达比卢浮宫屋顶的设计。

InfoQ**:在上一次的 TOIBE Index编程语言排行榜(2015年二月)中,F#的使用率排名在所有函数式语言中居于首位,而它的流行度则只是稍稍高于 Python的一半。如果要让 F#**的使用率在未来获得提高,关键的因素有哪些呢?

TIOBE index 上的排名确实很有趣,但你不能说它是一个非常客观的指标。虽然这么说,但我认为它还是反映出了 F#流行程度的某些趋势。在过去的一年中,几乎每周都有新的用户组出现在世界各地。另一件有助于推动F#发展的大事是最新成立的 F#软件基金会,它现在是一个非盈利组织,目的在于促进和推动 F#,以及周边社区的发展。

除了以上两位共同作者之外,本书的共同作者还包括多位知名的 F#专家,例如: Chris Ballard Keith Battocchi Colin Bull Chao-Jen Chen Yan Cui Johann Deneux Kit Eason Evelina Gabasova Dmitry Morozov Don Syme

关于本书作者

Tomas Petricek在布拉格的查尔斯大学学习期间,就开始了对函数式式编程的探索。从 2004 年起,他就一直是 Microsoft F#的 MVP,并且一直是 F#社区中最活跃的成员之一。除了在 F#方面的工作之外,他从 2005 年推出的 C# 3.0 早期预览版本开始,就以一种函数式方式进行使用了。目前他是一位剑桥大学的毕业生,并且在微软研究院与 F#团队一起参与了多个项目的研发工作。

查看英文原文: F# Deep Dives Review and Author Q&A

2015 年 3 月 27 日 02:141338
用户头像

发布了 428 篇内容, 共 155.6 次阅读, 收获喜欢 27 次。

关注

评论

发布
暂无评论
发现更多内容

通证与区块链:前台经济+后台技术

Geek_987812

Spring之 EL表达式

邱学喆

语法规则 Expression ExpressionParser ParserContext EvaluationContext

过去几个月里面的几家大厂(美团、字节、腾讯、阿里)均拿到 offer,最终去了字节跳动

Java 编程 程序员 架构 面试

双非本科,面试两个月成功收获阿里、美团等6个offer,经验分享

互联网架构师小马

Java 面试

模块三作业

A先生

不要让这2个坏习惯限制了你的成长

俞凡

认知

近几天fil价格暴跌:fil还有希望吗?

区块链 分布式存储 IPFS fil fil行情

如何在Go 服务中做链路追踪

Rayjun

Go 微服务

深入浅出 Java 泛型,一文搞定

猴哥一一 cium

Java 翻译 泛型

一文读懂区块链技术如何改变非洲贸易(下)

Geek_987812

做大做强肉牛产业,生物资产解决方案助力乡村振兴

Geek_987812

【Kafka技术专题】「实践操作篇」单机部署实践手册(2.8.0)

浩宇天尚

kafka MQ kafka配置 消息队列 kafka架构

加速基因测序进程,北鲲云高性能计算平台再发力

北鲲云

从鉴黄师到阿里程序员,我成功逆袭上岸

Java 编程 程序员 计算机

阿里内部最新、最全Java面试手册,Github上获赞70K

Crud的程序员

Java 编程 程序员 架构 面试

阿里P8大佬总结的Java面试宝典,命中率竟高达90%?

Crud的程序员

Java spring 架构 编程语言

完整视频+源码!十六天带你精通基于Spring Cloud微服务电商项目

Java架构追梦

Java 架构 面试 微服务 SpringCloud

kubernetes/k8s CSI分析-容器存储接口分析

良凯尔

Kubernetes 源码分析 CSI Kubernetes Plugin #Kubernetes#

网络攻防学习笔记 Day84

穿过生命散发芬芳

网络攻防 7月日更

大厂的产品研发流程,你知道么?

Simon郎

产品 研发体系 大厂 互联网公司

使用Apache Spark构建可靠的数据湖(九)

数据与智能

spark Data Lake iceberg Hudi

AI解锁无人时代 仍需数据安全保驾护航

Geek_987812

Vue进阶(四):使用 Vuex + axios 发送请求

No Silver Bullet

Vue axios vuex 7月日更 vue-resources

2021年WEB全栈开发技术栈

devpoint

Vue 全栈 7月日更

大三就拿到字节提前批,你不想成长,生活总会逼着你成长

Java架构师迁哥

从鉴黄师到阿里程序员,我成功拿下阿里offer

白亦杨

Java 编程 程序员 计算机

Docker的学习体验

DisonTangor

,docker

去阿里应聘P7Java岗,都会被问到哪些问题?

Java架构师迁哥

阿里大牛把电商购物、电商秒杀、12306抢票、淘宝天猫各种活动的系统架构层面全部记载到这份《高并发系统架构》手册里了

Java 编程 架构 计算机

Vue进阶(七十八):Vue 定时器与 JS 定时器

No Silver Bullet

Vue 定时器 7月日更

Go语言:运行时反射,深度解析!

微客鸟窝

Go

数据cool谈(第2期)寻找下一代企业级数据库

数据cool谈(第2期)寻找下一代企业级数据库

《F# Deep Dives》书评与作者问答-InfoQ