初識elixir

初識elixir

 這個時代編程語言遍地開花,能在茫茫語言海洋中使用一個語言也算是一種緣分,當然這不是巧合而是必然,是多核CPU時代的必然functional programing!
 我使用elixir已經有一年多了,爲什麼現在才寫這個文章?其實一開始我對這個語言是抗拒的,因爲我的入門語言是C而且是嵌入式C,後來在此基礎上又接受了面向對象的編程思想。當時真的以爲這個面向對象就是完美的,因爲相比C的面向過程來講,面向對象的代碼管理實在是太棒了!當我初次面對elixir我是嗤之以鼻的,爲什麼?因爲與C類(編程風格)來講這個語法還有編程思想真的是能讓人發瘋,當然如果你接觸過ruby或者你本來就是erlang的一員,那麼你應該有種相見恨晚的感覺。好了讓我們切入正題!
 elixir是爲了能夠輕鬆構建易於擴展的易於維護的應用而產生的一門面向函數的動態語言,高可擴展性和高可維護性是elixir所標榜的(這個後面會詳細介紹),elixir運行於erlang虛擬機上(低延遲的分佈式的高容錯性的系統)就是那個和jvm一樣變態穩定的虛擬機。

current_process = self()

# Spawn an Elixir process (not an operating system one!)
spawn_link(fn ->
  send current_process, {:msg, "hello world"}
end)

# Block until the message is received
receive do
  {:msg, contents} -> IO.puts contents
end

 以上是摘自官方的一段代碼,可以感受下elixir的語法,直接拷貝這段代碼到iex(elixir的repl)中就可以看到hello world的輸出了,但是生產者和消費者並不在一個進程中,所有的elixir代碼都運行在輕量級的線程中,elixir稱之爲進程(elixir的進程不同於操作系統進程比之輕量)。得益於這樣的輕量特性,在同一臺機器上併發成千上萬的進程也不是問題(但是有一點需要注意這樣的併發並不是說elixir可以在數據計算上或是運行速度上快於C這樣的編譯型語言,只是說elixir爲的是能在高併發下保持事物處理的正確性和快速的響應,事實上elixir並不善於數據計算這一點可以在之後考證)。我們知道對於操作系統而言線程是內存共享的,而進程是獨立的,這也就保證了垃圾回收的獨立性,和減少全系統的暫停並且可以更高效的利用系統的全部資源。對於elixir的這種輕量級進程的好處我們之後還要做更詳細的介紹。
 好了這片開始的文章就寫到這,我也迫不及待的想要介紹更多的關於elixir的特性。因爲我是自學的,在這當中因爲之前沒有接觸過函數式編程語言所以真的走了很多彎路,不過現在好了,總算是說可以順利利用這麼門語言去解決實際問題了,所以現在也想吧自己的一些學習經驗寫下來,一方面是當自己的學習總結,另一方面也是爲了能夠讓自己的經驗可以幫助到更多的人!分享學習經驗是利己利人的^^

發佈了28 篇原創文章 · 獲贊 20 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章