Elixir (bahasa pemrograman)
Elixir adalah sebuah bahasa pemrograman fungsional, konkuren dan untuk berbagai keperluan yang berjalan dalam Mesin Virtual bahasa Erlang.[1][2] Elixir dibuat berdasarkan bahasa Erlang dan memiliki abstraksi yang sama dalam membangun aplikasi yang terdistribusi dan toleran atas kesalahan. Elixir juga menyediakan perkakas yang productif dan desain yang mudah dikembangkan. Kemudahan pengembangan tersebut diwujudkan melalui meta-programming saat proses kompilasi dengan makro dan polimorfisme dengan protokol-protokolnya.[3] Proses-proses di Elixir diawasi oleh sebuah Supervisor yang apabila terjadi satu proses yang gagal maka akan dibangkitkan proses baru sehingga tidak mengakibatkan kegagalan yang menggangu seluruh sistem, inilah keunggulan toleran atas kesalahan yang dimiliki oleh Elixir. Proses-proses seperti ini bisa mencapai jutaan proses dalam satu waktu.
telah digunakan bebrapa perusahaan semacam E-MetroTel, Pinterest[4] dan Moz.[5] Elixir juga digunakan entuk mengembangkan situs web, oleh perusahaan seperti Bleacher Report, Discord, dan Inverse,[6] and for building embedded systems.[7][8]
Sejarah
Pembuat bahasa Elixir adalah Jose Valim, Ia memaksudkan bahasa ini untuk dapat memiliki produktivitas dan kemampuan untuk mungkin berkembang yang tinggi pada mesin virtual Erlang dan tetap menjaga kecocokan terhadap ekosistem bahasa Erlang.[9][10]
Fitur-fitur
- A language that compiles to bytecode for the Erlang Virtual Machine (BEAM)[11]
- Everything is an expression[11]
- Erlang functions can be called from Elixir without run time impact, due to compilation to Erlang bytecode, and vice versa
- Meta programming allowing direct manipulation of AST[11]
- Polymorphism via a mechanism called protocols. Like in Clojure, protocols provide a dynamic dispatch mechanism. However, this is not to be confused with multiple dispatch as Elixir protocols dispatch on a single type.
- Support for documentation via Python-like docstrings in the Markdown formatting language[11]
- Shared nothing concurrent programming via message passing (Actor model)[12]
- Emphasis on recursion and higher-order functions instead of side-effect-based looping
- Lightweight concurrency utilizing Erlang's mechanisms[11]
- Railway oriented programming via the
withconstruct - Built-in tooling for managing dependencies, code compilation, running tests, formatting code, remote debugging and more
- Lazy and async collections with streams
- Pattern matching[11] to promote assertive code[13]
- Unicode support and UTF-8 strings
Contoh-contoh
Sintaksis bahasa Elixir banyak terinspirasi dari bahasa Ruby dan Erlang, sehingga relatif mudah dipahami. Jose Valim sendiri juga diketahui sebagai salah seorang pengguna bahasa Ruby. Berikut adalah contoh-contoh yang dapat dijalankan dalam 'iex shell' maupun disimpan ke dalam sebuah berkas dan dijalankan melalui Terminal dengan mengetikan elixir <filename>.
Contoh klasik program Hello world: <syntaxhighlight lang="iex"> iex> IO.puts("Hello World!") Hello World! </syntaxhighlight>
Komprehensi <syntaxhighlight lang="iex"> iex> for n <- [1,2,3,4,5], rem(n, 2) == 1, do: n*n [1, 9, 25] </syntaxhighlight>
Pencocokan pola (destructuring) <syntaxhighlight lang="iex"> iex> [1, a] = [1, 2] iex> a 2
iex> {:ok, [hello: a]} = {:ok, [hello: "world"]} iex> a "world" </syntaxhighlight>
Pencocokan Pola (Banyak klausul) <syntaxhighlight lang="iex"> iex> case File.read("path/to/file") do iex> {:ok, contents} -> IO.puts("found file: #{contents}") iex> {:error, reason} -> IO.puts("missing file: #{reason}") iex> end </syntaxhighlight>
Operator Pipa <syntaxhighlight lang="iex"> iex> "1" |> String.to_integer() |> Kernel.*(2) 2 </syntaxhighlight>
Modul-modul <syntaxhighlight lang="elixir"> defmodule Fun do
def fib(0), do: 0 def fib(1), do: 1 def fib(n), do: fib(n-2) + fib(n-1)
end </syntaxhighlight>
Mengembangkan ribuan proses secara sequential. <syntaxhighlight lang=elixir> for num <- 1..1000, do: spawn fn -> IO.puts("#{num * 2}") end </syntaxhighlight>
Melakukan tugas secara tidak selaras (async) <syntaxhighlight lang=elixir> task = Task.async fn -> perform_complex_action() end other_time_consuming_action() Task.await task </syntaxhighlight>
Program-program Elixir yang menonjol
- Absinthe ialah implementasi GraphQL untuk Elixir
- Ecto adalah pembungkus basisdata dan query untuk Elixir
- Mix adalah alat pembangun proyek otomatis untuk proyek-proyek Elixir.
- Nerves adalah sebuah kerangka kerja dan landasan kerja untuk peranti lunak tertanam.
- Phoenix adalah kerangka kerja pembangun situs web pada Elixir
- Plug adalah sebuah spesifikasi dan alat untuk mempermudah dalam membuat modul antara aplikasi-aplikasi web.
Pranala luar
- Elixir language website
- Code on GitHub
- Elixir - A modern approach to programming for the Erlang VM (video presentation)
- Dave Thomas: "Programming Elixir ≥ 1.6 Functional |> Concurrent |> Pragmatic |> Fun" (book)
- Simon St. Laurent, J. David Eisenberg: "Introducing Elixir" (book)
- Chris McCord: "Metaprogramming Elixir " (book)
Referensi
- ↑ Elixir: A Mini-Documentary.
- ↑ Most Popular Programming Languages of 2018 - Elite Infoworld Blog. 2018-03-30.
- ↑ Elixir. José Valim.
- ↑ Introducing new open-source tools for the Elixir community.
- ↑ com/devblog/moz-analytics-db-free/ Unlocking New Features in Moz Pro with a Database-Free Architecture.
- ↑ What big projects use Elixir?.
- ↑ Elixir in production interview: Garth Hitchens.
- ↑ Nerves - Craft and deploy bulletproof embedded software in Elixir.
- ↑ Elixir - A modern approach to programming for the Erlang VM.
- ↑ José Valim - ElixirConf EU 2017 Keynote.
- ↑ 11,0 11,1 11,2 11,3 11,4 11,5 Elixir.
- ↑ Wolfgang Loder. Erlang and Elixir for Imperative Programmers. Leanpub. 12 May 2015.
- ↑ Writing assertive code with Elixir.
Sumber dan atribusi
Konten artikel ini diadaptasi dari Wikipedia bahasa Indonesia, revisi 23218304 (2023-04-05T03:34:38Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.