我一直在檢查Nitrogen Project這應該是Erlang最成熟的Web開發框架。您對Erlang的氮有什麼經驗?
作爲一種語言,Erlang非常令人印象深刻。然而,關於氮,我不太熱衷於使用Erlang的非常罕見的語法(除非你是PROLOG中的本地語言)來構建UI。
您對此的體驗與其他主流如Django或Rails等網頁框架相反嗎?
我一直在檢查Nitrogen Project這應該是Erlang最成熟的Web開發框架。您對Erlang的氮有什麼經驗?
作爲一種語言,Erlang非常令人印象深刻。然而,關於氮,我不太熱衷於使用Erlang的非常罕見的語法(除非你是PROLOG中的本地語言)來構建UI。
您對此的體驗與其他主流如Django或Rails等網頁框架相反嗎?
到目前爲止,我對氮的使用量很少,但我一直在監視郵件列表數月,所以我認爲我有一些有用的說法。
爲了您對Erlang和Nitrogen框架的語法的關注,我會迴應這聽起來像是一個純粹的陌生事件,而不是不適合。客觀地說,HTML不是一種美麗的語言,它有很多怪癖。你已經習慣了這個,所以它看起來並不那麼糟糕。給氮/ Erlang一個機會,你可能會發現你很快就會習慣它。
對於你關於與其他語言和框架進行比較的問題,我想說的最大的區別是,與氮,整個網站直接由Erlang運行時。 Ruby on Rails有這樣的模式,但它僅用於測試。許多其他框架甚至不提供在單個長時間運行的過程中運行所有內容的選項。
運行單個長時間運行過程中的整個Web應用程序及其底層基礎架構有多麼的站點運行顯著影響:
與Apache,每個孩子被殺死了所有的N個連接,其中N = 500左右,你不能說一個給定的孩子是否會一直處理所有給定的客戶的請求。由於HTTP是無狀態的,但Web應用程序幾乎總是需要一些客戶端狀態,因此Apache子代必須重新構建其客戶端狀態視圖,作爲處理新連接的一部分。默認情況下,這意味着回到磁盤存儲有關該客戶端的持久數據。還有其他選擇,如memcached,但這些不是內置於LAMP類型堆棧的核心。有了Erlang,任何事情都不會被定期清除,Erlang提供了像Mnesia這樣的標準設備,它們提供了磁盤備份的內存數據庫。順便說一句,如果您熟悉nginx,它的構建原理與Erlang相同,並且由於相同的原因,它的運行速度很快。 nginx和運行Web服務器的Erlang實例之間的主要區別在於nginx不是一個編程環境,所以它仍然需要將大量處理委託給外部代碼。這意味着它與Apache共享相同的IPC和持久狀態問題。因爲運行時間一直保持不變並且是一個功能完善的編程環境,所以在Erlang中構建系統的更多部分可能比使用混搭LAMP類型堆棧構建系統的更多部分。這放大了上述好處。系統的各個部分可以通過消息傳遞和Mnesia進行協調,而不是重量級IPC和MySQL,並且所有部分都保持運行並持續運行,從而減少耗時的狀態重構。
所有訪問持久客戶端狀態數據存儲的十幾個Apache兒童是基於鎖的hairball。這些框架都可以透明地處理鎖定等問題,但他們無法隱藏的是正確完成所有這些所需的時間。
Erlang是一種不純的功能語言,暗示但不要求數據純度;它也是以多處理思想爲基礎構建的,可以清楚地看到運行時設計的核心。這兩個事實意味着你不太可能花費時間在基於Erlang的服務器上等待鎖定,而不是在其他框架上進行天真構建。當然可以優化其他系統中的鎖定延遲,但這真的是你想要做的嗎?你想成爲第一千個團隊,必須學習如何在服務變得流行後優化其網絡堆棧,或者你寧願把它全部放在工具上,這樣你就可以花時間做別人沒有做過的事情?
我也曾經關心過笨重的Erlang語法。我已經建立了幾個手段,以減輕其煩惱日常的網絡編程,也許你會發現一個或兩個人有所幫助:
ErlyDTL是一個Erlang實現Django模板語言的;它不適用於氮,但它可用於其他框架,如Zotonic,Erlang Web,BeepBeep和Chicago Boss
Chicago Boss是一個完整的Erlang框架,可以生成很多代碼,以便您可以與函數訪問數據域調用,而不是二郎神的十分詳細記錄語法(例如Person#person.name
Person:name()
代替)
注意氮不包括數據庫層,所以它不是真正媲美的Rails或者Django的。對於數據庫驅動的框架的全面比較,我的回答看看這個StackOverflow的問題:
可以從Zotonic中挑選數據庫層,他們使用的是Postgresql。 (數據庫層在Erlang中實現了無數次,因此使用最好的數據非常重要,我會選擇Zotonic) – Flinkman 2010-05-25 05:08:29
回覆:「氮中沒有數據庫」,Rusty Klophaus,氮的創建者和主要開發人員正在爲Basho ,它推出了Riak,一個用於支持網站的分佈式數據庫。 (Basho也推出Webmachine,在另一個答案中提到)Rusty在Vimeo上發佈了一個演示,告訴他們如何一起使用這兩者:http://vimeo.com/8258045這三種技術似乎都可以用於以某種方式一起成長。 – 2010-05-25 18:22:50
我想看看Webmachine如果我是你。它非常簡單,快速,並將界面留給你。
Erlang Web也應該被認爲是成熟的。這是一個MVC框架,而氮氣更多的是基於事件的。這是一個偏好問題。
我沒有使用除了Webmachine這裏提到的其他工具,我認爲這是一個奇妙的工具,但它不是像其他人一樣的Web框架。它就像HTTP處理器一樣,非常適合構建一個寧靜的界面。
我也建議你給Erlang語法一個機會。 Erlang是我最喜歡使用的語言之一。
如果香草Erlang的語法困擾你,那麼給你帶來替代語法的Erlang的兩個選擇是:LFE(Lisp Flavored Erlang),它給你一個完整的Lisp語法,可在http://github.com/rvirding/lfe找到。 ; Efene爲您提供了更多的javascript/python語法,可在http://marianoguerra.com.ar/efene找到 – rvirding 2010-05-25 00:46:49