2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

评论

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

我的远程办公经验 | 社区征文

坚果

初夏征文

异步容灾,AntDB的业务不间断数据恢复方案

亚信AntDB数据库

数据库 高可用 容灾 数据恢复

覆盖接入2w+交通监测设备,EMQ为深圳市打造交通全要素数字化新引擎

EMQ映云科技

物联网 IoT 智慧交通 实践案例 6月月更

对讲功能在远程办公中的应用 | 社区征文

Changing Lin

初夏征文

从华为WeAutomate数字机器人论坛,看政企领域的“政务新智理”

王吉伟频道

RPA 数字化转型 华为WeAutomate 政务新智理 数字政府

轻松实现微信滑动返回页面效果 | 社区征文

Changing Lin

android 安卓 自定义view 初夏征文

CRM快速开发平台:破解管理困局

力软低代码开发平台

自适应批作业调度器:为 Flink 批作业自动推导并行度

Apache Flink

大数据 flink 编程 流计算 实时计算

A/B测试助力游戏业务增长

字节跳动数据平台

游戏开发 游戏 ab测试 游戏运营

2022淘宝天猫618背后的技术秘密

阿里巴巴大淘宝技术

链上智能合约Dapp系统开发部署搭建

薇電13242772558

区块链 智能合约

客户案例|观测云助力合思信息升级新一代可观测平台

观测云

8种桌面IDE CodeArts智能代码补全类型

华为云开发者联盟

云计算 代码 华为云

重新认识WorkPlus,不止IM即时通讯,是企业移动应用管理专家

BeeWorks

2022华为全球校园AI算法精英大赛即将升级启航,等你来战,开拓未来边界

最新动态

钱大妈基于 Flink 的实时风控实践

Apache Flink

大数据 flink 编程 流计算 实时计算

LP流动性质押挖矿分红dapp系统开发合约定制

开发微hkkf5566

2021年4季度全国网络零售发展指数同比增长0.6%

易观分析

网络零售

解密抖音春节红包背后的技术设计与实践

JackJiang

架构设计 短视频 社交产品

AIOps落地五大原则(二):价值路线

BizSeer必示科技

云原生多云管理利器 -- cluster-api 之 ControlPlane

Daocloud 道客

Kubernetes 云原生 多云管理 cluster-api ControlPlane

封装业务流程,解决复杂重复的审批流程配置

明道云

毕业回馈!Apache Doris 社区所有贡献者来领礼品啦!

SelectDB

数据库 数据湖 开源项目 apache doris 社区活动

东方甄选双语直播火爆出圈,新东方转型初见端倪

易观分析

农业发展

前后端如何并行开发,云端mock了解一下

Liam

前端 前端开发 Mock Mock 服务 前端工具

数商云X日本高化学,共同打造跨境化学品B2B平台新范式

数商云

数字化转型 b2b

力扣每日一练之数组中篇Day2

京与旧铺

6月月更

云上弹性高性能计算,支持生命科学产业高速发展、降本增效

阿里云弹性计算

HPC 高性能计算 生命科学 药物设计

如何把企业内部碎片信息系统化?

小炮

父亲节特辑丨童年经典蓝精灵之百变蓝爸爸数字藏品,限量发售!

百度开发者中心

多任务视频推荐方案,百度工程师实战经验分享

百度开发者中心

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