liveBook · Manning

Elixir

As explained in Elixir in Action, Third Edition

Elixir is a functional programming language that runs on the Erlang virtual machine and supports concurrent, distributed, fault-tolerant software.

Elixir is a functional language targeting the Erlang virtual machine. It compiles to BEAM-compliant bytecode, interoperates with Erlang code and libraries, and retains the runtime foundation used for highly available systems. section 1.2 section 1.4

Its practical goal is to make concurrent-system development clearer: Elixir reduces boilerplate, duplication, and syntactic noise while preserving Erlang-oriented runtime characteristics. Modules, functions, immutable data, and first-class functions form the language-level foundation. section 1.2.1 section 2.8

Elixir’s implementation-oriented advantages include:

  • Use server processes as concurrent units that encapsulate state and communicate through messages. section 1.2.1
  • Replace repetitive process callbacks with GenServer-based modules and concise declarations. section 1.2.1
  • Chain data transformations with the pipe operator, which feeds each result into the next function’s first argument. section 1.2.2
  • Organize, compile, test, package, and reuse projects with Mix and Hex. section 1.2.3

A compact concurrent server

defmodule SumServer do use GenServer def start do GenServer.start(__MODULE__, nil) end def sum(server, a, b) do GenServer.call(server, {:sum, a, b}) end def handle_call({:sum, a, b}, _from, state) do {:reply, a + b, state} end end This small module exposes a start function, sends a request through GenServer.call, and handles the request without reproducing the larger callback scaffold required by the conventional Erlang version.

Readable function composition

def process_xml(model, xml) do model |> update(xml) |> process_changes() |> persist() end The pipeline expresses a sequence of transformations from top to bottom and avoids temporary variables or nested calls. section 1.2.2

Listing 1.1 Erlang-based server process that adds two numbers
-module(sum_server).
-behaviour(gen_server).

-export([
 start/0, sum/3,
 init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2,
 code_change/3
]).

start() -> gen_server:start(?MODULE, [], []).
sum(Server, A, B) -> gen_server:call(Server, {sum, A, B}).

init(_) -> {ok, undefined}.
handle_call({sum, A, B}, _From, State) -> {reply, A + B, State}.
handle_cast(_Msg, State) -> {noreply, State}.
handle_info(_Info, State) -> {noreply, State}.
terminate(_Reason, _State) -> ok.
code_change(_OldVsn, State, _Extra) -> {ok, State}.

Compare the verbose Erlang server-process scaffold with the smaller Elixir implementation and see which operational responsibilities remain explicit. section 1.2.1

How Elixir in Action, Third Edition covers it

How deep it goes
Explains runtime targeting, immutable data, server processes, pipelines, and tooling through runnable examples, while deferring detailed language reference coverage.
Examples
Uses concurrent addition servers, Erlang-to-Elixir comparisons, XML model pipelines, and iex experiments.
What it assumes
Assumes general programming experience, teaches core language building blocks, and points unfamiliar Erlang users toward a syntax crash course.
What you can do after
Apply it via iex, GenServer, pipelines, and Mix to write compact BEAM programs that interoperate with Erlang.
How it connects
Connects functional programming, Erlang, BEAM, GenServer, immutable data, Mix, and Hex.

Related concepts

This explainer was generated by Manning's knowledge graph from the text of Elixir in Action, Third Edition. The section links point to the parts of the book it draws on.