267 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			267 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| $Id$
 | |
| 
 | |
| This is Elk 3.99, a pre-release of Elk 4.0, the Extension Language Kit.
 | |
| 
 | |
| 
 | |
| What is Elk?
 | |
| ------------
 | |
| 
 | |
| Elk is an implementation of the Scheme programming language.
 | |
| In contrast to existing, stand-alone Scheme systems Elk has been
 | |
| designed specifically as an embeddable, reusable extension language
 | |
| subsystem for applications written in C or C++.
 | |
| 
 | |
| Developers using Elk can deliver applications with different components
 | |
| written in different languages, such as an efficient core written in
 | |
| C or C++ and an extensible user interface layer implemented in Scheme.
 | |
| To help building hybrid application architectures, Elk supports a
 | |
| tightly-knit interworking of the C/C++ parts of applications with
 | |
| Scheme code.
 | |
| 
 | |
| Elk is also useful as a stand-alone Scheme implementation, in particular
 | |
| as a platform for rapid prototyping of X11-based Scheme programs.
 | |
| 
 | |
| The Elk project was started in 1987 to support ISOTEXT, a multimedia
 | |
| document editor that has been developed at the Technical University of
 | |
| Berlin.  The first freely available version, Elk 1.0, was published in
 | |
| USENET in September 1989.  Since then, Elk has been successfully used as
 | |
| the extension language framework for numerous applications (commercial
 | |
| products as well as free software projects).
 | |
| 
 | |
| 
 | |
| Getting Elk
 | |
| -----------
 | |
| 
 | |
| You can obtain the Elk 3.99 distribution as well as additional information
 | |
| about Elk in the World Wide Web at
 | |
| 
 | |
|    http://sam.zoy.org/projects/sam/
 | |
| 
 | |
| The distribution is also available for anonymous FTP from a number of
 | |
| servers including these:
 | |
|    
 | |
|    ftp://ftp.x.org/contrib/devel_tools/elk-3.0.tar.gz
 | |
|    ftp://ftp.uni-bremen.de/pub/programming/languages/scheme/elk/elk-3.0.tar.gz
 | |
| 
 | |
| 
 | |
| A non-trivial example application using Elk as its extension language
 | |
