转载

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

由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

正文到此结束
Loading...