I'm trying to wrap my mind around the fact, that someone wants to use a constant record.
Why not?
const
NullPoint: TPoint = (x: 0; y: 0);
IIRC, a constant (e.g. Const MY_USELESS_CONST:Integer = 42;) is just a symbol used in Source-code for readability, and during compilation that symbol is replaced with the actual (constant) value.
What you describe is only true for
untyped constants, e.g.
Const MY_USELESS_CONST = 42. A
typed constant, like your example of
const MY_USELESS_CONST: Integer = 42 is for all intents and purposes similar to a
variable with the exception that you can't write to it (at least if writable consts are disabled with
$J-). Such a typed constant has memory reserved in the binary's data area and you can use a pointer to it. For untyped constants that is
not the case, they neither have space in the resulting binary nor can you take a pointer to them.
So, how in the name of the holy 8 bits, is a constant record supposed to work?
Especially if you have different types for the record-members (Integers, Doubles, Strings, Woolen Socks....)
type
TWoolType = (
Sheep,
Cotton,
Bambus
);
TWoolenSocks = record
&Type: TWoolType;
Color: TColor;
end;
TMyRecord = record
i: Integer;
d: Double;
s: String;
w: TWoolenSocks
end;
const
MyRecord: TMyRecord = (i: 42; d: 3.141; s: 'Hello World'; w: (&Type: Bambus; Color: clRed));
I am though puzzled by your comment on
var X:double=123;
var Y:double=123;
is ok but not
var X,Y:double=123;
when it is permissible to code
var X,Y:double;
In the spirit of asking dumb questions to learn something, why is this "by design". I cannot think what sort of design consideration would lead to this restriction. Unless it is simply a TP/Delphi quirk which has to be followed for compatibility.
I'm not, by far, PascalDragon but AFAIR when this has been discussed the feel of the developers (and others) was that allowing that construction introduced some sintactic ambiguity (e.g. whether it was only Y that would end up initializad or both Y and X) that would lower the strictness of Pascal sintax.
Note, among other things, that such a sintax would allow for e.g. a long list of initialized vars, each in its own line:
var
{Suppose it much longer!}
a,
b,
c,
d,
e: Integer = 0;
If you now want to discard var e or add a long comment in the middle of the list or some such operation the code might lose some clarity leading to compile- or run-time errors.
Generally speaking, it was felt that loosing the "simplicity" and strictness of Pascal for so little (perceived) advantage wasn't worth the effort.
At least that's what I understood 
From the compiler's point of view there is no ambiguity. Technically that functionality would be possible without much problem. But it's indeed that it could lead to obscure bugs if one needs to adjust more complex
var section and forgets that there is a initialization some lines further down. Take such a section from FPC's parser for example:
var
srsym: tsym;
srsymtable: TSymtable;
hdef: tdef;
pd: tprocdef;
orgstoredpattern,
storedpattern: string;
callflags: tcallnodeflags;
t : ttoken;
consumeid,
wasgenericdummy,
allowspecialize,
isspecialize,
unit_found, tmpgetaddr: boolean;
dummypos,
tokenpos: tfileposinfo;
spezcontext : tspecializationcontext;
cufflags : tconsume_unitsym_flags;
If the Booleans would have e.g.
= True and I miss that when adding a new Boolean variable that should be
False and I also miss to initialize it (been there, done that!) the compiler will not warn that the variable is not initialized (like it would now!) and I might need to debug a while to find out what's wrong.
While one could argue that a
= True is harder to miss in e.g. an IDE that does nice highlighting of things there is also the possibility that it's less obvious if macros come into play:
{$define IsTrue := = True}
var
Foo: Boolean IsTrue;