Huh neat, I’ll have to squirrel that knowledge nugget away just in case that ever becomes viable. Another snag in my situation which I expect a lot of people my age experience though, the longest I’ve ever been employed at any company is my current job for 4 years (often not by choice - the current job just fired 1/4 of the staff for “budget reasons” on what should be a high-margin contract), and I’ve lived in almost as many locations as I have years. Buying a home would tie me down to one location, and my life has thus far been too volatile to trust that I could stay in one place without needing to move 5 years later. Plus, I was a kid during the 2008 financial crisis so I saw first hand my parents buy a big house past their means only to lose it within a couple years. That one is more irrational/emotional but worth mentioning.
Then there’s the hopium that the proletariat will be pressed by late-stage capitalism into ☭Glorius Revolution☭™ and/or AI removes labor from the labor-consumer-owner equation and causes economic collapse (can’t be a consumer if you don’t have money from labor, can’t be an owner if no one consumes, can’t be labor if no one can hire you), and buying a house will mean a big expense that gets nationalized by the end of the decade. Probably not. But I also have no idea what the next 20 years looks like.
I have dozens of projects in varying levels of completion and maybe like 2 finished projects. Here’s my list, steal to your liking because I come up with ideas I want to see in the world, and clearly I’m not a great medium for that:
d(0, 255) = 1
, and it still worked. Stochastic updates work, even in a distributed context, because it’s a kind of “simulated annealing”.And finally then there’s my magnum opus, Espresso, my favorite project I keep coming back to time and time again and
bikesheddingrefining over many years. If anyone else takes it up I’d be ecstatic.proto[...T] Super Sub(...args) { ... }
, egproto class Animal { ... }
andproto Animal Monkey { ... }
class
,enum
,union
,interface
,struct
, etc. Compare to [P0707];
is an optional operator to explicitly disambiguate their ending.after
operator,x() after y() == (var t = x(); y(); t)
- surprisingly useful for conciseness.[...for(var x in 10) x] == list(range(10))
proto class { +(rhs) { console.log("\{this} + \{rhs}"); } }
delegate()
method which define how to represent the variable on the stack. Untyped variables use an inferred type or an implicitany
, which wraps a dynamic object. This lets you create objects likeint32
while still using the prototype semantics.unsafe
compilation distinction to avoid catastrophic vulnerabilities.try!
semantics, exceptions are actually wrapped in a returnedResult[T, E]
type:try
is an operator which unwraps the result and returns if it’s an error. Thus you getvar value = try can_fail();
. Using type object operator overloading, theResult
type doesn’t need to be explicitly annotated becauseResult[T, E] == T | Result[T, E] == T | fail E
.fail
keyword instead ofthrow
/raise
.I could go on for hours with all of the stuff I’ve thought of for this language. If you want to know more, the README.md and ideas.md are usually the most authoritative, and specification.md is a very formal description of a subset of the stuff that is absolutely 100% decided (mostly syntax). I’ve written turing complete subsets of it before. First usable implementation to arrive by sometime in 2200 lmao. 🫠 I can also unpack the other projects if you want to know more.