Top 1,000 Features Creators Events Podcasts Extensions Interviews Blog Explorer CSV

Elixir

< >

Elixir is an open source programming language created in 2011 by José Valim.

#28on PLDB 13Years Old 89kRepos
Download source code:
git clone https://github.com/elixir-lang/elixir
Homepage · REPL · Try It Online · Download · Source Code · Blog · Wikipedia · Subreddit · Twitter · Docs

Elixir is a functional, concurrent, general-purpose programming language that runs on the Erlang virtual machine (BEAM). Elixir builds on top of Erlang and shares the same abstractions for building distributed, fault-tolerant applications. Elixir also provides a productive tooling and an extensible design. Read more on Wikipedia...


Example from Riju:
IO.puts("Hello, world!")
Example from hello-world:
#!/usr/bin/env elixir IO.puts "Hello World"
# Hello world in Elixir defmodule HelloWorld do IO.puts "Hello, World!" end
Example from Linguist:
%{"cowboy": {:hex, :cowboy, "1.0.0"}, "cowlib": {:hex, :cowlib, "1.0.1"}, "hackney": {:hex, :hackney, "0.14.3"}, "hound": {:hex, :hound, "0.6.0"}, "httpoison": {:hex, :httpoison, "0.5.0"}, "idna": {:hex, :idna, "1.0.1"}, "phoenix": {:hex, :phoenix, "0.10.0"}, "plug": {:hex, :plug, "0.11.1"}, "poison": {:hex, :poison, "1.3.1"}, "ranch": {:hex, :ranch, "1.0.0"}}
Example from Wikipedia:
task = Task.async fn -> perform_complex_action() end other_time_consuming_action() Task.await task
Elixir Keywords
after and catch do else end false fn in nil not or rescue true when

Language features

Feature Supported Example Token
Standard Library
IO.puts "Hello, World!"
Unicode Identifers
δ = 0.00001
Case Sensitivity
Exceptions
raise "oops, something went wrong"
Pattern Matching
def fib(0), do: 1
def fib(1), do: 1
def fib(n) when n >= 2, do: fib(n-1) + fib(n-2)
Runtime Guards
def abs(number) when number > 0, do: number
def abs(number), do: -number
Garbage Collection
Multiline Strings
template = """
This is the first line.
This is the second line.
This is the third line.
"""
Infix Notation
seven = 3 + 4
Scientific Notation
1.23e45
Anonymous Functions
fn -> IO.puts("hello world") end
Pipes
"Elixir" |> String.graphemes() |> Enum.frequencies()
Streams
https://hexdocs.pm/elixir/Stream.html
Macros
# https://hexdocs.pm/elixir/Macro.html
defmodule Example do
  defmacro macro_inspect(value) do
    IO.inspect(value)
    value
  end
  def fun_inspect(value) do
    IO.inspect(value)
    value
  end
end
Polymorphism
https://hexdocs.pm/elixir/Protocol.html
Range Operator
1..3
Single Dispatch
Maps
%{key: "value"}
Booleans true false
Binary Literals
# 0b[01]+
Integers
# \d(_?\d)*
Floats
# \d(_?\d)*\.\d(_?\d)*([eE][-+]?\d(_?\d)*)?
Hexadecimals
# 0x[\da-fA-F]+
Octals
# 0o[0-7]+
Strings
"Hello world"
"
Lists
my_list = [1, 2, 3, 4, 5]
Regular Expression Syntax Sugar
~r/integer: \d+/
Print() Debugging IO.puts
Message Passing
send(pid, :ping)
Line Comments
# A comment
#
Default Parameters Pattern
def multiply(a, b \\ 1) do
  a * b
end
Conditionals
if true do
  IO.puts("Hello world")
end
Assignment
name = "John"
File Imports
# Alias the module so it can be called as Bar instead of Foo.Bar
alias Foo.Bar, as: Bar

# Require the module in order to use its macros
require Foo

# Import functions from Foo so they can be called without the `Foo.` prefix
import Foo

# Invokes the custom code defined in Foo as an extension point
use Foo
Comments
# A comment
Disk Output
File.write!("helloworld.txt", "Hello, world!\n")
Shebang
#!/usr/bin/env elixir
Case Insensitive Identifiers X
Multiple Dispatch X
Units of Measure X
Pointers X
Semantic Indentation X
MultiLine Comments X

View source

- Build the next great programming language · About · Resources · Acknowledgements · Part of the World Wide Scroll