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/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
|
|
|
|
|
|
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.
|
|
|