194 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
This is release 3.0 of Elk, 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.0 distribution as well as additional information
 | 
						|
about Elk in the World Wide Web at
 | 
						|
   
 | 
						|
   http://www.informatik.uni-bremen.de/~net/elk
 | 
						|
 | 
						|
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
 | 
						|
 | 
						|
 | 
						|
What is new in Elk 3.0?
 | 
						|
-----------------------
 | 
						|
 | 
						|
The major improvements in Elk 3.0 are a new Scheme object representation
 | 
						|
and a new, completely rewritten C/C++ Programmer's Manual for Elk.
 | 
						|
 | 
						|
The new object representation has been suggested by Craig McPheeters,
 | 
						|
who also contributed an initial set of patches.  Its advantages are:
 | 
						|
 | 
						|
   o  the heap size is no longer limited (except by the amount of
 | 
						|
      virtual memory that can be addressed);
 | 
						|
   o  `fixnums' now occupy an entire C int;
 | 
						|
   o  the number of Scheme types is no longer limited to 128
 | 
						|
   o  the new format improves compile-time checking and eases debugging;
 | 
						|
   o  Elk now ports easily to 64-bit platforms such as the DEC/Alpha.
 | 
						|
 | 
						|
The new C/C++ Programmer's Manual is a complete specification of the
 | 
						|
C/C++ interface to Elk; it is intended for authors of extensible,
 | 
						|
Elk-based applications and for extension writers.  Topics range from
 | 
						|
the general architecture of extensible applications and the use of
 | 
						|
dynamic loading to advanced techniques such as weak data structures and
 | 
						|
cooperation with the garbage collector.
 | 
						|
 | 
						|
Also new in Elk 3.0 is a POSIX-style regular expression extension.
 | 
						|
Elk has been ported to a number of new platforms (among them Linux,
 | 
						|
BSD/OS, AIX 4.1, and HP-UX 10.0).  A full list of changes is in the
 | 
						|
distribution (see the files CHANGES and MIGRATE).
 | 
						|
 | 
						|
 | 
						|
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.
 | 
						|
 | 
						|
 | 
						|
Oliver Laumann  <net@informatik.uni-bremen.de>
 |