> > Also assembler symbols/labels should get extended to strings > 255 in the
> > future because there is already a bug open in which it is demonstrated that 
> > it
> > is possible to create too long labels which makes a program uncompilable.
> > Or some scheme derived which makes sure that labels never get larger than 
> > 255
> > chars.
> > (Typed constant within 2 or 3 nested functions)

> This is exactly a thing that will not happen. Longer assembler labels
> have no usefull advantage for the end user, they are only used
> hidden from the user. Long names only cost memory. For mangled names, the 
> compiler
> already switches to hashes instead of type lists. If there is any other
> reason a symbol gets to long, it can be handled in a similar way.

> > Additionally even the ppc64 compiler isn't able to cycle when compiled with
> > -Cg because of the shortstring limitation, a few symbols get truncated, 
> > which
> > makes the assembler fail.
> > This is because the assembler syntax for declaring a symbol in the GOT on 
> > this
> > platform requires the compiler to add the symbol name twice to the 
> > directive.
> > This effectively limits symbol names to around 120 chars already. Which is, 
> > as
> > mentioned before, already not the case for the compiler as it is.

> > The solution is to generate shorter symbols. Hash the symbol name if it
> > gets too long.

That's one solution, that's not the only solution.

I can see people arguing that a 50 element limited short string is enough, I 
seriously
can.

I think you guys may be living in a 255 cave, simply because that's all we have 
to deal
with at this time. Some say that ansistrings might be the way to go using 
sysutils -
personally I think sysutils has no place in the compiler core and the compiler 
core should
have tight custom units with no end user units like sysutils. One way to 
accomplish this,
like I've already mentioned, is to use shortstring/longstring/array of string/ 
based Dos
unit, using shortstrings where necessary, arrays of strings where necessary, 
and arrays of
chars or longstrings where necessary. An array of char is just a dumb 
longstring, that's
all. Upgraded Dos unit could contain some functions pulled in from sysutils, 
but not
actual sysutils in the uses clause - just some optimized systutils pulled in 
and put into
the upgraded dos unit. Still keeping the old Dos unit for compatibility for 
users, name
the new upgraded dos unit anything - newdos.pp, whatever.

I'd be willing to help on this one and do some work, but unfortunately since 
we're all
disagreeing it means we can't do any work until we come to an agreement. Once 
again, it's
not just about having a team of programmers doing the grunt work - but also 
about having
some sort of consensus or agreement before doing the work. Otherwise one of us 
will waste
our time submitting a patch which won't be committed because some other folks 
don't like
the way it was done.

If you use an array of strings you eventually have to combine these array of 
strings
together into one common buffer to send to exec(), so you are reinventing the 
longstring
or the ansistrings, or an array of char if it is one big piece being sent in 
the end
anyway. The longstring is faster. It's perfectly okay that you don't want to 
implement
longstring because it is hard work - but at least admit that it is useful, 
whether it is
implemented or not. It's like saying ansistrings are useless garbage because we 
haven't
implemented them yet. No, they are useful - but maybe they are hard to 
implement. I doubt
a longstring is hard to implement compared to something like 
templates/generics, though.

But don't take my message as an offense - I'm sure you all know it is normal 
for this to
happen among programmers - discussing topics and arguing their brains out.

Can someone tell me how slow/fast a dynamic array is compared to a fixed one? 
Say you used
a dynamic array of chars or dynamic array of shortstrings - would the dynamic 
array be
slow on a general basis? Maybe we will have to resort to benchmarks using the 
cpu timer.
And then there is also a fixed array of shortstrings or a fixed array of chars 
too.

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to