[webkit-dev] some WebCore::String plans

Marvin Decker marv.decker at gmail.com
Wed Dec 19 12:53:11 PST 2007

This sounds good. Are there any plan to replace DeprecatedString with String
when this is complete? It would make a big difference.


On 12/18/07, Darin Adler <darin at apple.com> wrote:
> The WebCore::String class needs some work. I have some plans to improve
> it. Here's an outline of what I have in mind.
>  *immutability*
> - eliminate all non-const functions from StringImpl; fixes tricky sharing
> semantics
> - change all uses of const StringImpl* to just plain StringImpl* because
> there will no longer be any real difference between these types
> - then, once RefCounted is made thread-safe, then we could remove the
> copy() function altogether, since the only reason to use it would be thread
> safety
> *ownership*
> - change functions that return StringImpl* to return
> PassRefPtr<StringImpl> instead, if they sometimes make a new object; makes
> it harder to accidentally leak
> - change functions that take StringImpl* to take PassRefPtr<StringImpl>
> instead if they take ownership; can reduce reference count churn
>  - make a release() function on String that returns a
> PassRefPtr<StringImpl>; can reduce reference count churn
> *clarity*
> - eliminate functions that return a StringImpl* from StringImpl, because
> it's to easy to misunderstand and think these modify the string in place
> - eliminate functions that return a String from String -- also easy to use
> wrong for the same reasons
> *performance*
> - change TextStream into a class named StringBuilder for clients that are
> building up strings (name inspired by Java); it will have get() and
> release() functions that will return PassRefPtr<StringImpl>
> - add functions that take a PassRefPtr<StringImpl> and return a
> PassRefPtr<StringImpl> for many string operations, since those can optimize
> the "only one reference" case and re-use the same character buffer; change
> the String class to use those as appropriate
> - rename the String::impl() function to String::get() to match other
> RefPtr classes
> - consider eliminating String and using RefPtr<StringImpl> at most or all
> call sites
> - consider changing call sites that take a const String& to instead take
> StringImpl* or PassRefPtr<StringImpl>
> *names*
> - rename StringImpl to SharedString
> - consider renaming WebCore::String to StringRefPtr since it's a
> lightweight wrapper around a RefPtr; one benefit is that it would allow us
> to eliminate the header name PlatformString.h
> These plans are still a bit rough. Please let me know what you think.
> Depending on what feedback I get, I might make a Wiki page about this.
> Some of this I will do soon. Some of it is longer-term.
>     -- Darin
> _______________________________________________
> webkit-dev mailing list
> webkit-dev at lists.webkit.org
> http://lists.webkit.org/mailman/listinfo/webkit-dev

Best Regards,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.webkit.org/pipermail/webkit-dev/attachments/20071219/dc3f90b3/attachment.html

More information about the webkit-dev mailing list