I've implemented a new programming language. This is a new language and a new implementation: only one serious application has been built so far. The language is, I think, unusual and perhaps clever.
All currently published information is on one big page. (There are some commercial offers on that page but all of the code is available free of charge under open source licenses.)
XQVM is an XML and XQuery-based programming language. All XQVM source code is written as XML with embedded XQuery programs.
XQVM is lisp-like in that code and data have the same types and co-mingle at run-time. In lisp, code and data are represented as "cons pairs" and "symbols". In XQVM, being XML based, code and data are represented as DOM objects. XQVM's lisp-like nature runs deep: syntactic abstraction (defining new specialized sub-languages for your application) is an effective technique for writing XQVM code.
XQVM is forth-like in that, if an XQuery interpreter is already provided, XQVM's procedural evaluation rule can be implemented in but a few lines of code -- a simple loop. XQVM is also forth-like in that procedural steps do not accept named arguments: arguments to a step are found implicitly in the dynamic environment of the running program. (Unlike forth, XQVM is not "stack based" except in-so-far as applications may choose to define stacks and use them that way.)
XQVM is Scheme-like and Actors-like in the way that flow of control is handled. The lowest levels of "core XQVM" require programs to be written in an explicit (albeit unusual) continuation passing style. Each primitive step is, in part, responsible for computing its own continuation. In practice, XQVM is more Actors-like than Scheme-like: programs frequently construct a continuation rather than forward one that they received as an argument.
XQVM is fully reflective. For example, a program can capture it's entire state as an XML document and return that as a reply to a web request. The recipient could resume the program.
I hope you find it interesting.
Recent comments
23 weeks 1 day ago
23 weeks 1 day ago
23 weeks 1 day ago
45 weeks 2 days ago
49 weeks 4 days ago
51 weeks 1 day ago
51 weeks 1 day ago
1 year 1 week ago
1 year 6 weeks ago
1 year 6 weeks ago