[fpc-pascal] typed constants...

David Mears david.mears at cox.net
Tue Oct 24 02:28:26 CEST 2006

Michael Van Canneyt wrote:
> On Mon, 23 Oct 2006, David Mears wrote:
>> is this bit of syntactic weirdness a fpc element, or from delphi.  I've
>> largely been away from pascal since the early 90s, mostly only using it to
>> write dos-y non-object-y utilities, for which it excels. 
>> typed constants  seem to basically to be like the static keyword from c.. but
>> not a var modifier..  It just seems it should be a modifier for var.  such as
>> var st:string static;..  since.. constant is usually pretty wrapped up in the
>> meaning of "not changing."  and that it has a constant, initialized, reserved
>> place in memory is.. well.. abstract.  Especially since you can initialize
>> your variables now, then the only thing that makes it special is that it is a
>> global variable with  a local scope.
>> I'm not the sort who thinks pascal should be C, because I hate having to work
>> with C or it's work likes.  I just think that being able to call something
>> constant and change it muggles the syntactic clarity of the language, which is
>> otherwise rather good.
> Initialized constants are deprecated, and should be replaced by initialized
> variables, as in Delphi:
> Var
>   A : String = 'Some string';
> "Real" constants (in the sense of 'not changing') do not need to be typed in
> the first place so
> Const
>   A = 'Some String';
> Will do just fine. You now have both possibilities and they each have clear 
> and unambiguous meaning.
> Michael.
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
I was less interested in the initialized part- which I'm happy you can 
do with variables now but would not be overly concerned setting them in 
code as I always had to in the past, as the "It should be stressed that 
typed constants are initialized at program start.  This is also true of 
local typed constants."  Which I take it to mean that they retain their 
value when out of scope, which provides encapsulation at a level that 
can only otherwise be done with objects. 

function HowManyBirds:integer;
const n: integer = 1;
   n:=n * 2;

ignoring that the function here is useless, that's a useful ability..  
while you can define variables anywhere not in procedure, nothing else 
quite does that.  It's just I'd rather it be
var n: integer = 1; static;
var n: integer = 1; fixed;
or some such.  It makes more sense linguistically, in an otherwise very 
sensible language. :)

More information about the fpc-pascal mailing list