mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-01-15 05:43:19 -08:00
Removed old versions of the documentation files.
This commit is contained in:
parent
23af437f70
commit
d04530664e
8 changed files with 4 additions and 6812 deletions
|
|
@ -58,6 +58,10 @@ ECL 10.3.2:
|
|||
|
||||
- ECL restores the habit of installing manual pages for ecl and ecl-config.
|
||||
|
||||
- We have removed the obsolete versions of the documentation files. The
|
||||
up to date documentation now lives in a separate source repository,
|
||||
as explained in http://ecls.sourceforge.net/download.html
|
||||
|
||||
ECL 10.3.1:
|
||||
===========
|
||||
|
||||
|
|
|
|||
67
src/doc/BUGS
67
src/doc/BUGS
|
|
@ -1,67 +0,0 @@
|
|||
THINGS IN THIS FILE
|
||||
===================
|
||||
|
||||
This file documents assumptions which are made throughout the ECLS code. Most
|
||||
of them are critical and a lot of code relies on them, some others are very
|
||||
localized but in critical points (eval, apply, etc). In general great care
|
||||
must be taken so that changes in ECLS do not break these "invariants".
|
||||
|
||||
|
||||
REAL BUGS
|
||||
=========
|
||||
|
||||
* Routines in bind.c do not check length of arguments and may cause buffer
|
||||
overflows.
|
||||
|
||||
GCC SPECIFICS
|
||||
=============
|
||||
|
||||
* Functions with a variable number of arguments are called with the
|
||||
same protocol as ordinary functions, i.e., the following code is
|
||||
valid
|
||||
|
||||
#in "foo.c"
|
||||
extern int fa(int foo, ...);
|
||||
int test(object x) {
|
||||
faa(1, x);
|
||||
}
|
||||
|
||||
#in "faa.c"
|
||||
int faa(int foo, object x) {
|
||||
...
|
||||
}
|
||||
|
||||
|
||||
OPERATING SYSTEM
|
||||
================
|
||||
|
||||
* Stack checks are required in compiled code to make sure recursion
|
||||
does not get too deep. This makes sense in multithreaded code, but
|
||||
do unix-like operating systems really provide no stack protection?
|
||||
|
||||
|
||||
ECLS CODE INVARIANTS
|
||||
====================
|
||||
|
||||
* C structs are aligned at least at 4 bytes, so that Cnil is a valid
|
||||
object pointer.
|
||||
|
||||
* "struct ecl_symbol" and "struct ecl_cons" share fields so that
|
||||
Cnil->c.c_car == Cnil->c.c_cdr == Cnil.
|
||||
|
||||
* "struct ecl_array", "struct ecl_vector", "struct ecl_string, "struct
|
||||
ecl_bitvector" share a number of fields, such as "*_dim", "*_self", etc.
|
||||
|
||||
* Boehm's garbage collector returns pointers with two lower bits set
|
||||
to zero, i.e.,
|
||||
|
||||
((int)GC_malloc(n)) & 3 == 0
|
||||
|
||||
* Frame/binding/history stacks cannot be resized.
|
||||
|
||||
* DATA_START % LISP_PAGESIZE == 0
|
||||
|
||||
;;; Local Variables: ***
|
||||
;;; mode:text ***
|
||||
;;; fill-column:79 ***
|
||||
;;; End: ***
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
html { background: #000; }
|
||||
body {
|
||||
margin: 4em 10% 0 10%;
|
||||
line-height: 1.4;
|
||||
padding: 0 2em 1em 2em;
|
||||
font-family: sans-serif;
|
||||
background: #FFF;
|
||||
}
|
||||
h1, h2, h3, h4, h5, div.node { background: #DDD; }
|
||||
body p { text-align: justify; max-width: 100%; }
|
||||
code, pre { font-family: monospace; font-size: 1em; }
|
||||
pre.smallformat, pre.example {
|
||||
font: bold smaller monospace;
|
||||
max-width: 100%;
|
||||
background: #EEE;
|
||||
overflow: auto;
|
||||
border: 1px solid #000;
|
||||
}
|
||||
pre.smallformat { padding: 0.5em; }
|
||||
a { color: #000; font-weight: bold; }
|
||||
div.node {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
height: 3em;
|
||||
width: 80%;
|
||||
left: 10%;
|
||||
line-height: 1;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
}
|
||||
div p { padding: 0 2em }
|
||||
hr { display: none; }
|
||||
1714
src/doc/devel.txi
1714
src/doc/devel.txi
File diff suppressed because it is too large
Load diff
|
|
@ -1,97 +0,0 @@
|
|||
@macro myctrl {a}
|
||||
^\a\@c
|
||||
@end macro
|
||||
@rmacro mopt {a}
|
||||
[\a\]@c
|
||||
@end rmacro
|
||||
@macro mchoice {a}
|
||||
<\a\>@c
|
||||
@end macro
|
||||
@rmacro mstar {a}
|
||||
@{\a\@}*@c
|
||||
@end rmacro
|
||||
@rmacro mplus {a}
|
||||
@{\a\@}+@c
|
||||
@end rmacro
|
||||
@rmacro mgroup {a}
|
||||
@{\a\@},@c
|
||||
@end rmacro
|
||||
|
||||
@macro kwd{a}
|
||||
@var{:\a\}@c
|
||||
@end macro
|
||||
|
||||
@macro pxlref{a}
|
||||
\a\@c
|
||||
@end macro
|
||||
|
||||
@macro defec{a}
|
||||
@defun \a\
|
||||
@end macro
|
||||
|
||||
@macro aux
|
||||
&aux@c
|
||||
@end macro
|
||||
@macro keys
|
||||
&key@c
|
||||
@end macro
|
||||
@macro rest
|
||||
&rest@c
|
||||
@end macro
|
||||
@macro optional
|
||||
&optional@c
|
||||
@end macro
|
||||
@macro allow
|
||||
&allow-other-keys@c
|
||||
@end macro
|
||||
|
||||
@macro macref{foo}
|
||||
\foo\@c
|
||||
@end macro
|
||||
@macro tindexed{foo}
|
||||
\foo\@c
|
||||
@end macro
|
||||
@macro cindexed{foo}
|
||||
\foo\@c
|
||||
@end macro
|
||||
@macro vindexed{foo}
|
||||
\foo\@c
|
||||
@end macro
|
||||
@ifhtml
|
||||
@macro bibcite{foo}
|
||||
[@pxref{Bibliography, \foo\}]
|
||||
@end macro
|
||||
@end ifhtml
|
||||
@ifnothtml
|
||||
@macro bibcite{foo}
|
||||
[\foo\, @pxref{Bibliography}]
|
||||
@end macro
|
||||
@end ifnothtml
|
||||
|
||||
@macro back
|
||||
\\@c
|
||||
@end macro
|
||||
|
||||
@macro nil
|
||||
()@c
|
||||
@end macro
|
||||
|
||||
@macro true
|
||||
@var{T}@c
|
||||
@end macro
|
||||
|
||||
@macro ansi
|
||||
@r{ANSI Common-Lisp}@c
|
||||
@end macro
|
||||
@macro ecl
|
||||
@b{@r{ECL}}
|
||||
@end macro
|
||||
@macro clisp
|
||||
@r{Common-Lisp}@c
|
||||
@end macro
|
||||
@macro llisp
|
||||
@b{@r{Lisp}}
|
||||
@end macro
|
||||
@macro cltl
|
||||
@emph{@clisp{}: The Language}@c
|
||||
@end macro
|
||||
290
src/doc/todo.txt
290
src/doc/todo.txt
|
|
@ -1,290 +0,0 @@
|
|||
GOODIES:
|
||||
========
|
||||
|
||||
* Improve fixnum_times.
|
||||
|
||||
* expand parse_namestring() to accept scaped strings, spaces, etc.
|
||||
|
||||
* Make the version with Boehm's GC and the version without it binary
|
||||
compatible.
|
||||
|
||||
* Complete the MOP.
|
||||
|
||||
* Write general functions that implement the ~E, ~F and ~G formatters and use
|
||||
them in the printer, so that both PRINT, PRINC, etc and FORMAT produce
|
||||
exactly the same representation of floating point numbers.
|
||||
|
||||
* Implemment type checking in structure slot setters.
|
||||
|
||||
COMPILER:
|
||||
=========
|
||||
|
||||
! Use conditions to signal warnings and errors.
|
||||
|
||||
* In local functions, remove unused arguments.
|
||||
|
||||
* It should be possible, in local functions that do not reference variables
|
||||
from the enclosing code, and do not call any other functions that do it,
|
||||
to remove the "lex*" arguments.
|
||||
|
||||
* Optimize out (multiple-value-call ... (values ...)).
|
||||
|
||||
* Implement memory collection based on mmap()
|
||||
|
||||
* Improve the garbage collector using kernel information about dirty
|
||||
pages.
|
||||
|
||||
* In the list of objects *.data, remove those which are not referenced.
|
||||
This requires major changes to the way locations are produced since
|
||||
right now they are assigned in the C1 phase, while some objects are
|
||||
discarded late in the C2 phase.
|
||||
|
||||
THREADS:
|
||||
========
|
||||
|
||||
Variables with locked access:
|
||||
packages_list, ecl_packages_to_be_created,
|
||||
pathname_translations
|
||||
Variables to be included in cl_env:
|
||||
+ variables in list.d
|
||||
+ bignum_register
|
||||
+ fmt_aux_stream (format.d)
|
||||
+ c_env (compiler.d)
|
||||
+ base (disassembler.d)
|
||||
Variables to be redesigned as global:
|
||||
ARGC, ARGV
|
||||
Unknown variables
|
||||
dispatch_reader
|
||||
default_dispatch_macro
|
||||
|
||||
KNOWN BUGS:
|
||||
===========
|
||||
|
||||
* An array might have a->array.displaced != Cnil and still not be
|
||||
displaced. This is the case of an array that had some vectors displaced
|
||||
to it!!!
|
||||
|
||||
* #'unread-char does not fail when the character differs from the
|
||||
original one.
|
||||
|
||||
* vector-push-extend may succeed even if the vector is not
|
||||
adjustable. Should we be more strict?
|
||||
|
||||
* should we relax ASSOC? (See lists156.tst)
|
||||
|
||||
* When building :AROUND, :AFTER or :BEFORE methods for REINITIALIZE-INSTANCE,
|
||||
one may introduce new initialization options, that CHECK-INITARGS ignores.
|
||||
(See REINITIALIZE-INSTANCE.10 in Paul Dietz' test suite).
|
||||
|
||||
* Why is this considered a failure? What does (SETF CLASS-NAME) have to do?
|
||||
|
||||
Test CLASS-0309.1 failed
|
||||
Form: (PROGN
|
||||
(SETF (FIND-CLASS 'CLASS-0309) NIL)
|
||||
(LET* ((CLASS1 (EVAL '(DEFCLASS CLASS-0309 NIL ((A) (B) (C)))))
|
||||
(OBJ1 (MAKE-INSTANCE 'CLASS-0309)))
|
||||
(SETF (CLASS-NAME CLASS1) NIL)
|
||||
(LET ((CLASS2 (EVAL '(DEFCLASS CLASS-0309 NIL ((A) (B) (C))))))
|
||||
(VALUES (EQT (CLASS-OF OBJ1) CLASS1) (EQT CLASS1 CLASS2)
|
||||
(TYPEP* OBJ1 CLASS1) (TYPEP* OBJ1 CLASS2)))))
|
||||
Expected values: T
|
||||
NIL
|
||||
T
|
||||
NIL
|
||||
Actual values: T
|
||||
T
|
||||
T
|
||||
T.
|
||||
|
||||
|
||||
OLD: (Maybe out of date)
|
||||
========================
|
||||
|
||||
* error-set can be eliminated, as well as FRS_CATCHALL fr_class and
|
||||
Kcatchall keyword.
|
||||
|
||||
* Removed call
|
||||
(wt-data nil)
|
||||
before loop (dolist (x *linking-calls*) ..) in ctop-write.
|
||||
Created inconsistency in size of data vector in cfun.
|
||||
What was it for?
|
||||
|
||||
* For local entry functions the binding for args which are special
|
||||
should be done after the label TTL: has been emitted.
|
||||
|
||||
* From triang-mod.cl. The following:
|
||||
(setf (aref board (aref a i)) 0)
|
||||
compiles to:
|
||||
{object V3;
|
||||
object V4;
|
||||
V3= (VV[10]->s.s_dbind);
|
||||
V4= MAKE_FIXNUM(((VV[15]->s.s_dbind))->fixa.fixa_self[V1]);
|
||||
((V3))->fixa.fixa_self[fix((V4))]= 0;
|
||||
}
|
||||
even though:
|
||||
(proclaim '(type (vector fixnum) board sequence a b c))
|
||||
|
||||
* When compiling do/do* references to variables in test forms should
|
||||
be considered multiple.
|
||||
|
||||
* The mechanism for printing circular structure fails on sun when
|
||||
size exceeds PRINTcircleSIZE.
|
||||
|
||||
* disassemble does not behave as in help.doc.
|
||||
|
||||
* c1apply-optimize could emit code for testing whether there are
|
||||
sufficient elements in the list
|
||||
|
||||
* Update code to use constants in <limits.h>
|
||||
|
||||
* The mechanism of local/global entries in cmptop.lsp is worth while
|
||||
only if all arguments are unboxed.
|
||||
|
||||
* Lavori piu' impegnativi:
|
||||
- Rifare il trattamento di ihs
|
||||
- introdurre dichiarazione :dynamic-extent
|
||||
- aggiungere agli ottimizzatori i flags usati da Sherlis
|
||||
|
||||
* Completare la modifica di print-doc (describe.lsp) per stampare
|
||||
intestazioni ripetute per quei simboli (list, *, etc.) che hanno
|
||||
documentazione multipla.
|
||||
|
||||
* Completare l'aggiunta di nomi di caratteri:
|
||||
#\F1, ... , #\F12, #\C-F1, .. , #\C-F12, #\M-F1, .. , #\M-F12
|
||||
#\Up, #\Down, #\Left, #\Right, #\C-Up, #\C-Down, #\C-Left, #\C-Right
|
||||
#\PgUp, #\PgDn, #\Home, #\End, #\C-PgUp, #\C-PgDn, #\C-Home, #\C-End
|
||||
|
||||
* verificare se usando una VAR come *destination*
|
||||
(let* ((kind (var-kind var))
|
||||
(lcl (next-lcl))
|
||||
(temp (list 'VAR (make-var :kind kind :loc lcl))))
|
||||
(wt-nl "{" *volatile* (rep-type kind)) (wt-lcl lcl) (wt ";")
|
||||
(let ((*destination* temp)) (c2expr* form))
|
||||
si puo' semplificare inline-args evitando l'uso di coerce-loc.
|
||||
|
||||
* questa clausola di cmpinline.lsp
|
||||
((or (eq (var-kind var) 'LEXICAL)
|
||||
(eq (var-kind var) 'OBJECT))
|
||||
(let ((lcl-loc (list 'LCL (next-lcl))))
|
||||
(wt-nl "{object " lcl-loc "= "
|
||||
(wt-lcl (var-loc var)) (wt ";")
|
||||
(push (coerce-loc lcl-loc type) locs)
|
||||
(incf *inline-blocks*))))
|
||||
e' dubbia: (wt-lcl (var-loc var)) per un LEXICAL?
|
||||
|
||||
* parameter closure-p in t3local-fun could be eliminated: it is present
|
||||
in (fun-closure fun).
|
||||
|
||||
* All loops of the kind:
|
||||
for (i = 0; i < maxpage; i++) {
|
||||
in gbc.c, could be changed to i = minpage, where:
|
||||
minpage = page(heap_end);
|
||||
just after
|
||||
heap_end = core_end = sbrk(0);
|
||||
in alloc.c
|
||||
|
||||
* In macro_expand1:
|
||||
(lex_env[1] == OBJNULL) ? Cnil :
|
||||
dovrebbe forse essere
|
||||
(lex_env[1] == Cnil) ? Cnil :
|
||||
|
||||
* trattamento or non soddisfacente:
|
||||
(let ((dir (or (and output-file
|
||||
(pathname-directory output-file))
|
||||
(pathname-directory input-pathname)))
|
||||
|
||||
if((V2)==Cnil){
|
||||
VALUES(0) = Cnil;
|
||||
goto L42;}
|
||||
Lpathname_directory(1,(V2)) /* PATHNAME-DIRECTORY*/;
|
||||
L42:
|
||||
if(VALUES(0)==Cnil)goto L41;
|
||||
V11= VALUES(0);
|
||||
goto L40;
|
||||
L41:
|
||||
Lpathname_directory(1,(V1)) /* PATHNAME-DIRECTORY*/;
|
||||
V11= VALUES(0);
|
||||
L40:
|
||||
if((V2)==Cnil){
|
||||
VALUES(0) = Cnil;
|
||||
goto L45;}
|
||||
Lpathname_name(1,(V2)) /* PATHNAME-NAME */;
|
||||
L45:
|
||||
if(VALUES(0)==Cnil)goto L44;
|
||||
V12= VALUES(0);
|
||||
goto L43;
|
||||
L44:
|
||||
Lpathname_name(1,(V1)) /* PATHNAME-NAME */;
|
||||
V12= VALUES(0);
|
||||
L43:
|
||||
|
||||
* in sysfun, scambiare never-change-special-var-p con
|
||||
change-special-var-p per evitare creazione di troppe plist
|
||||
|
||||
* (setq spec (pop vl)) produces:
|
||||
{object V12; /* G4356 */
|
||||
V12= CAR((V1));
|
||||
V1= CDR((V1));
|
||||
V2= (V12);
|
||||
}
|
||||
|
||||
* (or (and (foo)
|
||||
(listp args))
|
||||
...
|
||||
if(VALUES(0)!=Cnil){
|
||||
goto L21;}
|
||||
VALUES(0) = Cnil;
|
||||
goto L20;
|
||||
L21:
|
||||
VALUES(0) = (type_of((V2))==t_cons||(V2)==Cnil?Ct:Cnil);
|
||||
L20:
|
||||
if(VALUES(0)==Cnil)goto L19;
|
||||
|
||||
potrebbe essere migliorata. c2or dovrebbe chiamare c2expr con
|
||||
JUMP-TRUE come *destination*, ma dovrebbe sapere in quale
|
||||
locazione unwind-exit mette il risultato facendoselo ritornare.
|
||||
|
||||
* cambiare vref1 perche' ritorni solo var anziche' (var)
|
||||
|
||||
* (min (* *step-level* 2) 20) produce
|
||||
(number_compare(number_times((VV[58]->s.s_dbind),MAKE_FIXNUM(2)),MAKE_FIXNUM(20))<=0?number_times((VV[58]->s.s_dbind),MAKE_FIXNUM(2)):MAKE_FIXNUM(20))
|
||||
|
||||
* Aggiungere ottimizzazione travel_push_type in print.d per
|
||||
la stampa ciclica, come AKCL.
|
||||
|
||||
* Rimettere #. in default-init in cmptype.lsp (finito bootstrap
|
||||
da AKCL)
|
||||
|
||||
* ricorsione diretta in c2call-global (utile per labels)
|
||||
da' problemi a flet.
|
||||
|
||||
* unwind-exit caso FRAME considera SIMPLE-FUNCALL. Deve considerare
|
||||
anche FUN-VAL?
|
||||
|
||||
* (let ((start start) (end end))
|
||||
(declare (fixnum start end))
|
||||
puo' evitare di creare variabili object e poi relative unboxed
|
||||
|
||||
* scambiare ordine argomenti di si:putprop per facilitare (setf get).
|
||||
|
||||
* aggiungere funzioni di lwp.d in cmp/sysfun.lsp
|
||||
|
||||
* Rewrite setjmp.s so that PC is stored in slot 0 of buf, consistently
|
||||
with _setjmp.
|
||||
|
||||
* Change lex.h and elsewhere so that:
|
||||
|
||||
lex-var: (symbol value) ; for local binding
|
||||
(.... or ....)
|
||||
symbol ; for special binding
|
||||
|
||||
lex-fd: (fun-name 'FUNCTION' . function)
|
||||
(.... or ...)
|
||||
(macro-name 'MACRO' . expansion-function)
|
||||
|
||||
lex-tag: (tag 'TAG' . frame-id)
|
||||
(.... or ....)
|
||||
(block-name 'BLOCK' . frame-id)
|
||||
|
||||
* Funzione directory non funziona sotto DOS: la free chiamata
|
||||
da setbuf fallisce.
|
||||
1131
src/doc/tutorial.txt
1131
src/doc/tutorial.txt
File diff suppressed because it is too large
Load diff
3481
src/doc/user.txi
3481
src/doc/user.txi
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue