九个使用F#的理由

时间:2022-02-22 19:08:38

原帖地址:http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!1859.entry

翻译:Sean Woo

(开场白:Robin MilnerML之父,最近去世了,Donblog简短的追溯了Milner工作对.NET泛型和F#类型推断的影响。作为一名编程语言爱好者,我喜欢学习语言的历史,以及各种语言特征之间不停的互相影响。)

最近我们更完成了VS2010这个产品,之前我少花了很多时间来写代码,多花了时间来演讲;在之前博客中我提到过,我最近在准备一个TechReady,同时我还要为Alt.NETChris Smith做一个F#研讨会。为演讲做准备的过程,让我有机会来回顾和思考F#如何来演好这场大演出,以及各位观众的感觉是怎么样的。有很多种理由人们可能会发现F#有用,但是大部分演讲、演示仅仅集中于一到两点。我想组织一下我的思路,于是就有了这篇博客。

不用太多思考,这有9个理由来使用F#

1. 测量单元。如果你正在使用数字表示物理数量(如千克,米和秒,或者像素、英尺,美元、欧元,等)的领域工作,你能使用F#类型系统来保证量纲分析很好的工作。几乎每个人使用这个特性都会有一种“太棒了”的体验,因为编译器能找到所有不希望看到的问题(我是在2008 ICFP编程的过程中体会的)。在一些特定领域,这类静态的类型检查真是一个要人命的特性。你能从学到更多。

2. .NET的函数式编程。如果你需要写一个尤其经得起函数式编程技术考验的组件(比如游戏人工智能,静态模型,符号编程),你需要与SQLExcel,或者Xbox交互,或者在Silverlight浏览器中运行,或者在Azure的云中漫步,作WCFWPF,或者WinForm,或者简单的与现有的C#/VB/C++/COM代码进行对话,那么F#就是了。.NET平台能有效的使用各种技术,并与之交互,而F#扩展了这个平台,通过提供一种作第一类函数式编程和裕各种技术做无缝交互的方式。

3. REPL来探索编程。F#交互工具窗口能更简单的运行一小段代码。当你正使用大数据或者数学模型工作的时候,这会使得浏览数据更加方便,玩“什么-如果”的游戏,而且能在与数据/模型交互时用一种很“实时”的方式。当为数据虚拟化与库连接时,这开启了一些真的很酷的东西

4. 异步和并行编程。我最近写了关于F#的唯一的编程模型,用于写异步I/O不会被阻塞的代码。异步编程模型也对并行的CPU加强工作作了扩展,而F#类库也使事件响应,使用轻量级的,或者运行GPU代码等变得更加直观。(实际上网上有很多关于这观点的文章,我就在Donblog里就发现很多。)多核在这,F#语言结构和类库非常适合做并行编程(函数式编程风格一些本身就有的优势就不提了)。

5. 嵌入式领域特定的语言(EDSLs)。F#特征中的一个变量(包括定义新运算符,闭包和函数应用程序标记,注解,类型推断和所有轻量级标记)使得F#是创建EDSL的一门好语言。一些例子,包括FsUnit来做单元测试,FAKE来创建脚本,FParsec来分析,WebSharper来使用Web应用程序。

6. 脚本。经常会发生,我需要写一个脚本,但是我很少使用perl或者批处理文件,因为我一直忘了这些语言的标记。现在我使用F#来写很多脚本任务,都是因为 FSI就是个新的perl”以及这是些很小的任务(例如,如果我不知道字母Aascii值,我就只需要再F#交互窗口中打出这样的就可以了“int ‘A’;;”)。我至少知道一些之前使用批处理文件或者perl脚本的人现在都在使用.fsx文件了。对我来说,我知道F#一开始是一门“软件工程师”语言,同时也是一门很好的“脚本语言”。

7. 学术界的一门实用语言。回到我的大学马上要毕业的时候,我在学校里学到的第一门真正的编程语言是Pascal。(是的,比C#,甚至Java更早,我是个老头子。)在大学里,好像在教更多“纯粹的”与“计算机技术”的语言和教更多的实用主义语言之间有总是有矛盾(比如,你能在离开学校时候轻易的找到工作)。这仍旧是一个争议颇多的话题,但是我认为我们现在的情况好多了,现在用包括JavaC#ScalaPythonF#,而我们那时可是十几二十年前的事情;现在有很多同时在“教授计算机技术的好语言”和“对现实社会有用”都表现很好的语言。

8. 扩展你的思维和职业生涯。我认为有不少人在他们的日常生活中使用C#或者VB,他们能学更多关于函数式编程,但一深入,发现Haskell太难而且太花时间。F#提供了一条更优雅的通往函数式编程的大道,取决于他现成的.NET Visual Studio的熟悉程度。很多仅把F#作为爱好的人们说是他们学到了一些能用在他们日常工作中的新策略、算法(比如使用C#),太好了!

9. 乐趣!我时常听到人们说他们有多喜欢使用F#。谁不喜欢把工作搞定的同时又充满乐趣呢?

在一篇F#的博客文章,或者视频中,很轻松(而且也确实合适)来“记住”这个语言,集中在一个特定的有用的方面。但是有时回顾和看看人们感觉和使用F#的无数方式是很重要的。所以这是一次尝试,一个分散的列表,用来列出各种人们为什么在基于爱好,学术或者现实中的开发者使用F#的原因。这门语言该上路了,现在就要看看人们怎么去实现所有的方式。

顺便说,有一种来知道微软产品是“真的”的方式就是当他们给你一件背后印有产品标志的T恤。这就是一张我们(VS语言组人们)刚拿到的T恤背面的照片:

九个使用F#的理由