| is available as source and pre-compiled binaries (`unroff' is a troff
 | |
| translator with back-ends for HTML and the -ms and -man macros):
 | |
| 
 | |
|   http://www.informatik.uni-bremen.de/~net/unroff
 | |
| 
 | |
| 
 | |
| Elk features
 | |
| ------------
 | |
| 
 | |
|   o  Full incremental, dynamic loading
 | |
| 
 | |
|      This facility enables Scheme code to load compiled Scheme extensions
 | |
|      into the running interpreter (or into the application) on demand.
 | |
|      Complex Elk-based applications can be decomposed into dynamically
 | |
|      loadable components to avoid large, monolithic executables.
 | |
|      Furthermore, user-supplied extension need not be written entirely in
 | |
|      Scheme; they may include an efficient, low-level layer written in C
 | |
|      or C++.
 | |
| 
 | |
|      Dynamic loading in Elk is supported on many platforms and is not
 | |
|      restricted to a dlopen() interface.  Elk provides automatic
 | |
|      initialization of dynamically loaded extensions and takes care of
 | |
|      C++ static constructors/destructors embedded in object files.
 | |
| 
 | |
|   o  Freezing of fully customized applications into executable files
 | |
| 
 | |
|      Elk provides a new Scheme primitive `dump' which freezes the dynamic
 | |
|      runtime image of the Scheme interpreter into an executable file
 | |
|      (including an enclosing application if present).  This facility
 | |
|      resembles unexec() in Emacs, but the new executable resumes execution
 | |
|      by returning from the call to `dump' by which that executable was
 | |
|      created (not unlike fork() in UNIX).  Dynamic loading and `dump'
 | |
|      increase the usability of Elk as the backbone of complex applications.
 | |
| 
 | |
|   o  Powerful C/C++ interface for language interoperability
 | |
| 
 | |
|      Elk provides for a tight integration of the C/C++ core of applications
 | |
|      (or extensions) with the extension language.  Applications can define
 | |
|      their own Scheme primitives (three calling disciplines are supported),
 | |
|      define application-specific first-class Scheme types with customized
 | |
|      print and read functions, convert objects between Scheme types and
 | |
|      C/C++ types in various ways, implement weak data structures, raise
 | |
|      Scheme errors, define Scheme variables and symbols, evaluate
 | |
|      S-expressions encoded as C strings, and utilize the garbage collector.
 | |
| 
 | |
|   o  Full Scheme bindings for X11 and Motif
 | |
| 
 | |
|      Several dynamically loadable extensions provide full Scheme access to
 | |
|      the X11/OpenWindows Xlib, to the application programmer interface of
 | |
|      the Xt intrinsics, and to the Athena and OSF/Motif widget sets.
 | |
|      Using these extensions, the graphical user-interfaces of Elk-based
 | |
|      applications can be built entirely in the extension language.
 | |
| 
 | |
|   o  UNIX interface
 | |
| 
 | |
|      Elk provides Scheme access to most UNIX system calls and common C
 | |
|      library functions.  The UNIX extension supports a wide range of
 | |
|      different UNIX platforms without restricting its functionality to the
 | |
|      lowest common denominator or to the POSIX 1003.1 functions.
 | |
| 
 | |
|   o  Stop-and-copy and generational, incremental garbage collection
 | |
| 
 | |
|      Elk employs two garbage collection strategies selectable at compile
 | |
|      time: a traditional stop-and-copy garbage collector and a generational
 | |
|      garbage collector which is more efficient and thus reduces the time the
 | |
|      application is disrupted by a garbage collection.  On platforms with
 | |
|      advanced memory management, `incremental' mode can be enabled for the
 | |
|      generational garbage collector to further reduce wait times.
 | |
| 
 | |
|   o  Non-standard Scheme features
 | |
| 
 | |
|      In addition to the standard Scheme core, Elk supports first-class
 | |
|      environments, error handling, provide/require and autoloading,
 | |
|      fluid bindings and dynamic-wind, simple `eval-twice'-style macros,
 | |
|      property lists, string ports and bidirectional ports, shell-style
 | |
|      `tilde expansion' in filenames, an interactive top-level written
 | |
|      in Scheme, a Scheme debugger and a pretty printer, arbitrary length
 | |
|      bitstrings, and Scheme records.
 | |
| 
 | |
|   o  Comprehensive documentation
 | |
| 
 | |
|      The distribution includes 230+ pages of fully indexed documentation.
 | |
|      All manuals exist as troff input files which can be translated to HTML
 | |
|      (with `unroff') for online browsing in addition to producing typeset-
 | |
|      quality printed versions.
 | |
| 
 | |
|   o  Distributed in legally unencumbered form
 | |
| 
 | |
|      The copyright/license agreement permits free redistribution and use
 | |
|      of Elk in commercial products.
 | |
| 
 | |
| 
 | |
| Why is Elk using Scheme?
 | |
| ------------------------
 | |
| 
 | |
| As extensions can get as large and complex as freestanding programs,
 | |
| extension language programmers (usually the users of the application)
 | |
| deserve the same language features that other programmers are
 | |
| accustomed to.  By using a general-purpose programming language rather
 | |
| than a specialized scripting language, non-trivial extensions can
 | |
| benefit from the structuring functionality inherent in real programming
 | |
| languages (such as Lisp).
 | |
| 
 | |
| Members of the Lisp language family are particularly suitable as an
 | |
| extension language:  Lisp has a simple syntax but powerful semantics,
 | |
| it allows for small implementations, and its interactive nature
 | |
| supports rapid prototyping and encourages users to explore and test
 | |
| solutions to problems in an incremental way.
 | |
| 
 | |
| Consequently, Lisp has become increasingly popular for this purpose, to
 | |
| the point where the abundance of different dialects has grown into a
 | |
| problem.  Of the standardized dialects of Lisp, only Scheme is suitably
 | |
| modest, yet sufficiently general, to serve as a reusable extension
 | |
| language for a wide range of applications.  Scheme is orthogonal and
 | |
| well-defined, and it is small enough to not dominate the application it
 | |
| serves and to be fully understood with acceptable effort.
 | |
| 
 | |
| 
 | |
| The Elk distribution
 | |
| --------------------
 | |
| 
 | |
| Here is a brief roadmap for the subdirectories and files included in
 | |
| the distribution.
 | |
| 
 | |
| 
 | |
| elk-3.0 --+-- README      Explains the purpose and release status of Elk
 | |
|           |
 | |
|           +-- CHANGES     Lists the changes between this and earlier releases
 | |
| 	  |               of Elk
 | |
|           |
 | |
|           +-- MIGRATE     Explains how C/C++ code (applications or extensions)
 | |
| 	  |               written for older versions of Elk may have to be
 | |
| 	  |               modified to make it work with this version
 | |
|           |
 | |
|           +-- INSTALL     Instructions for configuring, compiling, and
 | |
| 	  |               installing Elk; a brief description of the files that
 | |
| 	  |               get installed in the process; and a description of
 | |
| 	  |               the structure of the Makefiles and the purpose of
 | |
| 	  |               Makefile.local and `build' in each source directory
 | |
|           |
 | |
|           +-- MACHINES    Additional, platform-specific advice for installing
 | |
| 	  |               and using Elk, such as compiler bugs, unsupported
 | |
| 	  |               features, problems with older OS versions and other
 | |
| 	  |               pitfalls
 | |
|           |
 | |
|           +-- BUGS        Information about known problems with this release
 | |
|           |
 | |
|           +-- TODO        Ideas, improvements and projects for future releases
 | |
|           |
 | |
|           +-- COPYING     The copyright status of the distribution
 | |
|           |
 | |
|           +-- AUTHORS     A list of people who have contributed significantly
 | |
| 	  |               to Elk; acknowledgments and credits
 | |
| 	  |
 | |
|           +-- include/    The include files to be #included by applications
 | |
| 	  |               that use Elk as their extension language, and by
 | |
| 	  |               extensions to Elk.  Including scheme.h from this
 | |
| 	  |               directory causes all the other .h files to be
 | |
| 	  |               included in the right order.  The include files may
 | |
| 	  |               or may not use ANSI/ISO-C prototypes, depending on
 | |
| 	  |               the config file you have chosen.
 | |
|           |
 | |
|           +-- src/        The C source files of the Scheme interpreter
 | |
|           |
 | |
|           +-- scm/        Scheme files that are loaded during runtime.  These
 | |
| 	  |               are copied to a destination directory specified in
 | |
| 	  |               config/site when Elk is installed.
 | |
|           |
 | |
|           +-- lib --,     This directory tree holds the C source for various
 | |
| 	  |         |     Elk extensions that can be loaded into the Scheme
 | |
| 	  |         |     interpreter or linked with an application
 | |
| 	  |         |
 | |
| 	  |         +-- xlib/  The C source files of the X11 Xlib extension
 | |
|           |         |
 | |
|           |         +-- xt/    The C source files of the Xt (X11 Toolkit
 | |
| 	  |         |          Intrinsics) extension
 | |
|           |         |
 | |
|           |         +-- xaw/   The Scheme interfaces to the X11 Athena widgets.
 | |
| 	  |         |          There is one .d file for each widget class.
 | |
| 	  |         |          Each of these is compiled into a C source file
 | |
| 	  |         |          when running `make' and then compiled into a
 | |
| 	  |         |          dynamically loadable object.
 | |
|           |         |
 | |
|           |         +-- xm/    The .d files for the Motif widgets
 | |
|           |         |
 | |
|           |         +-- unix/  The C source files of the UNIX extension
 | |
| 	  |         |
 | |
| 	  |         `-- misc/  The C source files of the record extension, the
 | |
| 	  |                    bitstring extension, the regular expression
 | |
| 	  |                    extension, and various other dynamically
 | |
| 	  |                    loadable Elk extensions
 | |
|           |
 | |
| 	  +-- doc/        The directory tree holding the documentation for
 | |
| 	  |               Elk as troff input files and pre-generated
 | |
| 	  |               PostScript files.  See doc/README for a roadmap
 | |
| 	  |               of the `doc' tree.
 | |
| 	  |
 | |
| 	  |
 | |
| 	  +-- examples --,   A collection of demonstration programs for Elk
 | |
| 	  |              |   and the various extensions (mostly in Scheme)
 | |
| 	  |              |
 | |
| 	  |              +-- scheme  Basic Scheme demos (collected from USENET
 | |
| 	  |              |           and other sources)
 | |
| 	  |              |
 | |
| 	  |              +-- xlib    Programs demonstrating the Xlib, Athena,
 | |
| 	  |              +-- xaw     and Motif extensions
 | |
| 	  |              +-- xm
 | |
| 	  |              |
 | |
| 	  |              +-- unix    Example programs for the UNIX extension
 | |
| 	  |              |
 | |
| 	  |              +-- regexp  A demonstration of the regexp extension
 | |
| 	  |              |
 | |
| 	  |              `-- c++     A few simple C++ programs demonstrating
 | |
| 	  |                          use of Elk with C++ applications (see
 | |
| 	  |                          README in this directory)
 | |
| 	  |
 | |
| 	  `-- util/       Various utilities, some of which may aid in preparing
 | |
|                           a config file for an as yet unsupported platform.
 | |
| 
 |