Watch, Follow, &
Connect with Us

The Oracle at Delphi













Older Stuff



Requiem for the {$STRINGCHECKS xx} directive…

It’s time. It’s time to say goodbye to the extra behind-the-scenes codegen and overhead that was brought to us during the Ansi->Unicode transition. We’ve shipped two versions with this directive on by default. The Ansi world is now behind us. It’s only real purpose in life was to assist C++Builder customers to more easily transition to C++Builder 2009 and 2010. There are some rare cases where an event handler that was declared in a C++ form/datamodule with an AnsiString parameter *could* be called with the AnsiString parameter containing a UnicodeString payload. To guard against this case, since there was no way to detect this at runtime, was to be resilient to it. Agree or not, that was what happened.

As we’re working on Fulcrum, the next RAD Studio release with a focus on cross-compilation for Mac and Linux, we saw no need to burden these platforms with something that was designed for easing a transition that has not occurred on those platforms. I can say with certainty that the Mac and Linux targets will not be encumbered with this extra overhead. It is also highly likely that even the Windows target for the next release will also no longer support this directive. The source level directive will still be accepted without error, it will merely have no effect.

This will potentially affect C++Builder customers, but as long as the transition to Unicode has been made, it will have no affect. In the rare cases that this will affect some our customer still maintaining old projects that have not updated any event handlers that too AnsiString parameters to take UnicodeString params as appropriate. We hope to at least provide a warning when opening up the form or data module in the IDE to alert the user of this case. More details as we figure this stuff out.

So the bottom line is that we’re intentionally shedding this extra baggage and will not be foisting it on the Mac and Linux platforms, and most likely Windows will maintain parity. I’m already hearing a few cheers and shouts from the back…coupled with a few merely going “Huh? What is he talking about?” Just know that if you’re a pure Delphi guy, there is really nothing to see here… except that you may see a slight performance boost in your code… that that is, as I understand it, a good thing ;-).

So, {$STRINGCHECKS xx}, don’t let the door hit you on the way out…

  • Preemptive snarky comments (with equally snarky responses ;-):
    • I cannot understand why you did this in the first place!
      • We all knew going in that it was sub-optimal. A lot of the other suggestions and solutions we had were far worse. Ignoring the problem wasn’t an option.
    • I only use Delphi and don’t give a rip about the C++ folks.
      • We care about them a lot. They give us money.
    • Finally! I’ve been telling you this ever since D2009!
      • Thank you, Capt. Obvious.
    • I have D2010, are you going to issue a patch for this?
      • Uh, no sorry. D2009 and D2010 are still in the thick of the transition. Folks are still moving to these versions.
    • Get a spellchecker! You must be an incompetent dolt since you misspelled ‘xxxx’
      • Yeah, I know, you’re perfect and don’t make any mistakes. Yep, I suck.
Posted by Allen Bauer on January 26th, 2010 under CodeGear, Delphi, Work |



