<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://dev.eiffel.com/index.php?action=history&amp;feed=atom&amp;title=Immutable_Strings</id>
		<title>Immutable Strings - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://dev.eiffel.com/index.php?action=history&amp;feed=atom&amp;title=Immutable_Strings"/>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Immutable_Strings&amp;action=history"/>
		<updated>2026-06-25T06:32:26Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.24.1</generator>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Immutable_Strings&amp;diff=8296&amp;oldid=prev</id>
		<title>Paulb at 19:21, 25 April 2007</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Immutable_Strings&amp;diff=8296&amp;oldid=prev"/>
				<updated>2007-04-25T19:21:01Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&#039;diff diff-contentalign-left&#039;&gt;
				&lt;col class=&#039;diff-marker&#039; /&gt;
				&lt;col class=&#039;diff-content&#039; /&gt;
				&lt;col class=&#039;diff-marker&#039; /&gt;
				&lt;col class=&#039;diff-content&#039; /&gt;
				&lt;tr style=&#039;vertical-align: top;&#039;&gt;
				&lt;td colspan=&#039;2&#039; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&#039;2&#039; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 19:21, 25 April 2007&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 41:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 41:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Immutable Interfaces===&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Immutable Interfaces===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A second rationale is through good design of a class&amp;#039;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;s &lt;/del&gt;exported interface. A good design will yield immutable exported members, so as not to seemingly violate such principles of object orientation. I wrote &amp;quot;seemingly&amp;quot; violate, because technically such principles are not violated. The principle in reference is one that states - a class, and its descendants, should be the only entities to modify a respective runtime instantiation&amp;#039;s internal state. No client should be permitted to perform such modifications. Technically STRING is a reference type so a qualified call, like append, made on a STRING object, is modifying the internal state of that STRING object. However STRING has special reverence that binds it with the likes of INTEGER, NATURAL and CHARACTER. It&amp;#039;s an inbuilt rudimentary type that is seen to be &amp;quot;a value&amp;quot;. Almost all other reference types are just objects and runtime with no real discernible value.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A second rationale is through good design of a class&amp;#039; exported interface. A good design will yield immutable exported members, so as not to seemingly violate such principles of object orientation. I wrote &amp;quot;seemingly&amp;quot; violate, because technically such principles are not violated. The principle in reference is one that states - a class, and its descendants, should be the only entities to modify a respective runtime instantiation&amp;#039;s internal state. No client should be permitted to perform such modifications. Technically STRING is a reference type so a qualified call, like append, made on a STRING object, is modifying the internal state of that STRING object. However STRING has special reverence that binds it with the likes of INTEGER, NATURAL and CHARACTER. It&amp;#039;s an inbuilt rudimentary type that is seen to be &amp;quot;a value&amp;quot;. Almost all other reference types are just objects and runtime with no real discernible value.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Current EiffelBase abstraction enabled authoring of immutable exported client interfaces, yet allow resident routines to manipulate the internals of an object&amp;#039;s state.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Current EiffelBase abstraction enabled authoring of immutable exported client interfaces, yet allow resident routines to manipulate the internals of an object&amp;#039;s state.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Paulb</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Immutable_Strings&amp;diff=8188&amp;oldid=prev</id>
		<title>Peter gummer: /* Is There a Need for STRING_8 and STRING_32? */</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Immutable_Strings&amp;diff=8188&amp;oldid=prev"/>
				<updated>2007-04-19T03:50:44Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Is There a Need for STRING_8 and STRING_32?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&#039;diff diff-contentalign-left&#039;&gt;
				&lt;col class=&#039;diff-marker&#039; /&gt;
				&lt;col class=&#039;diff-content&#039; /&gt;
				&lt;col class=&#039;diff-marker&#039; /&gt;
				&lt;col class=&#039;diff-content&#039; /&gt;
				&lt;tr style=&#039;vertical-align: top;&#039;&gt;
				&lt;td colspan=&#039;2&#039; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&#039;2&#039; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 03:50, 19 April 2007&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 138:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 138:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;So many other languages have chosen to use an immutable string as their fundamental string type. For optimization in creating new strings or piecing parts of strings together a string builder is used. Under .NET there is the immutable &amp;lt;code&amp;gt;[csharp, n]System.String&amp;lt;/code&amp;gt; and optimized builder &amp;lt;code&amp;gt;[csharp, n]System.Text.StringBuilder&amp;lt;/code&amp;gt;. In Java the exact same story; &amp;lt;code&amp;gt;[java, n]String&amp;lt;/code&amp;gt; is an immutable string and &amp;lt;code&amp;gt;[java, n]StringBuffer&amp;lt;/code&amp;gt; is used to optimally create immutable strings.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;So many other languages have chosen to use an immutable string as their fundamental string type. For optimization in creating new strings or piecing parts of strings together a string builder is used. Under .NET there is the immutable &amp;lt;code&amp;gt;[csharp, n]System.String&amp;lt;/code&amp;gt; and optimized builder &amp;lt;code&amp;gt;[csharp, n]System.Text.StringBuilder&amp;lt;/code&amp;gt;. In Java the exact same story; &amp;lt;code&amp;gt;[java, n]String&amp;lt;/code&amp;gt; is an immutable string and &amp;lt;code&amp;gt;[java, n]StringBuffer&amp;lt;/code&amp;gt; is used to optimally create immutable strings.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Yes, choosing such a option would break existing code. But we have to respect that trying to patch rather than change, often causes more problems &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;that &lt;/del&gt;breaking code. With code breaking changes there should always be assistants available to help &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;user &lt;/del&gt;migrate.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Yes, choosing such a option would break existing code. But we have to respect that trying to patch rather than change, often causes more problems &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;than &lt;/ins&gt;breaking code. With code breaking changes there should always be assistants available to help &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;users &lt;/ins&gt;migrate.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A simple first step is to change all &amp;lt;code&amp;gt;[eiffel, n]STRING_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_32&amp;lt;/code&amp;gt; into &amp;lt;code&amp;gt;[eiffel, n]STRING_BUILDER_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_BUILDER_32&amp;lt;/code&amp;gt;, or indeed a unified &amp;lt;code&amp;gt;[eiffel, n]STRING_BUILDER&amp;lt;/code&amp;gt; for manipulating any sized string. The breaking changes can be minimized and all future use of &amp;lt;code&amp;gt;[eiffel, n]STRING_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_32&amp;lt;/code&amp;gt; are known to be immutable. Very little existing code explicit uses &amp;lt;code&amp;gt;[eiffel, n]STRING_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_32&amp;lt;/code&amp;gt;; almost all existing code uses &amp;lt;code&amp;gt;[eiffel, n]STRING&amp;lt;/code&amp;gt;; but &amp;lt;code&amp;gt;[eiffel, n]STRING&amp;lt;/code&amp;gt; doesn&amp;#039;t really exist any more, so mapping it to string builder(s) should be easy.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A simple first step is to change all &amp;lt;code&amp;gt;[eiffel, n]STRING_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_32&amp;lt;/code&amp;gt; into &amp;lt;code&amp;gt;[eiffel, n]STRING_BUILDER_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_BUILDER_32&amp;lt;/code&amp;gt;, or indeed a unified &amp;lt;code&amp;gt;[eiffel, n]STRING_BUILDER&amp;lt;/code&amp;gt; for manipulating any sized string. The breaking changes can be minimized and all future use of &amp;lt;code&amp;gt;[eiffel, n]STRING_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_32&amp;lt;/code&amp;gt; are known to be immutable. Very little existing code explicit uses &amp;lt;code&amp;gt;[eiffel, n]STRING_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_32&amp;lt;/code&amp;gt;; almost all existing code uses &amp;lt;code&amp;gt;[eiffel, n]STRING&amp;lt;/code&amp;gt;; but &amp;lt;code&amp;gt;[eiffel, n]STRING&amp;lt;/code&amp;gt; doesn&amp;#039;t really exist any more, so mapping it to string builder(s) should be easy.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Should Eiffel follow suit and deprecate the existing implementation of &amp;lt;code&amp;gt;[eiffel, n]STRING_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_32&amp;lt;/code&amp;gt;, in order to favor immutable strings and string builder(s)?&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Should Eiffel follow suit and deprecate the existing implementation of &amp;lt;code&amp;gt;[eiffel, n]STRING_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_32&amp;lt;/code&amp;gt;, in order to favor immutable strings and string builder(s)?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Peter gummer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Immutable_Strings&amp;diff=8187&amp;oldid=prev</id>
		<title>Peter gummer: /* Is There a Need to STRING_8 and STRING_32 */</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Immutable_Strings&amp;diff=8187&amp;oldid=prev"/>
				<updated>2007-04-19T03:48:22Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Is There a Need to STRING_8 and STRING_32&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&#039;diff diff-contentalign-left&#039;&gt;
				&lt;col class=&#039;diff-marker&#039; /&gt;
				&lt;col class=&#039;diff-content&#039; /&gt;
				&lt;col class=&#039;diff-marker&#039; /&gt;
				&lt;col class=&#039;diff-content&#039; /&gt;
				&lt;tr style=&#039;vertical-align: top;&#039;&gt;
				&lt;td colspan=&#039;2&#039; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&#039;2&#039; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 03:48, 19 April 2007&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 133:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 133:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;[eiffel, n]ABSTRACT_STRING&amp;lt;/code&amp;gt; should contain a number of the routines moved up to &amp;lt;code&amp;gt;[eiffel, n]STRING_GENERAL&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;[eiffel, n]STRING_GENERAL&amp;lt;/code&amp;gt; will henceforth derive from &amp;lt;code&amp;gt;[eiffel, n]ABSTRACT_STRING&amp;lt;/code&amp;gt;. The routines that will not be resident in &amp;lt;code&amp;gt;[eiffel, n]ABSTRACT_STRING&amp;lt;/code&amp;gt; will be anything pertaining to mutating the internal representation.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;[eiffel, n]ABSTRACT_STRING&amp;lt;/code&amp;gt; should contain a number of the routines moved up to &amp;lt;code&amp;gt;[eiffel, n]STRING_GENERAL&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;[eiffel, n]STRING_GENERAL&amp;lt;/code&amp;gt; will henceforth derive from &amp;lt;code&amp;gt;[eiffel, n]ABSTRACT_STRING&amp;lt;/code&amp;gt;. The routines that will not be resident in &amp;lt;code&amp;gt;[eiffel, n]ABSTRACT_STRING&amp;lt;/code&amp;gt; will be anything pertaining to mutating the internal representation.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Is There a Need &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;to &lt;/del&gt;STRING_8 and STRING_32==&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Is There a Need &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;for &lt;/ins&gt;STRING_8 and STRING_32&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;?&lt;/ins&gt;==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Of course in outlining such a proposal you have to ask the relevance of &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;augments&lt;/del&gt;/patching (it depends on your views) Eiffel with immutable strings. Should Eiffel just have immutable strings? It&amp;#039;s been discussed that there should be mutable and immutable variants of &amp;lt;code&amp;gt;[eiffel, n]STRING&amp;lt;/code&amp;gt;. Deviating from this a moment and looking at the best possible scenario for implementing immutable strings - make mutable strings a thing of the past!&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Of course in outlining such a proposal you have to ask the relevance of &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;augmenting&lt;/ins&gt;/patching (it depends on your views) Eiffel with immutable strings. Should Eiffel just have immutable strings? It&amp;#039;s been discussed that there should be mutable and immutable variants of &amp;lt;code&amp;gt;[eiffel, n]STRING&amp;lt;/code&amp;gt;. Deviating from this a moment and looking at the best possible scenario for implementing immutable strings - make mutable strings a thing of the past!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;So many other languages have chosen to use &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;a &lt;/del&gt;immutable string as their fundamental string type. For optimization in creating new strings or piecing parts of strings together a string builder is used. Under .NET there is the immutable &amp;lt;code&amp;gt;[csharp, n]System.String&amp;lt;/code&amp;gt; and optimized builder &amp;lt;code&amp;gt;[csharp, n]System.Text.StringBuilder&amp;lt;/code&amp;gt;. In Java the exact same story; &amp;lt;code&amp;gt;[java, n]String&amp;lt;/code&amp;gt; is an immutable string and &amp;lt;code&amp;gt;[java, n]StringBuffer&amp;lt;/code&amp;gt; is used to optimally create immutable strings.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;So many other languages have chosen to use &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;an &lt;/ins&gt;immutable string as their fundamental string type. For optimization in creating new strings or piecing parts of strings together a string builder is used. Under .NET there is the immutable &amp;lt;code&amp;gt;[csharp, n]System.String&amp;lt;/code&amp;gt; and optimized builder &amp;lt;code&amp;gt;[csharp, n]System.Text.StringBuilder&amp;lt;/code&amp;gt;. In Java the exact same story; &amp;lt;code&amp;gt;[java, n]String&amp;lt;/code&amp;gt; is an immutable string and &amp;lt;code&amp;gt;[java, n]StringBuffer&amp;lt;/code&amp;gt; is used to optimally create immutable strings.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Yes, choosing such a option would break existing code. But we have to respect that trying to patch rather than change, often causes more problems that breaking code. With code breaking changes there should always be assistants available to help user migrate.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Yes, choosing such a option would break existing code. But we have to respect that trying to patch rather than change, often causes more problems that breaking code. With code breaking changes there should always be assistants available to help user migrate.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;As &lt;/del&gt;simple first step is to change all &amp;lt;code&amp;gt;[eiffel, n]STRING_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_32&amp;lt;/code&amp;gt; into &amp;lt;code&amp;gt;[eiffel, n]STRING_BUILDER_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_BUILDER_32&amp;lt;/code&amp;gt;, or indeed a unified &amp;lt;code&amp;gt;[eiffel, n]STRING_BUILDER&amp;lt;/code&amp;gt; for manipulating any sized string. The breaking changes can be minimized and all future use of &amp;lt;code&amp;gt;[eiffel, n]STRING_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_32&amp;lt;/code&amp;gt; are known to be immutable.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;A &lt;/ins&gt;simple first step is to change all &amp;lt;code&amp;gt;[eiffel, n]STRING_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_32&amp;lt;/code&amp;gt; into &amp;lt;code&amp;gt;[eiffel, n]STRING_BUILDER_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_BUILDER_32&amp;lt;/code&amp;gt;, or indeed a unified &amp;lt;code&amp;gt;[eiffel, n]STRING_BUILDER&amp;lt;/code&amp;gt; for manipulating any sized string. The breaking changes can be minimized and all future use of &amp;lt;code&amp;gt;[eiffel, n]STRING_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_32&amp;lt;/code&amp;gt; are known to be immutable&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;. Very little existing code explicit uses &amp;lt;code&amp;gt;[eiffel, n]STRING_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_32&amp;lt;/code&amp;gt;; almost all existing code uses &amp;lt;code&amp;gt;[eiffel, n]STRING&amp;lt;/code&amp;gt;; but &amp;lt;code&amp;gt;[eiffel, n]STRING&amp;lt;/code&amp;gt; doesn&amp;#039;t really exist any more, so mapping it to string builder(s) should be easy&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Should Eiffel follow suit and &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;depreciate &lt;/del&gt;the existing implementation of &amp;lt;code&amp;gt;[eiffel, n]STRING_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_32&amp;lt;/code&amp;gt;, in order to favor immutable strings and string builder(s)?&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Should Eiffel follow suit and &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;deprecate &lt;/ins&gt;the existing implementation of &amp;lt;code&amp;gt;[eiffel, n]STRING_8&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[eiffel, n]STRING_32&amp;lt;/code&amp;gt;, in order to favor immutable strings and string builder(s)?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Peter gummer</name></author>	</entry>

