It is finally here: Tidewave now supports Claude Code and OpenAI Codex.
Tidewave unlocks the full-stack potential of your favorite coding agent by tightly integrating it with your web app and web framework at every layer, from UI to database. More info 👇
Rare to hear a founder of an AI coding harness be this honest. A reason I respect @thdxr
"We’re shipping way more hacks where we should have just rethought the whole system from the ground up, or redesigned it to make it more flexible.
So I think our judgement is just off.”
Found multiple real bugs in #AshFramework from this, and one of my monolithic applications went from 2 minutes full compile to 1 minute. This is a huge win for our CI pipelines, our agentic flows, and our developer productivity. Every time they release a new #ElixirLang version, we get:
- zero or effectively zero churn/breakages of import
- faster builds
- more correct programs
#ElixirLang ride or die.
@curtissummers@thdxr@pragdave Having the collection last is useful if you have currying or leverage point-free programming. None of those are the case in Elixir :)
@BatarseShi36359 It could be. It could not be. My whole point is that we have little to no measurements here, so in my opinion it is more of an open question than people give it credit for.
I was recently diagnosed with a rare autoimmune disorder called anti-NMDA receptor encephalitis. It's a "disease of chaos" that completely upturned my life for a couple months.
I wrote a blog about it that goes into more detail and discusses prognosis.
https://t.co/mP0ftCuwpp
Elixir v1.20 released! Now officially a gradually typed language: Elixir type checks every single line of code, finding bugs and dead code, without developer overhead (no typing signatures) and extremely low false positives rate. Plus a faster compiler! Links and reports below.
@spion I have replied to you here on a top level tweet to spark discussion: https://t.co/kx9094Wx6V
But TL;DR we discuss these trade-offs in the announcement and in recent talks, and will explore it as we move forward.
The announcement talks about this: the low false positive is to aid adoption, because all type systems will reject valid programs, and emitting warnings for existing programs that actually have no runtime errors can be a frustrating experience. Once we add type annotations, you can go “full static” (we may also add a compiler flag in the future).
I also gave a talk discussing the trade-offs with precision on type system design and the costs behind low false negatives: https://t.co/wTCT9Nnak8
The announcement talks about this: the low false positive is to aid adoption, because all type systems will reject valid programs, and emitting warnings for existing programs that actually have no runtime errors can be a frustrating experience. Once we add type annotations, you can go “full static” (we may also add a compiler flag in the future).
I also gave a talk discussing the trade-offs with precision on type system design and the costs behind low false negatives: https://t.co/wTCT9Nnak8
@josevalim@remote For our little bigger app (1874 .ex files) it's also good:
1.19.5-otp-28
mix compile --force 247.88s user 43.06s system 674% cpu 43.120 total
->
1.20.0-otp-29
mix compile --force 172.00s user 24.18s system 580% cpu 33.775 total
Elixir v1.20.0-rc.5 is out with our latest batch of typing and performance improvements. We are really close to the final release, so please give it a try and report what you find! https://t.co/8dWT2KdA5h
@tomasztomczyk v1.20.0 is out and you can see if it improves things. If not, you will need to isolate the issue so we can reproduce it. You can use "mix compile --force --profile time --long-verification-threshold 3" for an initial assessment and you may ask a coding agent to help isolate it.
Saying "isolated processes for fault tolerance are not relevant because they were pushed to orchestration layer" is like saying "we don't need threads, because we will just run one pod per core anyway".
The difference in reacting and responding to "my connection pool crashed" by restarting the pool locally vs restarting the whole pod is going to be massive, similar to the differences in latency when coordinating across threads vs across pods.
Yes, other programming languages have threads, and they raise a signal when they fail, but that's missing the point. What matters it not the signal but the guarantees. If you have global mutable state and a thread crashes, can you guarantee it did not corrupt the global state? If you can't, the safest option is to restart the whole node anyway, because it is best to have a dead node than running a corrupted one.
PS: somewhat related 6-years-old post: https://t.co/TaRHZ515Iy
This is amazing — Elixir is has now officially achieved gradual typing.
Not only is this valuable for Elixir projects but it’s a genuinely innovative approach that’s interesting from a computer science and language design perspective.