![]() |
Smalltalk/X WebserverDocumentation of class 'ImmutableString': |
|||||
|
Class: ImmutableStringInheritance:Object | +--Collection | +--SequenceableCollection | +--ArrayedCollection | +--UninterpretedBytes | +--CharacterArray | +--String | +--ImmutableString | +--MIMETypes::MIMEType
Description:By default, string literals in smalltalk are mutable objects. That may lead to some subtle (and hard to find errors), if some method passes a string constant as argument to someone else, who changes the string using at:put: like messages. Since the string object is kept in the first methods literals, the string constant has now been changed without having the method's sourcecode reflect this. Thus, the method will behave differently from what its source may make you think. To help finding this kind of 'feature/bug', the compiler can be configured to create instances of this ImmutableString instead of Strings for literals. Instances of ImmutableString catch storing accesses and enter the debugger. Although useful, this feature is disabled by default for compatibility to other smalltalk implementations. (Also, if turned on, this makes inspecting string literals entered in a workspace somewhat strange: you cannot modify it any longer). Turn the ImmutableString feature on by setting the Parsers class variable 'StringsAreImmutable' to true or use the new launchers settings menu. This class should be used only by the compiler. ATTENTION: there may be still code around which checks for explicit class being String (both in Smalltalk and in primitive code). All code like foo 'class == String' or '__isString()' will not work with ImmutableStrings. Use '__isStringLike()' instead. A somewhat better approach would be to either add a flag to the object (mutability) and check this dynamically (expensive) or to place immutable objects into a readonly memory segment (the good solution). We will eventually implement the second in the future... Related information:ImmutableArray Parser Scanner Class protocol:queries
Instance protocol:accessing
|
|||||
|
ST/X 7.2.0.0; WebServer 1.670 at bd0aa1f87cdd.unknown:8081; Wed, 06 Dec 2023 03:48:48 GMT
|