[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
T 2.6 available
We will be distributing T version 2.6 soon. Please send tape and/or
floppies, as appropriate for your operating system, if you would like to
receive it. Anyone who has signed a nondisclosure agreement can get it.
Note that T is available for VMS now also.
Here is the release notice.
--------------------
Release notes for T 2.6 and TC 1.3
Jonathan Rees
15 May 83
This list is not exhaustive, but includes only those items thought to be
of general interest.
The most outstanding new features of this release are generic arithmetic
and automatic GC invocation in Unix T.
--------------------
*** New features, improvements and bug fixes:
Generic arithmetic is partially installed. Many routines which formerly
worked only with fixnums will now work with integers in general, as well
as with other types of number. This should bring the system a little closer
to implementing chapter 8 of the manual.
New system constants:
*MAX-FIXNUM* -> the largest integer which answers true to FIXNUM?
*MIN-FIXNUM* -> the least integer which answers true to FIXNUM?
E.g. FIXNUM? might be defined as follows:
(DEFINE (FIXNUM? X)
(AND (INTEGER? X) (>= X *MIN-FIXNUM*) (<= X *MAX-FIXNUM*)))
New stream operation: (WRITE-LINE stream string) -> undefined
This is an inverse to READ-LINE. Its default method simply does
WRITE-STRING followed by NEWLINE operations, but particular streams
may of course do as they please.
Syntax tables are beginning to be supported as suggested by the manual.
(ENV-SYNTAX-TABLE locale) -> syntax-table
(SYNTAX-TABLE-ENTRY syntax-table symbol) -> descriptor
(MACRO-EXPANDER? descriptor) -> boolean
(INVOKE-MACRO-EXPANDER descriptor expression) -> expression
E.g.
(INVOKE-MACRO-EXPANDER (SYNTAX-TABLE-ENTRY (ENV-SYNTAX-TABLE *THE-BASE-ENV*)
'AND)
'(AND 1 2))
=> (IF 1 2 NIL)
New switch (WARN-IF-REDEFINING?). This is just like the former and
semi-released *WARN-IF-REDEFINING?*. It controls the printing of
"[Redefining ...]" and "[Assigning ...]" messages. It does NOT control
"[Shadowing ...]" messages; currently there's no way to turn those off.
"[Redefining ...]" messages are now printed when macros are redefined.
"[Redefining ...]" messages are now printed when loading object files.
The bug whereby macro invocations could not be improper lists has been
fixed. E.g. in the context of an interpreted (DEFINE-MACRO (FOO . REST) ...),
the system formerly crapped out expanding forms such as (FOO X . Y).
The bug where PRETTY-PRINT would print comments ";See file ..." has been
fixed; it now just PRINTs the object if it has no PRETTY-PRINT method.
Now only PP prints those messages, and then only for the object it was
passed, not for sub-objects.
There is now somewhat better type checking in ASSQ and REVERSE!.
All the SET-BYTEV-ELT-... and BSET-... routines have been flushed; use
(SET (BYTEV-ELT ...) ...) instead. (Apollo only.)
PRINT can deal with the most negative fixnum now.
Unix T can now GC when necessary. The size to which the heap will grow
before T GC's is based on the process's datasize limit (see vlimit(2V) in
the Berkeley Unix manual); the heap will grow to somewhat less than half
of that size.
Unix T now handles the file-size-limit-exceeded interrupt by generating
a T error, rather than by blowing away the T process.
The garbage collector might be somewhat more robust now.
The #^x read syntax should work on Unix now.
CHOPY! should now work as documented in the manual; it didn't work in
Apollo T 2.5.
--------------------
*** Incompatibilities:
The introduction of generic arithmetic entails some minor incompatibilies.
In particular, / (i.e. DIVIDE) is no longer guaranteed to return a fixnum.
Use DIV if you want a division routine which returns an integer when asked to
divide two integers. E.g. (/ 10 4) => 5/2, while (DIV 10 4) => 2.
(IF test consequent) will no longer yield false if "test" yields false.
As documented, it will yield some undefined value. Also,
(IF test consequent alternate1 alternate2 ...) is no longer supported;
it is a syntax error if there is more than one "alternate" form.
Delays are no longer forced implicitly when doing generic operations on
them. They must be forced using FORCE, as the manual says.
--------------------
*** Internal changes to system which shouldn't affect people who don't use
*** unreleased things:
MAGIC? and some other routines have changed their names. Look at T
source file "syntax.t" for the new names, or else start using the
released syntax table routines described above instead of the unreleased
ones.
The unreleased VAR-MAGIC special form has been flushed. Also,
DEFINE-MACRO is no longer a macro, it is a special form.
LOAD no longer pays attention to *REPL-READ*, *REPL-EVAL*, or *REPL-PRINT*.
That it ever did was an unreleased feature.
The means by which CRAWL's command table is implemented has changed.
Type tag 3 is now available for experimental use on both 68000 and VAX.
Probably only Nat cares about this.
Xenoids for "write" and "ctime" exist in Unix T now.
--------------------
*** TC improvements:
New procedures COMPILE-FILE and MAYBE-COMPILE-FILE defined. They are
both roughly the same as COMFILE but are intended to be called from
programs. The first generates an error if the file doesn't exist. The
second is a predicate which returns true if the file existed. COMFILE
retains its old kludgey meaning.
Throws from within closures should win now; e.g.
(CATCH FOO (MAP (LAMBDA (X) (IF ... (FOO ...) ...)) ...)),
which didn't previously compile correctly, now does.
Vector references on vectors bigger than 8191 elements should work now.
(This was a 68000 code generator bug only.)
(SET (BYTEV-ELT-... ) ...) should compile okay now.
Data sections are now made to be contiguous on Apollo. This should speed up
loading of .bin files.
Environment consing in LABELSes should be done more space-efficiently in some
cases.
Constant folding works now (formerly it only worked in the cross-compiler).
The error message generated when attempting to compile a file which has
no HERALD form should now be comprehensible.
There have been some changes to the "noise output" generated. Now TC
prints a single message for each place in the compiled code where a
closure and/or a lexical environment is allocated in the heap, in
addition to a message for each procedure compiled.