写点什么

微软 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:002076

评论

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

大模型训练的轻量化视觉预训练模型

百度开发者中心

人工智能 大模型训练

重构AI智慧未来,小度全屋智能生态再进化

新消费日报

语音识别技术的行业应用与发展趋势

数据堂

低代码如何赋能实体经济走向数实融合

力软低代码开发平台

报名倒计时 | 超硬核!第四届中国云计算基础架构开发者大会邀你参会

OpenAnolis小助手

云原生 深圳 龙蜥社区 机密计算 CID

大模型训练:Transformer模型、架构与训练方法

百度开发者中心

人工智能 大模型训练

全球领先的即时通讯厂家,为企业提供卓越沟通解决方案

BeeWorks

HarmonyOS语言基础类库开发指南上线啦!

HarmonyOS开发者

HarmonyOS

流程图如何制作?好用的11款流程图软件盘点!

彭宏豪95

效率 流程图 流程图绘制工具 办公软件 绘图工具

选择美国高防服务器,保障您的业务不受网络攻击

一只扑棱蛾子

美国高防服务器 高防服务器

深度学习CV任务的突破与优化

百度开发者中心

人工智能 深度学习 大模型训练

双翻页大屏看书,Mate X5上的华为阅读让你“阅”如纸上

最新动态

私有化部署助力企业信息安全,WorkPlus助您完美替代企微、钉钉、飞书!

BeeWorks

九月 Web3 游戏报告: 数量增长,巨头入场,用户获取和留存仍存挑战

Footprint Analytics

区块链游戏 NFT Web3 游戏 Web3 Games

数字孪生智慧市政三Web3D可视化管理平台

2D3D前端可视化开发

物联网 可视化 智慧城市 数字孪生 智慧市政

华新丽华∣国产化价值替代的先行者

用友BIP

用友 Fast by BIP

MySQL的自增id会用完吗?用完怎么办

互联网工科生

MySQL MySQL自增ID

NFTScan 支持非 EVM 公链的 NFT Collection 的认证功能

NFT Research

NFT NFT\ NFTScan

内部即时通讯软件,为企业协同办公保驾护航

BeeWorks

七个开发者不可不知的VS Code小技巧

树上有只程序猿

vscode

开源贡献难吗?

字节跳动云原生计算

flink 开源 字节

数据库安全运维是什么意思?数据库安全运维系统用哪家好?

行云管家

数据库 数据安全 数据库安全 数据安全运维

Hyperworks对比其他仿真软件有哪些特色_Hyperworks介绍

智造软件

CAE软件 altair hyperworks

OpenHarmony应用全局的UI状态存储:AppStorage

OpenHarmony开发者

OpenHarmony

通过 Random 和 UUID 算法实现 JMeter 的随机数生成

Liam

程序员 测试 Jmeter 测试工具 随机数

ABAQUS常用的插件及使用介绍-ABAQUS软件教程

思茂信息

abaqus 有限元仿真 有限元技术

优化模型之”标注错误“

矩视智能

深度学习 机器视觉

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