ProscriptLS with HTML builtins and an interactive debugger

Programming for web browsers is attractive. Such a program can be run by any one, any where, and everyone knows how to access it: Any one with access to a computer can load a web page and this runs whatever program is associated with that page. There is a sophisticated environment for making web pages easily available.

There are compromises that web programming demands. Everything must be run by a browser, the program has limited access to the host platform environment (e.g. the file system), different browsers on different platforms have different behaviors that the program must allow for, the browser execution environment relies primarily on HTTP for network communication, and the program must run in an environment of HTML, CSS, and Javascript or WebAssembly. The particular compromise I am interested in is the requirement to program using Javascript. There are many projects to support programming in other languages – I would like to use Prolog as my web browser language.

The goal of ProscriptLS  (my version of the Proscript project) is to be able to create complex web pages using Prolog and a very small amount of Javascript. This small amount of Javascript is due to limits inherent in the situation that require a minimal amount of Javascript to be used to get the Prolog environment set up. The original Proscript project was created by Matt Lilley. My fork of Matt Lilley’s project extensively modifies it.

ProscriptLS is a WAM-based implementation of Prolog with HTML document builtins and a Procedure Box Control Flow interactive debugger. The debugger uses a JQuery terminal running a ProscriptLS interpreter as an element of a web page. The debugger is implemented along the lines presented in the LogicForSystems-1 technical note.

There is an example use of ProscriptLS to create a simple calculator here.

Extending the WAM for tracing

While working on a javascript-based Prolog implementation (Proscript) I realized it needed an interactive debugger. Since Proscript is implemented using the Warren Abstract Machine (WAM) creating the standard Prolog debugger is complicated. I was not able to find any information on how people have solved this problem aside from reading the source of other Prolog implementations (e.g. GNU Prolog, SWI-Prolog).

I have created a technical note that describes how to integrate interactive debugging in Prolog with the WAM. This is presented in a tutorial fashion inspired by Hassan Aït-Kaci’s “Warren’s abstract machine: a tutorial reconstruction.”

Extending the WAM for tracing