2018/3/19

Elixir


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


Elixir:可能成為下一代Web開發語言


Lessons about the Elixir programming language, inspired by Twitter’s Scala School


5分鐘快速認識 Elixir 程式語言


Why the Elixir language has great potential


elixir libs


phoenix web framework


Unix 哲學:Elixir 將會替代 Go


Elixir 一個月深入使用感想


Elixir語言特性簡介