From owner-freebsd-ports Mon Aug 21 14:48:35 1995 Return-Path: ports-owner Received: (from majordom@localhost) by freefall.FreeBSD.org (8.6.11/8.6.6) id OAA13704 for ports-outgoing; Mon, 21 Aug 1995 14:48:35 -0700 Received: from snoopy.mv.com (snoopy.mv.com [199.125.64.182]) by freefall.FreeBSD.org (8.6.11/8.6.6) with ESMTP id OAA13685 for ; Mon, 21 Aug 1995 14:48:25 -0700 Received: (from pw@localhost) by snoopy.mv.com (8.6.11/8.6.9) id RAA03654; Mon, 21 Aug 1995 17:45:09 -0400 Date: Mon, 21 Aug 1995 17:45:09 -0400 From: "Paul F. Werkowski" Message-Id: <199508212145.RAA03654@snoopy.mv.com> To: ports@freebsd.org Subject: CMUCL on FreeBSD Sender: ports-owner@freebsd.org Precedence: bulk There was a brief conversation in -hackers back in April regarding the availability of the subject port for FreeBSD. The short answer was "not now, maybe not ever". The discussion ended with an appeal for help porting it to Linux. That was then. Now I am sitting on a totally unique set of bits that previously ran ONLY on your favorite RISC workstation but now are quite happily infesting FreeBSD. I have managed to revive some x86 work that been abandoned several years ago and have the worlds first ever version of CMUCL (in alpha form) for Intel sand and FreeBSD. Truly the BMW of free Lisp ready rock on your own volkschip. So, if you always wanted a LISPM but had to settle for PC, are a hot shot hacker looking to meet your match, love Lisp (C won't help you here), and like what you see in the attached man page, here is your chance to take up the montyChallenge and win your 15-Sec of fame in the Lisp community. Aim your favorite WWW sucker at http://sayre.sysc.pdx.edu:80101/monty/ and pick up CMUCL-FreeBSD-alpha1.tar.{gz readme}. The tar file is 3.6MB and is a package-like thing ready to drop into /usr/local/lib containing a small startup executable that mmaps to a 10MB lisp.core. If you do that and want to help get this thing into beta -- maybe a package/port for 2.1 -- let me know and I'll show you the way. Note, that address is an fsp server and bandwidth limited to 1Kbyte/sec. It will take more than an hour to grab the bits. Have some fun. Paul Werkowski pw@snoopy.mv.com ---------------------cmucl.1------------------------------------- 1 NAME CMU Common Lisp DESCRIPTION CMU Common Lisp is public domain "industrial strength" Common Lisp programming environment. Many of the X3j13 changes have been incorporated into CMU CL. Wherever pos- sible, this has been done so as to transparently allow use of either CLtL1 or proposed ANSI CL. Probably the new features most interesting to users are SETF functions, LOOP and the WITH-COMPILATION-UNIT macro. HARDWARE REQUIREMENTS CMU CL is currently available for a variety of Unix work- stations. See the README file for current platforms. At least 16 megabytes of memory and 25 megabytes of disk space are recommended. As usual, more is better. OVERVIEW When compared other Common Lisp implementations, CMU CL has two broad advantages: -- The new CMU CL compiler (Python) is more sophisticated than other Common Lisp compilers. It both produces better code and is easier to use. -- The programming environment based on the Hemlock editor is better integrated than gnu-emacs based environments. (Though you can still use GNU if you want.) CMU CL also has significant non-technical advantages: -- It has good local support for CMU users, and is well integrated with the CMU CS environment. -- It is public domain, and is freely available to non-CMU sites that aren't able to afford a site-license for a commercial Lisp. COMPILER FEATURES The `Advanced Compiler' chapter of the User's manual extensively discusses Python's optimization capabilities (See DOCUMENTATION below.) Here are a few high points: -- Good efficiency and type-checking at the same time. Compiling code safe gives a 2x speed reduction at worst. October 15, 1991 1 -- In safe code, type declarations are verified, allowing declarations to be debugged in safe code. When you go to compile unsafe, you know the declarations are right. -- Full source level debugging of compiled code, including display of the exact call that got an error. -- Good efficiency notes that tell you why an operation can't be open coded or where you are number-consing, and that provide unprecedented source context -- Block compilation, partial evaluation, lightweight functions and proper tail-recursion allow low-cost use of function call abstraction. TYPE SUPPORT Important note: Even debugged programs may contain type errors that remain undetected by other compilers. When compiled with type checking suppressed using the CMU Com- mon Lisp compiler, these type errors may cause said debugged programs to die strangely. If type checking is not suppressed, these programs will die with an explicit type error. The most visible way in which Python differs from previous Common Lisp compilers is that it has a greater knowledge about types and a different approach to type checking. In particular, Python implements type checking which is `eager' and `precise': -- Eager in the sense that type checking is done immedi- ately whenever there is a declaration, rather than being delayed until the the value is actually used. For example: (let ((x ...)) (declare (fixnum x)) ...) Here, the type of the initial value of X must be a FIXNUM or an error will be signalled. -- Precise in the sense that the exact type specified is checked. For example, if a variable is declared to be of type (integer 3 7), then the value must always be an integer between 3 and 7. Since Python does more type checking, programs that work fine when compiled with other compilers may get type errors when compiled with Python. It is important to ini- tially compile programs with the default (safe) policy, and then test this version. If a program with an erro- neous declaration is compiled with type checking October 15, 1991 2 suppressed (due to the SAFETY optimize quality being reduced), then the type error may cause obscure errors or infinite looping. See the section `Getting Existing Pro- grams to Run' (6.6) in the compiler chapter of the user manual. CMU CL adheres to the X3J13 function type cleanup, which means that quoted lambda-lists are not of type FUNCTION, and are no longer directly callable. Use COERCE with the FUNCTION result type. OPTIMIZATION Python does many optimizations that are absent or less general in other Common Lisp compilers: Proper tail recur- sion, lightweight function call, block compilation, inter- procedural type inference, global flow analysis, dynamic type inference, global register allocation, stack number allocation, control optimization, integer range analysis, enhanced inline expansion, multiple value optimization and source-to-source transforms. Optimization and type-checking are controlled by the OPTI- MIZE declaration. The default compilation policy is type- safe. NUMERIC SUPPORT Python is particular good at number crunching: -- Good inline coding of float and 32 bit integer opera- tions, with no number consing. This includes all the hardware primitives ROUND, TRUNCATE, COERCE, as well as important library routines such as SCALE-FLOAT and DECODE-FLOAT. Results that don't fit in registers go on a special number stack. -- Full support for IEEE single and double (denorms, +-0, etc.) -- In block compiled code, numbers are passed as function arguments and return values in registers (and without number consing.) -- Calls to library functions (SIN, ...) are optimized to a direct call to the C library routine (with no number consing.) On hardware with direct support for such functions, these operations can easily be open-coded. -- Substantially better bignum performance than commer- cial implementations (2x-4x). Bignums implemented in lisp using word integers, so you can roll your own. October 15, 1991 3 Python's compiler warnings and efficiency notes are espe- cially valuable in numeric code. 50+ pages in the user manual describe Python's capabilities in more detail. THE DEBUGGER In addition to a Motif-based windowing interface and a basic command-line interface, the debugger also has sev- eral powerful new features: -- The "source" and "vsource" commands print the *precise* original source form responsible for the error or pend- ing function call. It is no longer necessary to guess which call to CAR caused some "not a list" error. -- Variables in compiled code can be accessed by name, so the debugger always evaluates forms in the lexical environment of the current frame. This variable access is robust in the presence of compiler optimization --- although higher levels of optimization may make vari- able values unavailable at some locations in the vari- able's scope, the debugger always errs on the side of discretion, refusing to display possibly incorrect val- ues. -- Compiled code can be stepped, stopping at each control transfer. -- Integration with the Hemlock editor. In a slave, the "edit" command causes the editor edit the source for the current code location. The editor can also send non-line-mode input to the debugger using C-M-H bind- ings. Try apropos "debug" in Hemlock. See the debugger chapter in the user manual for more details. We are working on integrating the debugger with Hemlock and X windows. THE GRAPHICAL INTERFACE CMU Common Lisp has an interface to Motif which is func- tionally similar to CLM, but works better in CMU CL. See: doc/motif-toolkit.doc doc/motif-internals.doc This motif interface has been used to write the inspector and graphical debugger. There is also a Lisp control panel with a simple file management facility, apropos and inspector dialogs, and controls for setting global options. October 15, 1991 4 Call INTERFACE:LISP-CONTROL-PANEL to create the control panel. When INTERFACE:*INTERFACE-STYLE* is :GRAPHICS (the default) and the DISPLAY environment variable is defined, the graphical inspector and debugger will be invoked by INSPECT or when an error is signalled. Possible values are :GRAPHICS and :TTY. If the value is :GRAPHICS, but there is no X display, then we quietly use the TTY inter- face. THE INTERPRETER As far as Common Lisp semantics are concerned, there is no interpreter; this is effectively a compile-only implemen- tation. Forms typed to the read-eval-print loop or passed to EVAL are in effect compiled before being run. In implementation, there is an interpreter, but it operates on the internal representation produced by the compiler's font-end. It is not recommended that programs be debugged by running the whole program interpreted, since Python and the debug- ger eliminate the main reasons for debugging using the interpreter: -- Compiled code does much more error checking than inter- preted code. -- It is as easy to debug compiled code as interpreted code. Note that the debugger does not currently support single- stepping. Also, the interpreter's pre-processing freezes in the macro definitions in effect at the time an inter- preted function is defined. Until we implement automatic reprocessing when macros are redefined, it is necessary to re-evaluate the definition of an interpreted function to cause new macro definitions to be noticed. DOCUMENTATION The CMU CL documentation is printed as tech reports, and is available (at CMU) in the document room: CMU Common Lisp User's Manual Hemlock User's Manual Hemlock Command Implementor's Manual Non-CMU users may get documentation from the doc/ direc- tory in the binary distribution: October 15, 1991 5 cmu-user.info CMU CL User's Manual in Gnu Info format. The ``cmu-user.info-'' files are subfiles. You can either have your EMACS maintainer install this in the info root, or you can use the info ``g(...whatever.../doc/cmu-user.info)'' command. cmu-user.ps The CMU CL User's Manual (148 pages) in postscript format. LaTeX source and DVI ver- sions are also available. release-notes.txt Information on the changes between releases. hemlock-user.ps Postscript version of the Hemlock User's Manual (124 pages.) hemlock-cim.ps Postscript version of the Hemlock Command Imple- mentor's Manual (96 pages). SUPPORT Bug reports should be sent to cmucl-bugs@cs.cmu.edu. Please consult your local CMU CL maintainer or Common Lisp expert to verify that the problem really is a bug before sending to this list. The CMU Common Lisp project is no longer funded, so only minimal support is being done at CMU. There is a net com- munity of who communicate via comp.lang.lisp and the cmucl-bugs@cs.cmu.edu mailing list. DISTRIBUTION CMU Common Lisp is a public domain implementation of Com- mon Lisp. Both sources and executables are freely avail- able via anonymous FTP; this software is "as is", and has no warranty of any kind. CMU and the authors assume no responsibility for the consequences of any use of this software. See the README file in the distribution for FTP instructions. ABOUT THE CMU COMMON LISP PROJECT Organizationally, CMU Common Lisp was a small, mostly autonomous part within the Mach operating system project. The CMU CL project was more of a tool development effort than a research project. The project started out as Spice Lisp, which provided a modern Lisp implementation for use in the CMU community. CMU CL has been under continuous October 15, 1991 6 development since the early 1980's (concurrent with the Common Lisp standardization effort.) Most of the CMU Com- mon Lisp implementors are now working on the Gwydion envi- ronment for Dylan (see http://legend.gwydion.cs.cmu.edu:8001/gwydion/.) CMU CL was funded by DARPA under CMU's "Research on Paral- lel Computing" contract. Rather than doing pure research on programming languages and environments, the emphasis was on developing practical programming tools. Sometimes this required new technology, but much of the work was in creating a Common Lisp environment that incorporates state-of-the-art features from existing systems (both Lisp and non-Lisp.) Because sources are freely available, CMU Common Lisp has been ported to experimental hardware, and used as a basis for research in programming language and environment con- struction. SEE ALSO lisp(1), README The ``CMU Common Lisp User's Manual'', the ``Hemlock User's Manual'', and the ``Hemlock Command Implementor's Manual'' October 15, 1991 7 ----------------------------------------------------------------