<tr><td colspan="2" class="diff-lineno"><!--LINE 71--></td>
<td colspan="2" class="diff-lineno"><!--LINE 71--></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'></td><td class='diff-marker'>&#160;</td><td class='diff-context'></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'><div>==Compatibility==</div></td><td class='diff-marker'>&#160;</td><td class='diff-context'><div>==Compatibility==</div></td></tr>
<tr><td class='diff-marker'>−</td><td class='diff-deletedline'><div>Before any <del class="diffchange diffchange-inline">indicate </del>of how mutable and immutable strings <del class="diffchange diffchange-inline">interacte </del>there<del class="diffchange diffchange-inline">&#039;s </del>needs to be a brief rundown of the possible ways they can interact. There<del class="diffchange diffchange-inline">&#039;s </del>two schools of thought; Conformance or Conversion.</div></td><td class='diff-marker'>+</td><td class='diff-addedline'><div>Before any <ins class="diffchange diffchange-inline">indication </ins>of how mutable and immutable strings <ins class="diffchange diffchange-inline">interact, </ins>there needs to be a brief rundown of the possible ways they can interact. There <ins class="diffchange diffchange-inline">are </ins>two schools of thought; Conformance or Conversion.</div></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'></td><td class='diff-marker'>&#160;</td><td class='diff-context'></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'><div>===Conformance or Conversion===</div></td><td class='diff-marker'>&#160;</td><td class='diff-context'><div>===Conformance or Conversion===</div></td></tr>
<tr><td colspan="2" class="diff-lineno"><!--LINE 80--></td>
<td colspan="2" class="diff-lineno"><!--LINE 80--></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'><div>===Examples===</div></td><td class='diff-marker'>&#160;</td><td class='diff-context'><div>===Examples===</div></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'></td><td class='diff-marker'>&#160;</td><td class='diff-context'></td></tr>
<tr><td class='diff-marker'>−</td><td class='diff-deletedline'><div>For the purpose of illustration the following declarations will be used. &lt;code&gt;[eiffel, n]IMMUTABLE_STRING_8&lt;/code&gt; is being introduced as a place holder for <del class="diffchange diffchange-inline">a </del>immutable variant of the current mutable &lt;code&gt;[eiffel, n]STRING_8&lt;/code&gt; class.</div></td><td class='diff-marker'>+</td><td class='diff-addedline'><div>For the purpose of illustration the following declarations will be used. &lt;code&gt;[eiffel, n]IMMUTABLE_STRING_8&lt;/code&gt; is being introduced as a place holder for <ins class="diffchange diffchange-inline">an </ins>immutable variant of the current mutable &lt;code&gt;[eiffel, n]STRING_8&lt;/code&gt; class.</div></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'></td><td class='diff-marker'>&#160;</td><td class='diff-context'></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'><div>&lt;code&gt;[eiffel]</div></td><td class='diff-marker'>&#160;</td><td class='diff-context'><div>&lt;code&gt;[eiffel]</div></td></tr>
<tr><td colspan="2" class="diff-lineno"><!--LINE 97--></td>
<td colspan="2" class="diff-lineno"><!--LINE 97--></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'><div>&lt;/code&gt;</div></td><td class='diff-marker'>&#160;</td><td class='diff-context'><div>&lt;/code&gt;</div></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'></td><td class='diff-marker'>&#160;</td><td class='diff-context'></td></tr>
<tr><td class='diff-marker'>−</td><td class='diff-deletedline'><div>In case &#039;&#039;&#039;1&#039;&#039;&#039; the compiler should recognize the assignment and create a &lt;code&gt;[eiffel]STRING_8&lt;/code&gt; using the manifest string. No immutable string should be created. Case &#039;&#039;&#039;2&#039;&#039;&#039; is effectively the same as case &#039;&#039;&#039;1&#039;&#039;&#039;, just more explicit. Case &#039;&#039;&#039;3&#039;&#039;&#039; introduces the immutable string. In this case the compiler should reject the call. Immutable strings cannot become mutable. If the conforming option for <del class="diffchange diffchange-inline">implement </del>were to be chosen then &lt;code&gt;[eiffel]ms1&lt;/code&gt; would be set to &lt;code&gt;[eiffel]Void&lt;/code&gt;. An immutable string has been created and it does not conform to &lt;code&gt;[eiffel]STRING_8&lt;/code&gt;. Finally case &#039;&#039;&#039;4&#039;&#039;&#039; leaves room for explanation. In a world of Eiffel immutable strings a once string should behave in the same manner as case &#039;&#039;&#039;3&#039;&#039;&#039;. Currently it behaves like cases &#039;&#039;&#039;1&#039;&#039;&#039; and &#039;&#039;&#039;2&#039;&#039;&#039;.</div></td><td class='diff-marker'>+</td><td class='diff-addedline'><div>In case &#039;&#039;&#039;1&#039;&#039;&#039; the compiler should recognize the assignment and create a &lt;code&gt;[eiffel]STRING_8&lt;/code&gt; using the manifest string. No immutable string should be created. Case &#039;&#039;&#039;2&#039;&#039;&#039; is effectively the same as case &#039;&#039;&#039;1&#039;&#039;&#039;, just more explicit. Case &#039;&#039;&#039;3&#039;&#039;&#039; introduces the immutable string. In this case the compiler should reject the call. Immutable strings cannot become mutable. If the conforming option for <ins class="diffchange diffchange-inline">implementation </ins>were to be chosen then &lt;code&gt;[eiffel]ms1&lt;/code&gt; would be set to &lt;code&gt;[eiffel]Void&lt;/code&gt;. An immutable string has been created and it does not conform to &lt;code&gt;[eiffel]STRING_8&lt;/code&gt;. Finally case &#039;&#039;&#039;4&#039;&#039;&#039; leaves room for explanation. In a world of Eiffel immutable strings a once string should behave in the same manner as case &#039;&#039;&#039;3&#039;&#039;&#039;. Currently it behaves like cases &#039;&#039;&#039;1&#039;&#039;&#039; and &#039;&#039;&#039;2&#039;&#039;&#039;.</div></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'></td><td class='diff-marker'>&#160;</td><td class='diff-context'></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'><div>&lt;code&gt;[eiffel]</div></td><td class='diff-marker'>&#160;</td><td class='diff-context'><div>&lt;code&gt;[eiffel]</div></td></tr>
<tr><td colspan="2" class="diff-lineno"><!--LINE 126--></td>
<td colspan="2" class="diff-lineno"><!--LINE 126--></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'></td><td class='diff-marker'>&#160;</td><td class='diff-context'></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'><div>====Optimizations====</div></td><td class='diff-marker'>&#160;</td><td class='diff-context'><div>====Optimizations====</div></td></tr>
<tr><td class='diff-marker'>−</td><td class='diff-deletedline'><div>The mutable versions of the string class should convert to, and cache, an immutable variant of a string upon an initial request. Once the mutable string&#039;s content is modified the cached immutable string is <del class="diffchange diffchange-inline">to </del>invalidated. The next request to convert the mutable string to an immutable variant would yield a new immutable string reference.</div></td><td class='diff-marker'>+</td><td class='diff-addedline'><div>The mutable versions of the string class should convert to, and cache, an immutable variant of a string upon an initial request. Once the mutable string&#039;s content is modified the cached immutable string is invalidated. The next request to convert the mutable string to an immutable variant would yield a new immutable string reference.</div></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'></td><td class='diff-marker'>&#160;</td><td class='diff-context'></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'><div>====A Common Ancestor====</div></td><td class='diff-marker'>&#160;</td><td class='diff-context'><div>====A Common Ancestor====</div></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'><div>Just as &lt;code&gt;[eiffel, n]STRING_GENERAL&lt;/code&gt; is available now, a more abstract implementation is required to implement the features available for all string variants. That is; mutable, immutable and 8 and 32 bit versions of each. In the interest of backwards compatibility the use of &lt;code&gt;[eiffel, n]STRING_GENERAL&lt;/code&gt; is not a viable solution. A proposed &lt;code&gt;[eiffel, n]ABSTRACT_STRING&lt;/code&gt; will instead be put forth for the real general purpose string class.</div></td><td class='diff-marker'>&#160;</td><td class='diff-context'><div>Just as &lt;code&gt;[eiffel, n]STRING_GENERAL&lt;/code&gt; is available now, a more abstract implementation is required to implement the features available for all string variants. That is; mutable, immutable and 8 and 32 bit versions of each. In the interest of backwards compatibility the use of &lt;code&gt;[eiffel, n]STRING_GENERAL&lt;/code&gt; is not a viable solution. A proposed &lt;code&gt;[eiffel, n]ABSTRACT_STRING&lt;/code&gt; will instead be put forth for the real general purpose string class.</div></td></tr>
<tr><td class='diff-marker'>&#160;</td><td class='diff-context'></td><td class='diff-marker'>&#160;</td><td class='diff-context'></td></tr>
