Such a nice DX combo for writing new languages.
Still a work in progress, but I thought I'd share :)
Such a nice DX combo for writing new languages.
Still a work in progress, but I thought I'd share :)
Not what I expected.
[1] https://chadnauseam.com/coding/random/calculator-app
0.1 + 0.2
3/10
https://github.com/robpike/ivyIf "arbitrary precision" is not as important to you as "high precision", a 128 bit decimal has enough precision for 99% of real-world applications.
In the previous version of this comment (where I was still reading it incorrectly) I added a fun fact, that the significand of an IEEE 754 double-precision float is only allocated 52 bits, but the "hidden bit trick" provides an extra bit of precision when the normalized form starts with 1.
Arbitrary precision is now supported in 0.3.0 after integrating the `astro_float` (https://docs.rs/astro-float/latest/astro_float/index.html) `BigFloat` type as the base for numbers in the language.
Still working out the kinks, but its live so give it a try!
It love to have to base conversion functions, even if it's print only. Does that fit at all?
Crag is built on raku so has some neat tricks up its sleeve - you can see Crag of the Day to see some in action...
crag '0.1+0.2=0.2' #True (arbitrary precision)
crag '₃₆123.45' #3F.G77777 (base 36)
crag 'e ** (i * π) =~= -1' #True (math symbols, complex numbers)
crag '0rMCMXLIV' #1944 (Roman numerals)
crag '^<௪௨ mph>' #42mph (Unicode and units)
hee hee> 1/10 + 2/10 == 3/10 true >
jasonjmcghee•1y ago
But the main idea I was going for was real-time JIT evaluation with rendered errors (specifically learning / using cranelift JIT) - less to do with the calculator aspect.
I ended up choosing miette for errors.
https://github.com/jasonjmcghee/basic-treesitter-cranelift-j...