Toolbox

F# 工具和资源

Terrence Dorsey


F# 是一种针对 Microsoft .NET Framework 的新型函数式、类型安全的编程语言。该语言由 Microsoft Research 团队开发,基于 Objective Caml(即 OCaml),后者又基于 ML。F# 的创建者 Don Syme 将其称为“针对 .NET 的类型安全、可伸缩、面向数学的脚本与编程之间的综合体”。

虽然 F# 的问世时间不长,但它很快便吸引了一大批编程爱好者。这可能是因为 F# 与您熟悉的 .NET Framework 和 Visual Studio 用法相似。可能是因为 F# 在一种语言中结合了函数式、命令式和面向对象的编程方法。也可能是因为 F# 是一种还支持编译时类型化灵活性的强类型化语言。

无论是该语言的哪些方面吸引了您,都可以通过下面的指南了解可帮助您充分利用 F# 的工具和资源。

入门

如果您使用的是 Visual Studio 2010 和 .NET Framework 4,则已安装开始使用 F# 2.0 所需的全部工具。如果您要在早期版本的 Visual Studio 或其他开发环境中使用 F#,则还可以下载 F# 2.0 工具的独立安装程序 (bit.ly/fGVQvl)。

您了解 F# 的下一站应是 Microsoft F# 开发人员中心 (msdn.microsoft.com/fsharp)。您在此处可以找到文档、示例链接、F# 专家发布的博客文章等。

您的核心资源是 MSDN 库中的 F# 语言参考 (msdn.microsoft.com/library/dd233181)。这里包含所有语言详细信息以及示例代码。

开发环境

如前所述,Visual Studio 2010 内在提供对 F# 的深入支持。但是如果您要在其他计算机甚至是其他操作系统上尝试该语言,请访问试用 F# 网站 (tryfs.net),在该网站上,您可以在基于浏览器的解释程序中使用 F# 以交互方式编码。

没有 Visual Studio 的用户可以从 Microsoft (msdn.microsoft.com/vstudio/bb984878) 以独立应用程序或虚拟机的形式获取试用版下载。除了 Visual Studio 之外,还有一些可直接支持 F# 开发的其他免费和商用 IDE。这些 IDE 包括 SharpDevelop(sharpdevelop.net/OpenSource/SD)、xacc.ide (xacc.wordpress.com) 和 MonoDevelop (monodevelop.com)。

MonoDevelop 的一个独特之处在于它使您可以在 Windows、Mac OS X 或 Linux 上设置开发环境,并使基于 .NET Framework 的应用程序以这些平台以及 Android、iOS 和 Windows Phone 7 为目标。功能变化包含有关运行 F# 功能的详细信息;请参见“在 MonoDevelop 中安装和使用 F#”(functional-variations.net/monodevelop)。Robert Pickering 还在其 F# 资源博客上撰写了有关在包含 Mono 的 Mac OS X 和 Linux 上使用 F# 的指南 (strangelights.com/fsharp/MonoLinux.aspx)。

此外,如果您是忠实的 Emacs 用户,也不要失望:Laurent Le Brun 正致力于研究 Emacs 中的 F# IntelliSense (bit.ly/f3pd8b)。有关详细信息,请查看其博客。

工具、模板和库

有各种工具可使 F# 更简单且更强大。您首先应下载的可能是 F# 开发团队提供的 F# PowerPack (fsharppowerpack.codeplex.com)。PowerPack 包含 F# 编译器和代码库的源代码,以及一些其他工具和库。其中包括矩阵库、用于文法和分析的工具、基于 LINQ 的数据访问以及用于编写 F# 库文档的工具。

FAKE (github.com/forki/FAKE) 是一种用于 F# 的构建自动化系统,其设计灵感来自 make 和 rake 这类工具。通过 FAKE 可以同时利用函数式编程方法和对 .NET 程序集的直接访问,同时还可直接与识别 F# 的 IDE(如 Visual Studio 和 SharpDevelop)的编辑和调试功能集成。

