From: meldc@cs.columbia.edu
Subject: MeldC 2.0, A Reflective Object-Oriented Coordination Language.
Reply-To: meldc@cs.columbia.edu
Organization: Compilers Central
Date: Tue, 15 Dec 1992 18:18:57 GMT
Keywords: C, OOP, available

            MeldC 2.0: A Reflective
   Object-Oriented Coordination Programming Language

We are pleased to inform you that MeldC 2.0 is available to interested
universities and our industrial sponsors.  Enclosed is an information
sheet that details the current status of the MeldC Project here at
Columbia University, and a selected list of related publications.

The release includes source and binary code for Sun4s running SunOS
version 4.1 and DecStations running Ultrix 4.2.  It also includes a user's
manual, implementor's manuals for the MeldC compiler and the MeldC runtime
system, and numerous MeldC examples.

The release is available free of charge via FTP.  Please arrange for an
authorized official to sign and submit to us two (2) copies of the
attached license agreement.  Once we have received the signed license, we
will provide you with the necessary password to obtain the MeldC release.
This will be expedited if you include an email address with your license.

If you would prefer a Sun or DEC cartridge tape and hardcopy manuals
rather than FTP, you must include a check for $995.00 (US dollars) to
cover media, photocopying several hundred pages of manuals, shipping and
handling.  Checks should be made payable to Columbia University, and must
be drawn on a US bank.  Sorry, we cannot accept purchase orders or checks
drawn on a non-US bank.

Please use the address: ATTN: Prof. Gail E. Kaiser, Columbia University,
Department of Computer Science, 500 West 120th Street, New York, NY 10027,
United States.  Any other name or address will substantially delay receipt
and processing.

We look forward to hearing from you.


Programming System Laboratory
Department of Computer Science
Columbia University 
Email : MeldC@cs.columbia.edu




Gail E. Kaiser
Associate Professor


/******************************************************************************/


          MeldC 2.0
A Reflective Object-Oriented Coordination Language

The MELD project has been one of the major foci of the Programming Systems
Laboratory at Columbia University since 1987.  Our goal is to develop a
parallel and distributed object-oriented programming language for
large-scale applications.  Starting in 1990, the MELD language was
completely redesigned and reimplemented from scratch to produce MELDC,
which is closer to C, has fewer but more sophisticated ``features'', and a
cleaner architecture with many of the facilities implemented in the MELDC
language itself.

1. Concepts
The concept of ``coordination language'' was introduced by Carriero and
Gelernter (CACM, Apr89) to designate a class of programming languages
suitable for describing the behavior of open systems.  Ciancarini (ICCL,
Mar90) suggests the following definition for open systems:

    An open system is a dynamic set of agents both cooperating and
    conflicting for the use of a dynamic set of services and resources.
    The agents, the services and the resources are heterogeneous; they
    operate both in parallel and in concurrency; they communicate; they
    have some goals (what they would like to do), some duties (what they
    should do), some rights (what they may do), and some constraints (what
    they must not do).

The development of open systems in distributed computing is a result of
using computer and network technologies in real-world human society.  The
complexity of open systems mirrors the complexity of human society.
Coordination languages usually extend the declarations and statements of
some base computation language, such as C and Pascal, with additional
facilities to support distributed and/or parallel computation.  Many
coordination languages and models have been proposed for open systems
programming.  Among these approaches, the most popular one seems to be the
concurrent object-oriented language approach, since it provides a natural
environment for expressing concurrency and encapsulating distribution in
objects and messages. Objects are naturally suited to represent real-world
entities with private memory and predictable behavior, and messages are
communication media among objects.  Most object-oriented coordination
languages focus on providing immediate language features for building open
systems and hard-code these features into the language internals.  One
example would be supporting atomic actions that guarantee serializability;
however, it would then be difficult to build applications with correctness
criteria other than serializability.  Other object-oriented languages
support persistency, remoteness, monitoring, authorization,
authentication, etc. as immediate language features.

Like other languages, the ultimate goal of the MELDC language is to
support a wide range of high-level features for programmers to cope with
problems in designing open systems.  Unlike other language research, our
focus is not to study what specific language features should be designed
for solving certain open system problems, but to investigate the language
architecture with which programmers are able to construct --- without
modifying the language internals --- new features in a high-level and
efficient way.

MELDC is a C-based, concurrent, object-oriented language built on a
reflective architecture.  The core of the architecture is a micro-kernel
(the MELDC kernel), which encapsulates a minimum set of entities that
cannot be modeled as objects.  All components outside of the kernel are
implemented as objects in MELDC itself and are modularized in the MELDC
libraries.

MELDC is reflective in three dimensions: structural, computational and
architectural.  The structural reflection indicates that classes and
meta-classes are objects, which are written in MELDC.  The computational
reflection means that object behaviors can be computed and extended at
runtime.  The architectural reflection indicates that new
features/properties (e.g., persistency and remoteness) can be constructed
in MELDC.  These properties can be attached to and removed from objects at
runtime.  The reflective architecture provides high flexibility to
customize or extend object behaviors in an elegant way.  For example, a
programmer builds a simple type of persistent objects that do not survive
catestrophic system failures and then builds a comprehensive version of
persistent objects that survive system failures by applying redundancy to
the simple ones.  In MELDC, persistency is not a language primitive, but
just another property that can be constructed for objects.  The semantics
of persistency or policies to implement it are defined in MELDC.

