W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Preface:
這篇文章是在圖靈社區(qū)中接受的第一份翻譯工作 ---- 翻譯AOSA(The Architecture of Open Source Application),目的是:
- 在翻譯文檔的過程中深入學(xué)習(xí)開源軟件架構(gòu),同時進(jìn)行知識共享
- 認(rèn)識更多的人
以下是AOSA的第2卷的第22章,關(guān)于Yesod這個Web框架的(由),Yesod的簡單介紹可以參照Wiki,及其官網(wǎng). 由于是初稿翻譯,今后也將不斷完善,歡迎指正。
Yesod?是用Haskell語言編寫的Web框架。目前流行的眾多Web框架得益于其宿主動態(tài)語言的某些特性,而Yesod則不同----其得益于Haskell的靜態(tài)語言的特性,使得代碼更高效,也更安全。
Yesod的開發(fā)從兩年前起至今,一路不斷地發(fā)展,也使之變得越發(fā)地強(qiáng)大。Yesod被創(chuàng)造伊始,便是為了滿足解決實(shí)際項目問題的需要,同時其也在實(shí)際項目經(jīng)驗積累中不斷地完善起來。起初,該框架的開發(fā)以及維護(hù)完全就是“個人秀”的行為,而緊接下來的一年里,在源自于社區(qū)不斷開發(fā)以及維護(hù)努力之下,終于使得Yesod一躍成為了非?;钴S的一個開源項目。
Yesod處于萌芽階段時,并沒有很好的定義、設(shè)計,有哪個實(shí)際項目組愿意嘗試其進(jìn)行開發(fā)是一件讓人想都不敢想的事。后來,Yesod的變更使之逐漸進(jìn)入穩(wěn)定階段,并且也被應(yīng)用到了一些實(shí)際項目中,這時候我們也開始著手對設(shè)計決策的不足進(jìn)行重新考察。那時起,我們將改善項目的主要精力投放于如何讓面向用戶的API更易用 ---- 很快我們有了穩(wěn)定的1.0發(fā)行版。
你可能會問:為什么要再開發(fā)一個Web框架呢? 或者讓我們換一種提問方式:為什么要用Haskell呢? 一般看來,目前世界上大多數(shù)開發(fā)者都圍繞以下兩類語言風(fēng)格:
靜態(tài)類型語言,比如Java,C#和C++。這些編程語言提供高效的代碼執(zhí)行以及類型安全,但開發(fā)起來總讓人覺得比較笨重
這是對語言的一種錯誤的二分法。靜態(tài)類型語言沒有理由變得這么愚蠢。Haskell在作為強(qiáng)類型語言的同時,也兼顧了許多Ruby和Python中的表達(dá)特性。事實(shí)上,Haskell的類型系統(tǒng)比Java及其語言家族更加嚴(yán)謹(jǐn),能在編譯期糾正更多的錯誤:空指針異常被排除了;不可變的數(shù)據(jù)結(jié)構(gòu)簡化了代碼推理的同時,也簡化了并行與并發(fā)編程。
那么為什么選擇Haskell? 它是一門高效的,對開發(fā)者友好的編程語言,它也提供了許多編譯時期程序正確性的檢查。
Yesod的目標(biāo)就是Haskell的強(qiáng)大特性引入到Web開發(fā)中去。Yesod努力讓你的代碼更加緊湊,盡最大可能讓你的每一行代碼在編譯器都完成正確性檢查。換句話說,與需要大型庫去單元測試程序基本屬性相對地,編譯器都為你做好了。
從深層面來說,我們在Yesod中運(yùn)用了盡可能多的高級性能優(yōu)化技術(shù),有了它們的幫助,你的高層次代碼運(yùn)行起來便能如虎添翼。
總的來說,Yesod與其他主流框架(Rails,Django之流)大同小異。其主要采用了MVC范式----通過一個模板系統(tǒng)將邏輯與表現(xiàn)分離,同時提供了一個對象關(guān)系映射(ORM)系統(tǒng),以及一個用于完成路由的前端控制器。
Yesod強(qiáng)大的地方在于一些細(xì)節(jié)之處。Yesod盡可能在編譯階段捕獲錯誤或者異常,而非延遲到運(yùn)行時,并且通過類型系統(tǒng)提供自動化捕捉bug以及保證安全性缺陷。盡管Yesod的目標(biāo)是維護(hù)一系列用戶友好,高層的API,但其采用了許多函數(shù)式編程世界的新技術(shù)來提升程序的性能的同時,也不懼對開發(fā)者暴露這些內(nèi)部細(xì)節(jié)。
Yesod在架構(gòu)上的主要挑戰(zhàn)來自于如何平衡這兩個看上去相互沖突的目標(biāo)。舉例來說,Yesod的路由方式(稱為類型安全的路由)并沒有格外標(biāo)新立異。從歷史上來看,實(shí)現(xiàn)類似問題的解決方案總是一個乏味,伴隨錯誤叢生的過程。應(yīng)對類似的問題,Yesod的解決方案在于采用了模板Haskell(Template Haskell,代碼生成的一種形式)使得一些中間步驟實(shí)現(xiàn)了自動化,從而加速了解決方案實(shí)現(xiàn)的過程。
類型安全的HTML已經(jīng)存在好一段時間了,在這個方面,Yesod既保證類型安全的威力得到充分發(fā)揮,也保持了對于開發(fā)者友好的通用模板語言所應(yīng)有的特點(diǎn)。
待續(xù)..
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: