ddombrow
Just wondering what the thought behind using the word do to start blocks is.
On the face of it, it seems like a strange word to use in a functional language. Sounds very imperative.
Trending in Discussions
As the title says, please share what you’ve been up to with Elixir. Whether that’s been learning it, looking into it, making stuff with i...
New
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
I am happy to introduce the very α version of the new programming language compiled to BEAM.
Welcome Cure.
It has literally three kille...
New
Quite interesting article Google brought me. Didn’t find any mentions about it here.
What do you think in general? Would you use togethe...
New
Since we have deprecated our Erlang sections (as we have dedicated Erlang Forums now) let’s add this thread for those who’d like to post ...
New
:warning: Security advisory: Decimal DoS vulnerability
A vulnerability has been published for decimal where very large exponents can cau...
New
What IDE or editor are you using for Elixir development?
Personally, I use Zed, and I really like it, but sometimes I wish there were a ...
New
Other Trending Topics
Hi there! We created Gust: A task orchestrator inspired by Airflow.
For those who have never heard about Aiflow, it’s a Python-based wor...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
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
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself.
My main conc...
New
Aludel - LLM Evaluation Workbench
Aludel is an embeddable Phoenix LiveView dashboard for evaluating and comparing LLM prompts across mult...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixirconf-us
- #ai
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming










Showing Posts 1 to 3- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
NobbZ
I do think that’s mainly because the syntax is heavily inspired by ruby.
But one could even think that a block in elixir is very close to the identity monad. And do is used by Haskell to add sugar around monads. But since everything is in identity, there is nothing special and we omit the fact and mostly ignore it.
josevalim
There is a confusion between imperative, functional and sequential. The
doconstruct does not imply imperative programming, not even in Haskell. It implies sequence. It means that, any effect inside a monadic construct, even if delayed, will happen in order. It is easy to see how this is important for IO because you want to write to an IO device in a given order and not have the compiler shuffle that.Imperative programming is about your program state and commands. Take C for example, where traversing an array typically requires setting up a for loop with an index, tightly coupled to its in memory representation. Imperative programming is often associated to mutation and side-effects. You need to tell the computer where to store that value or to change its state.
That’s a contrast to functional languages where you rely on higher order functions for traversals (such as
Enum.map). Or where you use recursion to emulate state, such as in Elixir processes.However, even being mostly a functional programming language, Elixir is sequential and the
doreflects that. The code inside a function is going to be executed eagerly and in the order that you have written it. Your instructions are not going to be shuffled around by the compiler.Of course things are a bit more complex than this. The truth is that every Elixir process is sequential but altogether your system is concurrent, event-driven and possibly distributed. Elixir still has imperative bits, for example, calling
defmodule Foo do ... endhas a side-effect of defining a module. We can still use ets to emulate global state, etc. But I think it is important to highlight that, most of all, Elixir is functional and that each process executes code sequentially.ddombrow
Wow. That is a much more satisfying and informative answer than I was expecting, thanks Jose.