marick

marick

As a new Phoenix user, I was happy to discover that Phoenix doesn’t render strings but something rather like Erlang iodata. That lets me use a more builder-style approach for creating chunks of HTML pages - but without having to use elaborate infrastructure. Seems to be working nicely so far.

In any case, I thought I might write up a blog piece about what I now understand about Phoenix rendering and iodata. As a newbie, I’ve probably gotten things wrong. Corrections welcome here or at http://blog.roundingpegs.com/taking-advantage-of-phoenix-rendering-and-iodata-part-1/

Showing Posts 1 to 10

OvermindDL1

OvermindDL1

Nice, although one thing to note is that although eex accepts ‘nil’, it should not really ever be used. Returning an empty list of [] is always a better approach than returning nil as it then allows it to be embedded further without worry. I consider nil’s returned from a function that could ever possibly end up going to a template as a bug.

Other than that your article looks like a fairly accurate high level view. :slight_smile:

xtian

xtian

@OvermindDL1, can you explain further what you mean here? I don’t understand the practical difference of returning [] versus nil from a helper.

OvermindDL1

OvermindDL1

A nil in elixir is just an atom, if you put an atom in an iolist then it is no longer an iolist and can crash. By always returning [] (which, consequently, is Erlang’s nil, Elixir borked that hard and I really hope Elixir 2.0 fixes that) then you can embed those calls in iolists without worry.

xtian

xtian

Ah ok, that makes sense. Thanks!

OvermindDL1

OvermindDL1

@josevalim Is there any chance of nil compiling to [] in Elixir 2.0? It would fix so many weird oddities in the erlang ecosystem with elixir, like iolists above. ^.^

michalmuskala

michalmuskala

I honestly don’t think this is a good idea. Erlang uses nil to mean empty list only because that’s the naming in lisp. But I don’t think there’s a strong technical reason for it.

Erlang itself most often uses the atom undefined for uninitialised state, so I think using an atom for this purpose in elixir makes the most sense.

OvermindDL1

OvermindDL1

:undefined for non-initialized state, I still use that in Elixir as well, but nil is often returned in places that are not just non-initialized but convey information, like ‘nothing’, which is what also states, which is especially useful in a lot of situations. If anything an ‘undefined’ keyword should be added that just maps to :undefined, and nil maps to []. :slight_smile:

josevalim

josevalim

Creator of Elixir

[] is not Erlang’s nil. That notation is used only in the abstract syntax tree and in Erlang code nil has exactly the same as nil in Elixir.

Plus [] has the notion of cardinality, which nil is devoid of. Given Elixir has both collections and base types, I believe it is important to represent nothingness without a notion of cardinality built-in.

OvermindDL1

OvermindDL1

At least at the VM level, ordering level, type encoding, and everything else in the vm, the empty list is called ‘nil’ in the BEAM, and many things are optimized for it in terms of space and speed, more so than any atom.

josevalim

josevalim

Creator of Elixir

Exactly. Such happens because empty lists are common and worth optimizing for but it does not imply they are semantically meant to be nil at the language level.

— All posts loaded —

Where Next? Top

Trending in Discussions Top

cblavier
Hey there, It’s been more than a year since we started using LiveView as our main UI library and building a whole library of UI componen...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
achempion
I’ve been using Emacs as my main code editor for more than a two years. It’s a custom build version although I’ve tried doom emacs and sp...
New
axelson
Hi there! :wave: @frigidcode and I (but mostly him) have been running an Elixir Book club, we’re almost done with Designing Elixir Syste...
New
budgie
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with. But I don’t use it anymore. Serverless was the promis...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
georgeguimaraes
Just published claude-code-elixir, a plugin marketplace for Claude Code with Elixir support. These are the plugins I’ve been using for my...
New
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews