T Revival Project

T is a dialect of Scheme and its implementation. It is not compatible with R5RS, but there is an R5RS (well, currently, only R3RS) compatibility layer for it. It is planned to become more and more compatible with R5RS as time progresses. Used in the T implementation is Orbit, an optimizing compiler, one of the first real optimizing compilers of Scheme, and for a long time the fastest. Olin Shivers wrote a detailed history of T, and Jonathan Rees recently put up a general T web page.

T originated from Yale. Those involved in the original development of T included Jonathan Rees, Kent M. Pitman, Norman Adams, Jim Philbin, Olin Shivers, David Kranz, Richard Kelsey, and undoubtedly more that elude this page's maintainer's memory right now. Taylor R. Campbell and Brian Mastenbrook, after over a decade of T's abandonment, have decided to revive the T project. (Taylor and Brian are not the original authors of T; nor were they in any way connected with the original development of T.)


T has been ported to a number of different platforms and machine architectures:

These are scattered throughout the FTP archives listed below; for convenience, we have put up separately a SPARC T image and the RISC sources (including compiled code and debugging information), since these are likely to be the only ones of interest nowadays.

To install T on a SPARC running Solaris, simply copy the SPARC T image into a directory in your $PATH, such as /usr/local/bin/. If you wish to install fix files (such as tfix.t and ofix.t mentioned below), set the TSYSTEM environment variable to the directory where you intend to put them; subsequent T instances will load them. T will also load a file named init.t in your home directory on startup, after the fix files. These files may be compiled.


The T manual is available in DVI, PDF, and a gzip'd tarball of the TeX sources, transcribed from the original Scribe sources.

FTP Archives

There are three different archives of T 3.1 from different FTP sites with different contents: t3.1-ai.tar (from the MIT AI laboratory), t3.1-cag.tar (from the MIT Computer Architecture Group), and t3.1-funet.tar (from the Finnish University and Research Network).

Mailing lists

An archive of the original T mailing list is available in a tarball, though not in any web-browsable format. There is no extant mailing list; only if a sufficiently large number of people express interest shall we consider setting one up, and still probably not until it has been ported to the PPC.


The directory internal-doc/ contains documentation about some T system internals that Taylor R. Campbell wrote based on experiments and examination of the source. The directory hacks/ contains various useful T modules:

tfix.t, ofix.t
Fixes for the T system and Orbit compiler, respectively. These should go in the T system directory (on Unix, usually /usr/local/lib/t) for T to load them on startup, and these should be named tfixn.t and ofixn.t, where n is the fix number of the T image you are using; it is printed on startup in parentheses after the T version number.

Taylor R. Campbell's T initialization file. Most of it serves just to load other files in this directory. The T initialization file must go in the user's home directory for it to be loaded by T, and it must have the name init.t or Tinit.t. (You may additionally compile the file as well with (COMPILE-FILE '(HOME INIT)) or (COMPILE-FILE '(HOME "Tinit")).)

Utility for searching environments (`locales') for bound names. (APROPOS id [root-env]) and (APROPOS-LIST id [root-env]) search for any identifier that contains id, a string or a symbol, in its name, in all environments including and inferior to root-env, which defaults to STANDARD-ENV. APROPOS prints the results of the search nicely formatted; APROPOS-LIST returns them as a nested list.

Convenient syntax for assembling fixnum bit fields. See the file for examples.

An efficient implementation of procedure composition for SPARC T. It must be compiled and loaded specially; see the top of the file for details on the necessary incantations.

Higher-level structure type definition macro. Again, see the file for description & examples.

More front ends to Orbit. (ORBIT-EVAL exp env) compiles and runs exp in env with Orbit, suitably for setting (REPL-EVAL) to it; it also early-binds using the T system early binding environment if env is T-IMPLEMENTATION-ENV. (ORBIT-NOISILY exp [env]) compiles and runs exp in env, which defaults to the REPL environment, verbosely showing any debug output from Orbit, the CPS syntax tree, and a listing of assembly code. (CL-NOISILY exp [env]) is a cross between ORBIT-NOISILY and CL: it compiles the code and prints verbose output about the compilation, but it does not run the resultant code, and exp may be a procedure as well, if its source can be obtained, in which case that source is used as the expression. Finally, (COMPILE-FILE-NOISILY filespec [output-filespec]), or COMFILE-NOISILY, compiles a file noisily, as with ORBIT-NOISILY and CL-NOISILY.

Utility for showing references to undefined variables in compiled code. Load into T-IMPLEMENTATION-ENV; then type (SHOW-UNDEFINED unit) or (SHOW-UNDEFINED filespec [env]) to show all of the undefined references in unit, a compiled module, or the unit compiled from filespec when it was loaded & linked into env, which defaults to the REPL environment.


The two current T Revival Project maintainers can be reached individually by email (please email us both if you have general questions pertaining to the project):

(To evaluate the format expressions, just substitute successive arguments after the control string (the second argument to format) for successive ~As in the control string. For example, bmastenb would be substituted for the first ~A in the control string "~A@cs.~A.edu.)

Additionally, there is a #t channel on the Freenode IRC network. (Please don't murder us for the astoundingly horrible pun...)


A quick sketch of our current goals can be found here. Yes, we aren't planning on adding support for x86; neither Taylor nor Brian has any particular interest in that platform.

(Due to the business of schedules, little work has been done on this project as of late, but once time can be found, work will resume. If there is anyone who has a SPARC running Solaris, a Mac, some time to spare, and interest in T, please contact us: we could use one more person to accomplish the PPC port. Experience with and knowledge of Lisp implementation technology is not necessary.)

Optimized for ANY browser and OS!

Last updated: Friday, 7th April, 2006