One of the issues I run into is that agents are predisposed to write extremely defensive, odd-case-handling code, and that makes me recoil when I have to look into it: the SNR ratio is very low. You get a spaghetti that is unlikely to crash, but really hard to extract the gist of. And finding more global bugs can be difficult because what should be structural impossibilities can be coerced into silent skips.
The article made me think that maybe what I’d like is a language where validation doesn’t triple the lines of code you have to write.
Which its great if this also doesn't loose lower level information, but just wraps it, so end user could dig into the error.
And then the Rye version is presumably just as verbose.
> or translate exception from lower level one to a higher level one
This is the actual flaw in exception-based languages. Adding context should be much more convenient.
Additional benefit I see, they already express intent. Like map, filter, reduce express intent better than foreach loop.
The only thing so far which feels not fully fitting is that dot and pipe are often semantically equivalent - applying function to the output of the previous one. And yet you still need to pick the right one.
E.g. Clojure (which is too hosted over OOP language) treats dot as an indicator that it's a method, but invocation/application follows the same syntax as any fn:
(.method (function arg))
Meanwhile in Rye:
"12 8 12 16 8 6" .load .unique .sum
when unique and sum are from underlying Golang, but if I made them myself it suddenly has to be:
12 8 12 16 8 6" .load | unique | sum
All functions, user level or builtins (written in Go) (or generic methods that dispatch on the Kind of first arg) have exactly the same calling conventions/rules. Dot vs pipe is a matter of evaluation priority, that works the same on all of them.
In fact there are more word types in that "game", words, dotwords, opwords and pipewords :) look here for more: https://ryelang.org/meet_rye/specifics/opwords/