javascript
微软Project Springfield团队的F#使用心得
Project Springfield是一個用于在軟件中查找關鍵安全錯誤的模糊測試服務。微軟Springfield團隊首席軟件工程經理William Blum介紹了他們團隊如何利用F#來構建云服務。
簡潔性經常被認為是F#的主要優(yōu)點之一。Blum提供了一些Project Springfield相關的數(shù)據(jù):
為了移除一些舊的依賴,我們將一個Perl腳本移植成F#程序,代碼量減少了37%。在另外一個工作中,我們將1338行PowerShell腳本移植到F#只需要489行(小了2.7倍)。在這兩種情況下,除了代碼量的減少,最終的F#程序還在日志記錄、可讀性和可靠性方面得到了改進(部分由于靜態(tài)類型檢查的原因)。
Jet的軟件工程師Rachel Reese在F#的簡潔性方面持有相同的觀點,她在“為什么電子商務公司選擇F#”中提到:
所以,我們開始構建兩種方案:C#方案和F#方案,來比較他們的效果。最后,我們選擇堅持使用F#。主要原因在于F#使我們能夠以更少的代碼提供相同的功能,這顯然更容易維護并減少了錯誤。
代碼正確性也常常被Springfield團隊和F#用戶提到。例如,空引用,也被稱為“十億美元的錯誤”,在F#中是不允許的。在F#中,缺失的數(shù)據(jù)使用Option類型表示,其中值可以是Some valueOfAVariable或None。
可區(qū)分聯(lián)合并不局限于Option類型,它們也可以表示復雜的對象,然后在模式匹配表達式中使用。下面的代碼段演示了一個事件類型和調度它的函數(shù)。Blum解釋說,代碼被授權處理所有情況,因為它是由編譯器執(zhí)行的。
type CustomerId = System.Guidtype 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#還增加了使用類型提供程序驗證動態(tài)數(shù)據(jù)源的可能性。類型提供程序支持對數(shù)據(jù)源(如SQL數(shù)據(jù)庫或JSON)在編譯時完成驗證,而不是在執(zhí)行時。
Springfield采用動態(tài)分配計算資源的方式,因此需要在運行時生成JSON參數(shù)文件,這是一個容易出錯的任務。使用F#類型提供程序,我們可以在編譯時靜態(tài)驗證我們生成的模板參數(shù)是否有效。因為我們的ARM模板不斷發(fā)展,這極大地加快了開發(fā)和調試過程。
Springfield團隊還采用了F#來編寫腳本。REPL環(huán)境F# Interactive提供了一種在沒有預先編譯的情況下執(zhí)行F#腳本的方法,這是腳本語言的一個預期功能。
F#腳本的另一個優(yōu)點是靜態(tài)類型檢查,這對腳本語言來說是不尋常的!實際上,這將大大節(jié)省調試時間。IDE中的智能感知功能會立即發(fā)現(xiàn)錯誤(如變量名稱中的拼寫錯誤或輸入錯誤)。重構代碼也會更加方便。這與我們團隊以前采用的PowerShell腳本的脆弱性形成鮮明對比。
原文地址:http://www.infoq.com/cn/news/2017/01/fsharp-project-springfield
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的微软Project Springfield团队的F#使用心得的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asp.net core 认证及简单集群
- 下一篇: 实现BUG自动检测 - ASP.NET