Good morning Mister Tyler! Going down? | ||
-- Aerosmith video "Love In An Elevator", "Pump" (1989). |
We are going down all the way right to the core, the core of Scilab. Though this is the most technical and most complex chapter, it is by no means true that writing a native Scilab function is unmanageable by for ordinary mortals. A strict programming discipline, patience, persistence, and a thorough knowledge of what makes up the stack-structures involved, let us overcome the difficulties.
Instead of simply repeating the Fortran-77 statements that make up the Scilab stack, the API, etc., we introduce a new language that is better suited for this job: a pseudo Ada[1] (pAda), which is much more expressive. The syntax follows Ada, and the pAda types are mapped onto Fortran-77 types as listed in Table 7-1. What might look like an artificial complication, the introduction of new types, actually is a major simplification. First, the name of the type now makes clear exactly what it is used for. Second, distinct types designate distinct things, stuff that never should be mixed up. Third, the valid ranges of the sub-types are explicity mentioned.
Table 7-1. pAda to Fortran-77 type mappings
pAda | Fortran-77 |
---|---|
Integer | INTEGER |
Float | DOUBLE PRECISION, REAL*8 |
Boolean | LOGICAL |
Character | CHARACTER |
type String is array (1..N) of Character | CHARACTER*N |
type ComplexFlag is (RealVariable, ComplexVariable) | INTEGER = 0, 1 |
subtype Natural is Integer range 0..Integer'Last | INTEGER |
type ParameterStackAddress is new Integer range 1..Integer'Last | INTEGER |
type DataStackIndex is new Integer range 1..Integer'Last | INTEGER |
[1] | We apologize to all Ada programmers for the abuse of the language, but Ada's expressiveness and clarity are unmatched. |