[webkit-dev] some WebCore::String plans
Geoffrey Garen
ggaren at apple.com
Tue Dec 18 10:56:11 PST 2007
Sounds good.
Would you suggest the same kinds of changes to KJS::UString?
Geoff
On Dec 18, 2007, at 10:51 AM, Darin Adler 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.webkit.org/pipermail/webkit-dev/attachments/20071218/4f5142cd/attachment.html
More information about the webkit-dev
mailing list