我只是想知道當你剛接觸Erlang時,你和最終解決方案之間的所有小問題。學習Erlang? speedbump線程,常見的,小問題
例如,這裏是第一speedbumps我:
- 使用controlling_process(插座,PID),如果您在多個線程產卵了。正確的數據包到正確的線程。
- 你打算開始與另一臺服務器通話嗎?請記住net_adm:ping('car @ bsd-server')。在殼裏。否則沒有任何交流會通過。
- 計時器:睡眠(10),如果你不想做任何事情。調試時始終有用。
我只是想知道當你剛接觸Erlang時,你和最終解決方案之間的所有小問題。學習Erlang? speedbump線程,常見的,小問題
例如,這裏是第一speedbumps我:
controlling_process()
使用controlling_process(插座,PID),如果您在多個線程產卵了。正確的數據包到正確的線程。
net_adm:中國平安()
您要開始談論到另一臺服務器?請記住net_adm:ping('car @ bsd-server')。在殼裏。否則沒有任何交流會通過。
定時器:睡眠()
暫停爲X毫秒。
使我花費大量時間來解決問題的事情就是完全圍繞函數調用和消息傳遞來構造我的代碼。其餘的部分或者從那裏出來(產卵,遠程節點),或者感覺像你需要學習的任何新語言(語法,stdlib)通常的東西。
將它集成到msvc 6中,所以我可以使用編輯器,並在輸出窗口中查看結果。
我創建了一個工具,用
命令 - 路徑erlc
參數 - + DEBUG_INFO $(文件名)$(FileExt)
初始目錄 - $( fileDir)
檢查使用輸出窗口。
學習瀏覽標準文檔
一旦你學會了OTP文檔的組織變得更容易找到你要找的內容(你會需要學習哪些應用程序提供哪些模塊或各種模塊)。
此外,只是瀏覽應用程序的文檔往往是相當有益的 - 我發現了很多真正有用的代碼 - sys
,dbg
, toolbar
等
殼Erlang和模塊的erlang之間的差異
殼牌Erlang是稍微不同的方言到模塊二郎。您無法定義模塊功能(只有樂趣),您需要加載記錄定義才能使用記錄(rr/1
)等。學習如何使用匿名函數編寫erlang代碼有點棘手,但對於使用遠程shell生產系統的工作是必不可少的。學習shell與{start,spawn} _link ed進程之間的交互 - 當你運行一些崩潰的shell代碼(引發一個異常)時,shell進程退出並將退出信號廣播給你鏈接的任何東西。這將依次關閉您正在處理的新gen_server。 (「爲什麼我的服務器進程不斷消失?」)
二郎表情和保護表達式之間的差異
保護表達式時(條款)不二郎表達式。它們可能看起來很相似,但它們完全不同。守衛不能調用任意的erlang函數,只能使用守護函數(length/1
,類型測試,element/2
和OTP文檔中指定的其他幾個函數)。防衛隊成功或失敗並且沒有副作用。另一方面,Erlang表達式可以做他們喜歡的事情。
代碼加載
工作了何時以及如何代碼升級工作,咒語獲得gen_server提升到了一個回調模塊(code:load(Mod), sys:suspend(Pid), sys:change_code(Pid, Mod, undefined, undefined), sys:resume(Pid).
)的最新版本。
代碼服務器路徑(code:get_path/0
) - 我無法計算出發生了多少次未定義的函數錯誤,結果是我忘記將ebin目錄添加到代碼搜索路徑中。
大廈二郎代碼
工作了emake(make:all/0
和erl -make
)和GNU make的有用組合花了相當長的一段時間(大約三年至今:)。
我目前最喜歡的makefile可以在http://github.com/archaelus/esmtp/tree/master
Erlang分佈
獲取節點名,DNS,餅乾和所有的休息權,以便能夠net_adm:ping/1
其他節點可以看到。這需要練習。
遠程外殼IO複雜
記住傳遞group_leader()
到io:format
調用遠程節點上運行,從而使輸出顯示在你的shell,而不是神祕消失(我覺得SASL報告瀏覽器rb
仍然有問題與通過遠程外殼連接使用時發送它的一些輸出到錯誤的節點的)
好問題喬,但你應該有你的答案作爲答案或讓他們在你的問題,而不是兩個。最好,他們應該是答案。 – ryeguy 2009-02-25 17:14:37