I would like to know what your hoppy coding project are. It doesn’t really have to serve a purpose, but what are you coding on in your free time that just is fun to you and you enjoy working on?
As a background: I am an experienced programmer and do earn my money with it. In my free time I always enjoyed trying out new stuff related to technology, learn new things and improve my skills by doing so. But lately I recognise that I just have no clue what I should do or what a fun toy project I could work on. I really have no ideas. My head just feels completely empty whenever I open my IDE.
So please, tell me what you are coding on for fun.
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.
Holy moley, you keep yourself busy. :D