21 Responses to “Requiem for the {$STRINGCHECKS xx} directive…”

  1. Marco Cantu\' Says:

    Wise decision (I mean having it first and cutting it now), the important bit is you’ll compile the RTL and VCL packages without it (as we could already remove it from our code). RIght?

  2. Allen Bauer Says:

    @Marco,

    Correct. We’ve also removed all the explicit checks and conversions from all the internal compiler helper functions.

  3. Xepol Says:

    This is a technical question for personal interest.

    Can you not tell the difference between a unicode string pointer and an ansi string pointer at run time by checking the char/element size?

    I’m assuming that UnicodeString based strings have an element size of 2, AnisStrings have an element size of 1.

    If you need to know if it is UTF8, those have a particular code page.

    Or have I misunderstood something?

  4. Capt. Max Says:

    Fulcrum? It reminds me of the Mig-29. A decent, but not successful airplane. One of the "best airplane to protect your control tower" category. And because the much more powerful Su-27 Flanker was available also. Good luck. Hope it won’t be "the best IDE to write applications for your own computer".

  5. Allen Bauer Says:

    @Capt.

    Fulcrum: the pivot about which a lever turns.

    It’s about leveraging the existing product and codebase.

  6. Mason Wheeler Says:

    Glad to see you’re shedding this for Fulcrum. I can already hear the rejoicings from Andreas Hausladen… ;)

  7. Michael Says:

    May I assume that you won’t release any further updates for D2009/D0201 which have this directive dropped out of source/binary, correct?

    Michael

  8. Fabricio Says:

    @Michael and @Allen:
    It would be nice to have the choice - an optional service pack/hotfix to remove STRINGCHECKS of rtl/vcl to D2010, at least.

  9. Anders E. Andersen Says:

    Cross compilation for Mac and Linux? Please elaborate.

    Also, 64bit when?

  10. Michael Says:

    LOL,

    just noticed I’ve written D0201 - should read D2010 of course ;-)

  11. PhiS Says:

    Excellent!

  12. Arvid Winkelsdorf Says:

    Hi Allen,

    that’s a good and wise decision not to keep those intermediate adjustments. They just did what they had been needed for, as long as needed.

    Cheers,
    Arvid

  13. Luigi D. Sandon Says:

    I second the proposal to deliver an optional RTL - at least dcu if non packages, compiled with stringchecks disabled - for those needing high string perfomance.

  14. Remko Says:

    Does this mean we will not see x64 in Fulcrum?

  15. chuangccc Says:

    Canada goose jackets give every men a variety to choose from.canada goose jackets sale And this Canada goose jacket can be the classic ones in Canada goose series jackets. Quilted down jacket in navy Concealable hood zips into collar Two way zip Stripe quilted panels at shoulders and sides Felted logo patch and tricolor stripes at upper arm.moncler jackets cheap Zip pockets at waist ruched elastic snap tab sleeve cuffs Drawstring hem Tone on tone stitching. If you know anything about fashion or with a method, you can buy everything jeans and goose down coats.Welcome to my local community.Now we supply plenty of attractive cheap Canada Goose Guys in a assortment shades and distinct designs to make you appreciate online shop.All of them will provide you much more charming and personality searching.

  16. Chris Chiesa Says:

    Personally I would have liked to have seen UnicodeString::t_str() continue to return const char*, because I just today installed a version of C++Builder newer than C++Builder 6 (circa 2002) and have never worked with Unicode strings before and am having a HELL of a time figuring out how to transfer strings back and forth among APIs that each want a different type: the Caption property of a VCL component now is a UnicodeString, and I need to pass its content to the Perl-Compatible Regular Expression engine which (as far as I know) still uses char*. This was easy with AnsiStrings that used char* under the hood, but how do I do it NOW?

  17. website outsource Says:

    I have hunting it for a long time. So happy I got it today. I hope that our owners can share more good things with us.

  18. phone number lookup Says:

    What was presented in this article has forced me to reconsider and redefine my viewpoints. This can only be a good thing.

  19. Web hosting forum Says:

    Really its very informative concept,thanks a lot for sharing this good article..

  20. ralph lauren paris Says:

    Parfois, je voudrais croire que les gens d’aujourd’hui serait tout simplement obtenir un mode de vie et de réaliser combien stupide qu’ils apparaissent. Je suppose, pourquoi êtes-vous actuellement le spamming, est-il un moyen de piratage ou de quelque chose. Juste cesser, s’il vous plaît, je préfère étudier d’autres personnes opinions trop tu sais. en tout cas, excellente publication. simplement se débarrasser en le spam s’il vous plaît. merci.

  21. Audience Response System Rental Says:

    Every time I see a really good article I do one of three thing:1.Share it with my relevant friends.2.save it in all of the favorite bookmarking websites.3.Be sure to return to the site where I came accross the post.After reading this article I’m really thinking of doing all 3!

Leave a Comment

Server Response from: BLOGS1