12 ms·
Elixir 1.12
- svrtknst 5y agoThere are some nice bits in here. tap() and then() are fairly minor, but very nice quality-of-life additions. The work on numerical, livebook, Mix.install etc are healthy steps to take. Nice work.
- dmitriid 5y agoI wish they'd instead fix the compiler to not require .then But in absence of that this is a huge QoL improvement. tap though... OMG yes!
- klibertp 5y agoI was very, very disappointed that the `tap` macro has nothing to do with pattern_tap: https://github.com/mgwidmann/elixir-pattern_tap https://github.com/mgwidmann/elixir-pattern_tap Basically, in Elixir pipelines are not very friendly to simple destructuring: if a call at the beginning of the pipeline returns a tuple of `{:ok, result}`, you can't use either of shortcut syntaxes for lambdas (&Mod.fun/arity and &Mod.fun(&1)), you have to use `fn` and destructure in its head. pattern_tap solves this quite elegantly, but I was told that it's a "non-standard macro that people don't know, so it shouldn't be used"... So when I saw `tap` in Kernel, I though that maybe it's similar at least... unfortunately, it's not similar at all, and now the global identifier `tap` is taken, which made the situation even worse :(
- shakow 5y ago> if a call at the beginning of the pipeline returns a tuple of `{:ok, result}` In my understanding, pipeline are mostly reserved for “unfailable” operations operating on raw data; whereas the where/else/do macro is more oriented towards errors handling; would it work better in your case?
- klibertp 5y agoI think you mean `with`, not `where`? Yes, it helps a bit in some cases, but it's not a replacement for a pipeline - mainly because you'd need to name your intermediate results and "thread" them through the calls yourself. I think I gave a bad example, the better one would be a function returning datetime in the format of :erlang.localtime: `{{Year,Month,Day},{Hour,Min,Sec}}`. I would like to be able to use this value in a pipeline, by passing only a `{Hour, Min}` tuple to the next call in the pipeline. With pattern_tap it looks like this: :erlang.localtime() |> tap({_, {H,M,_}} ~> {H, M}) |> do_something Without - there are at least 3-4 ways of doing this, each with pros and cons, but all of them are more verbose than pattern_tap. If you want a single value only, there's `elem`, but if you need a few - you're out of luck. `destructure` only works on lists, and `match?` only return a boolean, not whatever was matched. `then` macro makes it a bit better, but you still need to create a lambda with the longhand syntax, which is exactly what I wanted to avoid, so it's hardly a solution, even though it may be the best way to do this for now... EDIT: this is in contrast to Clojure, where maps and vectors are callable, and you get `juxt` in the stdlib. So it's not like pipelines in general can't support convenient extraction of subsets of data flowing through the pipe, it's just that Elixir decided not to support this.
- shakow 5y ago> I think you mean `with`, not `where`? Indeed, my bad. > the better one would be a function returning datetime in the format of :erlang.localtime: `{{Year,Month,Day},{Hour,Min,Sec}}` I see what you mean. Yeah, I agree with the rest.
- losvedir 5y agoHm, this works and is about as terse as `pattern_tap`: :erlang.localtime() |> case do; {_, {h,m,_}} -> {h, m}; end |> do_something Not that I'd want to do that in production code, but I felt a bit nerd-sniped here, to see the shortest way I could find without dependencies.
- klibertp 5y agoThat's actually what pattern_tap's tap macro expands into :) See: https://github.com/mgwidmann/elixir-pattern_tap/blob/master/lib/pattern_tap.ex#L79-L81 https://github.com/mgwidmann/elixir-pattern_tap/blob/master/...
- deleted 5y ago[deleted]
- WayToDoor 5y agoSee also, https://news.ycombinator.com/item?id=27192873 https://news.ycombinator.com/item?id=27192873 (Ask HN: Are you satisfied with Elixir or do you regret choosing Elixir?) with great insights about the language. Another popular thread that comes to mind is the one about Discord scaling Elixir (https://news.ycombinator.com/item?id=14748028 https://news.ycombinator.com/item?id=14748028 and https://news.ycombinator.com/item?id=19238221 https://news.ycombinator.com/item?id=19238221)
- nelsonic 5y agoSadly that HN thread is biased toward the person/team that is "leaving" Elixir because it wasn't a good fit for them. For the people who understand Elixir/OTP's strengths it's excellent. We use Elixir for several apps and haven't had any issues recruiting/training people (remote). If we were to chose again we would 100% pick Elixir; nothing else comes close for our use-case.
- heeton 5y agoLikewise. It’s superb, and I haven’t had an issue getting developers (though half have been Ruby devs who picked it up easily).
- konart 5y ago> For the people who understand Elixir/OTP's strengths it's excellent. Is there any place to read about this on a more or less basic level? I bet many people will just ask what benefits they may get from this instead of apps build using Go (for example) + rabbitmq
- wardb 5y agoThere is a known issue with building Erlang/OTP R24 on MacOS. Check this gist for current workarounds: https://gist.github.com/jj1bdx/972ba8da566f7e2eb1ff209fe4865f68 https://gist.github.com/jj1bdx/972ba8da566f7e2eb1ff209fe4865... This will be fixed in an update of Erlang.
- yannoninator 5y agoLooking into Elixir, but from what i've heard, Elixir isn't very memory efficient when it comes to web servers. Is that still the case? Also where does one host Elixir apps these days? Heroku, Vercel or Bare metal?
- acdibble 5y agoI host a pet project Slack bot on a Digital Ocean droplet. You can compile an Elixir app into an executable that treeshakes the BEAM. I can't speak to memory usage, but deployment for me is as easy as compiling an executable and putting it on the server.
- tommica 5y agoIs it just "mix build" that you run, or something more special?
- mrkurt 5y agoThis runs on 256mb VMs and works well even when it gets busy: https://liveview-counter.fly.dev https://liveview-counter.fly.dev And I'm biased, but we are a pretty good place to run an Elixir app: https://fly.io/docs/getting-started/elixir/ https://fly.io/docs/getting-started/elixir/
- mrjoelkemp 5y agoI have https://elixirdaily.link https://elixirdaily.link (an elixir/beam news aggregator running) on the smallest, free Gigalixir VM just fine. Does a ton of memory intensive work and doesn't go OOM (had to be careful with # outbound http connections).
- losvedir 5y agoSeveral versions ago Jose talked about how Elixir is basically "done", which is so refreshing these days! But since then, the developer experience has improved by leaps and bounds through all these improvements other than the core language. As a professional Elixir developer for the last 4 years, I'm loving it. A few improvements in the last few versions off the top of my head that have been really nice: * Robust, timezone handling DateTime support in the standard library. I don't need Timex anymore! * Finally a good approach for configuring applications ar run time (e.g. with ENV vars), that works for dev, test, prod and releases, via config/runtime.exs. * Better compiler warnings verging on a little "light" type checking * Mix.install in this release finally makes Elixir work well for one-off little scripts, since you can just throw a Mix.install([:jason, :mojito]) on top. * LiveView is amazing, and I now keep open a LiveBook notebook for doodling in code, exploring an API, CSV, etc * Not really Elixir, but I'm jazzed about Erlang/OTP 24 JIT support for better performance. Basically, if you took a look at Elixir a few years ago and thought it wasn't ready, might be worth another peek now.
- thejosh 5y agoYep, when you consider a language "done", you can focus on bringing up the DX. I have been loving Elixir since 2016 and haven't looked back since, using it as my primary language for what it's good for, which is web based/distributed workloads.
- chefandy 5y agoHey, thanks for this super useful breakdown. I loved Elixir looking at it a few years ago but never got productive enough in it to do more than a few smaller toy projects. I'm going to dig into it again.
- rubyn00bie 5y ago> Mix.install This is game changing for me (my life is boring). I totally didn't even know this was coming. It's like unexpected Christmas! For folks not in the know, it's been kind of a PITA to have packages loaded in an Elixir repl without a proper project. This should enable a lot more developer tooling to exist too; I'm stoked because I have one tool in particular that's going to be immediately be useful thanks to this change.
- andy_ppp 5y agoThe one thing I’ll say about Elixir I’m always impressed how disciplined they are with the issue tracker on GitHub. Currently 17 issues for such a broad piece of work seems nothing less than astonishing.
- thibaut_barrere 5y agoI believe it is due to 2 things: excellent vision and work first, but also the nature of the language (not a coincidence) tend to lead to strong "lever effect", 2nd level order benefits, hard focus on composability. I'm, though, curious if other people have more insights about that, because it is truly impressive :-)
- andy_ppp 5y agoMy personal feeling is that it's purity, immutability and simplicity of vision. That most of Elixir is also written in Elixir helps. Erlang/the Beam also helps - there are only 112 open Erlang bugs. For reference Golang has 6843 open GitHub issues. I am not sure what to make of this.
- Thaxll 5y agoRust has the same number of issues open then what? You're comparing a simple language that is built on top of Erlang. It has a few issues because: - the code base is small - it has a few users compare to other languages - it's built on top of something else I was curious and I looked at the std lib for Elixir it's very minimal.
- rio517 5y agoI'd also add it is pretty amazing how responsive and friendly the core team is. They generally are very clear, but polite when they don't accept something and super fast about addressing bugs. I started following phoenix and a few other important Elixir repos on github several months ago. I'm amazed how many times the community has taken the time to help someone debug why their specific scenario isn't a bug with the library and pointed them to the right solution.
- dovrce 5y agoIf you are working through a programming textbook and doing the exercises in elixir, LiveBook is great https://github.com/elixir-nx/livebook https://github.com/elixir-nx/livebook (vs one big mix project)
- AlchemistCamp 5y agoIt's such a tiny thing, but being able to paste code with pipelines into iex is a great quality of life improvement.
- conradfr 5y agoGreat news. I'll wait for the official docker image to be updated (I deploy on my own server with CapRover). Seems a bit weird though that they do not generate images for the same elixir version with different OTP versions. Currently the latest is elixir v1.12.0-rc.1 and erlang 23.
- losvedir 5y agoI highly recommend using the hexpm docker images, which you specify with elixir, erlang, and distro versions, e.g. hexpm/elixir1.12-erlang24.0-debian-buster. Since the official Elixir versions aren't pinned to a version of Erlang, we had issues where either Erlang or the distro should change out from under us. But not with the hexpm ones.
- conradfr 5y agoThanks, I'll look into it. edit: so far so good.
- thibaut_barrere 5y agoI second this - it is the best solution if one wants to decouple upgrades of Elixir vs OTP, and is really useful for long term upgrades (one step at a time).
- _asummers 5y agoOnly issue here is that they don't do subpatch versions. We needed Erlang 22.3.4.1 for something, so had to build by hand.
- yewenjie 5y agoWhat are some good non-book text-based in-depth resources for learning Elixir?
- jetpackjoe 5y agohttps://elixirschool.com https://elixirschool.com is really good
- H12 5y agoI found going through the official Elixir guide top-to-bottom to be an excellent crash course: https://elixir-lang.org/getting-started/introduction.html https://elixir-lang.org/getting-started/introduction.html
- namelosw 5y agoNeat. I love how I can install packages in Common Lisp REPL, and now I can do it with Mix.install.
- anonymousDan 5y agoAs an aside, I teach Elixir as part of my distributed systems MSc course. Anyone here in the London area (or even UK) looking for junior engineers? It would be nice to have some companies to point my students at when they start looking for jobs (or year in industry).
- zebra_pendula 5y agoOh really cool! Which University then?
- deleted 5y ago[deleted]
- anonymousDan 5y agoThanks. For various reasons I'd rather not say here.
- rkangel 5y agoI work in the Wireless and Digital Systems department of Cambridge Consultants (Cambridge, UK). We build weird and wonderful radio systems for clients. We are using an increasing amount of Elixir and Erlang because it's a great fit for what we do, but it's still in the minority.
- anonymousDan 5y agoYes I know your company, but wasn't aware you were using Elixir/Erlang. Thanks for the heads up!
- d3ckard 5y agoV7(v7labs.com) is based in London and we are going to be looking for junior engineers quite soon. We use Elixir quite extensively. Drop us an email!
- anonymousDan 5y ago
- randito 5y agoThis video by Saša Jurić -- https://www.youtube.com/watch?v=JvBT4XBdoUE https://www.youtube.com/watch?v=JvBT4XBdoUE -- is really interesting. It moves kind of fast and you might need to rewatch a few parts, but it demonstrates some of the principals that make Elixir / Erlang so compelling. If you watch this, imagine what you would need to do as a developer to make this work in your language of choice.