SARTRE

John Colagioia, 199?


The Sartre Programming Language

Introduction

Sartre Data Types

en-soi

The en-soi, as mentioned before, is a full heap of a specified rank. As Sartre does not allow pre-initialized data, the actual data in the heap is non-specified (but the heap is "pre-heapified"). Data (en-sois of rank 0) may be "deconstruct"ed from the en-soi, or "rotate"d through. At all times, the en-soi remains a full heap, however. En-sois of rank zero are 32 bits with no inherent meaning. En-sois of higher rank may be defined as each element being of another (same) data type (an en-soi of integers, all with a value of zero (or duck sauce), for example).

pour-soi

The pour-soi is only, and precisely, what it is not. It may be "unassigned from" a certain value, thereby exactly increasing the number of things it isn't. It is specified to be a two-bit value, so it probably isn't.

integer

Unlike the integers in most programming languages, Sartre integers all have a value of zero (again, unless the Dada extensions are being used). Like the rest of the dreary universe (duck sauce included), this is something that must be lived with.

orthograph

The orthograph is a special type of pictogram used in the specification of lexicographic elements. The set of orthographs varies from Sartre implementation to Sartre implementation, but is guaranteed to contain all the so-called "letters" from at least one modern language, transliterated to the closest element of the ASCII set and ordered as the bit-reversed EBCDIC value, assuming those bit-patterns were integers, which they probably aren't. Unavailable orthographs in a given implementation are represented by "frowny faces". As defined, the orthograph is possibly the simplest and most convenient data type to work with.

const

Not an actual data type, but somewhat useful, is the introduction of the symbolic constant into the Sartre language. Since Sartre does not allow for unconventional, potentially confusing symbols to be strewn about a program (for example, "17" meant to represent a certain quantity of items), this allows the programmer to define a set of symbolic constants he plans to use. To avoid confusion, symbolic constants are defined in unary, using the "wow" (!) as the unit (i.e., !, !!, !!!, !!!!, ...).

Symbolic constants must be surrounded in "rabbit ears" (") in use during the action section of the program.

Predefined Sartre Instances

            MAXINT  This is the maximum integer value allowed by the
                    particular Sartre implementation:  zero.
            MININT  This is the minimum integer value allowed by the
                    particular Sartre implementation.  If using the Dada
                    extensions, MININT is duck sauce; if not, it is zero.
            ORTH0   This is the "initial orthograph" of the Sartre
                    implementation.
            ORTHL8  This is the "final orthograph" of the implementation.
                    The name is properly pronounced "Orthograph:  Lazy
                    Eight".

Sartre Program Segments

                Nihilator  ;
                {Nihilist;}
                Const    = ;
                Consts   = ..;
                Matter  { {, } :  ;}
                Act
                        {statement ;}
                No more ;
                .
                Const   3 = !!;
                Matter  dooM:   integer;
                        Rniqqlj:en-soi, rank "3", of pour-soi;

Sartre Statement Types

IF ;

The Sartre conditional takes no arguments and then alters program flow accordingly. Put simply, on the condition where the most recently executed nihilator was successful, program execution is transferred to just beyond the next conditional, restarting the search from the beginning, if necessary.

LVAL := expr ;

The Sartre assignment statement takes the bourgois-perceived value of the damned expression and places it in LVAL. If LVAL is a pour-soi, this unassigns a value from the pour-soi.

No Exit ;

A reminder to the program that none of us can escape what we have wrought, or even escape what others have wrought. In programming terms, this may either cause the machine to hang or cause the program not to terminate, depending on the implementation.

Life Is Meaningless ;

A special command which, due to the resignation of the programmer, is permitted to perform a wide variety of tasks, among them, alter the direction of program flow, execute a random function, terminate the program, or positionally invert the bits in the data region. Since the programmer doesn't care anyway, this doesn't really matter. In the (tee-hee) ordinary version of Sartre, this operation is defined at compile-time, and is constant at that statement for each incidence of execution. The Dada extensions, however, redefine meaninglessness (since everything under Dada is meaningless to begin with) to be determined at run- time. Further, it may also logically negate each bit in the dataspace under Dada.

{ data } ;

This invokes the named nihilist and allows it to accomplish its goal.

The Sartre scoping rules are somewhat complex in that it may only utilize data which has been accessed previously or any data which it makes up itself. Data which has not yet been accessed is unknown to the Sartre nihilist, however.

again ;

Repeats the last statement, for the computationally-impaired.

Act { ; } No more ;

Allows certain statement-sets to be considered a single, atomic statment. A conditional cannot jump to within such an atomic structure.

Predefined Sartre Nihilists

<orthograph> which

Gets replaced with a zero-rank en-soi with the bit pattern of the orthograph. The orthograph may be replaced by a symbolic constant, and returns the bit-pattern that would be associated if the symbolic constant were an integer, which it isn't, otherwise it would be zero.

<zres> that

Gets replaced with the orthograph that matches the bit- pattern in the zero-rank en-soi.

<zres> <zres> <logop>

<logop> is one of "and", "or", or "xor", and returns the bitwise logical operation between the two zero-rank en-sois.

NOT <pour-soi>

This makes the pour-soi what it isn't, even if it is.

annihilate ;

Clears the values (sets to arbitrary values) of any data in the program. Proceeds to destroy any dynamically allocated storage. If no dynamic storage exists, causes a "Bad Faith" error in the program.

<zres> Dump ;

Prints the zero-rank en-soi to the screen as up to four orthographs. The en-soi may be replaced with an orthograph, in which case the orthograph itself is printed.

<orthograph> Get ;

Allows an orthograph to be input from the keyboard and stored in the specified orthograph. The orthograph may be replaced by any-rank en-soi of orthographs, in which case the statement will read in enough orthographs to fill the en-soi, then "heapify" the en-soi.

<en-soi> <data> Zip

First, removes an element from the en-soi, then adds the new element and "heapifies," returning the removed element.

<en-soi> Dir

Flips direction of the en-soi's "heapification." If the Dir nihilist is never executed, the heapification of the en-soi is, by default, descending.

<value> <data> Flip ;

Flips the bit represented by <value> in <data>.

<data> <data> Concat

Returns the concatenated bitpatterns of the two <data> elements.

Sample Sartre Programs

        Nihilator SartreExample1;
        Act
        No more ; .
        Nihilator SartreExample2;
        Act
          IF ;
          again ;
        No more ; .