brightball
Codeship just published my latest blog entry:
Please give it a read and let me know if there’s any areas of concern. I do have the ability to request edits if need be.
Trending in Discussions
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
Hi everyone!
The first release candidate for the Expert language server project is now available!
We’ve published a press release detai...
New
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
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
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
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
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
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
Hobbes is a low-level distributed database for the Elixir programming language.
Hobbes provides a simple, safe, and scalable storage lay...
New
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
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
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
- #ai
- #ecto-query
- #elixirconf-us
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #elixirconf-eu
- #api
- #forms
- #metaprogramming
- #hex










Showing Posts 1 to 10- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
sztosz
I liked it very much, I skimmed some parts, but it’s rather informative and I don’t have the feeling it’s biased.
OvermindDL1
Looks nice, reading it.
Comments as I read it. ^.^
Well it ‘is’ available, just not in the form they expect as you carry state along a TCO or so. Perhaps word it as
Due to immutable data, common imperative operations such as for-loops aren’t available in the usual imperative forms because there is no mutation of a variable.or so?Many already find recursion comfortable, if not more comfortable than iteration, so this sentence seems a little accusatory to me. ^.^
A hash? Is this referencing perl? o.O? I think you mean
map, also internally it is not a hash-map last time I saw the implementation, so even describing it as a hash-map would not be accurate.Also, your example, even though you were speaking of 'hash’es is not a map, it is a compilation error as it looks like you are mixing tuples and key/value referencing (which you cannot do in tuples). Also, the
IO.puts otherform I think is deprecated, you should have parenthesis likeIO.puts(other).Not entirely. Go scopes out so you could have different area’s in different interface ‘trees’ as well as they are turned into an, as I recall,
log(N)dispatcher to the correct implementation if the interface cannot be resolved or to built-in function pointers on the interface otherwise, it might be more accurate to change thearea(g)to be something likeg.__dispatchTable[area]()or something like that as pseudo-code.Well there are libraries to handle that, or you could do it yourself via macro’s, but it is doable to reuse patterns and quite effective as well. ^.^
I… do not think so? As I recall:
Elixir is thus a Strong Dynamically typed language, but your above description sounds like Static typing. Elixir, however, does have dialyzer, which can do a form of Success typing over the calls, but it is not static nor can the BEAM optimize based on that information nor can the compiler catch type errors.
In this section you describe how cooperative scheduling works with Go, but do not go into near as much detail about how preemptive (not prescheduling) in Elixir works. Also it is preemptive, not prescheduling.
The beam has similar calls as well, including ones that can entirely reset the operating memory of a process as well (
hibernate) and operate only on the next passed in parameters and suchNo they don’t, you can spawn anonymous functions too, your example even shows that. ^.^
Technically Erlang calls it the Process Mailbox I’ve seen everywhere.
Actually
TaskandAgentare not OTP parts, they do not even fit into the OTP supervision tree unless you do it manually. Those are more simple abstractions overspawn, not really parts of OTP I’d personally say.Ehhh, not unlimited, rather the more full a mailbox the more the system pauses things trying to put messages into the mailbox of that process, so as a process gets overwhelmed with messages it slows scheduling everything else trying to put ‘into’ that process (but none others) as it tries to catch up. And the Task thing is something different entirely, maybe should be removed?
Might also be good to mention Elixir has a GC but it only runs over a single process (not pausing anything else unlike Go’s GC) and only when the process starts getting large, else no GC may ever be run on a process at all.
I’m getting busy again, will keep reviewing later if I remember (or poke me).
josevalim
Hrm, what do you mean by this? Sure, they are not part of OTP, but they are OTP compliant processes. You can put them in a supervision tree as easy (or as hard) as a GenServer. And they are definitely more than abstractions over
spawn. For example, an Agent is a GenServer.mkunikow
I liked article very much

I have question: Can we run Go program from Elixir?
About
clusteringyou mostly put Go application into container and orchestration service will take of it. Go very well fits into containers ecosystems. You can use with go http://www.grpc.io/You could add sections:
####Tooling:
https://github.com/uber/go-torch
###usage
Nice projects:
Also worth mention
http://www.infoworld.com/article/3154624/application-development/google-boosts-python-by-turning-it-into-go.html
OvermindDL1
True, but that is not how I see most people use them, I think once have I seen a Task put in a Supervisor tree. That’s fine in the doc then.
brightball
Will definitely submit edits this evening. Thank you for the editorial review.
brightball
Okay, edit’s submitted and hopefully will be tweaked first thing tomorrow because it’s on the front page of HN right now.
Based on your review I asked them to change prescheduling to preemptive scheduling, hash to map (I have spent too much time in perl that it’s a reflex at this point) and an update to the code sample to fix the %{} on the pattern and the puts(other) part.
Most of the rest I left just based on sheer brevity sake. Unlimited-ish on the mailbox. I did mention elsewhere that the process heap is reclaimed independently while Go use’s a system wide GC. For the “functions inside modules” part I was really talking about defining functions.
On the typing subject, I linked to an Elixir Conf presentation on Dialyzer to further explain that part. I should probably have mentioned Dialyzer by name but it’s one of those tools that has no drawback to using it, gets used in generally every project and I didn’t want to confuse the reader with compiler + tool they’ve never heard of and won’t understand without further explanation.
dom
That was a very interesting article, thank you.
Is there a source for the “about half of them”?
Qqwy
While I agree with you personally, I believe that this is very much a matter of opinion.
But your post does make me wonder about something else: Does Go have a way to do metaprogramming?
notriddle
Emphatically no. Go is a simple language, and metaprogramming is complex. You can generate go code from a build script, but that’s about it.