play-lang

Play is a small programming language in the spirit of Python and JavaScript. It is used as a test bed for experimental debugger and compiler techniques.

Usage no npm install needed!

<script type="module">
  import playLang from 'https://cdn.skypack.dev/play-lang';
</script>

README

Play Programming Language

Play is small programming language intended for used as a test bed for various compiler, runtime, and debugger technologies. It uses nearley.js and moo.js for building the parser.

To learn more about how Play is built:

  • See Play's predecessor: fun-lang.
  • Watch this video series to learn how to make a programming language.

Videos about the Time Traveling Debugger

The current major experimental feature I am going for is the time traveling debugger, to learn more about it, you can watch these videos:

Todo

  • do some code challenges on CodeWars, etc
  • gather closure info function, doesn't work with the loop iterator variable of a for loop
  • make some toy programs
  • anonymous functions as closure providers
  • use static analysis to check for references of undefined functions
  • debugger: don't show vdom?
  • clean up closures when functions are no longer referenced
  • clean up unused heap variables?
  • heap display goes into disarray when there is too much data
  • bug: why is styles object nested in dom.play example?
  • numbers nested inside objects are always being interpreted as heap IDs, we may need ref objects to * distinguish refs
  • there seems to be a bug with VDOM when changes styles across multiple calls to setStyle()
  • Canvas API
  • when scrubbing the timeline, have the code display pan to the selected line
  • syntax highlighter for Atom and/or VS Code

Done

  • suspend execution while in debugger mode
  • display closure variables in stack frame within debugger
  • UI for time-traveling (1st draft done)
  • DOM events
  • make closures work...