I’d love to hear what people think about Wisp, the new Gleam web framework started by Gleam’s primary creator Louis Pilfold.
Gleam, along with the efforts to bring static typing to Elixir definitely played a role in bringing me to Elixir. If Gleam continues to thrive and if Elixir’s new type system doesn’t work out, then I can imagine myself writing phoenix projects with business logic / domain modeling in Gleam (and not necessarily only under those circumstances.)
Wisp will continue to gain more feature over time, though there’s no specific roadmap. Wisp was extracted from real-world Gleam web applications where solutions to real problems were iterated on over time, and the same will likely be done for future features.
There’s a number of projects doing front and back integration in Gleam in a variety of ways, such as Lustre and Sockets. You may find them interesting.
I intend to soon create a template for Wisp web apps with all the usual stuff a business web application would need to get started.
I can’t say anything about Gleam with Phoenix as I’ve never used Gleam with Phoenix, and I don’t currently have Elixir in production.
To be honest, I’d also love to see more BEAM programming languages getting hotter than F# on Github. Unfortunately, if we prefer to look at the stats, we should not be able to find a second one besides Elixir at this moment.
Looks great! I like the context approach and how composition is done with use. Quick question: are responses immediately sent as side-effects or they require the middleware to finish?
Also, two nits if you don’t mind:
On the benchmarks, you should link to a reproducible source. From a glance, you are comparing to languages (Go and Node.JS) and then to “full web framework” in Phoenix (which does a lot out of the box) and in none of these cases I can see what is really being compared. However, publishing the source will 100% lead to bike-shedding, so beware.
You mention pattern matching is faster than routing in the example but that’s not necessarily the case. In Phoenix and Plug, routing literally becomes pattern matching. Someone else could also implement a binary tree (or a trie) for routes and be equally fast (or faster). You are only guaranteed to be faster than linear routing (which when I checked 8 years ago, was the case for most JS and Ruby frameworks)
The response is sent after the handler function returns a response, similar to Raxx in Elixir.
Quite! It’s a deliberately vague statement that is intended to assure you the performance is good enough for production use. Presently I’m not interested in maintaining or discussing benchmarks as I’ve too much work to do.
Aye, I know. I’m specifically talking about Gleam there, not Elixir, which can do more thanks to macros.
If in future someone makes Gleam router that is type safe and at least as fast as pattern matching then we can revisit this and decide if it’s worth the increase in complexity. So far all attempts have failed spectacularly at both.