介绍VS 2010:F#也有新特性(转)

一、简介

  F#是一个基于.NET框架的多模式编程语言,Visual Studio 2010中对此语言提供了内置支持。F#支持函数式编程、面向对象编程和命令式编程。

  以下各节描述的是在Visual F#的第一个正式版本中所提供的一些特征。

 

 

作 为 Microsoft® .NET Framework 家族的新成员,F# 提供类型安全、性能以及类似脚本语言的工作能力,所有这些都是 .NET 环境的一部分。此函数式语言由 Microsoft 研究院的 Don Syme 发明,作为 CLR 的 OCaml 语法兼容变体,但 F# 已经迅速地从科研转为投入实际应用。
随着函数式编程的概念通过 .NET 泛型和 LINQ 等技术越来越多地渗入主流语言(例如 C# 和 Visual Basic®),F# 在 .NET 社区里的知名程度也不断提高——因此,2007 年 11 月 Microsoft 宣布将 F# 确定为受支持的 .NET 编程语言。
多年来,大家一直认为函数式语言领域(ML、Haskell 等)更适合用于学术研究,而不适用于专业开发。但这并不代表这些语言没有过人之处。事实上,.NET 的一些重要的功能增强(例如泛型、LINQ、PLINQ 和 Futures)都是将一些函数式编程概念全新应用到语言所致。以往对这些语言的关注程度不高主要是因为它们的目标平台与专为 Windows® 编写程序的开发人员关系不大、不能与底层平台很好集成,或者不支持关系数据库访问、XML 解析和进程外通信机制等主要功能。
但是,CLR 及其“多种语言,单一平台”的方法将使此类语言在 Windows 开发中的应用越来越广泛。并且顺理成章地引起在一线工作的程序员们的注意。F# 即是这样一门语言。在本文中,我将为您介绍一些 F# 的基本概念和优点。然后,为了帮助您初步了解 F#,我将详细介绍它的安装过程并编写几个简单的小程序。

 

为什么要使用 F#?
对于小部分 .NET 程序员来说,学习一门 .NET Framework 函数化语言无疑将使自己在编写功能强大软件方面前进一大步。而对其他程序员来说,学习 F# 的理由就因人而异了。F# 能为开发人员提供哪些益处?
随着多核 CPU 的普及,安全并发程序已成为过去三年来的关注焦点。函数式语言倡导一种固定不变的数据结构,可在线程和机器之间传递,而无需担心线程安全或原子访问,开发 人员可以利用这一特点支持并发操作。函数式语言还可更轻松地编写更支持并发特性的库,如稍后将在本文中介绍的 F# 异步工作流。
尽管对于专攻面向对象开发的程序员而言,可能对这种语言感觉不是这么强烈,但在很多情况 下,函数式程序确实可以简化某些应用程序的编写和维护。例如,编写一个将 XML 文档转换成其他格式数据的程序。虽然完全可以通过编写一个 C# 程序,让它解析整个 XML 文档并应用各种 if 语句确定在文档中的不同位置采取何种措施,但实际上更好的方法是编写可扩展样式表语言转换 (XSLT) 程序。当然,XSLT 肯定包含大量的内置函数机制,如同 SQL 一样。
F# 强烈建议不要使用空值 (null),而是提倡使用固定不变的数据结构。这些特性可以减少需要编写的特例代码量,从而有助于降低编程出错的频率。
使用 F# 编写的程序还更加简洁。您可以切实地从两方面减少键入的内容:击键次数更少并且必须要向编译器通告变量类型、参数或返回类型的位置点也更少。这意味着需要维护的代码将大大减少。
F# 具有与 C# 相似的性能特点。但是,与简洁程度相似的语言(特别是那些动态和脚本语言)相比,它的性能特点要好得多。并且,F# 也包含通过编写程序段并交互式执行查看数据的工具,这一点与许多动态语言类似。

 

安装 F#
F# 可从 research.microsoft.com/fsharp/fsharp.aspx 免费下载,它不仅会安装所有命令行工具,而且还会安装 Visual Studio® 扩展软件包,该软件包提供彩色语法突出显示、项目和文件模板(包括作为入门指南的详细 F# 示例代码)以及 IntelliSense® 支持。同时它还提供可在 Visual Studio 内部运行的 F# 交互式 shell,它使开发人员能够从源文件窗口中提取表达式、将表达式粘贴到交互式 shell 窗口,并立即得到代码段的结果——在类似增强的 Immediate 窗口中显示结果。
在我撰写本专栏时,F# 在 Visual Studio 内作为外部工具运行,所以它缺少某些开发人员能够从 C# 或 Visual Basic 中获得的无缝集成的能力。此外,F# 还缺少 ASP.NET 页面设计器支持。(这并不是说 F# 不能在 ASP.NET 中使用,完全不是。这仅表示 Visual Studio 并没有为 F# 提供类似 C# 和 Visual Basic 的那种现成拖放式开发体验。)

尽管如此,当前版本的 F# 还是可以在能够使用其他 .NET 兼容语言的任何位置使用。

 

  二、支持函数式编程

  函数被视为值,可以直接传递给其他函数。借助于此功能,你可以方便地编写高阶函数(调用函数的函数)。这使得开发人员可以更容易编写往往更不容易出错的声明性代码。

  F#支持组合式编程。你可以通过使用简单的操作符语法来组合函数。您可以通过使用管道线操作符把函数调用组合起来,这样可以使一个函数的输出或返回值能够传递到另一个函数作为输入。您还可以通过使用组合操作符把函数组合起来的方式来定义一个新函数。

  欲了解更多的信息,请参见“函数(F#)”。

  三、Lambda表达式

  Lambda表达式能使函数进行即时定义而不必加以命名。欲了解更多的信息,请参阅“Lambda表达式:fun关键字(F#)”。

  四、有用的数据类型

  F#提供了支持函数式编程风格的类型,如针对简单数据集合的元组和针对结构化符号数据的discriminated unions。欲了解更多的信息,请参阅“元组(F#)”、“Discriminated Unions(F#)”和“Options (F#)”。

  五、不可变的数据类型

  F#提供了许多不可变的数据结构,如不可变的列表、映射、集合、序列和记录等。欲了解更多的信息,请参见“列表(F#)”,“序列(F#)”和“记录(F#)”。

  六、模式匹配

  模式匹配功能允许您把数据分解成各个组成部分,然后以分解的数据为基础执行复杂的分支运算。模式匹配也可以扩展。欲了解更多的信息,请参阅“匹配表达式(F#)”,“模式(F#)”和“活动模式(F#)”。

  七、异步并行编程

  F#支持异步编程,并且提供了使这种编程比以往更容易的结构。欲了解更多的信息,请参阅“异步工作流(F#)”。F#也可以用来与.NET框架并行扩展一起使用。欲了解更多的信息,请参阅“.NET框架中的并行编程”。

  八、交互式编程

  Visual F#中还包括了一个F#解释器,F#互动器(fsi.exe),它能够以交互方式编译并执行代码。这使您能够轻松地创建原型代码,并尝试在不需要编译一个 项目的情况下进行结构编码。F#互动器也与Visual Studio IDE集成在一起。欲了解更多的信息,请参看“F#互动器(fsi.exe)参考”。

  九、延迟计算

  F#支持延迟计算,这可以使您直到需要结果时才进行计算。欲了解更多的信息,请参阅“延迟计算(F#)”。

  十、支持面向对象编程

  F#支持面向对象语言特征。除了让您使用F#语言开发.NET框架API外,这种特征可以使F#程序能够充分地访问.NET框架。欲了解更多的信息,请参见“类(F#)”,“成员(F#)”和“继承(F#)”。

  十一、支持命令式编程

  F#支持命令式编程结构,如可变的变量和数组,有副作用的函数和循环结构等。这特别适合于使用上述方式编程解决问题的场所。

  十二、支持数学计算

  F#支持数学计算。这包括对操作符重载的支持,使用泛型的操作符和一全套数学运算符,其中包括幂运算符。

  F#还提供了对关联了测量单位的浮点数据的专门支持,这可以支持对浮点公式进行单位检查。

  十三、先进的类型系统

  F#的支持泛型编程。欲了解更多的信息,请参见“泛型(F#)”。

  F#是静态类型的语言,它支持类型推断。这意味着,所有的程序元素在编译时都有一个明确的类型,从而保证了类型安全, 但你不必显式地指定每个值的类型。因为F#编译器能够不断地推断一个程序元素的类型而不必显式地提供类型。这样一来,代码更加紧凑,与此相关的编程中的类 型不匹配错误大大减少。类型推断还包括自动归纳,这意味着有可能是泛型的函数将被自动编译为泛型。欲了解更多的信息,请参见“类型推断(F#)”。

  十四、有用的库

  F#包括了一组库,为核心语言、集合类型、针对F#程序集的反射和格式化I/O等提供支持。F#还提供了对.NET框架4功能(如对.NET框 架的并行扩展和Windows Presentation Foundation)的完全访问支持。欲了解更多的信息,请参阅“.NET框架4”。

posted @ 2011-01-14 12:27  董雨  阅读(348)  评论(0编辑  收藏  举报