Perhaps a little extra compiler magic could be used?  If the base
definition of a string (the hidden stuff before the data) contains not only
a field with the encoding, but a flag indicating the disposition of the
encoding, then when a string type is aliases, that disposition could be
overridden.  I'm on my phone, so this may be hard to show an example:

type String = record
  encoding: TEncoding;
  disposition: Tdisposition;
  data: Tbytes;
end;

Disposition would have values like:

fixed - will always be in this encoding, anything assigned to a variable of
this type will be automatically converted.  Any out parameter of this type
will be initialized to an empty string of this encoding.

open - encoding only defines initial encoding.  Assigning a string of
another type will result in this string taking on that type, but NOT that
type's disposition.  Out parameters initialized to the given encoding.

strict - only compatible with other strings of the same type, period.  Try
to assign a string of a different type, compile time error.  Will force
manual conversion between encoding (possibly via typecast that calls
internal encoding translation).

Example:
type ANSIString = String encoding UTC16 disposition fixed;

Syntax is probably all wrong, but hopefully you get the idea.  If the real
lowest level is something other than String, then String itself can be an
alias that is different for each platform to match that platforms native
type.

It seems something like this would let the people who just want to use
strings in a consistent way and not worry about conversion performance to
do so, and those who want speed to have the compiler help them out by
stopping them from creating code with lots of conversions.

Or, I may be completely off base.

Jeff.
On Nov 18, 2011 6:44 AM, "Michael Schnell" <mschn...@lumino.de> wrote:

> On 11/18/2011 11:21 AM, Graeme Geldenhuys wrote:
>
>>
>> Can't we just have a single damn string type like Java and some other
>> languages. Lets just call it...ummm.... String!  ;-)
>>
> This has been discussed at any length here and in many other forums. This
> is what I tried to describe in (B). It has been turned down as it's not
> possible to implement this providing predictable performance.
>
> -Michael
> ______________________________**_________________
> fpc-devel maillist  -  fpc-devel@lists.freepascal.org
> http://lists.freepascal.org/**mailman/listinfo/fpc-devel<http://lists.freepascal.org/mailman/listinfo/fpc-devel>
>
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to