PORK: CLOS-BASED SUPPORT FOR MODELING


PORK is an object system which brings a conventional object-oriented language closer to the requirements of frame-based programming. It only provides a very limited set of features (on top of the base object system itself), and aims to achieve seamless integration with conventional programming. The design of PORK draws from experience with frame systems like CRL and KEE, and from the insight into frame system design gained during the BEEF project.

PORK is implemented as a portable metalevel extension of the Common Lisp Object System (CLOS). It extends CLOS by adding the following concepts:

  • Named objects - these simplify debugging (easier instance reference, easier instance identification) and linked frame model construction. Collections of named objects (called "namespaces") can also be used as a low-level implementation vehicle for knowledge bases.
  • References to nonexisting named objects - programs can manipulate objects that have not yet been created. This greatly simplifies definition of complex linked frame models with circular references.
  • Slots with multiple values - and a mechanism for defining an access interface to these.
  • Automatic updating of inverse slots - (these are similar to CRL's inverse slots.) Otherwise PORK behaves exactly like standard CLOS, thus allowing PORK and CLOS code to be freely mixed. PORK also has a metaobject protocol to allow the system to be extended.
Frame systems, in comparison to object-oriented programming systems (OOPSs), often lack facilities for data hiding and support of encapsulation. OOPSs typically support encapsulation, allowing object manipulation through a well-defined function interface. Frame systems seldom restrict slot access in any way. As opposed to object-oriented programming systems, frame systems are usually designed for representing knowledge, with the programming aspect not necessarily considered very important. Object-oriented programming systems in general are not adequate for knowledge-based systems programming (see, for example, [Lassila 90]). Many attempts have been made to bring frame-based programming closer to mainstream programming by adding object-oriented programming features. PORK brings some of the features of frame systems into the realm of mainstream object-oriented programming. PORK achieves this by adding some useful features from frame systems into a standard object-oriented programming language.

PORK was originally developed to address the object system needs of DITOPS, a CLOS-based toolkit and class library for scheduling system development.

Platform Requirements
  • Macintosh Common Lisp 2.0 (or newer)
  • Lucid Common Lisp 4.1
  • Franz Allegro Common Lisp 4.1, 4.2
  • any CLtL2 or X3J13-compatible Common Lisp - with possibly some porting effort (typically package configurations are different)
MOP Inside!

PORK stands for "Programmable Objects for Representing Knowledge". PORK was earlier called "Parsifal". In some sense, PORK is the long-awaited Well-Done BEEF (go figure...).

back to top