"[S]econd, we couldn't understand how the WAM worked. We read all the papers but the explanations seemed to be written only for people who already understood how the thing worked." ---Joe Armstrong (from "A History of Erlang")
My favorite bit of WAM trivia: The Warren Abstract Machine is named after David H. D. Warren. The XSB Prolog engine, built using the Warren Abstract Machine, was run by David S. Warren, who was totally unrelated. Understanding the two at once was made more difficult by the name confusion.
Datalog and variants of it come up a bunch in program analysis and software security. For example, GitHub/Microsoft acquired a company, Semmle [1], that has an object-oriented query language that compiles down into Datalog, and can be used to query source code in interesting ways. Souffle [2] comes up in static analysis as well, and is used in systems such as Doop [3]. A kind of predecessor to Doop is bddbddb [4].
Souufle has been used in Ddisasm [5] for disassembling binaries. XSB Prolog has been used in OOAnalyzer [6] for inferring class hierarchies and virtual tables in binaries as well.
I myself spend some time working on datalog compilation for program analysis and decompilation :-)
I have a buddy who works with Prolog for a "major credit analysis firm" (his words). His code is basically fraud detection and credit scores (i.e. suitability for receiving a loan that you will pay off)
On a different note, does anyone know if WAM (or any logic programming advanced Instruction Set Archictecture) has been implemented in hardware, such as VHDL etc ?
The most difficult to understand aspect of the WAM are its put_unsafe instructions which permits WAM's incredibly simple LCO. You can only appreciate its ingenuity after you had struggled with last call optimizations in engines like the ZIP or the VAM where you need several passes over the environments.
The Warren Abstract Machine has a bunch of Prolog-related opcodes mixed in with a bunch of opcodes for maintaining linked lists and other data structures. Once you figure that out the WAM becomes slightly easier to understand.
[+] [-] vilhelm_s|6 years ago|reply
This has been my experience also!
[+] [-] agumonkey|6 years ago|reply
[+] [-] peter_d_sherman|6 years ago|reply
http://wambook.sourceforge.net/
http://wambook.sourceforge.net/wambook.pdf
[+] [-] jfengel|6 years ago|reply
[+] [-] 6gvONxR4sf7o|6 years ago|reply
[+] [-] pag|6 years ago|reply
Souufle has been used in Ddisasm [5] for disassembling binaries. XSB Prolog has been used in OOAnalyzer [6] for inferring class hierarchies and virtual tables in binaries as well.
I myself spend some time working on datalog compilation for program analysis and decompilation :-)
[1] https://semmle.com
[2] https://souffle-lang.github.io/index.html
[3] https://bitbucket.org/yanniss/doop/src/master
[4] https://suif.stanford.edu/bddbddb
[5] https://github.com/GrammaTech/ddisasm
[6] https://resources.sei.cmu.edu/library/asset-view.cfm?assetid...
[+] [-] pag|6 years ago|reply
[1] https://smallcultfollowing.com/babysteps/blog/2018/04/27/an-...
[+] [-] whitten|6 years ago|reply
On a different note, does anyone know if WAM (or any logic programming advanced Instruction Set Archictecture) has been implemented in hardware, such as VHDL etc ?
[+] [-] pag|6 years ago|reply
[1] https://github.com/vmware/differential-datalog
[+] [-] falsissime|6 years ago|reply
[+] [-] mhewett|6 years ago|reply