[Lazarus] const array syntax

John jszcmpr at netspace.net.au
Wed Jan 13 23:59:20 CET 2010

Doug Chamberlin wrote:
> Duncan Parsons wrote:
>> Must confess, I feel "arr:[0..end] of " makes more sense to me than 
>> use of "var" or "..]" The latter suggests something forgotten or a typo.
> I agree that just leaving out the ending limit is against the spirit 
> of Pascal.
> I can live with the syntax of MyArray:[0..var] or MyArray:[0..end] but 
> I'd prefer a syntax that does not use a word, such as MyArray:[0..*] 
> or MyArray:[0..?]. That way there is no confusion about a user-defined 
> word and the use of the currently reserved words is not changed. In 
> other words, this is a situation that is exactly why we have 
> punctuation and not the cobol-ish "Declare MyArray to be from 0 to end 
> of TSomeType"!
All right, every one is having a go at this, so my suggestion is:

Option 1:

array(0..Some_constant   key_word_or_directive ) of ....

So the Key word or compiler directive tells the compiler to create and 
set "Some_constant" to the number of elements, rather than to expect to 
find the constant existing already.  (Or, if it suits the complier 
better, require the constant to be defined, just overwrite the value)

The point being that you have a definite instruction to set the value of 
the bounds, rather than just leaving something out, and you have a 
constant to use as an upper bound.

Option 2:

As it is just a convenience feature, do it in the IDE.  Given

Some_constant = 0;
array(0..Some_constant) of .....

Then have a code completion feature to reset Some_constant to the 
correct value.  (Maybe even write the Some_constant declaration if it 
doesn't exist, for that matter.)

This has the disadvantage that you have to use the Lazarus IDE (but 
then, why wouldn't you ?), and the major advantage that no one has to 
stuff around with the compiler at all - or it's specification or 
documentation, for that matter.  Much better to load conveniences into 
the IDE and keep the compiler "clean".

Just my 2c worth.

John Sunderland

More information about the Lazarus mailing list