RG
rgrannell1/visp
Toy vau-calculus language with non-sexpr syntax
visp
Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary
Visp is a toy-language built for a few purposes:
- I'd like to build a language from scratch
- I want to experiment with non-sexpr languages with metaprogramming support
- I want to implement
vau-calculus - I want to implement a language with lenses as the sole path management method
- If this works out, I'd like to switch to this language from Node.js
Why on earth would you want a half-baked pseudoscheme with f-expressions, which are evil?
🤷♀️
I'm unconvinced you need s-expression syntax to metaprogram, and I think macros are poor substitutions for f-expressions. I often want code to inspect other code when working with JS for documentation and versioning, which is easily done with vau-calculus. Being able to really define new syntax is a bonus too!
So far, I've implemented:
- a parser
- an evaluator
- a standard library (WiP)
node library wrappers
It looks like this.
sym <- symbol("some js symbol")
val <- hash*(
("a" 1)
("b" 2)
(sym hash*(
("c" 3)
("d" 4))))
accessor <- at-key(sym)
test <- $fn((x y)
show("hello!")
$define!(z, 3)
sum*(x y z))
show(test(1 2))
show(lens-get(accessor val))Standard Library
sum
sum*
product
product*
plus
minus
times
over