Skip to content

Toy vau-calculus language with non-sexpr syntax

Notifications You must be signed in to change notification settings

rgrannell1/visp

Repository files navigation

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

Releases

No releases published

Packages

No packages published