Haskell進入生產(Hasura.io)
Hasura.io使用haskell作為核心程式語言建立微服務平臺,並分享了一些實踐經驗,如預設同步非同步使用GHC等。
詳見:From Zero to HIPster (Haskell In Production)
該開發團隊背景是:大部分開發人員具有主流語言C, Java, Python, C++, C#, Javascript等開發經驗,他們著手建立一個PaaS/Baas,起初他們評估了各種語言看看是否適合構建核心平臺。
雖然Haskell的純函式語言,健壯 內建高併發和並行語言非常吸引人,但是陡峭的學習曲線也是風險,還有範疇理論導致其更加神秘。
他們對幾種語言進行了比較,從程式設計難易與意願 記憶體消耗和併發幾個指標衡量:
1.Java: 程式設計難易與意願是None,記憶體消耗高,併發成熟。
2.Node.js: 程式設計難易與意願是ok,但是回撥函式巢狀迴圈,記憶體消耗一般,併發相當成熟。
3.Hashell: 程式設計難易與意願是yes,預設是同步程式設計,使用GHC處理非同步,記憶體消耗低,併發成熟。
4.Python: 程式設計難易與意願是yes,記憶體消耗高,併發不容易。
起初他們進行了一些評估程式設計,使用Haskell編寫一些微服務,包括ZeroMQ的broker,自動生成型別安全的CRUD和查詢資料庫表的API,一個redis快取層。
真實一個案例:開發一個Http伺服器,JSON分析和Postgres資料庫介面。
經過幾種語言挑選,選中了Haskell,實現案例需要Haskell相應框架庫包:
1.Warp是http伺服器
2.Aeson是JSON分析框架
3.Hasql是Postgres 連線驅動庫包
經過這個案例專案以後,他們總結Haskell優點如下:
1. 純函式:能夠讓整個程式變得可推理,有條理,程式碼直接精確反映了我們的(邏輯)推理。
2.精確程式碼:立即寫程式碼,馬上就能重構,更少的程式碼讓你重構更容易。
3.健壯程式碼:靜態語言 型別推斷和智慧的編譯器。
4.測試:型別系統大大降低了大型類的單元測試,快速檢查是另外一類測試風格,能透過自動生成你的函式的斷言測試用例;當然手動測試還是最重要,包括IO相關故障。
5.IO高併發:GHC的執行緒抽象和IO管理器,易於從併發執行計算角度考慮,並能得到基於事件的非同步執行框架如Node.js的所有優點。其次,GHC有一個類似Node.js的非堵塞IO,支援實時多執行緒和自然地多核(Node.js需要cluster庫包支援多核),可以像Node那樣使用事件程式設計,這真的不是一場公平競爭。
6.豐富庫包:Haskell庫包非常易於整合。
7.部署:私有云部署Haskell非常容易,因為所有依賴的庫包都是靜態連結,能夠一步到位進行版本控制和部署。
一些問題:
1Type error型別錯誤讓初學者感覺奇怪,分析語法錯誤根本沒有用。
2.文件:簡單時型別就是文件,但是一些庫包,型別簽名沒有提供文件,這種情況下使用這些庫包需要努力一點。
3.語言擴充:當你在haskell中尋找庫包時,你會看到GHC的語言擴充,有些很直觀((OverloadedStrings, ScopedTypeVariables)),有些不是 (RankNTypes),難於從原始碼中進行學習。
詳見:From Zero to HIPster (Haskell In Production)
該開發團隊背景是:大部分開發人員具有主流語言C, Java, Python, C++, C#, Javascript等開發經驗,他們著手建立一個PaaS/Baas,起初他們評估了各種語言看看是否適合構建核心平臺。
雖然Haskell的純函式語言,健壯 內建高併發和並行語言非常吸引人,但是陡峭的學習曲線也是風險,還有範疇理論導致其更加神秘。
他們對幾種語言進行了比較,從程式設計難易與意願 記憶體消耗和併發幾個指標衡量:
1.Java: 程式設計難易與意願是None,記憶體消耗高,併發成熟。
2.Node.js: 程式設計難易與意願是ok,但是回撥函式巢狀迴圈,記憶體消耗一般,併發相當成熟。
3.Hashell: 程式設計難易與意願是yes,預設是同步程式設計,使用GHC處理非同步,記憶體消耗低,併發成熟。
4.Python: 程式設計難易與意願是yes,記憶體消耗高,併發不容易。
起初他們進行了一些評估程式設計,使用Haskell編寫一些微服務,包括ZeroMQ的broker,自動生成型別安全的CRUD和查詢資料庫表的API,一個redis快取層。
真實一個案例:開發一個Http伺服器,JSON分析和Postgres資料庫介面。
經過幾種語言挑選,選中了Haskell,實現案例需要Haskell相應框架庫包:
1.Warp是http伺服器
2.Aeson是JSON分析框架
3.Hasql是Postgres 連線驅動庫包
經過這個案例專案以後,他們總結Haskell優點如下:
1. 純函式:能夠讓整個程式變得可推理,有條理,程式碼直接精確反映了我們的(邏輯)推理。
2.精確程式碼:立即寫程式碼,馬上就能重構,更少的程式碼讓你重構更容易。
3.健壯程式碼:靜態語言 型別推斷和智慧的編譯器。
4.測試:型別系統大大降低了大型類的單元測試,快速檢查是另外一類測試風格,能透過自動生成你的函式的斷言測試用例;當然手動測試還是最重要,包括IO相關故障。
5.IO高併發:GHC的執行緒抽象和IO管理器,易於從併發執行計算角度考慮,並能得到基於事件的非同步執行框架如Node.js的所有優點。其次,GHC有一個類似Node.js的非堵塞IO,支援實時多執行緒和自然地多核(Node.js需要cluster庫包支援多核),可以像Node那樣使用事件程式設計,這真的不是一場公平競爭。
6.豐富庫包:Haskell庫包非常易於整合。
7.部署:私有云部署Haskell非常容易,因為所有依賴的庫包都是靜態連結,能夠一步到位進行版本控制和部署。
一些問題:
1Type error型別錯誤讓初學者感覺奇怪,分析語法錯誤根本沒有用。
2.文件:簡單時型別就是文件,但是一些庫包,型別簽名沒有提供文件,這種情況下使用這些庫包需要努力一點。
3.語言擴充:當你在haskell中尋找庫包時,你會看到GHC的語言擴充,有些很直觀((OverloadedStrings, ScopedTypeVariables)),有些不是 (RankNTypes),難於從原始碼中進行學習。
[該貼被banq於2015-02-16 10:40修改過]
相關文章
- Haskell 入門筆記(四)Haskell筆記
- 是否應該允許開發人員進入生產環境?
- sqlldr載入會產生redo嗎?SQL
- 產生《Oracle DBA高效入職指南》原因Oracle
- 使用 Webpack 進行生產環境配置(附 Demo)Web
- 張馳諮詢:精益生產培訓延續改進生產流程的7個方法!
- mysqldump同步生產到生產資料MySql
- 蘋果企業賬號:蘋果iPhone SE 2已進入最後生產驗證階段蘋果iPhone
- 生產系統調優之_毫秒級的改進
- 《魔力Haskell》索引Haskell索引
- What is functor in Haskell ?Haskell
- 對序列進行遷移時產生間斷的原因
- 生產計劃排產軟體如何解決生產難題?
- 程式設計入門18:Python生產環境程式設計Python
- Kafka入門(3):Sarama生產者是如何工作的Kafka
- Haskell學習-functorHaskell
- Haskell趣學指南Haskell
- 使用 Haskell 將十進位制數字轉成羅馬數字Haskell
- 產生一個32位的16進位制隨機數隨機
- 黑馬PM- B端產品- 進銷存誕生背景
- 提高開發生產力 - 生產力指南篇(之一)
- sessionid如何產生?由誰產生?儲存在哪裡?Session
- 載入不同位置hibernate包產生的問題
- 策劃入門(九)遊戲測試方案的產生(轉)遊戲
- 樂視商城的“生態”玩法:引領行業進入3.0生態電商時代行業
- Haskell學習-monadHaskell
- 幾個 Haskell 小程式Haskell
- Haskell影片和課程Haskell
- Haskell 與範疇論Haskell
- Haskell學習資源Haskell
- Velero系列文章(四):使用Velero進行生產遷移實戰
- hyperf框架使用rabbitMQ生產訊息至laravel/lumen進行消費框架MQLaravel
- 「RxJava進階」基於原始碼的上游(Observable)事件產生流程分析RxJava原始碼事件
- 【MES】MES解決方案如何助力企業進行精益生產
- 對軟體專案中產生的需求進行分級管理
- Mastodon 生產部署指南AST
- Kafka 生產者解析Kafka
- Hadoop 2.0產生Hadoop