代码改变世界

F#探险之旅(一):选择不同的开发方式

2008-08-21 22:19 Anders Cui 阅读(...) 评论(...) 编辑 收藏

F#系列随笔索引页面

踏上新的旅途

每次旅途都会让人兴奋,都会带来愉快的体验。踏上新的地方,欣赏那些美景,感受那些与自己无关的人和事,身心会得到很大的放松。而回来以后,则会对自己习惯居住的地方产生新的感受,不知你有没有如此的体会呢?

学习F#,也算是这样的旅途吧,毕竟其理念与一直接触的C/C#等很不一样。好奇心遇到未知的事物就会兴奋,就像要踏上新的旅途一样。那为什么叫探险之旅呢?

知识是有时效的资产,咱们微软平台下的开发人员对此应当感受颇深。平台、语言、环境更新地很快,更新意味着旧有知识的贬值,随之带来的是程序员的贬值(但也不是绝对的)。另一方面,长时间使用同一种平台/语言/环境,我们的思维也会僵化。这些都不是我们希望看到的。

我们需要对自己的知识进行评估并进行投资。富兰克林说,“知识上的投资总能得到做好的回报”,但别忘了,投资总会伴随着风险,这就是所谓的“探险”了。

《程序员修炼之道》建议,每年至少学习一门新语言,认为这会帮助程序员拓展思路,避免墨守成规。个人认为,学习不同的语言,了解解决问题的不同方式,让自己融会贯通,这是好事,但至少要对一门语言有够深的理解,否则可能会“样样精通,样样稀松”。

另外说句题外话,《程序员修炼之道》还建议,阅读非技术书籍,这也许是一个容易被忽略的问题。记住,我们是程序员,但首先我们都作为一个人。

言归正传

要了解F#跟和我们朝夕相处的C#的关系,可以看看Allen Lee从C#3.0到F#。要想快速地获得对F#的了解,可以看看这两篇随笔:F#快速上手(一)F#快速上手(二)

接下来我们看看开发F#时可以选用的不同方式。

(一)Notepad

F#程序本质上就是文本文件,所以我们可以使用文本编辑器来编写,比如记事本。它的文件扩展名为.fs,编写完毕后使用fsc.exe来编译。比如,编写一个最简单的文件helloworld.fs:

#light

print_endline 
"Hello World"
read_line()

 

使用命令fsc.exe helloworld.fs编译该文件,生成helloworld.exe文件,它将在控制台输出一段文本。注意要将fsc.exe的路径添加到环境变量中。

如果采用文本编辑器的方式,我们当然不会真的使用Notepad,大可以采用Editplus或Notepad++这样的工具,它们不但提供了更强大的编辑功能,还可以添加用户自定义工具,这样就不用每次都打开命令行编译了。

(二)FSI

F#交互控制台(F# Interactive Console, FSI)采用的是“REPL loop”模式,即Read-Evaluate-Print-Loop。也就是输入一段代码,编译并执行,然后输出结果。通过它您可以快速地开发和测试程序。可在开始菜单中找到它。

(三)VFSI(在VS中集成FSI)

要在VS中启用FSI,打开Add-in Manager窗口。

addInManager

选中“F# Inactive for Visual Studio”。然后,选中要执行的程序代码:

firstTwoLines

接着按下Alt+Enter(实际上,如果FSI还么有打开,需要按两次Alt+Enter)。这时会看到出现了一个工具窗口:

fsiWindow

我们刚才做的事情是将代码片段直接发送给FSI会话,FSI将结果输出。

这是最简单的方式了,我们可以利用VS提供的智能感知,可以查看各个标识符的类型等信息,非常方便。

另外我们可以将fsc.exe添加到外部工具中,为该命令分配快捷键。比如可以这样添加:

fsexternaltool

然后分配快捷键:

fstoolshortcut

有时FSI会莫名地不能编译通过,通过这样的方式可以方便的将单个文件编译为可执行文件,编译也不会有问题了。

(四)F# Script

除了.fs,我们还可以将代码文件保存为.fsx,在资源管理器中右击该文件,会发现“Run with F# Interactive”菜单项,选择它就可以执行代码了,这种方式适合于小型文件,可以随时修改,无须编译。

(五)SharpDevelop

最新版的SharpDevelop提供了对F#项目的支持,但是不支持智能感知。我觉得最有用的是它的文件顺序调整功能,如果你的项目包含较多的文件,可以试试它。

关于文件顺序的问题,可以参考如何组织程序一文。

最后,建议主要使用第三种方式即VFSI开发,其它的作为补充。

F#系列随笔索引页面