Since micro-kernel facilities cannot be replaced or modified by the MELDC
programmer, several common choices are supported by the kernel and can be
designated by the programmer using compiler switches.  For example, MELDC
intends to support a variety of parallel and distributed applications that
have different concurrency characteristics.  Some applications require a
small number of long-lived threads while others need a large number of
short-lived threads that are created and destroyed dynamically.  Thus
MELDC provides three different thread packages (interleaving stack,
one-stack-per-thread and heap-based), which can be chosen with a compiler
switch.  Other compiler options enable the programmer to choose
pre-emptive versus non-pre-emptive schedulers and either merging or
overriding behavior for multiple inheritance.

2. Status
The MELDC 2.0 implementation consists of about 15,000 lines of C, lex and
yacc for the compiler, 4,300 lines of C and 500 lines of assembly code for
the kernel, plus 10,000 lines MeldC runtime written in MELDC itself.  It
runs on Sun4s with SunOS 4.1 and DecStations with Ultrix 4.2, although
there are several limitations on the DEC version.  This is the first
external release of MELDC, but version 1.0 has been used internally as an
educational language for undergraduate courses.  The release includes a
user manual, compiler and runtime implementation guides, a MeldC variant
of the gdb debugger, and a sample program for network monitoring.

References

[1]   Gail E. Kaiser and Wenwey Hseush and Steven S. Popovich and
      Shyhtsun F. Wu.
      "Multiple Concurrency Control Policies in an Object-Oriented
      Programming System".
      In 2nd IEEE Symposium on Parallel and Distributed Processing,
      pages 623-626.  Dallas TX, December, 1990.

[2]   Steven S. Popovich and Shyhtsun F. Wu and Gail E. Kaiser.
      "An Object-Based  Approach  to  Implementing  Distributed 
      Concurrency Control".
      In 11th International Conference on Distributed Computing
      Systems, pages 65-72.  Arlington TX, May, 1991.

[3]   Wenwey Hseush and James C. Lee and Gail E. Kaiser.
      "MeldC Threads: Supporting Large-Scale Dynamic Parallelism". 
      Technical Report CUCS-010-92, Columbia University, March, 1992.

[4]   James Lee and Wenwey Hseush and Erik Hilsdale and Gail E. Kaiser.
      Dynamic Orthogonal Composition in MeldC. 
      In 2nd Workshop on Objects in Large Distributed Applications.
      Vancouver BC, Canada, October, 1992.

[5]   Steven S. Popovich and Gail E. Kaiser.
      "An Architectural Survey of Object Management Systems".
      International Journal of Intelligent & Cooperative Information
      Systems , 1993.  In press.

/******************************************************************************/


                   MELDC 2.0 SOFTWARE LICENSE
                               FOR
                  EDUCATIONAL AND RESEARCH USES




License agreement between

Institution:

Address:



herein referred to as "You", and Columbia University in the City of New
York, herein referred to as "Us", or "We", regarding the MeldC 2.0
software and any future versions of MeldC designated 2.x (2.1, etc.).
This includes all programs, code and associated documentation you receive
from us and all modified versions or extensions that you may produce.
Herein, this is all referred to as "the software and its derivatives":

1.  You agree that you will not sell or otherwise distribute the software
and its derivatives;

2.  You acknowledge the confidential and valuable nature of the software
and its derivatives.  You will not divulge or distribute the software and
its derivatives to third parties, nor allow any part of the software and
its derivatives to be so divulged or distributed, unless express written
permission is given by us.  You will instruct your employees, students or
other persons authorized to have access to the software and its
derivatives not to divulge or distribute it to third parties, unless
express written permission is given by us;

3.  The software and its derivatives will be used only on computers you
control;

4.  You agree that you will use the software and its derivatives solely
for internal, non-commercial research or academic purposes.  Nothing in
this agreement gives you the right to sell, lease, distribute, transfer,
sublicense, or otherwise dispose of the software and its derivatives, in
whole or in part, or to make any commercial use of it whatsoever;

5.  Title and copyright of the software and its derivatives will remain
with us and shall at no point transfer to you.  You may make copies only
for backup purposes, and they shall contain the original copyright notices
we inserted;

6.  Official publications such as manuals, technical reports and articles
in journals or conference proceedings that are based on the ideas of the
MeldC Project, its software or its derivatives will give proper
recognition to the MeldC Project in the Programming Systems Laboratory of
the Department of Computer Science at Columbia University and the people
who worked on it;

7.  You acknowledge that the software and its derivatives are being
supplied "as-is" without any support services or future updates or
releases.  We may or may not make future updates and releases designated
MeldC 2.x available to you under this same licensing agreement, but we are
in no way obligated to do so.  If you discover any error in the software
or its derivatives, we encourage you to inform us.  We will not
necessarily acknowledge or repair any such errors thus reported;

8.  We make no warranties or representations of any kind, either express
or implied, as to any matter whatsoever, including merchantability or
fitness for any particular purpose.  You agree that we shall not be held
to any liability with respect to any claim by you or a third party arising
from or on account of the use of the software and its derivatives,
regardless of the form of action; whether in contract or tort, including
negligence.  In no event will we be liable for consequential or incidental
damages of any nature whatsoever;

9.  The user of the software and its derivatives will make sure that all
potential users in his/her environment are aware of this agreement and of
the terms for using the provided software and producing derived software.



Institution:                     Columbia University

Address:                         Department of Computer Science

                                 500 West 120th Street

                                 New York, NY 10027

Email:                           Email:

Date:                            Date:

Name:                            Name:

Title:                           Title:

Signature:                       Signature:

-- 
Send compilers articles to compilers@iecc.cambridge.ma.us or
{ima | spdcc | world}!iecc!compilers.  Meta-mail to compilers-request.
Newsgroups: comp.compilers