SAIL (programming language): Difference between revisions

Content deleted Content added
Line 45:
===Records and pointers===
The concept of [[Record (computer science)|records]] as a data type had only recently been introduced when SAIL was being written. This feature thus shows the signs of being "bolted on" to the language syntax. For instance a record structure was defined using the {{code|RECORD!CLASS}} statement: {{code|RECORD!CLASS person (STRING name, address; INTEGER accountnum; REAL balance)}}. This statement worked in a fashion similar to the {{code|RECORD}} statement in Pascal, defining the template for the record. To create a record, one used the {{code|NEW!RECORD}} statement, which returned a {{code|RECORD!POINTER}}. Pointers were typed, and could be typed to more than one type, for insntace, {{code|RECORD POINTER (person,university) rp;}} defines rp, a pointer to either a person or university record.{{sfn|Smith|1976|p=40}} Pointers could also be declared to point to {{code|ANY!CLASS}}.{{sfn|Smith|1976|p=41}} Accessing the data in a record was similarly idiosyncratic; to print the name file of a person, for instance, the syntax was {{code|PRINT(person:name[rp]);}}.{{sfn|Smith|1976|p=41}}
 
===Compiler directives===
As a systems programming language, performance was important and to help with this, SAIL included a {{code|DEFINE}} which used string-replacement in a fashion similar to C's {{code|#define}} macros.{{sfn|Smith|1976|p=25}} A difference was that the delimiters around the substitution had to be defined, for instance {{code|REQUIRE "[][]" DELIMITERS;DEFINE maxSize{{=}}[100];}}. One common use of these macros was to define character constants like {{code|CRLF}}, as these were not part of the basic language.{{sfn|Smith|1976|p=25}} Another was to redefine the {{code|COMMENT}} statement to the shorter {{code|!}}.{{sfn|Smith|1976|p=26}}
 
===String scanner===