This article contains content that is written like an advertisement. (February 2009) (Learn how and when to remove this template message)
|Developer(s)||aliCE Research Group, University of Bologna|
3.2.1 / February 14, 2017
|Operating system||Windows, macOS, Linux, Android|
|Platform||Java SE, Java ME|
|License||GNU Lesser General Public License|
tuProlog (also called 2P) is a Java-based light-weight Prolog engine developed at the University of Bologna, and maintained by the aliCE Research Group based in Cesena, at the Second Faculty of Engineering, with some members working at the Faculty of Engineering located in Bologna.
tuProlog has been designed to be one of the basic bricks of Internet applications and infrastructures; this purpose has dictated its main characteristics, such as deployability, lightness, dynamic configurability, integration with Java and ease of interoperability.
Deployability of tuProlog owes a lot to Java. Requirements for tuProlog installation simply amount to the presence of a standard Java VM, and a Java invocation upon a single JAR file is everything needed to start a tuProlog activity.
tuProlog is also designed with minimality in mind. So, the tuProlog core is a tiny Java object that contains only the most essential properties of a Prolog engine. Only the required Prolog features (e.g. I/O predicates, DCG operators) are then to be added to or removed from a tuProlog engine according to the contingent application needs.
The counterpart of minimality is configurability. In fact, a simple yet powerful mechanism is required to load and unload useful predicates, functors and operators in a tuProlog engine, both statically and dynamically. This is provided by the notion of tuProlog library, which can be either defined in the standard tuProlog distribution, or defined ad hoc by the tuProlog user or developer. A tuProlog library can be built using either Prolog, or Java, or both languages, and can be either used to configure a tuProlog engine when this is started up, or loaded (and then unloaded) dynamically at any time during the engine execution.
Integration with Java aims at letting developers create components of a tuProlog application by choosing at any step the most suitable paradigm (either declarative/logic or imperative/object-oriented). From the Prolog side, thanks to the JavaLibrary library, any Java entity (object, class, package) can be represented as a Prolog term and exploited from Prolog. So, for instance, Java packages like Swing and JDBC can be directly used from within Prolog, straightforwardly enhancing tuProlog with graphics and database access capabilities. From the Java side, a tuProlog engine can be invoked and used as a simple Java object, possibly embedded in beans, or exploited in a multi-threaded context, according to the application needs. Also, a multiplicity of different tuProlog engines can be used from a Java program at the same time, each one configured with its own libraries and knowledge base.
Finally, interoperability is developed along two main lines: Internet standard patterns, and coordination models. So, tuProlog supports interaction via TCP/IP and RMI, and can be also provided as a CORBA service. In addition, tuProlog supports tuple-based coordination under many forms. First, components of a tuProlog application can be organised around Java-based tuple spaces, logic tuple spaces, and ReSpecT tuple centres. Then, tuProlog applications can exploit Internet infrastructures providing tuple-based coordination services, like LuCe and TuCSoN.
- Enrico Denti, Andrea Omicini, Alessandro Ricci, Multi-paradigm Java–Prolog integration in tuProlog, Science of Computer Programming 57(2), Elsevier Science B.V., August 2005.
- Enrico Denti, Andrea Omicini, Alessandro Ricci, tuProlog: A Light-Weight Prolog for Internet Applications and Infrastructures, Practical Aspects of Declarative Languages, 3rd International Symposium (PADL 2001), Las Vegas, NV, USA, 11-12 March 2001. Proceedings. LNCS 1990, Springer-Verlag, 2001.