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