写点什么

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

  • 2017-01-09
  • 本文字数:1244 字

    阅读完需:约 4 分钟

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 )关注我们。

2017-01-09 18:001636

评论

发布
暂无评论
发现更多内容

Plugin Alliance Brainworx Mäag Audio EQ4 for Mac(人声均衡器)

理理

NineData云原生智能数据管理平台新功能发布|2024年11月版

NineData

Nexpose 7.0.0 for Linux & Windows - 漏洞扫描

sysin

Nexpose

VMware Integrated OpenStack 7.3 现已支持 vSphere 8.0U3 和 NSX 4.2 互操作性

sysin

vmware OpenStack

AI与低代码技术融合:如何加速企业智能化应用开发?

天津汇柏科技有限公司

低代码 AI人工智能

小小的日志,大大的坑

京东科技开发者

Arturia V Collection X for mac(经典合成器和键盘合集)

理理

C4D流体模拟插件NextLimit RealFlow汉化版下载 mac/win

理理

摄影师必备神器:Nik Collection滤镜套装全新升级

理理

2025史上最全Java面试题:初级-中级-高级!

程序员高级码农

Java 程序员 java面试 面试八股文 Java面试题

新回坡通过区块链技术实现商品溯源系统

北京木奇移动技术有限公司

区块链技术应用 区块链技术开发

宿迁等保测评机构有吗?在哪里?

行云管家

等保 等保测评 网龄安全 宿迁

【稳定性】上线三板斧(可灰度、可验证、可回滚)

京东科技开发者

一本书精通复杂的后端系统

博文视点Broadview

QT软件外包开发的注意事项

北京木奇移动技术有限公司

qt Qt Creator

reFX Nexus for Mac 专业的音乐制作软件 其丰富的音色库包含大量高质量预设

理理

《Hive编程指南》读书笔记

京东科技开发者

Imagenomic Noiseware破解版 (ps图像降噪滤镜) mac/win

理理

AE三维粒子插件 Trapcode Form 安装教程

理理

炫酷机车摄影调色Lightroom预设

理理

TDengine 签约安徽智质,助力海螺水泥智慧工厂升级

TDengine

数据库 tdengine 时序数据库

扫盲Kafka?看这一篇就够了!

京东科技开发者

测试开发工程师的福音:测试开发高薪私教进阶班,名企导师一对一,职场技能飞速提升!

测吧(北京)科技有限公司

测试

利用mybatis的typeHandler解决手动拆分拼接数据的麻烦

六哥是全栈

mybatis TypeHandler

保险业怎么定义?是否需要用到堡垒机?

行云管家

保险 堡垒机 等保合规 网龄安全

500种专业级Lut调色集合包-lut预设教程

理理

合合信息智能图像处理技术,让你的设备更智能

合合技术团队

人工智能 图像识别 图像处理 打印

MES在传统制造业中的核心作用与应用策略

万界星空科技

数字化 mes 万界星空科技 制造业工厂 制造业转型

50款Vsco滤镜胶片Lightroom预设

理理

即时通讯技术文集(第45期):微信、QQ技术精华合集(Part2) [共14篇]

JackJiang

即时通讯;IM;网络编程

“百度搜索们”会被“Kimi们”取代吗?

趣解商业

百度 互联网 科技 AI搜索

微软Project Springfield团队的F#使用心得_.NET_Pierre-Luc Maheu_InfoQ精选文章