<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.liberty-eiffel.org/index.php?action=history&amp;feed=atom&amp;title=External_types</id>
	<title>External types - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.liberty-eiffel.org/index.php?action=history&amp;feed=atom&amp;title=External_types"/>
	<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;action=history"/>
	<updated>2026-04-29T20:51:31Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.0</generator>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=2517&amp;oldid=prev</id>
		<title>Dkearns: s/LibertyEiffel/Liberty Eiffel/</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=2517&amp;oldid=prev"/>
		<updated>2016-07-03T06:50:00Z</updated>

		<summary type="html">&lt;p&gt;s/LibertyEiffel/Liberty Eiffel/&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:50, 3 July 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 37:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 37:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; x = 3.14, c = 6&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; x = 3.14, c = 6&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;−&lt;/td&gt;
  &lt;td style=&quot;color: #202122; 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;= Embedding external types in &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;LibertyEiffel&lt;/del&gt; =&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;+&lt;/td&gt;
  &lt;td style=&quot;color: #202122; 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;= Embedding external types in &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Liberty Eiffel&lt;/ins&gt; =&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;There are currently two competing mechanisms. Their expressivity is roughly the same (when you have one it is easy to emulate the other).&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;There are currently two competing mechanisms. Their expressivity is roughly the same (when you have one it is easy to emulate the other).&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 192:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 192:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Helper functions =&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Helper functions =&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;−&lt;/td&gt;
  &lt;td style=&quot;color: #202122; 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;It must be possible for plugin writer to supply functions to help the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;LibertyEiffel&lt;/del&gt; runtime implement a few of ANY's standard routines: standard_copy, deep_twin, standard_is_equal, deep_is_equal.&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;+&lt;/td&gt;
  &lt;td style=&quot;color: #202122; 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;It must be possible for plugin writer to supply functions to help the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Liberty Eiffel&lt;/ins&gt; runtime implement a few of ANY's standard routines: standard_copy, deep_twin, standard_is_equal, deep_is_equal.&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Optional vs. mandatory helpers ==&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Optional vs. mandatory helpers ==&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Dkearns</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=1962&amp;oldid=prev</id>
		<title>Hzwakenberg at 13:21, 7 September 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=1962&amp;oldid=prev"/>
		<updated>2014-09-07T13:21:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:21, 7 September 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;+&lt;/td&gt;
  &lt;td style=&quot;color: #202122; 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;[[Category: Interfacing]]&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;todo: describe what actually IS implemented and update [[Externals]]&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;todo: describe what actually IS implemented and update [[Externals]]&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Hzwakenberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=1919&amp;oldid=prev</id>
		<title>Hzwakenberg at 19:44, 5 September 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=1919&amp;oldid=prev"/>
		<updated>2014-09-05T19:44:13Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:44, 5 September 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;todo: describe what actually IS implemented and update [[Externals]]&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;todo: describe what actually IS implemented and update [[Externals]]&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;−&lt;/td&gt;
  &lt;td style=&quot;color: #202122; 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;[[Category:Smarteiffel]]&lt;/div&gt;&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty&quot;&gt;&amp;#160;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The syntax will have to be flexible enough to work for any reasonable external language, not just C (e.g. Java). No provision is made for embedding variable-sized external types.&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The syntax will have to be flexible enough to work for any reasonable external language, not just C (e.g. Java). No provision is made for embedding variable-sized external types.&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 37:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 36:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; x = 3.14, c = 6&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; x = 3.14, c = 6&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;−&lt;/td&gt;
  &lt;td style=&quot;color: #202122; 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;= Embedding external types in &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;SmartEiffel&lt;/del&gt; =&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;+&lt;/td&gt;
  &lt;td style=&quot;color: #202122; 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;= Embedding external types in &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;LibertyEiffel&lt;/ins&gt; =&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;There are currently two competing mechanisms. Their expressivity is roughly the same (when you have one it is easy to emulate the other).&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;There are currently two competing mechanisms. Their expressivity is roughly the same (when you have one it is easy to emulate the other).&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 192:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 191:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Helper functions =&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Helper functions =&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;−&lt;/td&gt;
  &lt;td style=&quot;color: #202122; 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;It must be possible for plugin writer to supply functions to help the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;SmartEiffel&lt;/del&gt; runtime implement a few of ANY's standard routines: standard_copy, deep_twin, standard_is_equal, deep_is_equal.&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;+&lt;/td&gt;
  &lt;td style=&quot;color: #202122; 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;It must be possible for plugin writer to supply functions to help the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;LibertyEiffel&lt;/ins&gt; runtime implement a few of ANY's standard routines: standard_copy, deep_twin, standard_is_equal, deep_is_equal.&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Optional vs. mandatory helpers ==&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Optional vs. mandatory helpers ==&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Hzwakenberg</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=1832&amp;oldid=prev</id>
		<title>Ramack at 22:19, 23 May 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=1832&amp;oldid=prev"/>
		<updated>2014-05-23T22:19:22Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:19, 24 May 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;+&lt;/td&gt;
  &lt;td style=&quot;color: #202122; 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;todo: describe what actually IS implemented and update [[Externals]]&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;+&lt;/td&gt;
  &lt;td style=&quot;color: #202122; 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;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Smarteiffel]]&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Smarteiffel]]&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The syntax will have to be flexible enough to work for any reasonable external language, not just C (e.g. Java). No provision is made for embedding variable-sized external types.&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The syntax will have to be flexible enough to work for any reasonable external language, not just C (e.g. Java). No provision is made for embedding variable-sized external types.&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ramack</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=1631&amp;oldid=prev</id>
		<title>Ramack at 21:32, 5 March 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=1631&amp;oldid=prev"/>
		<updated>2013-03-05T21:32:24Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:32, 5 March 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;−&lt;/td&gt;
  &lt;td style=&quot;color: #202122; 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;[[Category:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;SmartEiffel&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;+&lt;/td&gt;
  &lt;td style=&quot;color: #202122; 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;[[Category:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Smarteiffel&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The syntax will have to be flexible enough to work for any reasonable external language, not just C (e.g. Java). No provision is made for embedding variable-sized external types.&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The syntax will have to be flexible enough to work for any reasonable external language, not just C (e.g. Java). No provision is made for embedding variable-sized external types.&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ramack</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=1553&amp;oldid=prev</id>
		<title>Ramack at 20:54, 4 March 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=1553&amp;oldid=prev"/>
		<updated>2013-03-04T20:54:30Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:54, 4 March 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;+&lt;/td&gt;
  &lt;td style=&quot;color: #202122; 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;[[Category:SmartEiffel]]&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The syntax will have to be flexible enough to work for any reasonable external language, not just C (e.g. Java). No provision is made for embedding variable-sized external types.&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The syntax will have to be flexible enough to work for any reasonable external language, not just C (e.g. Java). No provision is made for embedding variable-sized external types.&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&amp;#160;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ramack</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=399&amp;oldid=prev</id>
		<title>Ramack: 36 revisions:&amp;#32;initial import from SamrtEiffel Wiki - The Grand SmartEiffel Book</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=399&amp;oldid=prev"/>
		<updated>2013-03-03T21:04:41Z</updated>

		<summary type="html">&lt;p&gt;36 revisions: initial import from SamrtEiffel Wiki - The Grand SmartEiffel Book&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;The syntax will have to be flexible enough to work for any reasonable external language, not just C (e.g. Java). No provision is made for embedding variable-sized external types.&lt;br /&gt;
