From ed2b11a8ac69cd8296aa0910f2f08c5f2cab2752 Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Fri, 17 Feb 2012 17:38:10 -0500 Subject: [PATCH] some cleanup --- femtolisp/.gitignore | 4 + femtolisp/Makefile | 2 +- femtolisp/{ => examples}/bq.scm | 0 femtolisp/{ => examples}/cps.lsp | 0 femtolisp/{ => examples}/rule30.lsp | 0 femtolisp/site/doc | 62 ---- femtolisp/site/doc.html | 428 ---------------------------- femtolisp/site/flbanner.jpg | Bin 5867 -> 0 bytes femtolisp/site/flbanner.xcf | Bin 42287 -> 0 bytes femtolisp/site/flbanner2.jpg | Bin 5287 -> 0 bytes femtolisp/site/index.html | 206 ------------- femtolisp/{ => tests}/100x100.lsp | 0 femtolisp/{ => tests}/color.lsp | 0 femtolisp/{ => tests}/perf.lsp | 0 femtolisp/{ => tests}/tcolor.lsp | 0 femtolisp/{ => tests}/test.lsp | 0 femtolisp/{ => tests}/torture.scm | 0 femtolisp/{ => tests}/torus.lsp | 0 femtolisp/{ => tests}/unittest.lsp | 0 femtolisp/tiny/lisp | Bin 29061 -> 0 bytes femtolisp/tiny/lisp2 | Bin 51938 -> 0 bytes femtolisp/tiny/lispf | Bin 30152 -> 0 bytes 22 files changed, 5 insertions(+), 697 deletions(-) create mode 100644 femtolisp/.gitignore rename femtolisp/{ => examples}/bq.scm (100%) rename femtolisp/{ => examples}/cps.lsp (100%) rename femtolisp/{ => examples}/rule30.lsp (100%) delete mode 100644 femtolisp/site/doc delete mode 100644 femtolisp/site/doc.html delete mode 100644 femtolisp/site/flbanner.jpg delete mode 100644 femtolisp/site/flbanner.xcf delete mode 100644 femtolisp/site/flbanner2.jpg delete mode 100644 femtolisp/site/index.html rename femtolisp/{ => tests}/100x100.lsp (100%) rename femtolisp/{ => tests}/color.lsp (100%) rename femtolisp/{ => tests}/perf.lsp (100%) rename femtolisp/{ => tests}/tcolor.lsp (100%) rename femtolisp/{ => tests}/test.lsp (100%) rename femtolisp/{ => tests}/torture.scm (100%) rename femtolisp/{ => tests}/torus.lsp (100%) rename femtolisp/{ => tests}/unittest.lsp (100%) delete mode 100755 femtolisp/tiny/lisp delete mode 100755 femtolisp/tiny/lisp2 delete mode 100755 femtolisp/tiny/lispf diff --git a/femtolisp/.gitignore b/femtolisp/.gitignore new file mode 100644 index 0000000..5ae7457 --- /dev/null +++ b/femtolisp/.gitignore @@ -0,0 +1,4 @@ +/*.o +/*.do +/*.a +/flisp diff --git a/femtolisp/Makefile b/femtolisp/Makefile index 98af21a..06ba51e 100644 --- a/femtolisp/Makefile +++ b/femtolisp/Makefile @@ -22,7 +22,7 @@ SHIPFLAGS = -O2 -DNDEBUG $(FLAGS) default: release test test: - ./flisp unittest.lsp + cd tests && ../flisp unittest.lsp %.o: %.c $(CC) $(SHIPFLAGS) -c $< -o $@ diff --git a/femtolisp/bq.scm b/femtolisp/examples/bq.scm similarity index 100% rename from femtolisp/bq.scm rename to femtolisp/examples/bq.scm diff --git a/femtolisp/cps.lsp b/femtolisp/examples/cps.lsp similarity index 100% rename from femtolisp/cps.lsp rename to femtolisp/examples/cps.lsp diff --git a/femtolisp/rule30.lsp b/femtolisp/examples/rule30.lsp similarity index 100% rename from femtolisp/rule30.lsp rename to femtolisp/examples/rule30.lsp diff --git a/femtolisp/site/doc b/femtolisp/site/doc deleted file mode 100644 index cabbeb0..0000000 --- a/femtolisp/site/doc +++ /dev/null @@ -1,62 +0,0 @@ -1. Syntax - -symbols -numbers -conses and vectors -comments -special prefix tokens: ' ` , ,@ ,. -other read macros: #. #' #\ #< #n= #n# #: #ctor -builtins - -2. Data and execution models - -3. Primitive functions - -eq atom not set prog1 progn -symbolp numberp builtinp consp vectorp boundp -+ - * / < -apply eval - -4. Special forms - -quote if lambda macro while label cond and or - -5. Data structures - -cons car cdr rplaca rplacd list -alloc vector aref aset length - -6. Other functions - -read, print, princ, load, exit -equal, compare -gensym - -7. Exceptions - -trycatch raise - -8. Cvalues - -introduction -type representations -constructors -access -memory management concerns -ccall - - -If deliberate 50% heap utilization seems wasteful, consider: - -- malloc has per-object overhead. for small allocations you might use - much more space than you think. -- any non-moving memory manager (whether malloc or a collector) can - waste arbitrary amounts of memory through fragmentation. - -With a copying collector, you agree to give up 50% of your memory -up front, in exchange for significant benefits: - -- really fast allocation -- heap compaction, improving locality and possibly speeding up computation -- collector performance O(1) in number of dead objects, essential for - maximal performance on generational workloads diff --git a/femtolisp/site/doc.html b/femtolisp/site/doc.html deleted file mode 100644 index 855df6c..0000000 --- a/femtolisp/site/doc.html +++ /dev/null @@ -1,428 +0,0 @@ - - - - -femtoLisp - - - - - -
- -

0. Argument

-This Lisp has the following characteristics and goals: - - - -

1. Syntax

-

1.1. Symbols

-Any character string can be a symbol name, including the empty string. In -general, text between whitespace is read as a symbol except in the following -cases: - -In these cases the symbol can be written by surrounding it with | | -characters, or by escaping individual characters within the symbol using -backslash \. Note that | and \ must always be -preceded with a backslash when writing a symbol name. - -

1.2. Numbers

- -A number consists of an optional + or - sign followed by one of the following -sequences: - -femtoLisp provides 30-bit integers, and it is an error to write a constant -less than -229 or greater than 229-1. - -

1.3. Conses and vectors

- -The text (a b c) parses to the structure -(cons a (cons b (cons c nil))) where a, b, and c are arbitrary -expressions. -

-The text (a . b) parses to the structure -(cons a b) where a and b are arbitrary expressions. -

-The text () reads as the symbol nil. -

-The text [a b c] parses to a vector of expressions a, b, and c. -The syntax #(a b c) has the same meaning. - - -

1.4. Comments

- -Text between a semicolon ; and the next end-of-line is skipped. -Text between #| and |# is also skipped. - -

1.5. Prefix tokens

- -There are five special prefix tokens which parse as follows:

-'a is equivalent to (quote a).
-`a is equivalent to (backquote a).
-,a is equivalent to (*comma* a).
-,@a is equivalent to (*comma-at* a).
-,.a is equivalent to (*comma-dot* a). - - -

1.6. Other read macros

- -femtoLisp provides a few "read macros" that let you accomplish interesting -tricks for textually representing data structures. - - - - - - - - - - - - - -
sequencemeaning -
#.eevaluate expression e and behave as if e's - value had been written in place of e -
#\cc is a character; read as its Unicode value -
#n=eread e and label it as n, where n - is a decimal number -
#n#read as the identically-same value previously labeled - n -
#:gNNN or #:NNNread a gensym. NNN is a hexadecimal - constant. future occurrences of the same #: sequence will read to - the identically-same gensym -
#sym(...)reads to the result of evaluating - (apply sym '(...)) -
#<triggers an error -
#'ignored; provided for compatibility -
#!single-line comment, for script execution support -
"str"UTF-8 character string; may contain newlines. - \ is the escape character. All C escape sequences are supported, plus - \u and \U for unicode values. -
-When a read macro involves persistent state (e.g. label assignments), that -state is valid only within the closest enclosing call to read. - - -

1.7. Builtins

- -Builtin functions are represented as opaque constants. Every builtin -function is the value of some constant symbol, so the builtin eq, -for example, can be written as #.eq ("the value of symbol eq"). -Note that eq itself is still an ordinary symbol, except that its -value cannot be changed. -

- - -
- - -

2. Data and execution models

- - - - - -
- - -

3. Primitive functions

- - -eq atom not set prog1 progn -symbolp numberp builtinp consp vectorp boundp -+ - * / < -apply eval - - - -
- -

4. Special forms

- -quote if lambda macro while label cond and or - - - -
- -

5. Data structures

- -cons car cdr rplaca rplacd list -alloc vector aref aset length - - - -
- -

6. Other functions

- -read print princ load exit -equal compare -gensym - - - -
- -

7. Exceptions

- -trycatch raise - - - -
- -

8. Cvalues

- -

8.1. Introduction

- -femtoLisp allows you to use the full range of C data types on -dynamically-typed Lisp values. The motivation for this feature is that -useful -interpreters must provide a large library of routines in C for dealing -with "real world" data like text and packed numeric arrays, and I would -rather not write yet another such library. Instead, all the -required data representations and primitives are provided so that such -features could be implemented in, or at least described in, Lisp. -

-The cvalues capability makes it easier to call C from Lisp by providing -ways to construct whatever arguments your C routines might require, and ways -to decipher whatever values your C routines might return. Here are some -things you can do with cvalues: -

-

-femtoLisp's "cvalues" is inspired in part by Python's "ctypes" package. -Lisp doesn't really have first-class types the way Python does, but it does -have values, hence my version is called "cvalues". - -

8.2. Type representations

- -The core of cvalues is a language for describing C data types as -symbolic expressions: - - - -A cvalue can be constructed using (c-value TYPE arg), where -arg is some Lisp value. The system will try to convert the Lisp -value to the specified type. In many cases this will work better if some -components of the provided Lisp value are themselves cvalues. - -

-Note the function type is called "c-function" to avoid confusion, since -functions are such a prevalent concept in Lisp. - -

-The function sizeof returns the size (in bytes) of a cvalue or a -c type. Every cvalue has a size, but incomplete types will cause -sizeof to raise an error. The function typeof returns -the type of a cvalue. - -

-You are probably wondering how 32- and 64-bit integers are constructed from -femtoLisp's 30-bit integers. The answer is that larger integers are -constructed from multiple Lisp numbers 16 bits at a time, in big-endian -fashion. In fact, the larger numeric types are the only cvalues -types whose constructors accept multiple arguments. Examples: -

-As you can see, missing zeros are padded in from the left. - - -

8.3. Constructors

- -For convenience, a specialized constructor is provided for each -class of C type (primitives, pointer, array, struct, union, enum, -and c-function). -For example: - - -These forms can be slightly less efficient than (c-value ...) -because in many cases they will allocate a new type for the new value. -For example, the fourth expression must create the type -(array int8 6). - -

-Notice that calls to these constructors strongly resemble -the types of the values they create. This relationship can be expressed -formally as follows: - -

-(define (c-allocate type)
-  (if (atom type)
-      (apply (eval type) ())
-      (apply (eval (car type)) (cdr type))))
-
- -This function produces an instance of the given type by -invoking the appropriate constructor. Primitive types (whose representations -are symbols) can be constructed with zero arguments. For other types, -the only required arguments are those present in the type representation. -Any arguments after those are initializers. Using -(cdr type) as the argument list provides only required arguments, -so the value you get will not be initialized. - -

-The builtin c-value function is similar to this one, except that it -lets you pass initializers. - -

-Cvalue constructors are generally permissive; they do the best they -can with whatever you pass in. For example: - -

- -

-ccopy, c2lisp - -

8.4. Pointers, arrays, and strings

- -Pointer types are provided for completeness and C interoperability, but -they should not generally be used from Lisp. femtoLisp doesn't know -anything about a pointer except the raw address and the (alleged) type of the -value it points to. Arrays are much more useful. They behave like references -as in C, but femtoLisp tracks their sizes and performs bounds checking. - -

-Arrays are used to allocate strings. All strings share -the incomplete array type (array char): - -

-> (c-value '(array char) [#\h #\e #\l #\l #\o])
-"hello"
-
-> (sizeof that)
-5
-
- -sizeof reveals that the size is known even though it is not -reflected in the type (as is always the case with incomplete array types). - -

-Since femtoLisp tracks the sizes of all values, there is no need for NUL -terminators. Strings are just arrays of bytes, and may contain zero bytes -throughout. However, C functions require zero-terminated strings. To -solve this problem, femtoLisp allocates magic strings that actually have -space for one more byte than they appear to. The hidden extra byte is -always zero. This guarantees that a C function operating on the string -will never overrun its allocated space. - -

-Such magic strings are produced by double-quoted string literals, and by -any explicit string-constructing function (such as string). - -

-Unfortunately you still need to be careful, because it is possible to -allocate a non-magic character array with no terminator. The "hello" -string above is an example of this, since it was constructed from an -explicit vector of characters. -Such an array would cause problems if passed to a function expecting a -C string. - -

-deref - -

8.5. Access

- -cref,cset,byteref,byteset,ccopy - -

8.6. Memory management concerns

- -autorelease - - -

8.7. Guest functions

- -Functions written in C but designed to operate on Lisp values are -known here as "guest functions". Although they are foreign, they live in -Lisp's house and so live by its rules. Guest functions are what you -use to write interpreter extensions, for example to implement a function -like assoc in C for performance. - -

-Guest functions must have a particular signature: -

-value_t func(value_t *args, uint32_t nargs);
-
-Guest functions must also be aware of the femtoLisp API and garbage -collector. - - -

8.8. Native functions

- - - diff --git a/femtolisp/site/flbanner.jpg b/femtolisp/site/flbanner.jpg deleted file mode 100644 index 4a0ffd53f78c964dae11f16f64be4cd1c3f506f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5867 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 diff --git a/femtolisp/site/flbanner2.jpg b/femtolisp/site/flbanner2.jpg deleted file mode 100644 index 20c0358db6431c67abb45885597ede12f87d0864..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5287 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 diff --git a/femtolisp/site/index.html b/femtolisp/site/index.html deleted file mode 100644 index 9afbeb9..0000000 --- a/femtolisp/site/index.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - -femtoLisp - - -

femtoLisp

-
-femtoLisp is an elegant Lisp implementation. Its goal is to be a -reasonably efficient and capable interpreter with the shortest, simplest -code possible. As its name implies, it is small (10-15). -Right now it is just 1000 lines of C (give or take). It would make a great -teaching example, or a useful system anywhere a very small Lisp is wanted. -It is also a useful basis for developing other interpreters or related -languages. - - -

The language implemented

- -femtoLisp tries to be a generic, simple Lisp dialect, influenced by McCarthy's -original. - -
    -
  • Types: cons, symbol, 30-bit integer, builtin function -
  • Self-evaluating lambda, macro, and label forms -
  • Full Common Lisp-style macros -
  • Case-sensitive symbol names -
  • Scheme-style evaluation rule where any expression may appear in head - position as long as it evaluates to a callable -
  • Scheme-style formal argument lists (dotted lists for varargs) -
  • Transparent closure representation (lambda args body . env) -
  • A lambda body may contain only one form. Use explicit progn for - multiple forms. Included macros, however, allow defun, - let, etc. to accept multiple body forms. -
  • Builtin function names are constants and cannot be redefined. -
  • Symbols have one binding, as in Scheme. -
-Builtin special forms:
-quote, cond, if, and, or, lambda, macro, label, while, progn, prog1 -

-Builtin functions:
-eq, atom, not, symbolp, numberp, boundp, cons, car, cdr, - read, eval, print, load, set, - +, -, *, /, <, apply, rplaca, rplacd -

-Included library functions and macros:
- -setq, setf, defmacro, defun, define, let, let*, labels, dotimes, -macroexpand-1, macroexpand, backquote, - -null, consp, builtinp, self-evaluating-p, listp, eql, equal, every, any, -when, unless, - -=, !=, >, <=, >=, compare, mod, abs, identity, - -list, list*, length, last, nthcdr, lastcdr, list-ref, reverse, nreverse, -assoc, member, append, nconc, copy-list, copy-tree, revappend, nreconc, - -mapcar, filter, reduce, map-int, - -symbol-plist, set-symbol-plist, put, get - -

-system.lsp - - -

The implementation

- -
    -
  • Compacting copying garbage collector (O(1) in number of dead - objects) -
  • Tagged pointers for efficient type checking and fast integers -
  • Tail-recursive evaluator (tail calls use no stack space) -
  • Minimally-consing apply -
  • Interactive and script execution modes -
-

-lisp.c - - -

femtoLisp2

- -This version includes robust reading and printing capabilities for -circular structures and escaped symbol names. It adds read and print support -for the Common Lisp read-macros #., #n#, and #n=. -This allows builtins to be printed in a readable fashion as e.g. -"#.eq". -

-The net result is that the interpreter achieves a highly satisfying property -of closure under I/O. In other words, every representable Lisp value can be -read and printed. -

-The traditional builtin label provides a purely-functional, -non-circular way -to write an anonymous recursive function. In femtoLisp2 you can -achieve the same effect "manually" using nothing more than the reader: -
-#0=(lambda (x) (if (<= x 0) 1 (* x (#0# (- x 1))))) -

-femtoLisp2 has the following extra features and optimizations: -

    -
  • builtin functions error, exit, and princ -
  • read support for backquote expressions -
  • delayed environment consing -
  • collective allocation of cons chains -
-Those two optimizations are a Big Deal. -

-lisp2.c (uses flutils.c) - - -

Performance

- -femtoLisp's performance is surprising. It is faster than most -interpreters, and it is usually within a factor of 2-5 of compiled CLISP. - - - - - - - - - - - - - - - - - -
solve 5 queens problem 100x
interpretedcompiled -
CLISP 4.02 sec 0.68 sec -
femtoLisp22.62 sec 2.03 sec** -
femtoLisp 6.02 sec 5.64 sec** -
recursive fib(34)
interpretedcompiled -
CLISP 23.12 sec 4.04 sec -
femtoLisp24.71 sec n/a -
femtoLisp 7.25 sec n/a -
-** femtoLisp is not a compiler; in this context "compiled" means macros -were pre-expanded. - - -

"Installation"

- -Here is a Makefile. Type make to build -femtoLisp, make NAME=lisp2 to build femtoLisp2. - - -

Tail recursion

-The femtoLisp evaluator is tail-recursive, following the idea in - -Lambda: The Ultimate Declarative (should be required reading -for all schoolchildren). -

-The femtoLisp source provides a simple concrete example showing why a function -call is best viewed as a "renaming plus goto" rather than as a set of stack -operations. -

-Here is the non-tail-recursive evaluator code to evaluate the body of a -lambda (function), from lisp-nontail.c: -

-        PUSH(*lenv);    // preserve environment on stack
-        lenv = &Stack[SP-1];
-        v = eval(*body, lenv);
-        POP();
-        return v;
-
-(Note that because of the copying garbage collector, values are referenced -through relocatable handles.) -

-Superficially, the call to eval is not a tail call, because work -remains after it returns—namely, popping the environment off the stack. -In other words, the control stack must be saved and restored to allow us to -eventually restore the environment stack. However, restoring the environment -stack is the only work to be done. Yet after this point the old -environment is not used! So restoring the environment stack isn't -necessary, therefore restoring the control stack isn't either. -

-This perspective makes proper tail recursion seem like more than an -alternate design or optimization. It seems more correct. -

-Here is the corrected, tail-recursive version of the code: -

-        SP = saveSP;    // restore stack completely
-        e = *body;      // reassign arguments
-        *penv = *lenv;
-        goto eval_top;
-
-penv is a pointer to the old environment, which we overwrite. -(Notice that the variable penv does not even appear in the first code -example.) -So where is the environment saved and restored, if not here? The answer -is that the burden is shifted to the caller; a caller to eval must -expect that its environment might be overwritten, and take steps to save it -if it will be needed further after the call. In practice, this means -the environment is saved and restored around the evaluation of -arguments, rather than around function applications. Hence (f x) -might be a tail call to f, but (+ y (f x)) is not. - - - diff --git a/femtolisp/100x100.lsp b/femtolisp/tests/100x100.lsp similarity index 100% rename from femtolisp/100x100.lsp rename to femtolisp/tests/100x100.lsp diff --git a/femtolisp/color.lsp b/femtolisp/tests/color.lsp similarity index 100% rename from femtolisp/color.lsp rename to femtolisp/tests/color.lsp diff --git a/femtolisp/perf.lsp b/femtolisp/tests/perf.lsp similarity index 100% rename from femtolisp/perf.lsp rename to femtolisp/tests/perf.lsp diff --git a/femtolisp/tcolor.lsp b/femtolisp/tests/tcolor.lsp similarity index 100% rename from femtolisp/tcolor.lsp rename to femtolisp/tests/tcolor.lsp diff --git a/femtolisp/test.lsp b/femtolisp/tests/test.lsp similarity index 100% rename from femtolisp/test.lsp rename to femtolisp/tests/test.lsp diff --git a/femtolisp/torture.scm b/femtolisp/tests/torture.scm similarity index 100% rename from femtolisp/torture.scm rename to femtolisp/tests/torture.scm diff --git a/femtolisp/torus.lsp b/femtolisp/tests/torus.lsp similarity index 100% rename from femtolisp/torus.lsp rename to femtolisp/tests/torus.lsp diff --git a/femtolisp/unittest.lsp b/femtolisp/tests/unittest.lsp similarity index 100% rename from femtolisp/unittest.lsp rename to femtolisp/tests/unittest.lsp diff --git a/femtolisp/tiny/lisp b/femtolisp/tiny/lisp deleted file mode 100755 index 4446ca248e0b8a22f727dc25b56d702fa6b7f470..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29061 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 diff --git a/femtolisp/tiny/lisp2 b/femtolisp/tiny/lisp2 deleted file mode 100755 index db0106248bbb12357ad58ad2bf8842d643107c2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51938 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

K_n-QzSeDG|%XN~nF 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

|pP8Y@F2u5_u7&?NYBpX%n< zA(Qe@g7@{h4_CFo2v#Z0Q!^@)^4sc|qtVg{3D8B6<>P{lrjto_JFTp0Ta--bQ>IO?-TP0+U8_xzAmG`*CmT`?ggG&9L>&jGUxa34^m zCQq5?5WE$6Yewnia7-C@ClBy9G(Uzjsp8!u6c3oGQa9f(kb4H`_ z6uc)vfcve`VSzQrm}um-2}xA&%V0t1{&&Pr628txtzWgaLGDmly?UdFz7aWI=Z8%d zZDkbWD2JTRSx`WNsms%Ml<>mN&d6bhpt;Vc5<%8mD-!3H` zrvQjw9o$ZC#>dd6&x8O>QHlUaF-a5diHcm6i8O{DAOtZj05G1;oNw1&!QbPJins?N zV^^gEteUU1XXRs|pMG$hA}n@e>Q@MkP-NlFPx@RWQomjW^Z|Zum)}9!on)hzDO=T^ z_G1JfhH8z4A@6}55}HX9I#Z9_=d|U?NrV_NgG^MvMFZZtljvsoaSgkF@8sqj)#P_V zrv*0^dM&y@nIxXN_B(Aa?#_guX3C9u+7Ic*H@g*?P@WsF-40n{;@n8J!_Mpz(_hn=wH?BKlCQ*B>(^b diff --git a/femtolisp/tiny/lispf b/femtolisp/tiny/lispf deleted file mode 100755 index dc65ee63574e9c186db731a2200d3bcbb5c4fdb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30152 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