2010-04-09 53 views
2

自從幾個月以來,我一直在學習Erlang,現在是時候做一些基本的GUI。GUI的概念 - 集中式或分散式

經過一番快速研究後,我看到有一個名爲'wxi'(基於Haskell的Fudgets)的有趣庫,它在GUI上使用了不同的方法。沒有中央循環,每個小部件處理它自己的事件並處理它自己的數據。

你們對此有何看法?它看起來像Erlang這樣的語言是有效的,這是一個有趣的方法。

威廉麪包車Doorn的

回答

2

在傳統的應用程序,進程(或線程,如果你想成爲挑剔)擁有UI的狀態,並通過一個消息循環來處理事件。由於Erlang過程非常輕便,因此wxi的方法是傳統模型非常合乎邏輯和自然的擴展。

此方法對用戶界面和應用程序設計有意義分歧。例如,一個具有動畫,I/O等的複雜下載管理器控件可以作爲一個完全獨立的進程(通過子進程處理其組件UI片段)捆綁在一起,通過消息傳遞與父UI進行交互。這樣的控制甚至可能由於連接問題或內部錯誤而崩潰,並且作爲主管的父控制會指示發生了錯誤,並簡單地開始控制的新副本。

+0

是的,但是當你有更重的線程時,這個概念很難遵循。比如在Java/C中? – wvd 2010-04-09 11:29:17

+0

這是傳統線程的災難,至少有兩個原因:1)太多的線程會在上下文切換中淹死CPU; 2)線程共享內存,這使得它們非常難以正確編程,而Erlang進程是強烈隔離的,只能通過消息傳遞共享信息,這大大減少了系統中的非確定性。大多數UI框架使用中央消息循環來處理所有UI元素,因爲線程化編程是一種非常昂貴且脆弱的併發模型。 – 2010-04-09 11:39:14