[webkit-dev] Custom String class over STL string class

Darin Adler darin at apple.com
Tue Jan 13 09:21:11 PST 2009

On Jan 12, 2009, at 4:53 PM, wei wang wrote:

> WebKit uses its own string classes instead of using STL string, I  
> would like to ask why you want to implement your own string classes?  
> Although webkit uses UTF-16 internally, we can also implement our  
> own string traits to manipulate UTF-16 char using STL string.
> What is your driving force? Are there some advantages of own string  
> classes over STL string? Thank you.

I think you're asking this question backwards given the history of  

Originally, WebKit was started from the KHTML and KJS projects. Those  
projects had multiple string classes in their code:

     QString, the Qt string class
     DOMString, used in the HTML DOM
     KJS::UString, used in the JavaScript interpreter

Over time, we've simplified these, eliminated QString, and are still  
trying to reduce the number of classes.

If your question is, "Why don't we switch to std::string?", then the  
burden of proof goes in the other direction. The burden is on the  
person proposing the switch.

The various string classes have many features that std::string does  
not have, but it's not as if someone has done this analysis and has a  
list of them on hand. I can think of four differences quickl:

     WebCore::String is immutable, std::string is not
     WebCore::String stores a hash code to make it efficient to use  
the string repeatedly as a hash table key
     WebCore::String stores only a length, not a capacity, so is  
smaller than a string class that also stores a capacity for efficient  
     WebCore::String uses high-speed single-thread reference counting

But I'm not sure these are the most important differences; there may  
be other more critical ones. Since std::string is part of the standard  
library, it's implementation and quality of implementation are likely  
to be different on different platforms.

     -- Darin

More information about the webkit-dev mailing list