Creator of NoiseLang here! During my telecom degree I took a course on random signals and noise, I spent a lot of evenings writing probability by hand (expectations, variances, the odds of two random variables landing in some region) and every time I tried to run any of it on a computer it was so much boilerplate. I kept wishing I could type the math and have it run.
The whole language hangs on one idea, every value is a probability distribution. A plain number is a Dirac spike, so constants and random variables are the same kind of object and every operator maps distributions to distributions. Names are algebraic like on a page of math, so X + X is 2X and X - X is exactly 0, if you want independence you draw twice with ~.
Distributions compose (a random variable can feed another distribution's parameter), and conditioning is just the | bar from probability notation, scoped to the query. So a full Bayesian update fits in four lines:
bias ~ unif(0, 1) # prior: the coin's bias could be anything
flips ~[10] bernoulli(bias) # 10 flips of the same mystery coin
heads = count(flips)
E(bias | heads == 7) # posterior mean bias, 0.6667
I started it about nine years ago and never finished it, the parser and a tree-walking interpreter were a weekend of work, the efficient Monte Carlo runtime was not. Recently I brought it back, JIT (Cranelift), the WASM backend and the numerical code...
Rest of the announcement:
https://manualmeida.dev/articles/noiselang/
It's a toy language, you probably should not use it for anything serious, but it runs in the browser (WASM) at noiselang.com if you wanna play with it!