From arnor!lowry@uunet.UU.NET Fri Mar 22 02:02:27 1991 From: arnor!lowry@uunet.UU.NET (Andy Lowry) Newsgroups: comp.os.research Subject: Hermes experimental software available via anonymous FTP Date: 8 Mar 91 21:22:21 GMT Organization: IBM T. J. Watson Research Center The experimental prototype Hermes language system, developed at the IBM T.J. Watson Research Center, is now available to internet sites via anonymous ftp. For the past year we have been distributing this software via magnetic tape through the U.S. mail. The new electronic distribution should be faster and more reliable for those sites that have internet access. Requests for tapes will continue to be filled, and should be directed to hermes-request@ibm.com. The distribution includes complete sources, as well as pre-built executables for the following platforms: IBM RISC System/6000 running AIX v. 3.1 IBM RT/PC running BSD 4.3 Sun 3 and Sun 4 running SunOS 4.0.3 or higher The software system is written in a combination of C and Hermes, and should port easily to most 32-bit Unix systems. There is no license required for non-commercial use of the software. Currently, version 0.6alpha of the Hermes prototype is available. Within the next few weeks, a new version, 0.7alpha, will become available. The new version will contain some bug fixes, as well as support for real arithmetic, complete checking of definitions modules, and partial run-time checking of polymorphs. It will also include pre-built executables for the following platforms in addition to those listed above: NeXT machine (ported by R. Lehman and S. Strumpf of Columbia University) Convex (ported by W. Korfhage of Brooklyn Polytechnic Institute) HP 9000 Series HP-UX (ported by W. Korfhage of Brooklyn Polytechnic Institute) Use the following steps to acquire the software via ftp: 1. FTP to software.watson.ibm.com (IP address 129.34.139.5) 2. Specify user "anonymous" and enter identification information (like "user@site") to the password prompt. 2. Get and read the file /pub/README.FTP for general information on software available from this machine. 3. Get and read the file /pub/hermes/README for further instructions on acquiring and installing the Hermes system. Currently, the procedure is as follows (to obtain version 0.6alpha of the software) : 3a. Get the file /pub/hermes/0.6alpha/install-hermes. 3b. Set the FTP transfer mode to binary. 3c. Connect to /pub/hermes/0.6alpha/compressed and get all the files you find there (or a subset, if you've decided you don't need certain components after reading the /pub/hermes/README file). 3d. Exit from FTP. 3e. Set 'execute' permission for the install-hermes shell script you obtained in step 3a. (Normally this permission bit is stripped by FTP). 3f. Run the install-hermes shell script. It will ask you where to install hermes and which components you wish to install. Following is some general information about Hermes. A complete tutorial and reference manual for the language has recently been published: Strom, Bacon, Goldberg, Lowry, Yellin, Yemini. Hermes: A Language for Distributed Computing. Prentice-Hall, Englewood Cliffs, NJ. 1991. ISBN: O-13-389537-8. Hermes is a very-high-level integrated language and system for implementation of large systems and distributed applications, as well as for general-purpose programming. It is an imperative, strongly typed, process-oriented language. Hermes hides distribution and heterogeneity from the programmer. The programmer sees a single abstract machine containing processes that communicate using calls or sends. The compiler, not the programmer, deals with the complexity of data structure layout, local and remote communication, and interaction with the operating system. As a result, Hermes programs are portable and easy to write. Because the programming paradigm is simple and high level, there are many opportunities for optimization which are not present in languages which give the programmer more direct control over the machine. Some important features of Hermes are: * Process Paradigm: The process is the unit of modularity. Hermes processes are as `lightweight' as procedures in Algol-like languages, and have the same data hiding properties as `objects' in object-oriented languages. A process is an independent active entity, consisting of private data and a sequential program. Processes interact by issuing calls on `output ports' (e.g. call p(a, b) sends the callmessage (a, b) on the port p), and receiving calls on `input ports'. This model yields a simple compositional semantics. It is easy to reason about Hermes processes, since a Hermes process behaves the same `in isolation' as it does when linked up to a large system. * Tables: There is a single type constructor for homogeneous data aggregates---a relational table. Tables are a consistent abstraction for data which could be implemented as strings, arrays, linked lists, hash tables, trees, indexed files, etc. The programmer can insert and remove elements from tables, retrieve elements by content, merge two tables, and copy or extract selected subsets of a table. By providing tables, Hermes makes programming simpler and more portable, gives the compiler more freedom to provide alternative efficient data representations, and eliminates potentially dangerous explicit pointer manipulation. * Compile-time checking: Hermes is strongly typed. The use of operations with operands of the wrong type is detected at compile-time. Additionally, Hermes introduces a dataflow-based checking called typestate checking. Typestate checking detects such additional errors as failing to initialize a variable, and using a variant from the wrong case. Typestate analysis also allows the compiler to reuse storage safely and thus avoid the need for run-time garbage collection. It is a goal of Hermes to detect as many errors as possible before a process begins execution. A polymorph data type is provided as an escape to defer type and typestate checking until run-time. * Security: In many languages, a single erroneous module can bring down an entire program. Because a `program' in a systems language might include multiple users, it is important to limit the effect of programming errors. In Hermes, an erroneous process may generate incorrect output values of the correct type, or may fail to generate any output values, but it can never cause other processes to crash or violate the Hermes semantics. Hermes enforces security largely at compile-time, thanks to typestate checking. Typestate checking improves performance as well as reliability, since processes on a single machine can safely share a single hardware address space, even when these processes are acting on behalf of different users. * Dynamic Configuration: Using Hermes, programmers can create, link, and rebind processes dynamically using language primitives without the need to make system calls. Ports are first-class values in Hermes. They can be assigned to variables, stored in tables, passed in messages, etc. The port type determines the interface only, not the binding to code. The effect of replacing one port value with another is to rebind a port to a `plug-compatible' process which may have completely different code but which is guaranteed to have the expected interface. The combination of dynamics with security is valuable in implementing long-lived systems that evolve over time. * Capability-Based Access Control: In Hermes there are no global names. A process can only interact with processes for which it has been given ports. Since ports are first-class, a programmer can provide controlled access to resources by writing processes that manage the resource and giving out ports only to these processes. This provides the flexible access control found in capability-based systems. Using ports as capabilities is efficient because all the checks which are needed to assure that capabilities are not forged have been done at compile-time. Hermes is based on previous work on the Network Implementation Language (NIL), which is described in the September 1989 issue of Computing Surveys. -- Andy Lowry, lowry@ibm.com, (914) 784-7925 IBM Research, 30 Saw Mill River Road, P.O. Box 704, Yorktown Heights, NY 10598