[webkit-dev] some WebCore::String plans
Darin Adler
darin at apple.com
Tue Dec 18 10:51:29 PST 2007
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.webkit.org/pipermail/webkit-dev/attachments/20071218/d37dce41/attachment.html
More information about the webkit-dev
mailing list