[Erlang] short summary (part 1)

最近在學習Erlang,發現Erlang其實是一個蠻簡單容易理解的語言,而且針對特定的問題(concurrent progarmming, 分散式系統, 網路service),寫起來很快。尤其現在multi-core的CPU,在Functional language的model下(No share memory),應該更能好好運用其多核心的運算能力,Erlang 應該可以算是目前Functional Language在工業上面蠻常運用到的(尤其在電信業),他一開始是從Ericsson裡面的CSLab所開發出來的,後來就open source出來,他最強大的是一套可以稱為Framework or Library的工具OTP(Open Telecom Platform),因為它主要是focus on server,他把一些設計concurrent program的概念隱藏在裡面,所以你直接套用這套工具的話,可以省不少事。

Erlang是跑在他自己的Virtual machine上面,具有一些特性:

  • runtime update
  • pure message passing
  • light weight process
  • fault tolerant

runtime update:

Erlang的Virtual Machine讓你可以在程式執行的時候,去修改程式碼後,他會dynamic load進新的程式碼,讓你不必把程式關掉在執行

light weight process:

Erlang不像是其他程式語言,它直接把process的概念放進語法裡面,在Erlang的設計概念中,他希望所有的事物都是透過你把事情切割分別讓process去操作,而且Erlang創造一個process的overload不是很大

pure message passing:

在Erlang當中,既然可以自由的創造process,那這些process之間要怎麼溝通呢?他不像是傳統寫C, C++這類sequential程式一樣是利用lock/unlock等synchronize技巧,他純粹就是你直接可以Send message給別的process,其他process只要等著receice message就可以了,這有個好處,就是沒有share variable等因素可能會造成race condition or dead lock,而且Erlang並沒有限制process只能在local,你可以自由的send message到遠端的node,這正好發揮了distribute system的強處

fault tolerant:

因為Erlang一開始就用途就是為了電信業上面的switch,在電信業本身它希望程式能夠再發生error的時候,能夠自動correct error或是restart,所以在Erlang的設計概念中,他希望process如果發生處理不了的問題,就讓process自動被kill,跟這個process有相關的process會收到通知說,有process被kill,在根據原因來做一些適當的處理

待續

在part 2中,我準備稍微介紹一下OTP裡面關於實作server的pattern

Advertisements

[bike] 106縣道部份+九份

昨天喝酒晚睡

今天6點就起床準備殺去九份

結果果然是約太早了XD

一開始是過深坑的小山

接著就是可怕的106縣道

尤其是72~74公里處的超長上坡

可怕處在於你每次經過轉彎, 心理會期待準備下坡

但是每每都不是, 迎面而來的是長長的上坡

精神打擊極大! (腳騎到在抖>”<)一看到bjc停下來休息, 馬上就跟進xD

不然我覺得真的超難撐的…

我們在頂點休息

過頂之後, 就是長長的下坡, 後面還幾個髮夾彎(不太好騎)

真是一座讓人又愛又恨的地方, 愛的地方太快結束了

到騎九份的時候, 我覺得已經沒什麼力氣了…

就在我艱苦的上坡路段

收到機車安的電話, 原來是上了Florida

差點沒氣接他電話

不過也應該撐過到涼亭, 看到以安

最後就是快樂的下坡加上老樣字的台五線回家

沒想到居然有騎到95km

今天算是騎車以來最累的一次阿…Orz

騎到腳青筋都爆出來了

難怪回到家洗完澡就睡了2 hr

我果然還是虛炮阿

這次騎了驚鴻, 發現不太適合…

(比原本的小銀重10kg + 後弊震依整個讓我無法變速變到最輕, 很容易就力量分散)

真想買公路車阿…

p.s 1 沒想到大中也有騎這段, 聽說有看到我的背影!
p.s 2 有3g手機感覺還不錯, 可以上網plurk XD

[erlang] Parse Transform

最近看到某個library的function居然呼叫的時候,強制必須傳list comprehension,讓我很shock, 居然erlang可以這樣檢查type?!

Ex:

version 1: (ok)
qlc([X || X <- Table])

version 2: (error)
Val = [X || X <- Table ]
qlc(Val)

結果實際trace erlang的source code 加上 IRC上面的人解答

原來erlang可以用類似pre-process的方式, 在parse的時候就判斷參數的正確性

這雖然不是什麼新概念, 但是你可以寫parser的plug-in, 這感覺就很不一樣!

p.s IRC上的人果然都是好人~ 有問題都可以問問~~

Reference:
http://www.erlang.org/documentation/doc-5.4.8/lib/stdlib-1.13.8/doc/html/qlc.html

[bike] 2009/03/15 征服北海岸

本來只是想要騎去三芝吃個德州食物就閃了,結果每次都有意外的事發生,壞人每次都慫恿我, 結果就這樣

家—>淡水—->三芝—->金山—->基隆—->家

20       1x           4x           2x

沒想到就這樣差不多100km了!!!

中途景色還好

只覺得上坡好累, 下坡好爽 (還要跟討厭的逆風飆車), 屁股好痛

都是靠意志力衝的!!

回家想要炫耀一下

我爸說他3x年前就騎過了, 還是沒變速的 (大輸 = =””)

我的小銀是n年前的300元二手車

經過我這幾次的鍛鍊

這次變速器好像壞了, 澇練也澇了三次…

不想修了, 下次換一台騎看看

結論:

一定要去買車褲!! (到現在我的屁屁都還會痛Q_Q)

跟壞人出去, 一定要準備好安全帽跟燈 (你永遠不知道會騎去哪邊!!)

聽說環島每天是100km起跳在騎

無法想像, 要也要用好一點的車…沒事不要騎隧道(好暗, 車子又開好快>”<)

經過幾次騎車, 我應該有level-up了

有機會一定要挑戰陽明山!!

(那時看地圖才9km實在是太吸引人了…沒想到是要翻過陽明山XD)

回到台北家裡,只有一個”爽”字!!!!
相簿

[bike] 2009/03/08 深坑石碇之旅

本來這星期想騎去烏來的,可是前幾天都下大雨,今天居然白天天氣不錯,就乾脆騎到比較近的地方( bjc 就沒約你了XD)

努力的用力的採著, 往上坡爬~

邊爬邊滴汗…Orz

好不容易跨過了一個山頭, 就開始做溜滑梯

到了 深坑鄉…

發現時間還早,就殺去石碇,沒想到有人記錯路了XD (差點就跑到平溪了)

後面的路都算小case, 不用連續爬上坡真是太幸福了~

到石碇吃著蠻特別的豆花

後來又回到深坑鄉

沒想到這麼多間店, 就選到一間地雷

離開的時候 還開始下大雨

冒著大雨, 努力的回程的爬坡

冷冷冷

下坡更冷

不過現在回到溫暖的家 真是太幸福了!!

下星期要殺到平溪~~~

靠 我忘了跟我小銀照相了Q_Q

短期目標

經過maple的開導

我的確是該先列的目標出來, 三年之後再看達到了哪些!

short-term:
— erlang, python, c 看能不能這三個都摸熟,
   而且有寫過至少中型跟別人合作的project

— 基本的一點硬體知識

immediate:

— 參予設計project

— 找到一個比C++, Java好的OO language, 並且摸熟他

long-term:

–用functional language征服世界!