Symbiotic Reflection between an Object-Oriented and a Logic Programming Language

Roel Wuyts, Stéphane Ducasse. Symbiotic Reflection between an Object-Oriented and a Logic Programming Language. In ECOOP 2001 International Workshop on MultiParadigm Programming with Object-Oriented Languages. 2001.

Abstract

Meta-programming is the act of using one system or language to reason about another one. Reflection describes systems that have access to and change a causally connected representation of themselves, hence leading to self-extensible systems . Up to now, most of the reflective languages have been implemented in the same paradigm. In this paper, we propose \emph{symbiotic reflection} as a way to integrate a meta programming language with the object-oriented language it reasons about and is implemented in. New to this approach is that any element of the implementation language can be reasoned about and acted upon (not only the self representation), and that both languages are of different paradigms. Moreover, every language implementer that is faced with the problem of allowing the base language to access the underlying meta-language has to solve the problem of enabling entity transfer between both worlds. We propose a uniform schema, called upping/downing, to this problem that avoid explicit wrapping or typechecking. We illustrate this with SOUL (the Smalltalk Open Unification Language), a logic programming language in symbiotic reflection with the object-oriented language Smalltalk. We show how SOUL does logic reasoning directly on Smalltalk objects, and how to use this to implement type snooping