The Lobster Programming Language
strlen.com
strlen.com
I think this is the direction languages should head in: embrace shared mutability for the flexibility benefits, and blend it with borrow checking for the speed benefits.
{.cast(noSideEffect).}: echo "GOT TO THIS LOGIC with a=", aUnlike `unsafePerformIO`, Koka's approach isn't really an "escape hatch" - effects are a safe, principled part of the language. And, if I understand them correctly, even though they're more ergonomic than monads, they also come with friction of their own (maybe needless to say, otherwise they couldn't be enforcing anything) - adding logging to a function will add the `console` effect to the function's type, which bubbles up to callers and might cause issues if any callers are declared as `total` (and indeed, that's the default for function type annotations). But at least, unlike Haskell, you wouldn't need to add `return` and `lift`s everywhere to fix things; and the changes you'll need to make to your signatures are usually quite a bit more straightforward I think.
Citing the "The Lobster Type System" page [1]:
Type checking happens in order of function calls,
i.e. it is much like evaluating the code,
but with types instead of values.
With this flow analysis, lobster infer more specific types for each usage of a variable. var a = nil // a is a nilable of unknown type
if ..:
a = "foo" // a is a nilable string
if a: // guaranteed not be nil inside block
a += "!" // ok: a is of type string here
[1] https://aardappel.github.io/lobster/type_checker.htmlBut you can see some more for yourself, including screen shots of the author's unreleased game:
https://github.com/aardappel/lobster/issues/136
I think what lobster really needs at this point is a page that prominently displays better examples of possible and real end-products somewhere.
raylib example:
Android build is part of CI so appears to be working. iOS is not, so may be broken but the code has always supported 6 platforms (win/lin/osx/ios/android/wasm).
As the link says, there aren't a lot of end-products made with it yet. It's mostly my side project, not sure why you are thinking there should be such a page, this is not a corp-backed megaproject making any kind of claims :)
Turns out, making a language popular in these days is hard. You may still find something interesting within though :)
Nim is my leading choice for prototyping this ATM. I can at least write the game logic core once, unified server and web client, and figure out secondary target platforms later.
Love2D is also a thing of interest, but I find the concept of actually using Lua to be cruel. Javascript is cruel too, but I at least have muscle memory and Stockholm syndrome from my day job, and Nim can target JS directly in a suitable enough way for using canvas.
Lobster, at a glance, looked like it could compete with or compliment Nim on my specific project idea.
I can't help you much with your language choice since you appear to be very particular in what you want. Nim is likely more mature as a project, so I suggest you go with that instead.
I thought I was pretty clear that my project was vaporware, not yours.