Elixir 是一個基於 Erlang Beam VM 的 functioncal concurrent programming language。Elixir 以 Erlang為基礎,支持分佈式、高容錯、實時應用程式的開發,也可通過巨集實現 meta programming 對其進行擴展,並通過 Protocol 支援多態。
以下是 Elixir 的一些特性
- 2013年誕生
- 基於Erlang虛擬機(BEAM)
- 語法類似 Ruby,因為 Elixir 的創造者 José Valim(巴西人) 他是 Ruby on Rails 的核心團隊成員!有不少 Ruby 的開發者跑來學。(ref: An Interview with Elixir Creator José Valim)
- 由 Elixir code 直接編譯為 Beam VM 的 binary code
- 動態強型別語言 (變數型別不會在運算中自動轉型) ,類似 Ruby、Python 這類動態強型別語言
- 可直接呼叫 erlang 開發的 module
- 基於巨集的 meta programming 能力,語言的抽象語法樹
- 基於 Protocol 的多態實現
- 以 Message 互相傳遞資料
- 支援 Unicode
- 開發 Web 搭配 Phoenix Framework
erlang 有著平行處理的平台優勢,但是作為一個古老的語言,其語法會讓人難以接受。
Elixir解決了 erlang 的問題,有自己的程序包管理系統、Macro、易於使用的構建工具和Unicode處理機制,就像是一個新時代的語言,掛上了原本就性能卓越的引擎。
一開始接觸 elixir,通常會介紹 Pipe Operator
如果在 erlang 要針對某個 function 的回傳值放入另一個 function 當作參數,會寫成以下這樣。
list_to_atom(binary_to_list(capitalize_binary(list_to_binary(atom_to_list(X))))).
當然習慣了以後,為了避免老眼昏花的問題,通常會在中間加上幾個變數,把一行的語法改成 2~3 行,讓程式可讀性更好。
不過 elixir 借用了 unix 的 pipe 概念,用了 |> 這樣的 operator,所以上面的例子就會變成這樣
X |> atom_to_list |> list_to_binary |> capitalize_binary |> binary_to_list |> binary_to_atom
就這樣一個轉變,增加了程式可讀性
Sublime Text for Elixir
可使用 Sublime Text 加上 Plugin 支援 Elixir 語法
先安裝 Package Control
Command+Shift+P Package Control: Install Packages
安裝
- ApplySyntax: 自動判斷文件類型
- SublimeCodeIntel: 支援多種語言 Autocomplete
- SublimeLinter: 支援多種語言 Linter
- GitGutter: 側欄顯示 git diff
- ExlixirSublime: 支援 Elixir 語法 Code completion and linter
- SublimeLinter-contrib-elixirc: 支援 elixir linter
另外獨立安裝 Elixir-tmbundle
cd ~/Library/Application Support/Sublime Text 3/Packages
git clone git://github.com/elixir-lang/elixir-tmbundle Elixir
IDEA for Elixir
適合使用的 Plugin
- intellij-elixir
- AceJump: 移動 cursor
- .ginore: 內建多種語言 .gitignore
References
Lessons about the Elixir programming language, inspired by Twitter’s Scala School
沒有留言:
張貼留言