DLP Release Notes

Contents

Download

DLP/Java is currently a pre-compiled distribution:
dlp.zip

Overview of the directory structure of the distribution :
  dlp/
	bin/
		dlp		## command line execution
		dlpc		## compiler shell script (Cygwin / Linux / Solaris)
	classes/
		dlpsys.jar	## pre-compiled libraries and run-time system
	examples/
		README.txt
		....
		*.pl		## DLP program examples
		makefile	## for the compilation of the DLP examples
		setvars.j122	## environment variable settings (Linux / Solaris)
		....
	lib/
		execomp.qlf	## compiler front-end / back-end

Installation

Compilation

When compiling a DLP program "prog.pl" :
 dlpc prog.pl 
in directory "/home/user/project/qwerty", the generated Java class files are written to the corresponding "/home/user/project/qwerty/classes" subdirectory. As mentioned in the setvars files, this "classes" subdirectory should also be included in your CLASSPATH environment variable.

Execution

Summary of Built-ins

Arithmetic comparison

Arithmetic evaluation

Atomic term processing

Character input/output

Logic and control

Stream selection and control

Term comparison

Term creation and decomposition

Term input/output

Term input from constant terms

Term output to constant terms

Term unification

Type testing

List Processing

Miscellaneous

TCP / IP Networking

EAI Node::Field like Storage-Retrieval Predicates

The NodeName :: FieldName predicates mentioned below, provide an EAI-like storage and retrieval functionality. Although they are primarily intended for stand-alone servers, i.e. servers not embedded in an VRML / EAI framework, they can also be used for other purposes. Typically, such a server will handle multiple independently running client threads, therefore the storage and retrieval predicates are extended to deal with event driven, i.e. (internally) wait / notify based, processing:

Get / Set Field Predicates :

The GlobalFieldName, NodeName and FieldName predicate arguments are atoms. Predicate set_field sets the associated value of the specified GlobalFieldName or NodeName and FieldName combination to the term as mentioned in the Term argument. Predicate get_field returns the stored Term value or returns the atom undefined when not yet defined by a set_field predicate. The get_field predicate is non-blocking; it always returns immediately.
Predicate get_field_event blocks until a set_field operation sets the corresponding value, after which it returns that value and "resets" the field. This blocking and reset behavior can be independently selected by the get_field_block (no reset) or get_field_reset (no blocking) predicates respectively.
An implicit (get_field_event) or explicit (get_field_reset) field reset doesn't set the field value to undefined, but only flags that the value has been retrieved. This allows non-blocking predicates to get the latest field value.
Summary: get_field and get_field_reset are non-blocking; they allow for polling a particular field value. Predicates get_field_block and get_field_event always block until a new field value has been defined by the set_field predicate. Blocking and unblocking are (internally) wait / notify driven.

Get / Set Queue Predicates :

Queue predicates provide a flexible way to construct special purpose asynchronous interaction patterns or protocols between active objects. All queue primitives are safe in multi-threaded execution contexts (atomic queue update). NodeName and QueueName predicate arguments are atoms. Predicate new_queue creates a unique queue. The maximum number of queue elements is defined by MaxSize. When a queue isn't defined yet by new_queue upon the first invocation of a set_queue or get_queue predicate, a queue descriptor will automatically be created with a default maximum size of 100.
Predicate set_queue appends a new Term to the queue. If the queue contains MaxSize elements this operation will block until a get_queue operation removes an element from the queue. Predicate get_queue removes the first element from the queue and unifies this element with Term. In case the queue is empty, this operation will block until a set_queue operation adds an element to the queue.

Conditional Queue Lookup Predicates :

Get / Set Array Predicates :

DLP / JavaScript Interface

Multi-threaded Objects (Syntax Summary)

Vectors / Quaternions (vectorlib)

DLP / EAI: VRML External Authoring Interface Library