Elixir (programming language): Difference between revisions

Content deleted Content added
Made a bit more NPOV, added citations
Line 24:
 
==Features==
* A language targetingthat compiles to byte code for the [[Erlang (programming language)|Erlang]] Virtual Machine (BEAM)<ref name="elixirhome>{{ cite web |url=http://elixir-lang.org/|title=Elixir | accessdate=2014-09-07}}</ref>
* Everything is an expression<ref name="elixirhome" />
* Seamless [[Erlang (programming language)|Erlang]] integration: zero-penalty Erlang function calls (and vice versa)
* Erlang functions can be called from Elixir without runtime impact, due to compilation to Erlang byte code, and vice versa
* Meta programming viaallowing [[Lispdirect macro|macros]]manipulation and a first-classof [[Abstract syntax tree|AST]]<ref name="elixirhome" />
* [[Polymorphism (computer science)|Polymorphism]] via protocols inspired by [[Clojure]]
* [[Polymorphism (computer science)|Polymorphism]] via a mechanism called protocols. ''Enumerable'' is an example of a protocol, and is inspired by [[Clojure]] reducers <ref>{{ city web|url=https://pminten.github.io/blog/2013/09/05/elixirs-enumerable/|title=Elixir Enumerable| accessdate=2014-09-07}}</ref>
* First-class documentation
* Support for documentation via Ruby-like Doc-strings in the Markdown formatting language <ref name="elixirhome" />
* [[Shared nothing architecture|Shared nothing concurrent programming]] via message passing ([[Actor model]])
* Emphasis on [[recursion (computer science)|recursion]] and [[higher-order function]]s instead of [[side-effect (computer science)|side-effect]]-based [[loop (computing)|looping]]
* Lightweight concurrency utilizing Erlang's mechanisms with simplified syntax (e.g. ''Task'')<ref name="elixirhome" />
* Everything is an expression
* [[Lazy evaluation|Lazy]] and [[Futures and promises|async collections]] with streams
* [[Pattern matching]] <ref name="elixirhome" />
* [[Unicode]] support and [[UTF-8]] strings