微软Project Springfield团队的F#使用心得

栏目: ASP.NET · 发布时间: 6年前

内容简介:微软Project Springfield团队的F#使用心得

Project Springfield 是一个用于在软件中查找关键安全错误的模糊测试服务。微软Springfield团队首席软件工程经理William Blum介绍了他们团队 如何利用F#来构建云服务

简洁性 经常被认为 是F#的主要优点之一。Blum提供了一些Project Springfield相关的数据:

为了移除一些旧的依赖,我们将一个 Perl 脚本移植成F#程序,代码量减少了37%。在另外一个工作中,我们将1338行PowerShell脚本移植到F#只需要489行(小了2.7倍)。在这两种情况下,除了代码量的减少,最终的F#程序还在日志记录、可读性和可靠性方面得到了改进(部分由于静态类型检查的原因)。

Jet的软件工程师Rachel Reese在F#的简洁性方面持有相同的观点,她在“ 为什么电子商务公司选择F# ”中提到:

所以,我们开始构建两种方案:C#方案和F#方案,来比较他们的效果。最后,我们选择坚持使用F#。主要原因在于F#使我们能够以更少的代码提供相同的功能,这显然更容易维护并减少了错误。

代码正确性也常常被Springfield团队和F#用户提到。例如,空引用,也被称为“十亿美元的错误”,在F#中是不允许的。在F#中,缺失的数据使用 Option类型 表示,其中值可以是Some valueOfAVariable或None。

可区分联合并不局限于Option类型,它们也可以表示复杂的对象,然后在模式匹配表达式中使用。下面的代码段演示了一个事件类型和调度它的函数。Blum解释说,代码被授权处理所有情况,因为它是由编译器执行的。

type CustomerId = System.Guid

type EventType =
  | MsgType1 of CustomerId
  | MsgType2 of CustomerId * string * int
  | MsgType3 of CustomerId * string * int option

// 用模式匹配来处理信息
let dispatch msg =
  match msg with
  | MsgType1 -> ...
  | MsgType2 -> ...
  | MsgType3 -> ...

F#还增加了使用类型提供程序验证动态数据源的可能性。类型提供程序支持对数据源(如 SQL 数据库或JSON)在编译时完成验证,而不是在执行时。

Springfield采用动态分配计算资源的方式,因此需要在运行时生成JSON参数文件,这是一个容易出错的任务。使用F#类型提供程序,我们可以在编译时静态验证我们生成的模板参数是否有效。因为我们的ARM模板不断发展,这极大地加快了开发和调试过程。

Springfield团队还采用了F#来编写脚本。REPL环境 F# Interactive 提供了一种在没有预先编译的情况下执行F#脚本的方法,这是脚本语言的一个预期功能。

F#脚本的另一个优点是静态类型检查,这对脚本语言来说是不寻常的!实际上,这将大大节省调试时间。IDE中的智能感知功能会立即发现错误(如变量名称中的拼写错误或输入错误)。重构代码也会更加方便。这与我们团队以前采用的PowerShell脚本的脆弱性形成鲜明对比。

查看英文原文: Testimonial on Using F# by Microsoft's Project Springfield Team

感谢薛命灯对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

游戏测试精通

游戏测试精通

舒尔茨 / 周学毛 / 清华大学出版社 / 2007-9 / 48.00元

《游戏测试精通》来自3位在游戏测试领域都有着极其丰富经验的专业人员,是亚马逊“五星级”畅销书,也是国内第一本专业级游戏测试经典之作,不仅内容全面、实例丰富,而且讲解透彻、可读性强,并提供多个资源下载和技术支持站点。现如今,游戏产业发展迅猛,游戏测试已成为游戏产品、游戏软件、游戏程序设计与开发不可或缺的环节。《游戏测试精通》主要揭示了如何将软件测试的专业方法运用到游戏产业中,全面涵盖了游戏测试的基本......一起来看看 《游戏测试精通》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试