访问 CodePlex 可找到几个便利的测试工具:TickSpec (tickspec.codeplex.com) 是一种行为驱动开发框架,该框架使您可以通过 Gherkin(given、when、then)描述行为,然后对 C# 和 F# 方法执行行为。

FsUnit (fsunit.codeplex.com) 是一个单元测试库。只需将 FsUnit.fs 文件拖动到您的项目中,然后开始编写测试装置和测试。

FsCheck (fscheck.codeplex.com) 是一种基于 Haskell QuickCheck 项目的随机测试框架,该框架使您可以采用 F#、C# 或 Visual Basic 编写测试规范。

如果您对 Windows Phone 7 开发感兴趣,请转到 Visual Studio 库并获取用于 Windows Phone 的 F# 库 (XNA) 模板 (bit.ly/h5sg9h) 以及用于 Visual Studio 的 F# 和 C# Win Phone 应用程序 (Silverlight) 模板 (bit.ly/fraF4S)。

再来谈谈 Visual Studio,下面是有助于使用 F# 的两个很好的项目:F# 项目扩展程序 (fsprojectextender.codeplex.com) 可帮助在解决方案资源管理器中组织 F# 项目中的文件,而不会影响编译顺序;F# 重构 (fsharprefactor.codeplex.com) 正在开发用于对 F# 代码进行重构的工具集(此项目尚未准备好用于生产工作,我相信他们会十分感激您的贡献;请向制作此处所列所有优秀工具的社区提供一些反馈)。

F# 中的 Web

Websharper (websharper.com) 是一种用于以 F# 编写 Web 应用程序的框架。WebSharper 2.1 Beta 5 引入了针对一些热门 Web 库(包括 Google 地图、Google Visualization、jQuery、Bing 地图、Modernizr、InfoVis 和 Protovis)的 F# 兼容性扩展。

作为 Tomas Petricek 对 F# 社区所做的诸多贡献之一,他开发了 F# Web 工具 (tomasp.net/projects/fswebtools.aspx),该工具可帮助您使用 F# 和 LINQ 创建客户端/服务器/数据库 Web 应用程序。请务必查看 Petriceck 的博客 (tomasp.net/blog) 以了解 F# 新闻、提示和技巧。Petricek 是创建 F# 的 Microsoft Research 团队的成员,因而对该语言有着独特深入的见解。

记得我们所说的“贡献”么?好的,Petricek 还创建了 F# 代码段 (fssnip.net),这是一个站点,可以在其中共享和借鉴针对数百种不同用途的 F# 代码段。该站点具有完整的语法突出显示和类型信息。

趣味资料

在 F# 领域中并不都是严肃的资料。有时您可以只是为了好玩而构建某些内容。我觉得 IronJS (github.com/fholm/IronJS) 便属于这一类。IronJS 是在 DLR 上运行的 JavaScript 的快速实现,采用 F# 编写。查看代码并尝试运行。

VSLab (vslab.codeplex.com) 对数学爱好者和数字处理工具更加有用一点,它提供与 Visual Studio 中的 Matlab 类似的基于 F# 的交互式可视化环境。

image: VSLab Math Visualizations in Visual Studio

Visual Studio 中的 VSLab 数学可视化

为了帮助您了解 F#,Chris Marinos 启动了一个长期进行的项目,名为 F# Koans (bit.ly/hovkxs)。F# Koans 的灵感来自用于学习 Ruby 语言的 Ruby Koans 方法,可通过测试向您讲授 F# 的基础和更深入的实质。每个 koan 解决方案都演示一个运行时错误。您的目标是去掉错误。通过修复错误,您可获取有关 F# 语言和函数式编程的知识。请在 chrismarinos.com 上的 Marinos 的博客中查找更多 F# 随笔。

阅读是基础

我们中大多数人都依靠传统的优秀书籍(并且越来越多地依靠电子书籍)来学习新技能,并以这些书籍为参考资料了解语言详细信息和实现方法。在学习 F# 作为您的新技能时,您可以求助于以下一些书籍。

