[Info-vax] Modern software development for VMS, was: Re: source control and semantics (Re: Why so much Unix envy?)

David Froble davef at tsoft-inc.com
Tue Sep 16 17:15:17 EDT 2014


Shark8 wrote:
> On 9/14/2014 9:40 AM, David Froble wrote:
>> What's wrong with directories containing source files, build files, and
>> such?
> 
> The reason that directories/source-files is bad is because it makes 
> things like compiling/linking dependent on path-searching; it also makes 
> things a bit more difficult for dependency-management and encourages 
> inefficient practices/procedures (i.e. recursive make).

How so?  I have no problems.  I can show examples.

> The problem with text is essentially the same problem as "a string" vs. 
> "an identifier" (the identifier has rules it must follow, like in Ada, 
> for example: a string containing only alphanumeric-characters or 
> underscore, with the following restrictions: it cannot start with a 
> digit or underscore, cannot end with an underscore, and cannot contain 
> successive underscores). -- Now if you have an identifier-type that you 
> have as a key to a map to a record indicating type-value-location you 
> have a Symbol-table (with the nice property that all the symbols are 
> valid identifiers).
> 
> Or, a bit more on the mundane side, consider DB-applications and 
> ensuring [DB] consistency and proper-processing; you could use the 
> following to ensure that (a) all SSNs are correctly and consistently 
> formatted, (b) that the parameters and return-values conform to those 
> rules, and (c) that when [not if] one of the developers/maintainers 
> inserts bad data into the DB it will be caught:
> 
>> -- SSN format: ###-##-####
>> Subtype Social_Security_Number is String(1..11)
>>   with Dynamic_Predicate =>
>>     (for all Index in Social_Security_Number'Range =>
>>       (case Index is
>>        when 4|7 => Social_Security_Number(Index) = '-',
>>        when others => Social_Security_Number(Index) in '0'..'9'
>>       )
>>      );
> 
> or ensuring dates are consistently-formatted and valid:
>> Package Date_String is
>>
>>     -- Date-String format: ####-##-##
>>     Subtype Date_String is String(1..10)
>>     with Dynamic_Predicate =>
>>       (for all Index in Date_String'Range =>
>>          (case Index is
>>             when 5|8  => Date_String(Index) = '-',
>>           when others => Date_String(Index) in '0'..'9'
>>          )
>>       ) and then -- short-circut boolean, ensures the above first
>>       (case Month(Date_String) is
>>          when 1 | 3 | 5 | 7 | 8 | 10 | 12 => Day(Date_String)'Valid,
>>          when 4 | 6 | 9 | 11              => Day(Date_String) in 1..30,
>>          when 2 => (if Is_Leap_Year(Date_String) then Day(Date_String) 
>> in 1..30
>>                     else Day(Date_String) in 1..29)
>>       );
>>
>>
>> Private
>>
>>        Subtype Month_Type is Natural range 1..12;
>>        subtype Day_Type   is Natural range 1..31;
>>
>>     Function Year ( Input : String ) Return Natural is
>>       ( Natural'Value(Input(Input'First..Input'First+3)) );
>>     Function Month( Input : String ) Return Month_Type is
>>       ( Natural'Value(Input(Input'First+5..Input'First+6)) );
>>     Function Day  ( Input : String ) Return Day_Type is
>>       ( Natural'Value(Input(Input'Last-1..Input'Last)) );
>>
>>     -- METHOD FOR DETERMINING LEAP-YEAR:
>>     -- (1) If the year is evenly divisible by 4, go to step 2.
>>     --     Otherwise, go to step 5.
>>     -- (2) If the year is evenly divisible by 100, go to step 3.
>>     --     Otherwise, go to step 4.
>>     -- (3) If the year is evenly divisible by 400, go to step 4.
>>     --     Otherwise, go to step 5.
>>     -- (4) The year is a leap year (it has 366 days).
>>     -- (5) The year is not a leap year (it has 365 days).
>>     --
>>     -- CONCISELY:
>>     --     Year Mod 400 = 0 or (Year Mod 4 = 0 and Year Mod 100 /= 0)
>>     Function Is_Leap_Year( Year : Natural ) Return Boolean is
>>       (Year Mod 400 = 0 or (Year Mod 4 = 0 and Year Mod 100 /= 0));
>>     Function Is_Leap_Year( Input : String  ) Return Boolean is
>>       ( Is_Leap_Year(Year(Input)) );
>>
>> End Date_String;

None of the above seems (to me) to have anything to do with the storage, 
modifying, compiling, and linking of programs.

> IOW, to store programs as text is to ignore that there are constraints 
> as to the validity thereof.

As far as I know, programs ARE text.  I know of nothing else.



More information about the Info-vax mailing list