| name = Elixir
| title =
| logo = [[File:Elixir_programming_language_logoElixir programming language logo.pngsvg|frameless|100px170px|elixir programming language]]
| logo caption = Elixir
| paradigms = [[multi-paradigm programming language|multi-paradigm]]: [[functional programming|functional]], [[concurrent programming|concurrent]], [[distributed programming|distributed]], [[process-oriented programming|process-oriented]]
| typing = [[type system|dynamic]], [[strong typing|strong]], [[duck typing|duck]]
| influenced = [[Gleam (programming language)|Gleam]], [[LFE (programming language)|LFE]]
| platform = [[Erlang (programming language)|Erlang]]
| license = [[Apache License 2.0]]<ref>{{cite web|url=https://github.com/elixir-lang/elixir/blob/master/LICENSE|title=elixir/LICENSE at master · elixir-lang/elixir · GitHub|work=GitHub}}</ref>
| year = {{start date and age|2012}}
| influenced_by = [[Clojure]], [[Erlang (programming language)|Erlang]], [[Ruby (programming language)|Ruby]]
| designer = [[José Valim]]
| origin = Brazil
| latest release version = {{wikidata|property|edit|reference|P348}}
| latest release date = {{start date and age|{{wikidata|qualifier|single|P348|P577}}}}
== History ==
José Valim is the creator ofcreated the Elixir programming language, as 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.<ref>{{ cite AV media |url=http://vimeo.com/53221562|title=Elixir - A modern approach to programming for the Erlang VM | access-date=2013-02-17}}</ref><ref>{{ cite AV media |url=https://www.youtube.com/watch?v=IZvpKhA6t8A| archive-url=https://ghostarchive.org/varchive/youtube/20211117/IZvpKhA6t8A| archive-date=2021-11-17 | url-status=live|title=José Valim - ElixirConf EU 2017 Keynote | access-date=2017-07-14}}{{cbignore}}</ref>
Elixir wasis aimed at large-scale sites and apps. ElixirIt uses features of [[Ruby (programming language)|Ruby]], [[Erlang (programming language)|Erlang]], and [[Clojure]] to develop a "high-concurrency" and "low-latency" language. ElixirIt was designed to handle large data volumes. Elixir is also used in the telecommunicationtelecommunications, eCommercee-commerce, and finance industries.<ref>{{ cite web |url=https://www.welcometothejungle.com/en/articles/btc-elixir-jose-valim/|title=Behinde the code: The One Who Created Elixir | access-date=2019-11-25}}</ref>
OnIn July2021, 12the Numerical Elixir effort was announced with the goal of bringing machine learning, 2018neural networks, HoneypotGPU releasedcompilation, adata mini-documentaryprocessing, onand computational notebooks to the Elixir ecosystem.<ref>{{Cite web|title = Numerical Elixir: A(Nx)| website=[[GitHub]] Mini-Documentary|url = https://cultgithub.honeypot.io/originalscom/elixir-the-documentarynx|access-date = 20212024-1005-3006}}</ref>
=== Language Development Milestones ===
==== Research and Implementation of a Type System ====
In an article published in October of 2022, José Valim announced a PhD scholarship to "research and develop a type system for Elixir based on set-theoretic types"<ref>{{Cite web |last=Valim |first=José |date=2022-10-05 |title=My Future with Elixir: set-theoretic types |url=https://elixir-lang.org/blog/2022/10/05/my-future-with-elixir-set-theoretic-types/ |access-date=2023-09-15 |website=elixir-lang.github.com |language=en}}</ref>. The research team consisted of then PhD student Guillaume Duboc, and senior researcher Giuseppe Castagna as lead, with support from Jose Valim. Research on the subject occurred during a stretch of time between then and June 2023, when the research team announced they were aiming to enter a development phase for the type system in the second half of the year<ref>{{Cite web |last=Valim |first=José |date=2023-06-22 |title=Type system updates: moving from research into development |url=https://elixir-lang.org/blog/2023/06/22/type-system-updates-research-dev/ |access-date=2023-09-15 |website=elixir-lang.github.com |language=en}}</ref>. Throughout the year the research team participated in a number of podcasts and video-casts where they discussed the work, including a talk given by José Valim at [[ElixirConf]] 2023 hosted in Orlando, FL titled "the foundations of the Elixir type system"<ref>{{Citation |title=ElixirConf 2023 - José Valim - The foundations of the Elixir type system |url=https://www.youtube.com/watch?v=giYbq4HmfGA |access-date=2023-09-15 |language=en}}</ref>, where the challenges of the work were discussed alongside practical examples, including the discussion of a new approach to gradual typing Jose referred to as "strong arrows," which uniquely made use of existing language mechanics such as guards to guarantee type consistency at compile-time and run-time -- a significant advantage over the kind of type system implemented by other popular type systems such as [[TypeScript]] -- without adding significant performance impacts. At the time of the talk, José Valim indicated that the actual delivery of a type system was not guaranteed, citing uncertainty surrounding the novelty of the work being done and possible difficulties with maintaining fast compilation times.
== Versioning ==
The following examples can be run in an <code>iex</code> [[Shell (computing)|shell]] or saved in a file and run from the [[command line]] by typing <code>elixir ''<filename>''</code>.
Classic [["Hello, World!" program|Hello world]] example:
<syntaxhighlight lang="iex">
[2, 4, 6, 8, 10]
iex> %{values: 1..5} |> Map.get(:values) |> Enum.map(& &1 * 2) |> Enum.sum()
30
</syntaxhighlight>
{{Reflist|30em}}
== ExternalFurther linksreading ==
* {{Cite book |author1=Simon St. Laurent |author2=J. Eisenberg |date=December 22, 2016 |title=Introducing Elixir: Getting Started in Functional Programming 2nd Edition|publisher=[[O'Reilly Media]] |isbn=978-1491956779 |language=en}}
* [https://elixir-lang.org Elixir language website]
* {{Cite book |author=Sasa Juric |date=January 12, 2019 |title=Elixir in Action 2nd Edition |publisher=[[Manning Publications]] |isbn=978-1617295027 |language=en}}
{{Programming languages}}
|