GitHunt
RG

Toy vau-calculus language with non-sexpr syntax

visp

Build Status

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

Languages

JavaScript100.0%

Contributors

Created April 14, 2019
Updated October 20, 2023