Taking a bit of a detour with self-hosting the language, now that the syntactic surface, standard library, and initial dependency strategy are on a decent footing.
With any luck, by the end of the week, I'll start prepping for a 0.0.1 release.
The memory management model is automatic reference counting, with some optimizations, such as perseus for compile time reference counting where possible, and copy-on-write at runtime.
Yes, it's python-inspired. Some notable differences are:
- no return keyword
- match/if are expressions
- it's functional
- =? is used for early returns or binding, depending on the variant of an Option or Result that is returned
There's a lot of other differences -- it's a smaller language surface than Python overall.
Yeah, this is the idea. This chaining is exactly the same as the pipeline operator in some some function languages, except that it hopefully reads in a more familiar way to programmers of non-functional languages.
Yes, blorp does that. And it also allows local mutation and loops inside pure functions, so performance doesn't need to be left on the table in most cases.
Hi, maintanier of blorp here. I think you mean that [1,2,3].map(func(x): x *2).filter(func(x): x > 5) would iterate twice, correct? Under the hood blorp optimizes that away for the functions we can. It constructs a loop and combines logic into a single iteration where possible.
Of course, blorp also allows local mutation in loops (even in pure functions, so long as the logic is contained to the function), so if there's a specific algorithm you'd rather express in a loop, you can.
Hey - I'm the creator of Blorp, and like a lot of the ideas you have in Roc! Did you consider having opt-in purity? Or some other means of conveying impurity other than "!"?
It takes inspiration from Python, Rust, Go, and functional programming. It's oriented toward readability, safety, and speed.
I'm finishing up the journey of completely self-hosting. Then I'll be tidying it up for an initial release.