image: book, Expert F# 2.0

Expert F# 2.0

《Expert F# 2.0》(Apress,2010)(tinyurl.com/4ddksgm) 作者为 Don Syme、Adam Granicz 和 Antonio Cisternino,该书是由该语言的发明者和 F# 开发社区的两位领导成员撰写的权威语言指南。您将学会如何将 F# 与 .NET 技术(包括 ASP.NET、LINQ、Windows Presentation Foundation 和 Silverlight)结合使用。您可以获得印刷版和电子书籍格式的《Expert F# 2.0》,包括 Kindle 版本。

另一个开发人员参考是**《Programming F#》**(O’Reilly,2009)(tinyurl.com/4dhl2z9),其作者为在 Microsoft 的 F# 开发团队工作的 Chris Smith。Smith 会指导您使用 F# 解决与函数式、命令式和面向对象编程方法有关的问题,以便您可以了解该语言的完整功能。还有一个 F# 库概述。《Programming F#》提供印刷版和各种电子书籍格式,包括 Kindle 版本。

Flying Frog Consultancy (ffconsultancy.com) 专门从事函数式编程和技术计算方面的工作。该公司提供了一些 有关 F# 的重要出版物,包括**《Visual F# 2010 for Technical Computing》、《F# for Numerics》、《F# for Visualization》以及每月的《F# Journal》**,另外还提供了一些有关 OCaml 和数据分析方法的其他书籍。深层次爱好者资料!请不要忘记查看 F# 新闻博客 (fsharpnews.blogspot.com) 以了解面向具有 F# 和函数式编程经验的开发人员的新闻、分析、示例和工作列表。

社区资源

F# 从表面看似乎是一种小众技术,但是围绕它发展起来一个充满热情的巨大社区。若要加入,请先在 Web 上浏览其中一些热门站点:

F# 社区 (communityforfsharp.net) 大约每月通过 Live Meeting 开一次会,由世界各地的成员进行演示。以往的会议在该站点上进行存档。

F# 中心 (fsharpcentral.com) 提供每周 F# 社区新闻摘要。如果您要随时了解最新文章、发布、培训和工作机会,请将您的浏览器或 RSS 阅读器指向此处。

hubFS:F# 地盘 (cs.hubfs.net) 承载了一些面向 F# 程序员的新闻源、博客和讨论论坛。

此外,这里还有一些 F# 社区中的重要人员,您可以浏览他们的博客以学习一些提示和技巧:

Gordon Hogenson (blogs.msdn.com/gordonhogenson) 是一位技术撰稿人,他写过 F# 方面的大多数 MSDN 文档。

Luke Hoban (blogs.msdn.com/lukeh) 是 F# 团队的一名项目经理。虽然他现在在 JavaScript 团队工作,但他仍热爱 F# 并在博客上提供了一些非常有用的信息。

Richard Minerich (richardminerich.com) 在共享有关 F# 和其他有趣主题的博客文章和新闻方面做了极其出色的工作。您也可以关注他的 Twitter,以获得实时 F# 体验 (twitter.com/rickasaurus)。

Dan Mohl (bloggemdano.blogspot.com) 是 F# 知情人和 Microsoft MVP,其博客包含大量有关 F# 和 Microsoft 的内容。Mohl 一直在研究与 F# 相关的 NuGet 程序包,您可以向他求教最新新闻。

Don Syme (blogs.msdn.com/dsyme) 是 F# 的创建者,他通过博客共享一些有关该语言工作原理和未来版本预期功能的深入见解。您还会在此处找到有关 F# 的重要新闻。

Terrence Dorsey MSDN 杂志 *的技术编辑。*您可以在 terrencedorsey.com 阅读其博客文章,或关注他的 Twitter:twitter.com/tpdorsey

衷心感谢以下技术专家对本文的审阅:Chris MarinosRichard Minerich