[Lazarus] const array syntax

Hans-Peter Diettrich DrDiettrich1 at aol.com
Tue Jan 12 02:52:03 CET 2010


Alexander Klenin schrieb:

>> const
>>  IDECommandStrs: array[0..] of TIdentMapEntry = (
>>
>> So what about semantics. The semantics here is that you don't need to define
>> the upper bound for a const array.
> 
> Althoug I agree with Juha that in general, it is a good idea to free programmer
> from the burden of hand-counting const array elements, I have a few notes:
> 
> 1) Proposed syntax seems somewhat suboptimal. Historically, Pascal
> used redundancy and keywords to minimize the chance of errors and
> make diagnostics easier. In that spirit, I think some active indication
> of arbitrary upper bound is preferable to a mere omission:
> 
> IDECommandStrs: array[0..*] of TIdentMapEntry = (
> IDECommandStrs: array[0..auto] of TIdentMapEntry = (
> IDECommandStrs: array[0..end] of TIdentMapEntry = (

I also miss badly a feature to definitely tell the compiler about 
arrays, that currently are implemented as C-style compiler magic on 
pointers. A dynamic array under control of the user could be identified 
by e.g.:

   MyArray: array[] of TWhatSoEver;

Then the compiler could allow for MyArray[index], and reject error prone 
MyPointer[index] expressions. Such arrays can be initialized by const 
expressions (as is), or by New or GetMem by the user. As with the 
existing semantics, the array indices should be zero based.

> 2) We should think through and specify how multi-dimensional arrays should work:
> matrix: [1..auto, 1..auto] of Integer = ((1, 2, 3), (4, 5, 6));

In such cases I would allow automatic dimensions *only* for the first 
dimension.

DoDi





More information about the Lazarus mailing list