&lt;br /&gt;
= The plug-in for the examples =&lt;br /&gt;
For syntactic experiments, we'll assume the following C files are used.&lt;br /&gt;
&lt;br /&gt;
'''my_struct.h''':&lt;br /&gt;
 typedef struct {&lt;br /&gt;
   double x;&lt;br /&gt;
   int c;&lt;br /&gt;
 } my_struct;&lt;br /&gt;
&lt;br /&gt;
'''my_struct.c''':&lt;br /&gt;
 #include &amp;quot;my_struct.h&amp;quot;&lt;br /&gt;
 use (my_struct *x) {&lt;br /&gt;
   x-&amp;gt;x = 3.14;&lt;br /&gt;
 &lt;br /&gt;
   if(x-&amp;gt;c == 0) x-&amp;gt;c = 5;&lt;br /&gt;
   else          x-&amp;gt;c++;&lt;br /&gt;
 &lt;br /&gt;
   printf(&amp;quot;x = %f, c = %d\n&amp;quot;, x-&amp;gt;x, x-&amp;gt;c);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 use_copy (my_struct x) {&lt;br /&gt;
   x.x = 3.14;&lt;br /&gt;
 &lt;br /&gt;
   if(x.c == 0) x.c = 5;&lt;br /&gt;
   else         x.c++;&lt;br /&gt;
 &lt;br /&gt;
   printf(&amp;quot;x = %f, c = %d\n&amp;quot;, x.x, x.c);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The program should print&lt;br /&gt;
 x = 3.14, c = 5&lt;br /&gt;
 x = 3.14, c = 6&lt;br /&gt;
&lt;br /&gt;
= Embedding external types in SmartEiffel =&lt;br /&gt;
There are currently two competing mechanisms. Their expressivity is roughly the same (when you have one it is easy to emulate the other).&lt;br /&gt;
&lt;br /&gt;
== External attributes ==&lt;br /&gt;
The &amp;quot;external&amp;quot; keyword is used as a type name to tell the Eiffel compiler that an attribute should be represented by a user-specified external type. (The precise syntax is not fixed: the attribute may look better with a &amp;quot;plug_in&amp;quot; manifest string or an &amp;quot;is&amp;quot; keyword)&lt;br /&gt;
&lt;br /&gt;
 class SHOW&lt;br /&gt;
 &lt;br /&gt;
 creation&lt;br /&gt;
     make&lt;br /&gt;
 &lt;br /&gt;
 feature&lt;br /&gt;
    make is&lt;br /&gt;
       do&lt;br /&gt;
          use($ext)&lt;br /&gt;
          use_copy(ext)&lt;br /&gt;
       end&lt;br /&gt;
 &lt;br /&gt;
    use (x: POINTER) is&lt;br /&gt;
       external &amp;quot;plug_in&amp;quot;&lt;br /&gt;
       alias &amp;quot;{&lt;br /&gt;
          location: &amp;quot;./&amp;quot;&lt;br /&gt;
          module_name: &amp;quot;struct&amp;quot;&lt;br /&gt;
          feature_name: &amp;quot;use&amp;quot;&lt;br /&gt;
          }&amp;quot;&lt;br /&gt;
       end&lt;br /&gt;
 &lt;br /&gt;
    use_copy (x: like ext) is&lt;br /&gt;
       external &amp;quot;plug_in&amp;quot;&lt;br /&gt;
       alias &amp;quot;{&lt;br /&gt;
          location: &amp;quot;./&amp;quot;&lt;br /&gt;
          module_name: &amp;quot;struct&amp;quot;&lt;br /&gt;
          feature_name: &amp;quot;use_copy&amp;quot;&lt;br /&gt;
          }&amp;quot;&lt;br /&gt;
       end&lt;br /&gt;
 &lt;br /&gt;
    ext: external&lt;br /&gt;
       alias &amp;quot;{&lt;br /&gt;
          location: &amp;quot;./&amp;quot;&lt;br /&gt;
          module_name: &amp;quot;struct&amp;quot;&lt;br /&gt;
          attribute_type: &amp;quot;my_struct&amp;quot;&lt;br /&gt;
          }&amp;quot;&lt;br /&gt;
       end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== External classes ==&lt;br /&gt;
A special marker is used to tell the Eiffel compile that a class should be represented by a user-specified external type. Methods of that class can be implemented by passing Current as a parameter to external routines. Whether Current is passed by copy or by reference could be determined by the reference/expanded status of the external class.&lt;br /&gt;
&lt;br /&gt;
Issues:&lt;br /&gt;
* Forces the programmer to write one class for each external type they want to wrap&lt;br /&gt;
&lt;br /&gt;
 expanded class SHOW&lt;br /&gt;
 &lt;br /&gt;
 external &amp;quot;plug_in&amp;quot;&lt;br /&gt;
    alias &amp;quot;{&lt;br /&gt;
       location: &amp;quot;./&amp;quot;&lt;br /&gt;
       module_name: &amp;quot;struct&amp;quot;&lt;br /&gt;
       attribute_type: &amp;quot;my_struct&amp;quot;&lt;br /&gt;
       }&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 creation&lt;br /&gt;
     make&lt;br /&gt;
 &lt;br /&gt;
 feature&lt;br /&gt;
     make is&lt;br /&gt;
         do&lt;br /&gt;
             -- Memory is zeroed, so we probably don't need to initialize x and&lt;br /&gt;
             -- c. If we do, we'll have to call a C function to do it.&lt;br /&gt;
             use($Current)&lt;br /&gt;
             use_copy(Current)&lt;br /&gt;
         end&lt;br /&gt;
 &lt;br /&gt;
     use (x: POINTER) is&lt;br /&gt;
         external &amp;quot;plug_in&amp;quot;&lt;br /&gt;
         alias &amp;quot;{&lt;br /&gt;
             location: &amp;quot;./&amp;quot;&lt;br /&gt;
             module_name: &amp;quot;struct&amp;quot;&lt;br /&gt;
             feature_name: &amp;quot;use&amp;quot;&lt;br /&gt;
             }&amp;quot;&lt;br /&gt;
         end&lt;br /&gt;
 &lt;br /&gt;
    use_copy (x: like Current) is&lt;br /&gt;
       external &amp;quot;plug_in&amp;quot;&lt;br /&gt;
       alias &amp;quot;{&lt;br /&gt;
          location: &amp;quot;./&amp;quot;&lt;br /&gt;
          module_name: &amp;quot;struct&amp;quot;&lt;br /&gt;
          feature_name: &amp;quot;use_copy&amp;quot;&lt;br /&gt;
          }&amp;quot;&lt;br /&gt;
       end&lt;br /&gt;
 &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
Two variants (along with possible hybrids)&lt;br /&gt;
&lt;br /&gt;
=== Living at the edge of the Eiffel world ===&lt;br /&gt;
* External classes always insert exactly ANY (and don't inherit from anything)&lt;br /&gt;
* they can't be inherited from (and probably not inserted either)&lt;br /&gt;
* they can't have ordinary Eiffel attributes.&lt;br /&gt;
&lt;br /&gt;
=== Ordinary Eiffel citizens ===&lt;br /&gt;
* External classes can have Eiffel attributes&lt;br /&gt;
* External classes can be inherited from and inserted&lt;br /&gt;
* External classes ca, inherit from or insert other classes&lt;br /&gt;
&lt;br /&gt;
Likely to result in a very unclean implementation (need either to reorder the struct so that the external part is at the beginning, or to represent references to such objects as pointers 'into' the object (rather than to its head), or to mess with the pointer when passing it to the C world). Even more mess likely in case of multiple external parents.&lt;br /&gt;
&lt;br /&gt;
== Inline external classes ==&lt;br /&gt;
Ok, so there are actually three mechanisms, but this one is hybrid between the previous two (give the external attribute an Eiffel type that doesn't need to be defined anywhere else)&lt;br /&gt;
&lt;br /&gt;
With this approach we can even allow this type for external features, which would solve the pass-by-value/reference question: do a copy or use a pointer to it.&lt;br /&gt;
&lt;br /&gt;
Issues:&lt;br /&gt;
* What is the scope of such a type? Only visible in the class it is written in? Are two external types with the same &amp;quot;name&amp;quot; in different classes the same?&lt;br /&gt;
&lt;br /&gt;
 class SHOW&lt;br /&gt;
 creation&lt;br /&gt;
    make&lt;br /&gt;
 &lt;br /&gt;
 feature&lt;br /&gt;
    make is&lt;br /&gt;
       do&lt;br /&gt;
          use($ext)&lt;br /&gt;
          copy_use(ext)&lt;br /&gt;
       end&lt;br /&gt;
 &lt;br /&gt;
    use (x: POINTER) is&lt;br /&gt;
       external &amp;quot;plug_in&amp;quot;&lt;br /&gt;
       alias &amp;quot;{&lt;br /&gt;
          location: &amp;quot;./&amp;quot;&lt;br /&gt;
          module_name: &amp;quot;struct&amp;quot;&lt;br /&gt;
          feature_name: &amp;quot;use&amp;quot;&lt;br /&gt;
          }&amp;quot;&lt;br /&gt;
       end&lt;br /&gt;
 &lt;br /&gt;
   use_copy (x: like ext) is&lt;br /&gt;
          -- Here a copy of x would be passed&lt;br /&gt;
       external &amp;quot;plug_in&amp;quot;&lt;br /&gt;
       alias &amp;quot;{&lt;br /&gt;
          location: &amp;quot;./&amp;quot;&lt;br /&gt;
          module_name: &amp;quot;struct&amp;quot;&lt;br /&gt;
          feature_name: &amp;quot;use_copy&amp;quot;&lt;br /&gt;
          }&amp;quot;&lt;br /&gt;
       end&lt;br /&gt;
 &lt;br /&gt;
    ext: external MY_STRUCT is  -- inline declaration of external type&lt;br /&gt;
       external &amp;quot;plug_in&amp;quot;&lt;br /&gt;
       alias &amp;quot;{&lt;br /&gt;
          location: &amp;quot;./&amp;quot;&lt;br /&gt;
          module_name: &amp;quot;struct&amp;quot;&lt;br /&gt;
          attribute_type: &amp;quot;my_struct&amp;quot;&lt;br /&gt;
          }&amp;quot;&lt;br /&gt;
       end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
= Helper functions =&lt;br /&gt;
It must be possible for plugin writer to supply functions to help the SmartEiffel runtime implement a few of ANY's standard routines: standard_copy, deep_twin, standard_is_equal, deep_is_equal.&lt;br /&gt;
&lt;br /&gt;
== Optional vs. mandatory helpers ==&lt;br /&gt;
Putting helpers could be made mandatory or optional (if a reasonable default can be found).&lt;br /&gt;
&lt;br /&gt;
=== Provide defaults where possible ===&lt;br /&gt;
A reasonable default is to assume that the external types are shallow, so the helpers for deep_twin and deep_is_equal can be made optional (but the plugin writer can provide them if he wants a special treatment)&lt;br /&gt;
&lt;br /&gt;
Some backends may also be able to provide reasonable default helpers for standard_is_equal and standard_copy, making them optional. For other backends, the plugin-writer may have to provide one or both of the helpers. That may seem inconsistent but it's not really a problem as a plugin needs to be tested with every back-end it is supposed to work with anyway, so missing helpers will be detected. The C backend can generate a default copy function (using memcpy and sizeof), but it can't genereate a default equality testing function (the == operator can't be applied to structures, memcmp is unacceptable because two structures may differ only by garbage in the padding).&lt;br /&gt;
&lt;br /&gt;
=== Don't provide defaults at all ===&lt;br /&gt;
Just throw an error if one of the helpers is missing.&lt;br /&gt;
&lt;br /&gt;
=== Provide silly defaults, emit a warning ===&lt;br /&gt;
The default helpers just crash (with a run time stack if possible). Emit a warning if the plugin writer doesn't provide the required helpers.&lt;br /&gt;
&lt;br /&gt;
== Granularity ==&lt;br /&gt;
The granularity could be one pack of helpers per Eiffel class or one pack of helpers per external type (obvisouly there's no difference if the &amp;quot;external classes&amp;quot; implementation is chosen).&lt;br /&gt;
&lt;br /&gt;
=== Eiffel class granularity ===&lt;br /&gt;
The helpers are eiffel functions with &amp;quot;magical&amp;quot; names.&lt;br /&gt;
&lt;br /&gt;
=== External type granularity ===&lt;br /&gt;
The helper's names appear inside the &amp;quot;alias&amp;quot; clause.&lt;br /&gt;
&lt;br /&gt;
= Relevance to backends =&lt;br /&gt;
Depending on the backend, the mechanism can add real expressivity or be of the &amp;quot;sugar&amp;quot; variety.&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
This is the only way to embed C structures into Eiffel objects. It also makes it easier to interact with C types that are typedef'd or #defined to a basic type that is not known in advance (up to now, plugin-writers had to guess if it would be e.g. an INTEGER_32 or an INTEGER_64).&lt;br /&gt;
&lt;br /&gt;
== Java ==&lt;br /&gt;
All the basic types are already wrapped and there are no typedefs or #defines. Finally, it is not possible to embed Java objects, so the gain would be limited. At least it means that we ''could'' rewrite the wrappers for the basic types using external types if we had the time (less magic is always a good thing!), and the we can embed more precise references to java objects than just &amp;quot;Object&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Ramack</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=376&amp;oldid=prev</id>
		<title>Cadrian: question</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=376&amp;oldid=prev"/>
		<updated>2007-07-18T13:12:30Z</updated>

		<summary type="html">&lt;p&gt;question&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;There are currently two competing mechanisms. Their expressivity is roughly the same (when you have one it is easy to emulate the other).&lt;br /&gt;
&lt;br /&gt;
For syntactic experiments, we'll assume the following C files are used but the syntax will have to be flexible enough to work for other external languages (e.g. Java).&lt;br /&gt;
&lt;br /&gt;
'''my_struct.h''':&lt;br /&gt;
 typedef struct {&lt;br /&gt;
   double x;&lt;br /&gt;
   int c;&lt;br /&gt;
 } my_struct;&lt;br /&gt;
&lt;br /&gt;
'''my_struct.c''':&lt;br /&gt;
 #include &amp;quot;my_struct.h&amp;quot;&lt;br /&gt;
 use (my_struct *x) {&lt;br /&gt;
   x-&amp;gt;x = 3.14;&lt;br /&gt;
 &lt;br /&gt;
   if(x-&amp;gt;c == 0) x-&amp;gt;c = 5;&lt;br /&gt;
   else          x-&amp;gt;c++;&lt;br /&gt;
 &lt;br /&gt;
   printf(&amp;quot;x = %f, c = %d\n&amp;quot;, x-&amp;gt;x, x-&amp;gt;c);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The program should print&lt;br /&gt;
 x = 3.14, c = 5&lt;br /&gt;
 x = 3.14, c = 6&lt;br /&gt;
&lt;br /&gt;
= External attributes =&lt;br /&gt;
A special marker is used to tell the Eiffel compiler that an attribute should be represented by a user-specified external type. The only meaningful thing that can be done with it is passing it as a parameter to external routines.&lt;br /&gt;
&lt;br /&gt;
Issues:&lt;br /&gt;
* what is the Eiffel type of the attribute?&lt;br /&gt;
* when &amp;quot;passing&amp;quot; the attribute, do we pass a copy or a reference?&lt;br /&gt;
&lt;br /&gt;
Two suggested versions&lt;br /&gt;
&lt;br /&gt;
== Faux procedures ==&lt;br /&gt;
 class SHOW&lt;br /&gt;
 &lt;br /&gt;
 creation&lt;br /&gt;
     make&lt;br /&gt;
 &lt;br /&gt;
 feature&lt;br /&gt;
    make is&lt;br /&gt;
       do&lt;br /&gt;
          use($ext)&lt;br /&gt;
          use($ext)&lt;br /&gt;
       end&lt;br /&gt;
 &lt;br /&gt;
    use(x: POINTER) is&lt;br /&gt;
       external &amp;quot;plug_in&amp;quot;&lt;br /&gt;
       alias &amp;quot;{&lt;br /&gt;
          location: &amp;quot;./&amp;quot;&lt;br /&gt;
          module_name: &amp;quot;struct&amp;quot;&lt;br /&gt;
          feature_name: &amp;quot;use&amp;quot;&lt;br /&gt;
          }&amp;quot;&lt;br /&gt;
       end&lt;br /&gt;
 &lt;br /&gt;
    ext is&lt;br /&gt;
       external &amp;quot;plug_in&amp;quot;&lt;br /&gt;
       alias &amp;quot;{&lt;br /&gt;
          location: &amp;quot;./&amp;quot;&lt;br /&gt;
          module_name: &amp;quot;struct&amp;quot;&lt;br /&gt;
          attribute_type: &amp;quot;my_struct&amp;quot;&lt;br /&gt;
          }&amp;quot;&lt;br /&gt;
       end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== Faux pointers ==&lt;br /&gt;
 class SHOW&lt;br /&gt;
 &lt;br /&gt;
 creation&lt;br /&gt;
    make&lt;br /&gt;
 &lt;br /&gt;
 feature&lt;br /&gt;
    make is&lt;br /&gt;
       do&lt;br /&gt;
          use(ext)&lt;br /&gt;
          use(ext)&lt;br /&gt;
       end&lt;br /&gt;
 &lt;br /&gt;
    use(x: POINTER) is&lt;br /&gt;
       external &amp;quot;plug_in&amp;quot;&lt;br /&gt;
       alias &amp;quot;{&lt;br /&gt;
          location: &amp;quot;./&amp;quot;&lt;br /&gt;
          module_name: &amp;quot;struct&amp;quot;&lt;br /&gt;
          feature_name: &amp;quot;use&amp;quot;&lt;br /&gt;
          }&amp;quot;&lt;br /&gt;
       end&lt;br /&gt;
 &lt;br /&gt;
    ext: POINTER is&lt;br /&gt;
       external &amp;quot;plug_in&amp;quot;&lt;br /&gt;
       alias &amp;quot;{&lt;br /&gt;
          location: &amp;quot;./&amp;quot;&lt;br /&gt;
          module_name: &amp;quot;struct&amp;quot;&lt;br /&gt;
          attribute_type: &amp;quot;my_struct&amp;quot;&lt;br /&gt;
          }&amp;quot;&lt;br /&gt;
       end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
= External classes =&lt;br /&gt;
A special marker is used to tell the Eiffel compile that a class should be represented by a user-specified external type. Methods of that class can be implemented by passing Current as a parameter to external routines. Whether Current is passed by copy or by reference could be determined by the reference/expanded status of the external class.&lt;br /&gt;
&lt;br /&gt;
Issues:&lt;br /&gt;
* Forces the programmer to write one class for each external type they want to wrap&lt;br /&gt;
* It wouldn't be possible to inherit from/insert that kind of class&lt;br /&gt;
* such classes should not inherit/insert other classes (ANY?)&lt;br /&gt;
* Implementing some of ANY's operations for external types might be difficult&lt;br /&gt;
* How are native eiffel attributes in such a class handled?&lt;br /&gt;
** Forbid them is not nice, since this may yield to to need to write two classes in special cases, also this would be a special case, which is not nice in general. &lt;br /&gt;
** Allowing, would force a dedicated ordering in the generated struct for the eiffel object&lt;br /&gt;
&lt;br /&gt;
 expanded class SHOW&lt;br /&gt;
 &lt;br /&gt;
 external &amp;quot;plug_in&amp;quot;&lt;br /&gt;
    alias &amp;quot;{&lt;br /&gt;
       location: &amp;quot;./&amp;quot;&lt;br /&gt;
       module_name: &amp;quot;struct&amp;quot;&lt;br /&gt;
       attribute_type: &amp;quot;my_struct&amp;quot;&lt;br /&gt;
       }&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 creation&lt;br /&gt;
     make&lt;br /&gt;
 &lt;br /&gt;
 feature&lt;br /&gt;
     make is&lt;br /&gt;
         do&lt;br /&gt;
             -- Memory is zeroed, so we probably don't need to initialize x and&lt;br /&gt;
             -- c. If we do, we'll have to call a C function to do it.&lt;br /&gt;
             use($Current)&lt;br /&gt;
             use($Current)&lt;br /&gt;
         end&lt;br /&gt;
 &lt;br /&gt;
     use(x: POINTER) is&lt;br /&gt;
         external &amp;quot;plug_in&amp;quot;&lt;br /&gt;
         alias &amp;quot;{&lt;br /&gt;
             location: &amp;quot;./&amp;quot;&lt;br /&gt;
             module_name: &amp;quot;struct&amp;quot;&lt;br /&gt;
             feature_name: &amp;quot;use&amp;quot;&lt;br /&gt;
             }&amp;quot;&lt;br /&gt;
         end&lt;br /&gt;
 &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
= Inline external classes =&lt;br /&gt;
Ok, so there are actually three mechanisms, but this one is hybrid between the previous two (give the external attribute an Eiffel type that doesn't need to be defined anywhere else)&lt;br /&gt;
&lt;br /&gt;
With this approach we can even allow this type for external features, which would solve the pass-by-value/reference question: do a copy or use a pointer to it.&lt;br /&gt;
&lt;br /&gt;
Issues:&lt;br /&gt;
* What is the scope of such a type? Only visible in the class it is written in? Are two external types with the same &amp;quot;name&amp;quot; in different classes the same?&lt;br /&gt;
* What is the use of the type name? I'd just ommit it (&amp;lt;tt&amp;gt;ext: external is ...&amp;lt;/tt&amp;gt;) --[[User:Cadrian|Cyril]] 15:12, 18 Jul 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
 class SHOW&lt;br /&gt;
 creation&lt;br /&gt;
    make&lt;br /&gt;
 &lt;br /&gt;
 feature&lt;br /&gt;
    make is&lt;br /&gt;
       do&lt;br /&gt;
          use($ext)&lt;br /&gt;
          use($ext)&lt;br /&gt;
       end&lt;br /&gt;
 &lt;br /&gt;
    use(x: POINTER) is&lt;br /&gt;
       external &amp;quot;plug_in&amp;quot;&lt;br /&gt;
       alias &amp;quot;{&lt;br /&gt;
          location: &amp;quot;./&amp;quot;&lt;br /&gt;
          module_name: &amp;quot;struct&amp;quot;&lt;br /&gt;
          feature_name: &amp;quot;use&amp;quot;&lt;br /&gt;
          }&amp;quot;&lt;br /&gt;
       end&lt;br /&gt;
 &lt;br /&gt;
    ext: external MY_STRUCT is  -- inline declaration of external type&lt;br /&gt;
       external &amp;quot;plug_in&amp;quot;&lt;br /&gt;
       alias &amp;quot;{&lt;br /&gt;
          location: &amp;quot;./&amp;quot;&lt;br /&gt;
          module_name: &amp;quot;struct&amp;quot;&lt;br /&gt;
          attribute_type: &amp;quot;my_struct&amp;quot;&lt;br /&gt;
          }&amp;quot;&lt;br /&gt;
       end&lt;br /&gt;
 end&lt;/div&gt;</summary>
		<author><name>Cadrian</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=365&amp;oldid=prev</id>
		<title>Ramack: added a few comments</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=External_types&amp;diff=365&amp;oldid=prev"/>
		<updated>2007-07-17T14:17:32Z</updated>

		<summary type="html">&lt;p&gt;added a few comments&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;There are currently two competing mechanisms. Their expressivity is roughly the same (when you have one it is easy to emulate the other).&lt;br /&gt;
&lt;br /&gt;
= External attributes =&lt;br /&gt;
A special marker is used to tell the Eiffel compiler that an attribute should be represented by a user-specified external type. The only meaningful thing that can be done with it is passing it as a parameter to external routines.&lt;br /&gt;
&lt;br /&gt;
Issues:&lt;br /&gt;
* what is the Eiffel type of the attribute?&lt;br /&gt;
* when &amp;quot;passing&amp;quot; the attribute, do we pass a copy or a reference?&lt;br /&gt;
&lt;br /&gt;
= External classes =&lt;br /&gt;
A special marker is used to tell the Eiffel compile that a class should be represented by a user-specified external type. Methods of that class can be implemented by passing Current as a parameter to external routines. Whether Current is passed by copy or by reference could be determined by the reference/expanded status of the external class.&lt;br /&gt;
&lt;br /&gt;
Issues:&lt;br /&gt;
* Forces the programmer to write one class for each external type they want to wrap&lt;br /&gt;
* It wouldn't be possible to inherit from/insert that kind of class&lt;br /&gt;
* such classes should not inherit/insert other classes (ANY?)&lt;br /&gt;
* Implementing some of ANY's operations for external types might be difficult&lt;br /&gt;
* How are native eiffel attributes in such a class handled?&lt;br /&gt;
** Forbid them is not nice, since this may yield to to need to write two classes in special cases, also this would be a special case, which is not nice in general. &lt;br /&gt;
** Allowing, would force a dedicated ordering in the generated struct for the eiffel object&lt;br /&gt;
&lt;br /&gt;
= Inline external types =&lt;br /&gt;
I think we should not call them inline external classes [[User:Ramack|Ramack]] 16:17, 17 Jul 2007 (CEST)&lt;br /&gt;
Ok, so there are actually three mechanisms, but this one is hybrid between the previous two (give the external attribute an Eiffel type that doesn't need to be defined anywhere else)&lt;br /&gt;
&lt;br /&gt;
With this approach we can even allow this type for external features, which would solve the pass-by-value/reference question: do a copy or use a pointer to it.&lt;br /&gt;
&lt;br /&gt;
Issues:&lt;br /&gt;
* What is the scope of such a type? Only visible in the class it is written in? Are two external types with the same &amp;quot;name&amp;quot; in different classes the same?&lt;/div&gt;</summary>
		<author><name>Ramack</name></author>
	</entry>
</feed>