6.  Conclusions

      Since the Elk project began, both the research community and significant industry projects have generated increasing numbers of ``embeddable language'' implementations. While many such languages inherit the syntactic flavor of BASIC, those projects that focus on the ability to build non-trivial extensions recently seem to almost exclusively turn to the Scheme language.

      Scheme has proven to be an effective language for extension language purposes. In the beginning of the ISOTEXT project, there were concerns that an implementation of the full Scheme language would be both too large and too slow. These reservations proved to be unfounded: the binary code size of Elk is still significantly below that of a medium size application such as vi. While the performance of Elk may be uninspiring (no compiler is available), this turned out not to be a critical issue, as any bottlenecks can easily be replaced by a primitive recoded in C or C++.

      There also were concerns that Scheme was going to be hard to learn for UNIX users familiar with, say, the Bourne Shell and C. This seems to be more of a problem with initial acceptance than with a steep learning curve: after having overcome the initial barrier (which generally had to do mainly with perceiving the syntax as queer), users reported the same rapid increase in productivity they already knew from shell programming. It certainly has not been necessary to recruit Lisp programmers to be able to extend applications with Elk.

      Finally, Elk was an exercise in writing portable software without being restricted to what is considered portable today. Apart from the well-known problem that true portability between current relevant platforms cannot be attained by just picking one of the proclaimed ``standards'', and the unwieldy situation that there are too many standards for (auto-)configuration of software, a significant part of the effort in generating Elk was consumed by devising support for each new platform for dynamic loading, generation of executables from running programs, and switching between threads of control (continuations). Note that many non-trivial applications of today (apart from Lisp programming environments, GNU emacs and TEX come to mind) need one or more of these features; also note that most relevant current platforms can be made to support these features quite well -- just in wildly different ways.

Markup created by unroff 1.0,    September 24, 1996,    net@informatik.uni-bremen.de