[{"@context":"http:\/\/schema.org\/","@type":"BlogPosting","@id":"https:\/\/wiki.edu.vn\/en\/wiki24\/elixir-programming-language-wikipedia\/#BlogPosting","mainEntityOfPage":"https:\/\/wiki.edu.vn\/en\/wiki24\/elixir-programming-language-wikipedia\/","headline":"Elixir (programming language) – Wikipedia","name":"Elixir (programming language) – Wikipedia","description":"Programming language running on the Erlang virtual machine Elixir is a functional, concurrent, high-level general-purpose programming language that runs on","datePublished":"2021-01-14","dateModified":"2021-01-14","author":{"@type":"Person","@id":"https:\/\/wiki.edu.vn\/en\/wiki24\/author\/lordneo\/#Person","name":"lordneo","url":"https:\/\/wiki.edu.vn\/en\/wiki24\/author\/lordneo\/","image":{"@type":"ImageObject","@id":"https:\/\/secure.gravatar.com\/avatar\/c9645c498c9701c88b89b8537773dd7c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c9645c498c9701c88b89b8537773dd7c?s=96&d=mm&r=g","height":96,"width":96}},"publisher":{"@type":"Organization","name":"Enzyklop\u00e4die","logo":{"@type":"ImageObject","@id":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","url":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","width":600,"height":60}},"image":{"@type":"ImageObject","@id":"https:\/\/upload.wikimedia.org\/wikipedia\/en\/thumb\/8\/8a\/OOjs_UI_icon_edit-ltr-progressive.svg\/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png","url":"https:\/\/upload.wikimedia.org\/wikipedia\/en\/thumb\/8\/8a\/OOjs_UI_icon_edit-ltr-progressive.svg\/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png","height":"10","width":"10"},"video":[{"@type":"VideoObject","@id":"https:\/\/i.vimeocdn.com\/video\/522707072-b3570f11c2a65cc70adfb4590e8f1a96a02ae401e053039fbacec4a247a522e1-d_640","name":"Elixir - A modern approach to programming for the Erlang VM","description":"Elixir is a programming language for the Erlang VM. Elixir provides a first class macro mechanism, supports polymorphism via protocols (similar to Clojure's) and many other features while keeping the functional aspects of Erlang used to build distributed, fault-tolerant applications. In this talk, Jos\u00e9 Valim will cover the main goals and features in Elixir while also presenting some of the rationale and changes behind the language design and its latest tools.","thumbnailUrl":"https:\/\/i.vimeocdn.com\/video\/522707072-b3570f11c2a65cc70adfb4590e8f1a96a02ae401e053039fbacec4a247a522e1-d_640","uploadDate":"2012-11-10T12:13:17+00:00","duration":"P0DT0H49M44S"},null],"url":"https:\/\/wiki.edu.vn\/en\/wiki24\/elixir-programming-language-wikipedia\/","wordCount":7876,"articleBody":"Programming language running on the Erlang virtual machineElixir is a functional, concurrent, high-level general-purpose programming language that runs on the BEAM virtual machine, which is also used to implement the Erlang programming language.[3] Elixir builds on top of Erlang and shares the same abstractions for building distributed, fault-tolerant applications. Elixir also provides tooling and an extensible design. The latter is supported by compile-time metaprogramming with macros and polymorphism via protocols.[4]Elixir is used by companies such as Ramp,[5]PagerDuty,[6]Discord,[7]Brex,[8] E-MetroTel,[9]Pinterest,[10] Moz,[11]Bleacher Report,[12]The Outline,[13]Inverse,[14] Divvy,[15]FarmBot[16] and for building embedded systems.[17][18] The community organizes yearly events in the United States,[19] Europe,[20] and Japan,[21] as well as minor local events and conferences.[22][23]Table of ContentsHistory[edit]Versioning[edit]Features[edit]Examples[edit]Noteworthy Elixir projects[edit]See also[edit]References[edit]External links[edit]History[edit]Jos\u00e9 Valim is the creator of the Elixir programming language, a research and development project created at Plataformatec. His goals were to enable higher extensibility and productivity in the Erlang VM while maintaining compatibility with Erlang’s ecosystem.[24][25]Elixir was aimed at large-scale sites and apps. Elixir uses features of Ruby, Erlang, and Clojure to develop a “high-concurrency” and “low-latency” language. Elixir was designed to handle large data volumes. Elixir is used in the telecommunication, eCommerce, and finance industries.[26]On July 12, 2018, Honeypot released a mini-documentary on Elixir.[27]Versioning[edit]Elixir mostly[28] follows semantic versioning and has only 1 major version with no plans for a second. Each of the minor versions supports a specific range of Erlang\/OTP versions.[29] The current stable release version is 1.14.3[1]\u00a0.Features[edit]Compiles to bytecode for the BEAM virtual machine of Erlang.[30] Full interoperability with Erlang code, without runtime impact.Scalability and fault-tolerance, thanks to Erlang’s lightweight concurrency mechanisms[30]Built-in tooling for managing dependencies, code compilation, running tests, formatting code, remote debugging and more.An interactive REPL inside running programs, including Phoenix web servers, with code reloading and access to internal stateEverything is an expression[30]Pattern matching[30] to promote assertive code[31]Type hints for static analysis toolsImmutable data, with an emphasis, like other functional languages, on recursion and higher-order functions instead of side-effect-based loopingShared nothing concurrent programming via message passing (actor model)[32]Lazy and async collections with streamsRailway oriented programming via the with construct[33]Hygienic metaprogramming by direct access to the abstract syntax tree (AST).[30] Libraries often implement small domain-specific languages, such as for databases or testing.Code execution at compile time. The Elixir compiler also runs on the BEAM, so modules that are being compiled can immediately run code which has already been compiled.Polymorphism via a mechanism called protocols. Dynamic dispatch, as in Clojure, however, without multiple dispatch because Elixir protocols dispatch on a single type.Support for documentation via Python-like docstrings in the Markdown formatting language[30]Unicode support and UTF-8 stringsExamples[edit]The following examples can be run in an iex shell or saved in a file and run from the command line by typing elixir .Classic Hello world example:iex> IO.puts(\"Hello World!\")Hello World!Pipe operator:iex> \"Elixir\" |> String.graphemes() |> Enum.frequencies()%{\"E\" => 1, \"i\" => 2, \"l\" => 1, \"r\" => 1, \"x\" => 1}iex> %{values: 1..5} |> Map.get(:values) |> Enum.map(& &1 * 2)[2, 4, 6, 8, 10]iex> |> Enum.sum()30Pattern matching (a.k.a. destructuring):iex> %{left: x} = %{left: 5, right: 8}iex> x5iex> {:ok, [_ | rest]} = {:ok, [1, 2, 3]}iex> rest[2, 3]Pattern matching with multiple clauses:iex> case File.read(\"path\/to\/file\") doiex> {:ok, contents} -> IO.puts(\"found file: #{contents}\")iex> {:error, reason} -> IO.puts(\"missing file: #{reason}\")iex> endList comprehension:iex> for n Task.async_stream(&File.read!(\"#{&1}.txt\"))|> Stream.filter(fn {:ok, contents} -> String.trim(contents) != \"\" end)|> Enum.join(\"n\")Multiple function bodies with guards:def fib(n) when n in [0, 1], do: ndef fib(n), do: fib(n-2) + fib(n-1)Relational databases with the Ecto library:schema \"weather\" do field :city # Defaults to type :string field :temp_lo, :integer field :temp_hi, :integer field :prcp, :float, default: 0.0endWeather |> where(city: \"Krak\u00f3w\") |> order_by(:temp_lo) |> limit(10) |> Repo.allSequentially spawning a thousand processes:for num IO.puts(\"#{num * 2}\") endAsynchronously performing a task:task = Task.async fn -> perform_complex_action() endother_time_consuming_action()Task.await taskNoteworthy Elixir projects[edit]Mix is a build automation tool that provides tasks for creating, compiling, and testing Elixir projects, managing its dependencies, and more.[34]Phoenix is a web development framework written in Elixir which implements the server-side Model View Controller (MVC) pattern.[35]See also[edit]References[edit]^ a b “Release 1.14.3”. 14 January 2023. Retrieved 11 February 2023.^ “elixir\/LICENSE at master \u00b7 elixir-lang\/elixir \u00b7 GitHub”. GitHub.^ “Most Popular Programming Languages of 2018 – Elite Infoworld Blog”. 2018-03-30. Archived from the original on 2018-05-09. Retrieved 2018-05-08.^ “Elixir”. Jos\u00e9 Valim. Retrieved 2013-02-17.^ “Elixir at Ramp”. Ramp. 2021-05-24. Retrieved 2022-02-25.^ “Elixir at PagerDuty”. PagerDuty. 2018-06-14. Retrieved 2019-04-21.^ Vishnevskiy, Stanislav (Jul 6, 2017). “How Discord Scaled Elixir to 5,000,000 Concurrent Users”. Retrieved 2019-04-21.^ Valim, Jos\u00e9 (2020-06-23). “Elixir at fintech with Brex”. elixir-lang.github.com. Archived from the original on 2020-11-30. Retrieved 2020-11-14.^ “What’s New in Release 6.0 | Documentation”. www.emetrotel.com. Retrieved 2019-04-21.^ “Introducing new open-source tools for the Elixir community”. Pinterest Careers. Archived from the original on 2015-12-19. Retrieved 2016-08-01.^ “Unlocking New Features in Moz Pro with a Database-Free Architecture”. Retrieved 2016-08-01.^ “Elixir”. Bleacher Report Engineering. Retrieved 2019-05-22.^ Lucia, Dave (Sep 24, 2018). “Two years of Elixir at The Outline”. Retrieved 2019-05-22.^ “What big projects use Elixir?”. Retrieved 2016-08-01.^ “Why Divvy uses Elixir instead of more popular coding languages”. 2 April 2019. Retrieved 2019-04-30.^ The operating system and all related software that runs on FarmBot’s Raspberry Pi.: FarmBot\/farmbot_os, FarmBot, 2019-10-28, retrieved 2019-10-29^ “Elixir in production interview: Garth Hitchens”. 3 June 2015. Retrieved 2016-08-01.^ “Nerves – Craft and deploy bulletproof embedded software in Elixir”. Retrieved 2016-08-01.^ “ElixirConf”. Retrieved 2018-07-11.^ “ElixirConf”. Retrieved 2018-07-11.^ “Erlang & Elixir Fest”. Retrieved 2019-02-18.^ “Elixir LDN”. Retrieved 2018-07-12.^ “EMPEX – Empire State Elixir Conference”. Retrieved 2018-07-12.^ Elixir – A modern approach to programming for the Erlang VM. Retrieved 2013-02-17.^ Jos\u00e9 Valim – ElixirConf EU 2017 Keynote. Archived from the original on 2021-11-17. Retrieved 2017-07-14.^ “Behinde the code: The One Who Created Elixir”. Retrieved 2019-11-25.^ “Elixir: A Mini-Documentary”. Retrieved 2021-10-30.^ “Imperative Assignements are breaking the application in 1.7 update \u00b7 Issue #8076 \u00b7 elixir-lang\/elixir”. GitHub. Retrieved 2020-02-10.^ Elixir is a dynamic, functional language designed for building scalable and maintainable applications: elixir-lang\/elixir, Elixir, 2019-04-21, retrieved 2019-04-21^ a b c d e f “Elixir”. Retrieved 2014-09-07.^ “Writing assertive code with Elixir”. 24 September 2014. Retrieved 2018-07-05.^ Loder, Wolfgang (12 May 2015). Erlang and Elixir for Imperative Programmers. “Chapter 16: Code Structuring Concepts”, section title “Actor Model”: Leanpub. Retrieved 7 July 2015.{{cite book}}: CS1 maint: location (link)^ Wlaschin, Scott (May 2013). “Railway Oriented Programming”. F# for Fun and Profit. Archived from the original on 30 January 2021. Retrieved 28 February 2021.^ “Mix”. Retrieved 2019-04-18.^ “Overview”. Retrieved 2019-04-18.External links[edit]"},{"@context":"http:\/\/schema.org\/","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/wiki.edu.vn\/en\/wiki24\/#breadcrumbitem","name":"Enzyklop\u00e4die"}},{"@type":"ListItem","position":2,"item":{"@id":"https:\/\/wiki.edu.vn\/en\/wiki24\/elixir-programming-language-wikipedia\/#breadcrumbitem","name":"Elixir (programming language) – Wikipedia"}}]}]