Other features include processes, procedure variables, events and interrupts, contexts, backtracking and record garbage collection.
It also has block-structured macros, a coroutining facility and some new data types intended for building search trees and association lists.
It was essentially an integer-only version of ALGOL-60 with a number of additions to provide direct access to the memory and other hardware to allow it to be used as a systems programming language.
It reduced arrays to a single dimension, removed any ability to perform dynamic memory allocations, but did add some additional string functionality.
A greatly updated version by John Sauter, GOGOL II, was written as part of a port of the underlying operating system from ODIN to THOR.
When the Stanford AI Lab received their PDP-6, Sauter, Pettit and (mostly) Dan Swinehart wrote GOGOL III for the new machine.
The main feature of LEAP as a language was its use of associative storage, more commonly known today as a Map or Dictionary.
Development then passed to Taylor, John Reiser and Robert Smith, who added a debugger, a system-level print statement, records, and performed the conversion from Standord's own SUAI to TENEX.
[2] Like many ALGOL systems, and the later Pascal, the basic structure of SAIL is based on the block, which is denoted by the code between the keywords BEGIN and END.
RECURSIVE told the compiler that the procedure might call itself, and thus its local variables had to be written to the stack, not just the subroutine return information.
[11] This also had the side-effect of meaning that variables declared within a procedure that was not marked RECURSIVE would not be reset between calls,[11] acting similar to C's static.
[13] The basic variable types in SAIL are integers, reals (floating point), booleans, and strings.
[16] It included a number of standard functions like square root, all of the common math operators, and was otherwise similar to most ALGOL derivatives for normal programming.
Both used a system known as a "break table" which consisted of a set of characters that represented places to stop reading, examples include linefeeds, various whitespace, and punctuation.
SAIL's input/output system was based on the idea of numbered "channels" in a fashion somewhat similar to the scanner entries.
Once opened, the file could be read, subject to the scanning rules noted above, by calling INPUT and looking for the end-of-file.
For instance, the INCHWL function was an INPUT hard-wired to the user terminal and always open, and it returns its break character in the system variable !SKIP!.
For instance, one might make a record of the type Family_Member with Name "Tom" and set the Father field to "Harry".
SAIL was ported from WAITS to ITS so that MIT researchers could make use of software developed at Stanford University.