<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.liberty-eiffel.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=GermanGT</id>
	<title>Liberty Eiffel Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.liberty-eiffel.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=GermanGT"/>
	<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php/Special:Contributions/GermanGT"/>
	<updated>2026-05-24T09:39:32Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.0</generator>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Liberty_Eiffel_Programming_Environment_FAQ&amp;diff=2543</id>
		<title>Liberty Eiffel Programming Environment FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Liberty_Eiffel_Programming_Environment_FAQ&amp;diff=2543"/>
		<updated>2016-11-28T05:43:41Z</updated>

		<summary type="html">&lt;p&gt;GermanGT: /* It is possible to create graphical applications? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Frequently Asked Questions'''&lt;br /&gt;
==General purpose questions about the Liberty Eiffel project==&lt;br /&gt;
&amp;lt;div id=&amp;quot;LibertyName&amp;quot;&amp;gt;&lt;br /&gt;
===Where does the name &amp;quot;Liberty&amp;quot; come from?===&lt;br /&gt;
&lt;br /&gt;
As most Eiffel hackers know, Gustave Eiffel (after whom the language is named), also built the metal structure of the Liberty Statue.&lt;br /&gt;
&lt;br /&gt;
More trivia:&lt;br /&gt;
Some people may also know that I (Cyril) happen to live very near to Belfort, a town renowned for a sculpture of a lion by Auguste Bartholdi.  Bartholdi sculpted the metallic sheets that make the Liberty Statue such an awesome sight.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;MailingList&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Is there a Liberty Eiffel '''mailing list'''?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Yes! Liberty Eiffel users and developers can share their experiences&lt;br /&gt;
and ideas by subscribing to the&lt;br /&gt;
[mailto:libertyeiffel@librelist.com Liberty Eiffel official mailing list] by just sending an empty email to this address.&lt;br /&gt;
&lt;br /&gt;
Please, note that this list is not moderated. &lt;br /&gt;
Please, stay correct on that list.&lt;br /&gt;
&lt;br /&gt;
===Is it possible to have the complete '''source code of Liberty Eiffel'''?===&lt;br /&gt;
Since it is a free (as in freedom) Eiffel Compiler, the complete source&lt;br /&gt;
code of Liberty Eiffel is of course in the distribution. &lt;br /&gt;
The Eiffel source code for additional libraries is also provided. &lt;br /&gt;
See also this [[#CommercialApps|FAQ question]] which is related to [[License|licensing]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;CommercialApps&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Is it possible to use Liberty Eiffel for '''large/commercial applications'''?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is indeed possible to use Liberty Eiffel for a large application.&lt;br /&gt;
An Eiffel compiler is a really big project and Liberty Eiffel itself is fully&lt;br /&gt;
written in Eiffel.&lt;br /&gt;
Liberty Eiffel is completely free and any private company can use&lt;br /&gt;
it freely, and distribute (or sell) freely the products made with it.&lt;br /&gt;
They do not have to pay royalties.&lt;br /&gt;
&lt;br /&gt;
Also note that &amp;lt;B&amp;gt;only classes which are closely related to the&lt;br /&gt;
compiler itself are under GPL&amp;lt;/B&amp;gt; (actually, only the classes of directory&lt;br /&gt;
&amp;lt;TT&amp;gt;SmartEiffel/tools&amp;lt;/TT&amp;gt; are under GPL).&lt;br /&gt;
The other classes are &amp;lt;EM&amp;gt;not&amp;lt;/EM&amp;gt; under GPL in order to let people completely&lt;br /&gt;
free (i.e. all classes of &amp;lt;TT&amp;gt;lib&amp;lt;/TT&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Always keep in mind that Liberty Eiffel doesn't come&lt;br /&gt;
with any warranty (please read the COPYING file in the distribution).&lt;br /&gt;
As explained in the header of non-GPL files, the only important thing&lt;br /&gt;
is to keep the header unaltered when the corresponding source file&lt;br /&gt;
is provided in your product.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- continue update to Liberty here --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;SmallEiffel&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===What is &amp;lt;B&amp;gt;SmallEiffel&amp;lt;/B&amp;gt; compared to &amp;lt;B&amp;gt;SmartEiffel&amp;lt;/B&amp;gt;?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Sma&amp;lt;B&amp;gt;ll&amp;lt;/B&amp;gt;Eiffel is the former name of the Sma&amp;lt;B&amp;gt;rt&amp;lt;/B&amp;gt;Eiffel&lt;br /&gt;
project. At some point in time the development team thought the compiler had become smart&lt;br /&gt;
enough to warrant a renaming ;)  For a list of changes between the various Small-/SmartEiffel versions, have a look&lt;br /&gt;
[http://SmartEiffel.loria.fr/misc/HISTORY.html#1.0 there].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;HowCanIHelp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How can I help?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The best way to help Liberty Eiffel and its users is probably to &amp;lt;B&amp;gt;pick up&lt;br /&gt;
some area you're interested in, and develop&amp;lt;/B&amp;gt; your own code, libraries, tools or extensions with Liberty Eiffel,&lt;br /&gt;
and then release them to other users.&lt;br /&gt;
&lt;br /&gt;
A very good way to help us is to follow the&lt;br /&gt;
[[Get involved]] guidelines when you find some problem with Liberty Eiffel.&lt;br /&gt;
&lt;br /&gt;
===Why don't you &amp;lt;B&amp;gt;change this and add that&amp;lt;/B&amp;gt;?! It would be much better/cooler/whatever!===&lt;br /&gt;
People must understand that we can't always do everything. We simply&lt;br /&gt;
can't. Because we don't have the time. Whether we like it or not, we&lt;br /&gt;
also have other things to do than provide free stuff, modify our&lt;br /&gt;
compiler and/or libraries to please everybody. We do as much as we&lt;br /&gt;
can, but we don't do miracles, sorry.&lt;br /&gt;
&lt;br /&gt;
Since Liberty Eiffel is free of charge and open-source, people who do&lt;br /&gt;
need things we don't provide can always implement them and have them&lt;br /&gt;
benefit everybody. A good way to do this is to start working on it,&lt;br /&gt;
and ask other people (i.e. not the Liberty Eiffel team ;) ) to join and&lt;br /&gt;
help. See the [[#HowCanIHelp|How can I help?]] question.&lt;br /&gt;
&lt;br /&gt;
Alternatively, someone or some company who does need us to implement&lt;br /&gt;
something may always consider funding a bit the development of&lt;br /&gt;
Liberty Eiffel... After all, we've even heard that some people were&lt;br /&gt;
selling software and making a bit of money with it... ;)))&lt;br /&gt;
&lt;br /&gt;
===How do I '''keep informed''' about Liberty Eiffel?===&lt;br /&gt;
The best way is to keep an eye on our web pages,&lt;br /&gt;
more especially on the [http://www.liberty-eiffel.org/ Liberty Eiffel main website].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What &amp;lt;B&amp;gt;documentation&amp;lt;/B&amp;gt; is provided with Liberty Eiffel?===&lt;br /&gt;
The documentation provided with Liberty Eiffel is a transcript of what&lt;br /&gt;
you can find on the original Liberty Eiffel Web site, see the link to this wiki.&lt;br /&gt;
It is related only to the use and internals of Liberty Eiffel (yes,&lt;br /&gt;
we know we still have to improve it ;) ).&lt;br /&gt;
&lt;br /&gt;
For information and documentation about the Eiffel programming language, check&lt;br /&gt;
the links on our&lt;br /&gt;
[http://SmartEiffel.loria.fr/general/resources.html Internet resources page].&lt;br /&gt;
Note that we are not aware of any complete Eiffel language manual&lt;br /&gt;
freely available on the Web (yet?).&lt;br /&gt;
&lt;br /&gt;
===Why don't you &amp;lt;B&amp;gt;post more messages&amp;lt;/B&amp;gt; in newsgroups and/or mailing lists?===&lt;br /&gt;
First, because we strongly believe that too much information kills information.&lt;br /&gt;
Scientists call this &amp;quot;cognitive overload&amp;quot;. :)&lt;br /&gt;
&lt;br /&gt;
Second, because we don't have the time. It takes an awful amount of time to follow&lt;br /&gt;
discussions, whatever their quality. We try to do that. But it's even more&lt;br /&gt;
time-consuming to be part of them. So, we often have to choose between&lt;br /&gt;
posting/mailing, and working directly on Liberty Eiffel. Since our mailboxes tend&lt;br /&gt;
to overflood, we generally choose the latter :)&lt;br /&gt;
&lt;br /&gt;
===Is it difficult to switch from some commercial Eiffel compiler to Liberty Eiffel?===&lt;br /&gt;
If your original Eiffel software only uses simple types like INTEGER,&lt;br /&gt;
STRING, ARRAY, BOOLEAN, CHARACTER and DOUBLE, it is usually very simple&lt;br /&gt;
to modify your code in order to use Liberty Eiffel.&lt;br /&gt;
&lt;br /&gt;
It is a little bit difficult for simple input/output (used with predefined&lt;br /&gt;
''io'') because some features have different names. If your original software&lt;br /&gt;
heavily relies for example on the EiffelBase library, it may be '''very difficult'''.&lt;br /&gt;
For example, one must keep in mind that SmartEiffel.ARRAY inherit &lt;br /&gt;
SmartEiffel.COLLECTION and that ISE library also have a class COLLECTION. &lt;br /&gt;
By the way, subclasses of ISE.COLLECTION cannot be used. &lt;br /&gt;
The ISE.LINKED_LIST can be used in conjunction with SmartEiffel.ARRAY because &lt;br /&gt;
ISE.LINKED_LIST do not inherit ISE.COLLECTION (no clash).&lt;br /&gt;
&lt;br /&gt;
==Questions about Languages and/or Object-Oriented Programming==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;StaticVsDynamicType&amp;quot;&amp;gt;&lt;br /&gt;
===What is the difference between the Static and the Dynamic Type?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The static type of a variable is determined at compile-time, the dynamic type during run-time.&lt;br /&gt;
The dynamic type must conform to the static type (it may and often will be the same as the static type).&lt;br /&gt;
&lt;br /&gt;
E.g.: A variable might be declared to refer to an instance of class FRUIT (a_fruit: FRUIT), so the static type is FRUIT, but might be assigned an object of class APPLE (a_fruit := an_apple), which becomes the dynamic type. Obviously, APPLE has to be a descendant of FRUIT in this example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;DynamicTypePrediction&amp;quot;&amp;gt;&lt;br /&gt;
===What is type prediction?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Type prediction is when the compiler attempts to predict an expression's [[#StaticVsDynamicType|dynamic type]] at compile time.&lt;br /&gt;
&lt;br /&gt;
==Questions about the Eiffel language of the Liberty Eiffel project==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;CaseSensitivity&amp;quot;&amp;gt;&lt;br /&gt;
===Why is Liberty Eiffel case-sensitive?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In fact, like most computer languages, Eiffel does distinguish between upper and lower case.  Our decision is simply guided by the goals of legibility, organisation and simplification.&lt;br /&gt;
&lt;br /&gt;
As far as keywords are concerned, it is easier to distinguish them when they are always written in the same way.  Thus, we always write '''loop''', rather than '''Loop''' or even '''LoOp'''.  We have to get into good habits from now on in other matters too: this rule is going to be generalised so as to be even stricter in future.  From now on, lets all get into the habit of writing '''Current''', '''Void''' or '''True''', for example.&lt;br /&gt;
&lt;br /&gt;
Upper case is also used to distinguish class names from other names.  Thus, we can know that '''FOO''' is a class name and '''foo''' is not, without having to look elsewhere in the source code.&lt;br /&gt;
&lt;br /&gt;
A final advantage of the upper/lower case distinction is that it allows more precise error messages.  What makes work simpler for humans also simplifies it for compilers.&lt;br /&gt;
&lt;br /&gt;
===What is the semantics (meaning) of a &amp;lt;B&amp;gt;manifest string&amp;lt;/B&amp;gt;?===&lt;br /&gt;
It can certainly be important to know what really happens when you define&lt;br /&gt;
a constant STRING attribute by writing, for example: &lt;br /&gt;
 Message: STRING is &amp;quot;abc&amp;quot;&lt;br /&gt;
that constant attribute definition is in fact a compact way of writing:&lt;br /&gt;
 Message: STRING is&lt;br /&gt;
    once&lt;br /&gt;
       create Result.make(3)&lt;br /&gt;
       Result.extend('a')&lt;br /&gt;
       Result.extend('b')&lt;br /&gt;
       Result.extend('c')&lt;br /&gt;
    end&lt;br /&gt;
You realise, of course, that that function definition is a &amp;lt;TT&amp;gt;once&amp;lt;/TT&amp;gt; function and&lt;br /&gt;
consequently one string and one string only will be created, whatever happens.&lt;br /&gt;
When you are investigating performance, you also have to know the difference between:&lt;br /&gt;
 string := &amp;quot;abc&amp;quot;&lt;br /&gt;
and&lt;br /&gt;
 string := once &amp;quot;abc&amp;quot;&lt;br /&gt;
You have probably guessed that, if the instruction without &amp;lt;TT&amp;gt;once&amp;lt;/TT&amp;gt;&lt;br /&gt;
is in a loop, a new string is created each time that the line in question is executed!&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;TT&amp;gt;once&amp;lt;/TT&amp;gt; expression form above is only valid for manifest STRINGs and UNICODE_STRINGs.&lt;br /&gt;
Here is an example of a manifest UNICODE_STRING (note the capital U):&lt;br /&gt;
 unicode_string := once U&amp;quot;abc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The [[http://SmartEiffel.loria.fr/man/compile_to_c.html compile_to_c]] command's &lt;br /&gt;
&amp;lt;TT&amp;gt;-manifest_string_trace&amp;lt;/TT&amp;gt; option  &lt;br /&gt;
allows you to locate unwanted non-once manifest strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ConformanceVsCovariance&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Can you explain again the difference between &amp;lt;b&amp;gt;conformance&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;covariance&amp;lt;/b&amp;gt;?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Our paper [http://SmartEiffel.loria.fr/papers/papers.html#JOT2004&amp;quot; Conformance of agents in the Eiffel language]&lt;br /&gt;
has a note p.137 that looks surprising.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Note that the previous rules define conformance rules, this has&lt;br /&gt;
nothing to do with covariance or contravariance.&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
The concepts are distinct, even though there is a relation between&lt;br /&gt;
them.&lt;br /&gt;
 &lt;br /&gt;
Covariance is defined in terms of conformance. But assignment is&lt;br /&gt;
''also'' defined in terms of conformance.&lt;br /&gt;
 &lt;br /&gt;
That's exactly, and only, what our paper defines: assignment&lt;br /&gt;
rules. Those rules were &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; defined anywhere before. It's&lt;br /&gt;
important: &amp;lt;b&amp;gt;it's not that we disagreed with any earlier position. We&lt;br /&gt;
just filled a hole in the specification.&amp;lt;/b&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Also note that, even if the agent types notation uses square&lt;br /&gt;
brackets, it's totally unrelated to the generic classes type notation;&lt;br /&gt;
therefore generic classes rules cannot apply (except if proved&lt;br /&gt;
otherwise). An agent type is not a generic type, anymore than a tuple&lt;br /&gt;
type is a generic type.  Those are distinct concepts, only with a&lt;br /&gt;
similar notation.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;P&amp;gt;Conformance is fundamental in any typed language; on the other hand&lt;br /&gt;
covariance is &amp;quot;just&amp;quot; an Eiffel extra. Important, sure, but not as&lt;br /&gt;
fundamental as conformance. Our paper never speaks of covariance,&lt;br /&gt;
except in the note quoted above, and explained further here. Maybe the&lt;br /&gt;
paper should have explained the subtlety in so many words.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;CATCALL&amp;quot;&amp;gt;&lt;br /&gt;
===What is a CATCALL?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
In the Eiffel world ''CATCALL'' is about type safety problems which are still present in &lt;br /&gt;
the language.&lt;br /&gt;
In Eiffel, CATCALL is a short-hand for ''Changing Availability or Type of CALLs''.&lt;br /&gt;
&lt;br /&gt;
''Availability'' is about the exportation status of some method.&lt;br /&gt;
For example, when a method is redefined, it's exportation status can be&lt;br /&gt;
changed too.&lt;br /&gt;
&lt;br /&gt;
''Type of CALLs'' is about some possibly [[Glossary#Covariance|covariant]] redefinition.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;SCOOP&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===What is SCOOP ?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Eiffel, [[SCOOP]] refers to language support for distributed programming.&lt;br /&gt;
In the Eiffel world, it is an acronym for ''Simple Concurrent Object-Oriented Programming''.&lt;br /&gt;
SCOOP is not yet included in Liberty Eiffel and is certainly its most important missing feature.&lt;br /&gt;
&lt;br /&gt;
===Is there a style guide for Eiffel source code?===&lt;br /&gt;
Yes. Source code in Liberty tools and libraries should conform to the [[Coding Style Guide]]. It seems reasonable to use this as a reference for your own project.&lt;br /&gt;
&lt;br /&gt;
==Questions about libraries which comes along with Liberty Eiffel==&lt;br /&gt;
&lt;br /&gt;
===How should I read a file?===&lt;br /&gt;
In order to read a file, read a character and then use&lt;br /&gt;
last_character ONLY if end_of_input has not been reached&lt;br /&gt;
while reading the character.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
Before each read (except the very first), you have to test&lt;br /&gt;
end_of_input, because all read_* procedures require not&lt;br /&gt;
end_of_input. But why? This require means that if some&lt;br /&gt;
previous read failed because end of input has been reached,&lt;br /&gt;
then it is not valid to try to read again.&lt;br /&gt;
Example:&lt;br /&gt;
 file: TEXT_FILE_READ; file_name: STRING&lt;br /&gt;
 ...&lt;br /&gt;
 -- ''Assumming here that'' `file' ''and'' `file_name' ''are not'' [[Void|&amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt;]]:&lt;br /&gt;
 file.connect_to(file_name)&lt;br /&gt;
 if file.is_connected then&lt;br /&gt;
    from&lt;br /&gt;
       file.read_character&lt;br /&gt;
    until&lt;br /&gt;
       file.end_of_input&lt;br /&gt;
    loop&lt;br /&gt;
       io.put_character(file.last_character)&lt;br /&gt;
       file.read_character&lt;br /&gt;
    end&lt;br /&gt;
    file.disconnect&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
If you want to read the file line by line, then &amp;lt;tt&amp;gt;read_line&amp;lt;/tt&amp;gt;&lt;br /&gt;
or &amp;lt;tt&amp;gt;read_line_in&amp;lt;/tt&amp;gt; can be used. But the reading pattern&lt;br /&gt;
&amp;lt;B&amp;gt;is different&amp;lt;/B&amp;gt;. This is because after the last line of&lt;br /&gt;
the file has been read, then the last line is in &amp;lt;tt&amp;gt;last_string&amp;lt;/tt&amp;gt;&lt;br /&gt;
and has to be used.&lt;br /&gt;
Example:&lt;br /&gt;
 file: TEXT_FILE_READ; file_name: STRING&lt;br /&gt;
 ...&lt;br /&gt;
 -- ''Assumming here that'' `file' ''and'' `file_name' ''are not'' [[Void|&amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt;]]:&lt;br /&gt;
 file.connect_to(file_name)&lt;br /&gt;
 if file.is_connected then&lt;br /&gt;
    from&lt;br /&gt;
    until&lt;br /&gt;
       file.end_of_input&lt;br /&gt;
    loop&lt;br /&gt;
       file.read_line&lt;br /&gt;
       if file.end_of_input then&lt;br /&gt;
          -- The last line of the file does not end with a new&lt;br /&gt;
          -- line character. Remove this test if you don't care.&lt;br /&gt;
          std_output.put_string(file.last_string)&lt;br /&gt;
       else&lt;br /&gt;
          std_output.put_line(tfr.last_string)&lt;br /&gt;
       end&lt;br /&gt;
    end&lt;br /&gt;
    file.disconnect&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;B&amp;gt;Note: &amp;lt;/B&amp;gt;&amp;lt;tt&amp;gt;last_string&amp;lt;/tt&amp;gt; always returns the same STRING object, it's up&lt;br /&gt;
to you to make a copy if you need to keep the string value.&lt;br /&gt;
&lt;br /&gt;
You can read the examples in tutorial directory from the Liberty Eiffel distribution.&lt;br /&gt;
&lt;br /&gt;
==Questions about the tools of Liberty Eiffel==&lt;br /&gt;
&lt;br /&gt;
===Is it possible to do &amp;lt;B&amp;gt;incremental compilation&amp;lt;/B&amp;gt; with Liberty Eiffel?===&lt;br /&gt;
Because of the Liberty Eiffel type inference mechanism,&lt;br /&gt;
Liberty Eiffel always produces all needed C files from scratch. As old C files&lt;br /&gt;
are automatically saved, only modified C files are recompiled.&lt;br /&gt;
See &amp;lt;TT&amp;gt;[http://SmartEiffel.loria.fr/man/compile.html man/compile]&amp;lt;/TT&amp;gt; for details.&lt;br /&gt;
&lt;br /&gt;
===Is there a mechanism to &amp;lt;B&amp;gt;pre-compile&amp;lt;/B&amp;gt; libraries?===&lt;br /&gt;
No, there is no such mechanism in Liberty Eiffel. But if you're concerned&lt;br /&gt;
about compilation speed, don't worry, pre-computed libraries are not the only way to be fast !&lt;br /&gt;
Just try Liberty Eiffel, and you'll see :)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Is it possible to use the &amp;lt;B&amp;gt;Boehm-Demers-Weiser garbage collector&amp;lt;/B&amp;gt; with Liberty Eiffel?===&lt;br /&gt;
Yes.&lt;br /&gt;
&amp;lt;BR&amp;gt;You just have to pass the compiler option -bdw_gc and this should it be.&lt;br /&gt;
&lt;br /&gt;
===How to customise the &amp;lt;B&amp;gt;Garbage Collector&amp;lt;/B&amp;gt; for a new architecture?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
If your architecture needs special handling to get the GC working&lt;br /&gt;
(because the stack is not contiguous, because some registers are not&lt;br /&gt;
written on the stack on `setjmp'...) then you need to implement function&lt;br /&gt;
`mark_stack_and_registers' for your system in the file&lt;br /&gt;
&amp;lt;TT&amp;gt;SmartEiffel/sys/runtime/c/gc_lib.c&amp;lt;/TT&amp;gt;.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
If you get some message telling you that the stack direction is wrong, then&lt;br /&gt;
you should change macro definition to use the other generic code&lt;br /&gt;
(there is one generic code for each stack order).&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
In order to check the GC, you should be able to run all files of&lt;br /&gt;
the &amp;lt;TT&amp;gt;SmartEiffel/misc/benchmarks/gc&amp;lt;/TT&amp;gt; directory.&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How is Liberty Eiffel compiled?===&lt;br /&gt;
With Eiffel optimisation options -boost and -no_gc. The garbage collector is&lt;br /&gt;
indeed useless on the Liberty Eiffel commands: since Liberty Eiffel did not include a GC in its first versions, we were very careful about memory when we developed it.&lt;br /&gt;
&lt;br /&gt;
With C compilation optimisations turned on (it depends on the C compiler used;&lt;br /&gt;
we generally use gcc).&lt;br /&gt;
The resulting executables are stripped.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;External tools for Liberty Eiffel&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External tools for Liberty Eiffel==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Syntax highlighting&amp;quot;&amp;gt;&lt;br /&gt;
===Are there editors with support for Liberty Eiffel?===&lt;br /&gt;
&lt;br /&gt;
* [https://www.gnu.org/s/emacs/ Emacs] has support for syntax highlighting, indenting, flymake mode, code templates and more. For installation see the article ''[http://www.berenddeboer.net/eiffel/eiffel_and_emacs.html Editing Eiffel code with Emacs]'' from Berend de Boer but you may use the distributed version of &amp;lt;code&amp;gt;[http://git.savannah.gnu.org/cgit/liberty-eiffel.git/plain/work/eiffel.el eiffel.el]&amp;lt;/code&amp;gt; (in the work/ directory of the source distribution).&lt;br /&gt;
&lt;br /&gt;
* [http://www.vim.org Vim] also has similar support for Eiffel and [https://github.com/LibertyEiffel/vim-liberty-eiffel specific additions for Liberty Eiffel]&lt;br /&gt;
&lt;br /&gt;
* [https://atom.io/ Atom] has an [https://atom.io/packages/language-eiffel Eiffel package] available.&lt;br /&gt;
&lt;br /&gt;
* [http://www.macromates.com TextMate] has an [https://github.com/textmate/eiffel.tmbundle Eiffel bundle] available.&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.gnome.org/Apps/Gedit Gedit] offers syntax highlighting.&lt;br /&gt;
&lt;br /&gt;
* [http://www.scintilla.org/SciTE.html SciTE] offers syntax highlighting and folding.&lt;br /&gt;
&lt;br /&gt;
* On Windows [https://notepad-plus-plus.org/ Notepad++] offers syntax highlighting as well.&lt;br /&gt;
&lt;br /&gt;
* [https://www.editpadpro.com/editeiffel.html EditPad Pro] supports several features for Eiffel.&lt;br /&gt;
&lt;br /&gt;
===Is there a GUI or IDE for Liberty Eiffel?===&lt;br /&gt;
&lt;br /&gt;
An [https://github.com/Imhotup/LibertyEiffel-Eclipse-Plugin Eclipse-based IDE] is currently under development as part of [[GSoC]] 2016.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Liberty Eiffel debugger with GUI&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Is there a debugger for Liberty Eiffel with a GUI?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Currently not. There was a front end for the sedb (SmartEiffel debugger). It is called ''SmartEiffel Embedded Debugger Output Visualiser'' (sedbov).  It maps the key command from the sedb to a GUI. You can find it at https://opensvn.csie.org/traccgi/sedbov/wiki/WikiStart. It use the script language TCL/TK with the extension expect.  For information look at http://www.tcl.tk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;It is possible to create graphical applications?&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==GUI Toolkits==&lt;br /&gt;
&lt;br /&gt;
===Is it possible to create graphical applications?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The external project [http://notabug.org/GermanGT/eiffel-iup eiffel-iup] is a plugin to the IUP toolkit, that allow a program to run in different systems without changes - the toolkit provides the application portability. Supported systems include: GTK+, Motif and Windows. The plugin is still not complete, but is stable and in continuous development. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;LibertyEiffelWiki&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External information about Eiffel==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Where can i find more information about Eiffel?&amp;quot;&amp;gt;&lt;br /&gt;
===Where can I find more information about Eiffel?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The news group news:comp.lang.eiffel has low post frequency.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;I am a beginner. Where can i find tutorials?&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===I am a beginner. Where can I find tutorials?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
You should study and compile the examples in the tutorials directory.&lt;br /&gt;
&lt;br /&gt;
Cetus contains links to tutorial papers (http://www.cetus-links.org/oo_eiffel.html).&lt;/div&gt;</summary>
		<author><name>GermanGT</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Liberty_Eiffel_Programming_Environment_FAQ&amp;diff=2542</id>
		<title>Liberty Eiffel Programming Environment FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Liberty_Eiffel_Programming_Environment_FAQ&amp;diff=2542"/>
		<updated>2016-11-24T05:45:58Z</updated>

		<summary type="html">&lt;p&gt;GermanGT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Frequently Asked Questions'''&lt;br /&gt;
==General purpose questions about the Liberty Eiffel project==&lt;br /&gt;
&amp;lt;div id=&amp;quot;LibertyName&amp;quot;&amp;gt;&lt;br /&gt;
===Where does the name &amp;quot;Liberty&amp;quot; come from?===&lt;br /&gt;
&lt;br /&gt;
As most Eiffel hackers know, Gustave Eiffel (after whom the language is named), also built the metal structure of the Liberty Statue.&lt;br /&gt;
&lt;br /&gt;
More trivia:&lt;br /&gt;
Some people may also know that I (Cyril) happen to live very near to Belfort, a town renowned for a sculpture of a lion by Auguste Bartholdi.  Bartholdi sculpted the metallic sheets that make the Liberty Statue such an awesome sight.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;MailingList&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Is there a Liberty Eiffel '''mailing list'''?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Yes! Liberty Eiffel users and developers can share their experiences&lt;br /&gt;
and ideas by subscribing to the&lt;br /&gt;
[mailto:libertyeiffel@librelist.com Liberty Eiffel official mailing list] by just sending an empty email to this address.&lt;br /&gt;
&lt;br /&gt;
Please, note that this list is not moderated. &lt;br /&gt;
Please, stay correct on that list.&lt;br /&gt;
&lt;br /&gt;
===Is it possible to have the complete '''source code of Liberty Eiffel'''?===&lt;br /&gt;
Since it is a free (as in freedom) Eiffel Compiler, the complete source&lt;br /&gt;
code of Liberty Eiffel is of course in the distribution. &lt;br /&gt;
The Eiffel source code for additional libraries is also provided. &lt;br /&gt;
See also this [[#CommercialApps|FAQ question]] which is related to [[License|licensing]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;CommercialApps&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Is it possible to use Liberty Eiffel for '''large/commercial applications'''?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is indeed possible to use Liberty Eiffel for a large application.&lt;br /&gt;
An Eiffel compiler is a really big project and Liberty Eiffel itself is fully&lt;br /&gt;
written in Eiffel.&lt;br /&gt;
Liberty Eiffel is completely free and any private company can use&lt;br /&gt;
it freely, and distribute (or sell) freely the products made with it.&lt;br /&gt;
They do not have to pay royalties.&lt;br /&gt;
&lt;br /&gt;
Also note that &amp;lt;B&amp;gt;only classes which are closely related to the&lt;br /&gt;
compiler itself are under GPL&amp;lt;/B&amp;gt; (actually, only the classes of directory&lt;br /&gt;
&amp;lt;TT&amp;gt;SmartEiffel/tools&amp;lt;/TT&amp;gt; are under GPL).&lt;br /&gt;
The other classes are &amp;lt;EM&amp;gt;not&amp;lt;/EM&amp;gt; under GPL in order to let people completely&lt;br /&gt;
free (i.e. all classes of &amp;lt;TT&amp;gt;lib&amp;lt;/TT&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Always keep in mind that Liberty Eiffel doesn't come&lt;br /&gt;
with any warranty (please read the COPYING file in the distribution).&lt;br /&gt;
As explained in the header of non-GPL files, the only important thing&lt;br /&gt;
is to keep the header unaltered when the corresponding source file&lt;br /&gt;
is provided in your product.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- continue update to Liberty here --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;SmallEiffel&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===What is &amp;lt;B&amp;gt;SmallEiffel&amp;lt;/B&amp;gt; compared to &amp;lt;B&amp;gt;SmartEiffel&amp;lt;/B&amp;gt;?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Sma&amp;lt;B&amp;gt;ll&amp;lt;/B&amp;gt;Eiffel is the former name of the Sma&amp;lt;B&amp;gt;rt&amp;lt;/B&amp;gt;Eiffel&lt;br /&gt;
project. At some point in time the development team thought the compiler had become smart&lt;br /&gt;
enough to warrant a renaming ;)  For a list of changes between the various Small-/SmartEiffel versions, have a look&lt;br /&gt;
[http://SmartEiffel.loria.fr/misc/HISTORY.html#1.0 there].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;HowCanIHelp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How can I help?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The best way to help Liberty Eiffel and its users is probably to &amp;lt;B&amp;gt;pick up&lt;br /&gt;
some area you're interested in, and develop&amp;lt;/B&amp;gt; your own code, libraries, tools or extensions with Liberty Eiffel,&lt;br /&gt;
and then release them to other users.&lt;br /&gt;
&lt;br /&gt;
A very good way to help us is to follow the&lt;br /&gt;
[[Get involved]] guidelines when you find some problem with Liberty Eiffel.&lt;br /&gt;
&lt;br /&gt;
===Why don't you &amp;lt;B&amp;gt;change this and add that&amp;lt;/B&amp;gt;?! It would be much better/cooler/whatever!===&lt;br /&gt;
People must understand that we can't always do everything. We simply&lt;br /&gt;
can't. Because we don't have the time. Whether we like it or not, we&lt;br /&gt;
also have other things to do than provide free stuff, modify our&lt;br /&gt;
compiler and/or libraries to please everybody. We do as much as we&lt;br /&gt;
can, but we don't do miracles, sorry.&lt;br /&gt;
&lt;br /&gt;
Since Liberty Eiffel is free of charge and open-source, people who do&lt;br /&gt;
need things we don't provide can always implement them and have them&lt;br /&gt;
benefit everybody. A good way to do this is to start working on it,&lt;br /&gt;
and ask other people (i.e. not the Liberty Eiffel team ;) ) to join and&lt;br /&gt;
help. See the [[#HowCanIHelp|How can I help?]] question.&lt;br /&gt;
&lt;br /&gt;
Alternatively, someone or some company who does need us to implement&lt;br /&gt;
something may always consider funding a bit the development of&lt;br /&gt;
Liberty Eiffel... After all, we've even heard that some people were&lt;br /&gt;
selling software and making a bit of money with it... ;)))&lt;br /&gt;
&lt;br /&gt;
===How do I '''keep informed''' about Liberty Eiffel?===&lt;br /&gt;
The best way is to keep an eye on our web pages,&lt;br /&gt;
more especially on the [http://www.liberty-eiffel.org/ Liberty Eiffel main website].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What &amp;lt;B&amp;gt;documentation&amp;lt;/B&amp;gt; is provided with Liberty Eiffel?===&lt;br /&gt;
The documentation provided with Liberty Eiffel is a transcript of what&lt;br /&gt;
you can find on the original Liberty Eiffel Web site, see the link to this wiki.&lt;br /&gt;
It is related only to the use and internals of Liberty Eiffel (yes,&lt;br /&gt;
we know we still have to improve it ;) ).&lt;br /&gt;
&lt;br /&gt;
For information and documentation about the Eiffel programming language, check&lt;br /&gt;
the links on our&lt;br /&gt;
[http://SmartEiffel.loria.fr/general/resources.html Internet resources page].&lt;br /&gt;
Note that we are not aware of any complete Eiffel language manual&lt;br /&gt;
freely available on the Web (yet?).&lt;br /&gt;
&lt;br /&gt;
===Why don't you &amp;lt;B&amp;gt;post more messages&amp;lt;/B&amp;gt; in newsgroups and/or mailing lists?===&lt;br /&gt;
First, because we strongly believe that too much information kills information.&lt;br /&gt;
Scientists call this &amp;quot;cognitive overload&amp;quot;. :)&lt;br /&gt;
&lt;br /&gt;
Second, because we don't have the time. It takes an awful amount of time to follow&lt;br /&gt;
discussions, whatever their quality. We try to do that. But it's even more&lt;br /&gt;
time-consuming to be part of them. So, we often have to choose between&lt;br /&gt;
posting/mailing, and working directly on Liberty Eiffel. Since our mailboxes tend&lt;br /&gt;
to overflood, we generally choose the latter :)&lt;br /&gt;
&lt;br /&gt;
===Is it difficult to switch from some commercial Eiffel compiler to Liberty Eiffel?===&lt;br /&gt;
If your original Eiffel software only uses simple types like INTEGER,&lt;br /&gt;
STRING, ARRAY, BOOLEAN, CHARACTER and DOUBLE, it is usually very simple&lt;br /&gt;
to modify your code in order to use Liberty Eiffel.&lt;br /&gt;
&lt;br /&gt;
It is a little bit difficult for simple input/output (used with predefined&lt;br /&gt;
''io'') because some features have different names. If your original software&lt;br /&gt;
heavily relies for example on the EiffelBase library, it may be '''very difficult'''.&lt;br /&gt;
For example, one must keep in mind that SmartEiffel.ARRAY inherit &lt;br /&gt;
SmartEiffel.COLLECTION and that ISE library also have a class COLLECTION. &lt;br /&gt;
By the way, subclasses of ISE.COLLECTION cannot be used. &lt;br /&gt;
The ISE.LINKED_LIST can be used in conjunction with SmartEiffel.ARRAY because &lt;br /&gt;
ISE.LINKED_LIST do not inherit ISE.COLLECTION (no clash).&lt;br /&gt;
&lt;br /&gt;
==Questions about Languages and/or Object-Oriented Programming==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;StaticVsDynamicType&amp;quot;&amp;gt;&lt;br /&gt;
===What is the difference between the Static and the Dynamic Type?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The static type of a variable is determined at compile-time, the dynamic type during run-time.&lt;br /&gt;
The dynamic type must conform to the static type (it may and often will be the same as the static type).&lt;br /&gt;
&lt;br /&gt;
E.g.: A variable might be declared to refer to an instance of class FRUIT (a_fruit: FRUIT), so the static type is FRUIT, but might be assigned an object of class APPLE (a_fruit := an_apple), which becomes the dynamic type. Obviously, APPLE has to be a descendant of FRUIT in this example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;DynamicTypePrediction&amp;quot;&amp;gt;&lt;br /&gt;
===What is type prediction?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Type prediction is when the compiler attempts to predict an expression's [[#StaticVsDynamicType|dynamic type]] at compile time.&lt;br /&gt;
&lt;br /&gt;
==Questions about the Eiffel language of the Liberty Eiffel project==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;CaseSensitivity&amp;quot;&amp;gt;&lt;br /&gt;
===Why is Liberty Eiffel case-sensitive?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In fact, like most computer languages, Eiffel does distinguish between upper and lower case.  Our decision is simply guided by the goals of legibility, organisation and simplification.&lt;br /&gt;
&lt;br /&gt;
As far as keywords are concerned, it is easier to distinguish them when they are always written in the same way.  Thus, we always write '''loop''', rather than '''Loop''' or even '''LoOp'''.  We have to get into good habits from now on in other matters too: this rule is going to be generalised so as to be even stricter in future.  From now on, lets all get into the habit of writing '''Current''', '''Void''' or '''True''', for example.&lt;br /&gt;
&lt;br /&gt;
Upper case is also used to distinguish class names from other names.  Thus, we can know that '''FOO''' is a class name and '''foo''' is not, without having to look elsewhere in the source code.&lt;br /&gt;
&lt;br /&gt;
A final advantage of the upper/lower case distinction is that it allows more precise error messages.  What makes work simpler for humans also simplifies it for compilers.&lt;br /&gt;
&lt;br /&gt;
===What is the semantics (meaning) of a &amp;lt;B&amp;gt;manifest string&amp;lt;/B&amp;gt;?===&lt;br /&gt;
It can certainly be important to know what really happens when you define&lt;br /&gt;
a constant STRING attribute by writing, for example: &lt;br /&gt;
 Message: STRING is &amp;quot;abc&amp;quot;&lt;br /&gt;
that constant attribute definition is in fact a compact way of writing:&lt;br /&gt;
 Message: STRING is&lt;br /&gt;
    once&lt;br /&gt;
       create Result.make(3)&lt;br /&gt;
       Result.extend('a')&lt;br /&gt;
       Result.extend('b')&lt;br /&gt;
       Result.extend('c')&lt;br /&gt;
    end&lt;br /&gt;
You realise, of course, that that function definition is a &amp;lt;TT&amp;gt;once&amp;lt;/TT&amp;gt; function and&lt;br /&gt;
consequently one string and one string only will be created, whatever happens.&lt;br /&gt;
When you are investigating performance, you also have to know the difference between:&lt;br /&gt;
 string := &amp;quot;abc&amp;quot;&lt;br /&gt;
and&lt;br /&gt;
 string := once &amp;quot;abc&amp;quot;&lt;br /&gt;
You have probably guessed that, if the instruction without &amp;lt;TT&amp;gt;once&amp;lt;/TT&amp;gt;&lt;br /&gt;
is in a loop, a new string is created each time that the line in question is executed!&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;TT&amp;gt;once&amp;lt;/TT&amp;gt; expression form above is only valid for manifest STRINGs and UNICODE_STRINGs.&lt;br /&gt;
Here is an example of a manifest UNICODE_STRING (note the capital U):&lt;br /&gt;
 unicode_string := once U&amp;quot;abc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The [[http://SmartEiffel.loria.fr/man/compile_to_c.html compile_to_c]] command's &lt;br /&gt;
&amp;lt;TT&amp;gt;-manifest_string_trace&amp;lt;/TT&amp;gt; option  &lt;br /&gt;
allows you to locate unwanted non-once manifest strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ConformanceVsCovariance&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Can you explain again the difference between &amp;lt;b&amp;gt;conformance&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;covariance&amp;lt;/b&amp;gt;?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Our paper [http://SmartEiffel.loria.fr/papers/papers.html#JOT2004&amp;quot; Conformance of agents in the Eiffel language]&lt;br /&gt;
has a note p.137 that looks surprising.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Note that the previous rules define conformance rules, this has&lt;br /&gt;
nothing to do with covariance or contravariance.&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
The concepts are distinct, even though there is a relation between&lt;br /&gt;
them.&lt;br /&gt;
 &lt;br /&gt;
Covariance is defined in terms of conformance. But assignment is&lt;br /&gt;
''also'' defined in terms of conformance.&lt;br /&gt;
 &lt;br /&gt;
That's exactly, and only, what our paper defines: assignment&lt;br /&gt;
rules. Those rules were &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; defined anywhere before. It's&lt;br /&gt;
important: &amp;lt;b&amp;gt;it's not that we disagreed with any earlier position. We&lt;br /&gt;
just filled a hole in the specification.&amp;lt;/b&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Also note that, even if the agent types notation uses square&lt;br /&gt;
brackets, it's totally unrelated to the generic classes type notation;&lt;br /&gt;
therefore generic classes rules cannot apply (except if proved&lt;br /&gt;
otherwise). An agent type is not a generic type, anymore than a tuple&lt;br /&gt;
type is a generic type.  Those are distinct concepts, only with a&lt;br /&gt;
similar notation.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;P&amp;gt;Conformance is fundamental in any typed language; on the other hand&lt;br /&gt;
covariance is &amp;quot;just&amp;quot; an Eiffel extra. Important, sure, but not as&lt;br /&gt;
fundamental as conformance. Our paper never speaks of covariance,&lt;br /&gt;
except in the note quoted above, and explained further here. Maybe the&lt;br /&gt;
paper should have explained the subtlety in so many words.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;CATCALL&amp;quot;&amp;gt;&lt;br /&gt;
===What is a CATCALL?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
In the Eiffel world ''CATCALL'' is about type safety problems which are still present in &lt;br /&gt;
the language.&lt;br /&gt;
In Eiffel, CATCALL is a short-hand for ''Changing Availability or Type of CALLs''.&lt;br /&gt;
&lt;br /&gt;
''Availability'' is about the exportation status of some method.&lt;br /&gt;
For example, when a method is redefined, it's exportation status can be&lt;br /&gt;
changed too.&lt;br /&gt;
&lt;br /&gt;
''Type of CALLs'' is about some possibly [[Glossary#Covariance|covariant]] redefinition.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;SCOOP&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===What is SCOOP ?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Eiffel, [[SCOOP]] refers to language support for distributed programming.&lt;br /&gt;
In the Eiffel world, it is an acronym for ''Simple Concurrent Object-Oriented Programming''.&lt;br /&gt;
SCOOP is not yet included in Liberty Eiffel and is certainly its most important missing feature.&lt;br /&gt;
&lt;br /&gt;
===Is there a style guide for Eiffel source code?===&lt;br /&gt;
Yes. Source code in Liberty tools and libraries should conform to the [[Coding Style Guide]]. It seems reasonable to use this as a reference for your own project.&lt;br /&gt;
&lt;br /&gt;
==Questions about libraries which comes along with Liberty Eiffel==&lt;br /&gt;
&lt;br /&gt;
===How should I read a file?===&lt;br /&gt;
In order to read a file, read a character and then use&lt;br /&gt;
last_character ONLY if end_of_input has not been reached&lt;br /&gt;
while reading the character.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
Before each read (except the very first), you have to test&lt;br /&gt;
end_of_input, because all read_* procedures require not&lt;br /&gt;
end_of_input. But why? This require means that if some&lt;br /&gt;
previous read failed because end of input has been reached,&lt;br /&gt;
then it is not valid to try to read again.&lt;br /&gt;
Example:&lt;br /&gt;
 file: TEXT_FILE_READ; file_name: STRING&lt;br /&gt;
 ...&lt;br /&gt;
 -- ''Assumming here that'' `file' ''and'' `file_name' ''are not'' [[Void|&amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt;]]:&lt;br /&gt;
 file.connect_to(file_name)&lt;br /&gt;
 if file.is_connected then&lt;br /&gt;
    from&lt;br /&gt;
       file.read_character&lt;br /&gt;
    until&lt;br /&gt;
       file.end_of_input&lt;br /&gt;
    loop&lt;br /&gt;
       io.put_character(file.last_character)&lt;br /&gt;
       file.read_character&lt;br /&gt;
    end&lt;br /&gt;
    file.disconnect&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
If you want to read the file line by line, then &amp;lt;tt&amp;gt;read_line&amp;lt;/tt&amp;gt;&lt;br /&gt;
or &amp;lt;tt&amp;gt;read_line_in&amp;lt;/tt&amp;gt; can be used. But the reading pattern&lt;br /&gt;
&amp;lt;B&amp;gt;is different&amp;lt;/B&amp;gt;. This is because after the last line of&lt;br /&gt;
the file has been read, then the last line is in &amp;lt;tt&amp;gt;last_string&amp;lt;/tt&amp;gt;&lt;br /&gt;
and has to be used.&lt;br /&gt;
Example:&lt;br /&gt;
 file: TEXT_FILE_READ; file_name: STRING&lt;br /&gt;
 ...&lt;br /&gt;
 -- ''Assumming here that'' `file' ''and'' `file_name' ''are not'' [[Void|&amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt;]]:&lt;br /&gt;
 file.connect_to(file_name)&lt;br /&gt;
 if file.is_connected then&lt;br /&gt;
    from&lt;br /&gt;
    until&lt;br /&gt;
       file.end_of_input&lt;br /&gt;
    loop&lt;br /&gt;
       file.read_line&lt;br /&gt;
       if file.end_of_input then&lt;br /&gt;
          -- The last line of the file does not end with a new&lt;br /&gt;
          -- line character. Remove this test if you don't care.&lt;br /&gt;
          std_output.put_string(file.last_string)&lt;br /&gt;
       else&lt;br /&gt;
          std_output.put_line(tfr.last_string)&lt;br /&gt;
       end&lt;br /&gt;
    end&lt;br /&gt;
    file.disconnect&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;B&amp;gt;Note: &amp;lt;/B&amp;gt;&amp;lt;tt&amp;gt;last_string&amp;lt;/tt&amp;gt; always returns the same STRING object, it's up&lt;br /&gt;
to you to make a copy if you need to keep the string value.&lt;br /&gt;
&lt;br /&gt;
You can read the examples in tutorial directory from the Liberty Eiffel distribution.&lt;br /&gt;
&lt;br /&gt;
==Questions about the tools of Liberty Eiffel==&lt;br /&gt;
&lt;br /&gt;
===Is it possible to do &amp;lt;B&amp;gt;incremental compilation&amp;lt;/B&amp;gt; with Liberty Eiffel?===&lt;br /&gt;
Because of the Liberty Eiffel type inference mechanism,&lt;br /&gt;
Liberty Eiffel always produces all needed C files from scratch. As old C files&lt;br /&gt;
are automatically saved, only modified C files are recompiled.&lt;br /&gt;
See &amp;lt;TT&amp;gt;[http://SmartEiffel.loria.fr/man/compile.html man/compile]&amp;lt;/TT&amp;gt; for details.&lt;br /&gt;
&lt;br /&gt;
===Is there a mechanism to &amp;lt;B&amp;gt;pre-compile&amp;lt;/B&amp;gt; libraries?===&lt;br /&gt;
No, there is no such mechanism in Liberty Eiffel. But if you're concerned&lt;br /&gt;
about compilation speed, don't worry, pre-computed libraries are not the only way to be fast !&lt;br /&gt;
Just try Liberty Eiffel, and you'll see :)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Is it possible to use the &amp;lt;B&amp;gt;Boehm-Demers-Weiser garbage collector&amp;lt;/B&amp;gt; with Liberty Eiffel?===&lt;br /&gt;
Yes.&lt;br /&gt;
&amp;lt;BR&amp;gt;You just have to pass the compiler option -bdw_gc and this should it be.&lt;br /&gt;
&lt;br /&gt;
===How to customise the &amp;lt;B&amp;gt;Garbage Collector&amp;lt;/B&amp;gt; for a new architecture?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
If your architecture needs special handling to get the GC working&lt;br /&gt;
(because the stack is not contiguous, because some registers are not&lt;br /&gt;
written on the stack on `setjmp'...) then you need to implement function&lt;br /&gt;
`mark_stack_and_registers' for your system in the file&lt;br /&gt;
&amp;lt;TT&amp;gt;SmartEiffel/sys/runtime/c/gc_lib.c&amp;lt;/TT&amp;gt;.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
If you get some message telling you that the stack direction is wrong, then&lt;br /&gt;
you should change macro definition to use the other generic code&lt;br /&gt;
(there is one generic code for each stack order).&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
In order to check the GC, you should be able to run all files of&lt;br /&gt;
the &amp;lt;TT&amp;gt;SmartEiffel/misc/benchmarks/gc&amp;lt;/TT&amp;gt; directory.&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How is Liberty Eiffel compiled?===&lt;br /&gt;
With Eiffel optimisation options -boost and -no_gc. The garbage collector is&lt;br /&gt;
indeed useless on the Liberty Eiffel commands: since Liberty Eiffel did not include a GC in its first versions, we were very careful about memory when we developed it.&lt;br /&gt;
&lt;br /&gt;
With C compilation optimisations turned on (it depends on the C compiler used;&lt;br /&gt;
we generally use gcc).&lt;br /&gt;
The resulting executables are stripped.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;External tools for Liberty Eiffel&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External tools for Liberty Eiffel==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Syntax highlighting&amp;quot;&amp;gt;&lt;br /&gt;
===Are there editors with support for Liberty Eiffel?===&lt;br /&gt;
&lt;br /&gt;
* [https://www.gnu.org/s/emacs/ Emacs] has support for syntax highlighting, indenting, flymake mode, code templates and more. For installation see the article ''[http://www.berenddeboer.net/eiffel/eiffel_and_emacs.html Editing Eiffel code with Emacs]'' from Berend de Boer but you may use the distributed version of &amp;lt;code&amp;gt;[http://git.savannah.gnu.org/cgit/liberty-eiffel.git/plain/work/eiffel.el eiffel.el]&amp;lt;/code&amp;gt; (in the work/ directory of the source distribution).&lt;br /&gt;
&lt;br /&gt;
* [http://www.vim.org Vim] also has similar support for Eiffel and [https://github.com/LibertyEiffel/vim-liberty-eiffel specific additions for Liberty Eiffel]&lt;br /&gt;
&lt;br /&gt;
* [https://atom.io/ Atom] has an [https://atom.io/packages/language-eiffel Eiffel package] available.&lt;br /&gt;
&lt;br /&gt;
* [http://www.macromates.com TextMate] has an [https://github.com/textmate/eiffel.tmbundle Eiffel bundle] available.&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.gnome.org/Apps/Gedit Gedit] offers syntax highlighting.&lt;br /&gt;
&lt;br /&gt;
* [http://www.scintilla.org/SciTE.html SciTE] offers syntax highlighting and folding.&lt;br /&gt;
&lt;br /&gt;
* On Windows [https://notepad-plus-plus.org/ Notepad++] offers syntax highlighting as well.&lt;br /&gt;
&lt;br /&gt;
* [https://www.editpadpro.com/editeiffel.html EditPad Pro] supports several features for Eiffel.&lt;br /&gt;
&lt;br /&gt;
===Is there a GUI or IDE for Liberty Eiffel?===&lt;br /&gt;
&lt;br /&gt;
An [https://github.com/Imhotup/LibertyEiffel-Eclipse-Plugin Eclipse-based IDE] is currently under development as part of [[GSoC]] 2016.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Liberty Eiffel debugger with GUI&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Is there a debugger for Liberty Eiffel with a GUI?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Currently not. There was a front end for the sedb (SmartEiffel debugger). It is called ''SmartEiffel Embedded Debugger Output Visualiser'' (sedbov).  It maps the key command from the sedb to a GUI. You can find it at https://opensvn.csie.org/traccgi/sedbov/wiki/WikiStart. It use the script language TCL/TK with the extension expect.  For information look at http://www.tcl.tk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;It is possible to create graphical applications?&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==GUI Toolkits==&lt;br /&gt;
&lt;br /&gt;
===It is possible to create graphical applications?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The external project [http://notabug.org/GermanGT/eiffel-iup eiffel-iup] is a plugin to the IUP toolkit, that allow a program to run in different systems without changes - the toolkit provides the application portability. Supported systems include: GTK+, Motif and Windows. The plugin is still not complete, but is stable and in continuous development. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;LibertyEiffelWiki&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External information about Eiffel==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Where can i find more information about Eiffel?&amp;quot;&amp;gt;&lt;br /&gt;
===Where can I find more information about Eiffel?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The news group news:comp.lang.eiffel has low post frequency.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;I am a beginner. Where can i find tutorials?&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===I am a beginner. Where can I find tutorials?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
You should study and compile the examples in the tutorials directory.&lt;br /&gt;
&lt;br /&gt;
Cetus contains links to tutorial papers (http://www.cetus-links.org/oo_eiffel.html).&lt;/div&gt;</summary>
		<author><name>GermanGT</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Liberty_Eiffel_Programming_Environment_FAQ&amp;diff=2541</id>
		<title>Liberty Eiffel Programming Environment FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Liberty_Eiffel_Programming_Environment_FAQ&amp;diff=2541"/>
		<updated>2016-11-24T05:38:20Z</updated>

		<summary type="html">&lt;p&gt;GermanGT: Add entry to graphical applications&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Frequently Asked Questions'''&lt;br /&gt;
==General purpose questions about the Liberty Eiffel project==&lt;br /&gt;
&amp;lt;div id=&amp;quot;LibertyName&amp;quot;&amp;gt;&lt;br /&gt;
===Where does the name &amp;quot;Liberty&amp;quot; come from?===&lt;br /&gt;
&lt;br /&gt;
As most Eiffel hackers know, Gustave Eiffel (after whom the language is named), also built the metal structure of the Liberty Statue.&lt;br /&gt;
&lt;br /&gt;
More trivia:&lt;br /&gt;
Some people may also know that I (Cyril) happen to live very near to Belfort, a town renowned for a sculpture of a lion by Auguste Bartholdi.  Bartholdi sculpted the metallic sheets that make the Liberty Statue such an awesome sight.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;MailingList&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Is there a Liberty Eiffel '''mailing list'''?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Yes! Liberty Eiffel users and developers can share their experiences&lt;br /&gt;
and ideas by subscribing to the&lt;br /&gt;
[mailto:libertyeiffel@librelist.com Liberty Eiffel official mailing list] by just sending an empty email to this address.&lt;br /&gt;
&lt;br /&gt;
Please, note that this list is not moderated. &lt;br /&gt;
Please, stay correct on that list.&lt;br /&gt;
&lt;br /&gt;
===Is it possible to have the complete '''source code of Liberty Eiffel'''?===&lt;br /&gt;
Since it is a free (as in freedom) Eiffel Compiler, the complete source&lt;br /&gt;
code of Liberty Eiffel is of course in the distribution. &lt;br /&gt;
The Eiffel source code for additional libraries is also provided. &lt;br /&gt;
See also this [[#CommercialApps|FAQ question]] which is related to [[License|licensing]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;CommercialApps&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Is it possible to use Liberty Eiffel for '''large/commercial applications'''?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is indeed possible to use Liberty Eiffel for a large application.&lt;br /&gt;
An Eiffel compiler is a really big project and Liberty Eiffel itself is fully&lt;br /&gt;
written in Eiffel.&lt;br /&gt;
Liberty Eiffel is completely free and any private company can use&lt;br /&gt;
it freely, and distribute (or sell) freely the products made with it.&lt;br /&gt;
They do not have to pay royalties.&lt;br /&gt;
&lt;br /&gt;
Also note that &amp;lt;B&amp;gt;only classes which are closely related to the&lt;br /&gt;
compiler itself are under GPL&amp;lt;/B&amp;gt; (actually, only the classes of directory&lt;br /&gt;
&amp;lt;TT&amp;gt;SmartEiffel/tools&amp;lt;/TT&amp;gt; are under GPL).&lt;br /&gt;
The other classes are &amp;lt;EM&amp;gt;not&amp;lt;/EM&amp;gt; under GPL in order to let people completely&lt;br /&gt;
free (i.e. all classes of &amp;lt;TT&amp;gt;lib&amp;lt;/TT&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Always keep in mind that Liberty Eiffel doesn't come&lt;br /&gt;
with any warranty (please read the COPYING file in the distribution).&lt;br /&gt;
As explained in the header of non-GPL files, the only important thing&lt;br /&gt;
is to keep the header unaltered when the corresponding source file&lt;br /&gt;
is provided in your product.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- continue update to Liberty here --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;SmallEiffel&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===What is &amp;lt;B&amp;gt;SmallEiffel&amp;lt;/B&amp;gt; compared to &amp;lt;B&amp;gt;SmartEiffel&amp;lt;/B&amp;gt;?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Sma&amp;lt;B&amp;gt;ll&amp;lt;/B&amp;gt;Eiffel is the former name of the Sma&amp;lt;B&amp;gt;rt&amp;lt;/B&amp;gt;Eiffel&lt;br /&gt;
project. At some point in time the development team thought the compiler had become smart&lt;br /&gt;
enough to warrant a renaming ;)  For a list of changes between the various Small-/SmartEiffel versions, have a look&lt;br /&gt;
[http://SmartEiffel.loria.fr/misc/HISTORY.html#1.0 there].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;HowCanIHelp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How can I help?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The best way to help Liberty Eiffel and its users is probably to &amp;lt;B&amp;gt;pick up&lt;br /&gt;
some area you're interested in, and develop&amp;lt;/B&amp;gt; your own code, libraries, tools or extensions with Liberty Eiffel,&lt;br /&gt;
and then release them to other users.&lt;br /&gt;
&lt;br /&gt;
A very good way to help us is to follow the&lt;br /&gt;
[[Get involved]] guidelines when you find some problem with Liberty Eiffel.&lt;br /&gt;
&lt;br /&gt;
===Why don't you &amp;lt;B&amp;gt;change this and add that&amp;lt;/B&amp;gt;?! It would be much better/cooler/whatever!===&lt;br /&gt;
People must understand that we can't always do everything. We simply&lt;br /&gt;
can't. Because we don't have the time. Whether we like it or not, we&lt;br /&gt;
also have other things to do than provide free stuff, modify our&lt;br /&gt;
compiler and/or libraries to please everybody. We do as much as we&lt;br /&gt;
can, but we don't do miracles, sorry.&lt;br /&gt;
&lt;br /&gt;
Since Liberty Eiffel is free of charge and open-source, people who do&lt;br /&gt;
need things we don't provide can always implement them and have them&lt;br /&gt;
benefit everybody. A good way to do this is to start working on it,&lt;br /&gt;
and ask other people (i.e. not the Liberty Eiffel team ;) ) to join and&lt;br /&gt;
help. See the [[#HowCanIHelp|How can I help?]] question.&lt;br /&gt;
&lt;br /&gt;
Alternatively, someone or some company who does need us to implement&lt;br /&gt;
something may always consider funding a bit the development of&lt;br /&gt;
Liberty Eiffel... After all, we've even heard that some people were&lt;br /&gt;
selling software and making a bit of money with it... ;)))&lt;br /&gt;
&lt;br /&gt;
===How do I '''keep informed''' about Liberty Eiffel?===&lt;br /&gt;
The best way is to keep an eye on our web pages,&lt;br /&gt;
more especially on the [http://www.liberty-eiffel.org/ Liberty Eiffel main website].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What &amp;lt;B&amp;gt;documentation&amp;lt;/B&amp;gt; is provided with Liberty Eiffel?===&lt;br /&gt;
The documentation provided with Liberty Eiffel is a transcript of what&lt;br /&gt;
you can find on the original Liberty Eiffel Web site, see the link to this wiki.&lt;br /&gt;
It is related only to the use and internals of Liberty Eiffel (yes,&lt;br /&gt;
we know we still have to improve it ;) ).&lt;br /&gt;
&lt;br /&gt;
For information and documentation about the Eiffel programming language, check&lt;br /&gt;
the links on our&lt;br /&gt;
[http://SmartEiffel.loria.fr/general/resources.html Internet resources page].&lt;br /&gt;
Note that we are not aware of any complete Eiffel language manual&lt;br /&gt;
freely available on the Web (yet?).&lt;br /&gt;
&lt;br /&gt;
===Why don't you &amp;lt;B&amp;gt;post more messages&amp;lt;/B&amp;gt; in newsgroups and/or mailing lists?===&lt;br /&gt;
First, because we strongly believe that too much information kills information.&lt;br /&gt;
Scientists call this &amp;quot;cognitive overload&amp;quot;. :)&lt;br /&gt;
&lt;br /&gt;
Second, because we don't have the time. It takes an awful amount of time to follow&lt;br /&gt;
discussions, whatever their quality. We try to do that. But it's even more&lt;br /&gt;
time-consuming to be part of them. So, we often have to choose between&lt;br /&gt;
posting/mailing, and working directly on Liberty Eiffel. Since our mailboxes tend&lt;br /&gt;
to overflood, we generally choose the latter :)&lt;br /&gt;
&lt;br /&gt;
===Is it difficult to switch from some commercial Eiffel compiler to Liberty Eiffel?===&lt;br /&gt;
If your original Eiffel software only uses simple types like INTEGER,&lt;br /&gt;
STRING, ARRAY, BOOLEAN, CHARACTER and DOUBLE, it is usually very simple&lt;br /&gt;
to modify your code in order to use Liberty Eiffel.&lt;br /&gt;
&lt;br /&gt;
It is a little bit difficult for simple input/output (used with predefined&lt;br /&gt;
''io'') because some features have different names. If your original software&lt;br /&gt;
heavily relies for example on the EiffelBase library, it may be '''very difficult'''.&lt;br /&gt;
For example, one must keep in mind that SmartEiffel.ARRAY inherit &lt;br /&gt;
SmartEiffel.COLLECTION and that ISE library also have a class COLLECTION. &lt;br /&gt;
By the way, subclasses of ISE.COLLECTION cannot be used. &lt;br /&gt;
The ISE.LINKED_LIST can be used in conjunction with SmartEiffel.ARRAY because &lt;br /&gt;
ISE.LINKED_LIST do not inherit ISE.COLLECTION (no clash).&lt;br /&gt;
&lt;br /&gt;
==Questions about Languages and/or Object-Oriented Programming==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;StaticVsDynamicType&amp;quot;&amp;gt;&lt;br /&gt;
===What is the difference between the Static and the Dynamic Type?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The static type of a variable is determined at compile-time, the dynamic type during run-time.&lt;br /&gt;
The dynamic type must conform to the static type (it may and often will be the same as the static type).&lt;br /&gt;
&lt;br /&gt;
E.g.: A variable might be declared to refer to an instance of class FRUIT (a_fruit: FRUIT), so the static type is FRUIT, but might be assigned an object of class APPLE (a_fruit := an_apple), which becomes the dynamic type. Obviously, APPLE has to be a descendant of FRUIT in this example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;DynamicTypePrediction&amp;quot;&amp;gt;&lt;br /&gt;
===What is type prediction?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Type prediction is when the compiler attempts to predict an expression's [[#StaticVsDynamicType|dynamic type]] at compile time.&lt;br /&gt;
&lt;br /&gt;
==Questions about the Eiffel language of the Liberty Eiffel project==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;CaseSensitivity&amp;quot;&amp;gt;&lt;br /&gt;
===Why is Liberty Eiffel case-sensitive?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In fact, like most computer languages, Eiffel does distinguish between upper and lower case.  Our decision is simply guided by the goals of legibility, organisation and simplification.&lt;br /&gt;
&lt;br /&gt;
As far as keywords are concerned, it is easier to distinguish them when they are always written in the same way.  Thus, we always write '''loop''', rather than '''Loop''' or even '''LoOp'''.  We have to get into good habits from now on in other matters too: this rule is going to be generalised so as to be even stricter in future.  From now on, lets all get into the habit of writing '''Current''', '''Void''' or '''True''', for example.&lt;br /&gt;
&lt;br /&gt;
Upper case is also used to distinguish class names from other names.  Thus, we can know that '''FOO''' is a class name and '''foo''' is not, without having to look elsewhere in the source code.&lt;br /&gt;
&lt;br /&gt;
A final advantage of the upper/lower case distinction is that it allows more precise error messages.  What makes work simpler for humans also simplifies it for compilers.&lt;br /&gt;
&lt;br /&gt;
===What is the semantics (meaning) of a &amp;lt;B&amp;gt;manifest string&amp;lt;/B&amp;gt;?===&lt;br /&gt;
It can certainly be important to know what really happens when you define&lt;br /&gt;
a constant STRING attribute by writing, for example: &lt;br /&gt;
 Message: STRING is &amp;quot;abc&amp;quot;&lt;br /&gt;
that constant attribute definition is in fact a compact way of writing:&lt;br /&gt;
 Message: STRING is&lt;br /&gt;
    once&lt;br /&gt;
       create Result.make(3)&lt;br /&gt;
       Result.extend('a')&lt;br /&gt;
       Result.extend('b')&lt;br /&gt;
       Result.extend('c')&lt;br /&gt;
    end&lt;br /&gt;
You realise, of course, that that function definition is a &amp;lt;TT&amp;gt;once&amp;lt;/TT&amp;gt; function and&lt;br /&gt;
consequently one string and one string only will be created, whatever happens.&lt;br /&gt;
When you are investigating performance, you also have to know the difference between:&lt;br /&gt;
 string := &amp;quot;abc&amp;quot;&lt;br /&gt;
and&lt;br /&gt;
 string := once &amp;quot;abc&amp;quot;&lt;br /&gt;
You have probably guessed that, if the instruction without &amp;lt;TT&amp;gt;once&amp;lt;/TT&amp;gt;&lt;br /&gt;
is in a loop, a new string is created each time that the line in question is executed!&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;TT&amp;gt;once&amp;lt;/TT&amp;gt; expression form above is only valid for manifest STRINGs and UNICODE_STRINGs.&lt;br /&gt;
Here is an example of a manifest UNICODE_STRING (note the capital U):&lt;br /&gt;
 unicode_string := once U&amp;quot;abc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The [[http://SmartEiffel.loria.fr/man/compile_to_c.html compile_to_c]] command's &lt;br /&gt;
&amp;lt;TT&amp;gt;-manifest_string_trace&amp;lt;/TT&amp;gt; option  &lt;br /&gt;
allows you to locate unwanted non-once manifest strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ConformanceVsCovariance&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Can you explain again the difference between &amp;lt;b&amp;gt;conformance&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;covariance&amp;lt;/b&amp;gt;?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Our paper [http://SmartEiffel.loria.fr/papers/papers.html#JOT2004&amp;quot; Conformance of agents in the Eiffel language]&lt;br /&gt;
has a note p.137 that looks surprising.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Note that the previous rules define conformance rules, this has&lt;br /&gt;
nothing to do with covariance or contravariance.&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
The concepts are distinct, even though there is a relation between&lt;br /&gt;
them.&lt;br /&gt;
 &lt;br /&gt;
Covariance is defined in terms of conformance. But assignment is&lt;br /&gt;
''also'' defined in terms of conformance.&lt;br /&gt;
 &lt;br /&gt;
That's exactly, and only, what our paper defines: assignment&lt;br /&gt;
rules. Those rules were &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; defined anywhere before. It's&lt;br /&gt;
important: &amp;lt;b&amp;gt;it's not that we disagreed with any earlier position. We&lt;br /&gt;
just filled a hole in the specification.&amp;lt;/b&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Also note that, even if the agent types notation uses square&lt;br /&gt;
brackets, it's totally unrelated to the generic classes type notation;&lt;br /&gt;
therefore generic classes rules cannot apply (except if proved&lt;br /&gt;
otherwise). An agent type is not a generic type, anymore than a tuple&lt;br /&gt;
type is a generic type.  Those are distinct concepts, only with a&lt;br /&gt;
similar notation.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;P&amp;gt;Conformance is fundamental in any typed language; on the other hand&lt;br /&gt;
covariance is &amp;quot;just&amp;quot; an Eiffel extra. Important, sure, but not as&lt;br /&gt;
fundamental as conformance. Our paper never speaks of covariance,&lt;br /&gt;
except in the note quoted above, and explained further here. Maybe the&lt;br /&gt;
paper should have explained the subtlety in so many words.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;CATCALL&amp;quot;&amp;gt;&lt;br /&gt;
===What is a CATCALL?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
In the Eiffel world ''CATCALL'' is about type safety problems which are still present in &lt;br /&gt;
the language.&lt;br /&gt;
In Eiffel, CATCALL is a short-hand for ''Changing Availability or Type of CALLs''.&lt;br /&gt;
&lt;br /&gt;
''Availability'' is about the exportation status of some method.&lt;br /&gt;
For example, when a method is redefined, it's exportation status can be&lt;br /&gt;
changed too.&lt;br /&gt;
&lt;br /&gt;
''Type of CALLs'' is about some possibly [[Glossary#Covariance|covariant]] redefinition.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;SCOOP&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===What is SCOOP ?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Eiffel, [[SCOOP]] refers to language support for distributed programming.&lt;br /&gt;
In the Eiffel world, it is an acronym for ''Simple Concurrent Object-Oriented Programming''.&lt;br /&gt;
SCOOP is not yet included in Liberty Eiffel and is certainly its most important missing feature.&lt;br /&gt;
&lt;br /&gt;
===Is there a style guide for Eiffel source code?===&lt;br /&gt;
Yes. Source code in Liberty tools and libraries should conform to the [[Coding Style Guide]]. It seems reasonable to use this as a reference for your own project.&lt;br /&gt;
&lt;br /&gt;
==Questions about libraries which comes along with Liberty Eiffel==&lt;br /&gt;
&lt;br /&gt;
===How should I read a file?===&lt;br /&gt;
In order to read a file, read a character and then use&lt;br /&gt;
last_character ONLY if end_of_input has not been reached&lt;br /&gt;
while reading the character.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
Before each read (except the very first), you have to test&lt;br /&gt;
end_of_input, because all read_* procedures require not&lt;br /&gt;
end_of_input. But why? This require means that if some&lt;br /&gt;
previous read failed because end of input has been reached,&lt;br /&gt;
then it is not valid to try to read again.&lt;br /&gt;
Example:&lt;br /&gt;
 file: TEXT_FILE_READ; file_name: STRING&lt;br /&gt;
 ...&lt;br /&gt;
 -- ''Assumming here that'' `file' ''and'' `file_name' ''are not'' [[Void|&amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt;]]:&lt;br /&gt;
 file.connect_to(file_name)&lt;br /&gt;
 if file.is_connected then&lt;br /&gt;
    from&lt;br /&gt;
       file.read_character&lt;br /&gt;
    until&lt;br /&gt;
       file.end_of_input&lt;br /&gt;
    loop&lt;br /&gt;
       io.put_character(file.last_character)&lt;br /&gt;
       file.read_character&lt;br /&gt;
    end&lt;br /&gt;
    file.disconnect&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
If you want to read the file line by line, then &amp;lt;tt&amp;gt;read_line&amp;lt;/tt&amp;gt;&lt;br /&gt;
or &amp;lt;tt&amp;gt;read_line_in&amp;lt;/tt&amp;gt; can be used. But the reading pattern&lt;br /&gt;
&amp;lt;B&amp;gt;is different&amp;lt;/B&amp;gt;. This is because after the last line of&lt;br /&gt;
the file has been read, then the last line is in &amp;lt;tt&amp;gt;last_string&amp;lt;/tt&amp;gt;&lt;br /&gt;
and has to be used.&lt;br /&gt;
Example:&lt;br /&gt;
 file: TEXT_FILE_READ; file_name: STRING&lt;br /&gt;
 ...&lt;br /&gt;
 -- ''Assumming here that'' `file' ''and'' `file_name' ''are not'' [[Void|&amp;lt;tt&amp;gt;Void&amp;lt;/tt&amp;gt;]]:&lt;br /&gt;
 file.connect_to(file_name)&lt;br /&gt;
 if file.is_connected then&lt;br /&gt;
    from&lt;br /&gt;
    until&lt;br /&gt;
       file.end_of_input&lt;br /&gt;
    loop&lt;br /&gt;
       file.read_line&lt;br /&gt;
       if file.end_of_input then&lt;br /&gt;
          -- The last line of the file does not end with a new&lt;br /&gt;
          -- line character. Remove this test if you don't care.&lt;br /&gt;
          std_output.put_string(file.last_string)&lt;br /&gt;
       else&lt;br /&gt;
          std_output.put_line(tfr.last_string)&lt;br /&gt;
       end&lt;br /&gt;
    end&lt;br /&gt;
    file.disconnect&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;B&amp;gt;Note: &amp;lt;/B&amp;gt;&amp;lt;tt&amp;gt;last_string&amp;lt;/tt&amp;gt; always returns the same STRING object, it's up&lt;br /&gt;
to you to make a copy if you need to keep the string value.&lt;br /&gt;
&lt;br /&gt;
You can read the examples in tutorial directory from the Liberty Eiffel distribution.&lt;br /&gt;
&lt;br /&gt;
==Questions about the tools of Liberty Eiffel==&lt;br /&gt;
&lt;br /&gt;
===Is it possible to do &amp;lt;B&amp;gt;incremental compilation&amp;lt;/B&amp;gt; with Liberty Eiffel?===&lt;br /&gt;
Because of the Liberty Eiffel type inference mechanism,&lt;br /&gt;
Liberty Eiffel always produces all needed C files from scratch. As old C files&lt;br /&gt;
are automatically saved, only modified C files are recompiled.&lt;br /&gt;
See &amp;lt;TT&amp;gt;[http://SmartEiffel.loria.fr/man/compile.html man/compile]&amp;lt;/TT&amp;gt; for details.&lt;br /&gt;
&lt;br /&gt;
===Is there a mechanism to &amp;lt;B&amp;gt;pre-compile&amp;lt;/B&amp;gt; libraries?===&lt;br /&gt;
No, there is no such mechanism in Liberty Eiffel. But if you're concerned&lt;br /&gt;
about compilation speed, don't worry, pre-computed libraries are not the only way to be fast !&lt;br /&gt;
Just try Liberty Eiffel, and you'll see :)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Is it possible to use the &amp;lt;B&amp;gt;Boehm-Demers-Weiser garbage collector&amp;lt;/B&amp;gt; with Liberty Eiffel?===&lt;br /&gt;
Yes.&lt;br /&gt;
&amp;lt;BR&amp;gt;You just have to pass the compiler option -bdw_gc and this should it be.&lt;br /&gt;
&lt;br /&gt;
===How to customise the &amp;lt;B&amp;gt;Garbage Collector&amp;lt;/B&amp;gt; for a new architecture?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
If your architecture needs special handling to get the GC working&lt;br /&gt;
(because the stack is not contiguous, because some registers are not&lt;br /&gt;
written on the stack on `setjmp'...) then you need to implement function&lt;br /&gt;
`mark_stack_and_registers' for your system in the file&lt;br /&gt;
&amp;lt;TT&amp;gt;SmartEiffel/sys/runtime/c/gc_lib.c&amp;lt;/TT&amp;gt;.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
If you get some message telling you that the stack direction is wrong, then&lt;br /&gt;
you should change macro definition to use the other generic code&lt;br /&gt;
(there is one generic code for each stack order).&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
In order to check the GC, you should be able to run all files of&lt;br /&gt;
the &amp;lt;TT&amp;gt;SmartEiffel/misc/benchmarks/gc&amp;lt;/TT&amp;gt; directory.&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How is Liberty Eiffel compiled?===&lt;br /&gt;
With Eiffel optimisation options -boost and -no_gc. The garbage collector is&lt;br /&gt;
indeed useless on the Liberty Eiffel commands: since Liberty Eiffel did not include a GC in its first versions, we were very careful about memory when we developed it.&lt;br /&gt;
&lt;br /&gt;
With C compilation optimisations turned on (it depends on the C compiler used;&lt;br /&gt;
we generally use gcc).&lt;br /&gt;
The resulting executables are stripped.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;External tools for Liberty Eiffel&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External tools for Liberty Eiffel==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Syntax highlighting&amp;quot;&amp;gt;&lt;br /&gt;
===Are there editors with support for Liberty Eiffel?===&lt;br /&gt;
&lt;br /&gt;
* [https://www.gnu.org/s/emacs/ Emacs] has support for syntax highlighting, indenting, flymake mode, code templates and more. For installation see the article ''[http://www.berenddeboer.net/eiffel/eiffel_and_emacs.html Editing Eiffel code with Emacs]'' from Berend de Boer but you may use the distributed version of &amp;lt;code&amp;gt;[http://git.savannah.gnu.org/cgit/liberty-eiffel.git/plain/work/eiffel.el eiffel.el]&amp;lt;/code&amp;gt; (in the work/ directory of the source distribution).&lt;br /&gt;
&lt;br /&gt;
* [http://www.vim.org Vim] also has similar support for Eiffel and [https://github.com/LibertyEiffel/vim-liberty-eiffel specific additions for Liberty Eiffel]&lt;br /&gt;
&lt;br /&gt;
* [https://atom.io/ Atom] has an [https://atom.io/packages/language-eiffel Eiffel package] available.&lt;br /&gt;
&lt;br /&gt;
* [http://www.macromates.com TextMate] has an [https://github.com/textmate/eiffel.tmbundle Eiffel bundle] available.&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.gnome.org/Apps/Gedit Gedit] offers syntax highlighting.&lt;br /&gt;
&lt;br /&gt;
* [http://www.scintilla.org/SciTE.html SciTE] offers syntax highlighting and folding.&lt;br /&gt;
&lt;br /&gt;
* On Windows [https://notepad-plus-plus.org/ Notepad++] offers syntax highlighting as well.&lt;br /&gt;
&lt;br /&gt;
* [https://www.editpadpro.com/editeiffel.html EditPad Pro] supports several features for Eiffel.&lt;br /&gt;
&lt;br /&gt;
===Is there a GUI or IDE for Liberty Eiffel?===&lt;br /&gt;
&lt;br /&gt;
An [https://github.com/Imhotup/LibertyEiffel-Eclipse-Plugin Eclipse-based IDE] is currently under development as part of [[GSoC]] 2016.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Liberty Eiffel debugger with GUI&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Is there a debugger for Liberty Eiffel with a GUI?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Currently not. There was a front end for the sedb (SmartEiffel debugger). It is called ''SmartEiffel Embedded Debugger Output Visualiser'' (sedbov).  It maps the key command from the sedb to a GUI. You can find it at https://opensvn.csie.org/traccgi/sedbov/wiki/WikiStart. It use the script language TCL/TK with the extension expect.  For information look at http://www.tcl.tk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;It is possible to create graphical applications?&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===It is possible to create graphical applications?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The external project [http://notabug.org/GermanGT/eiffel-iup eiffel-iup] is a plugin to the IUP toolkit, that allow a program to run in different systems without changes - the toolkit provides the application portability. Supported systems include: GTK+, Motif and Windows. The plugin is still not complete, but is stable and in continuous development. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;LibertyEiffelWiki&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External information about Eiffel==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Where can i find more information about Eiffel?&amp;quot;&amp;gt;&lt;br /&gt;
===Where can I find more information about Eiffel?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The news group news:comp.lang.eiffel has low post frequency.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;I am a beginner. Where can i find tutorials?&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===I am a beginner. Where can I find tutorials?===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
You should study and compile the examples in the tutorials directory.&lt;br /&gt;
&lt;br /&gt;
Cetus contains links to tutorial papers (http://www.cetus-links.org/oo_eiffel.html).&lt;/div&gt;</summary>
		<author><name>GermanGT</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Template:MainPageCommunity&amp;diff=2241</id>
		<title>Template:MainPageCommunity</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Template:MainPageCommunity&amp;diff=2241"/>
		<updated>2016-04-29T06:44:57Z</updated>

		<summary type="html">&lt;p&gt;GermanGT: Move eiffel-iup to Related projects section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* The [[Sandbox]] for all your experimentations&lt;br /&gt;
* [[Getting Started]] by bootstrapping Liberty from source&lt;br /&gt;
* [[Get in touch]] with Liberty team and other users&lt;br /&gt;
* [[Get involved]] in Liberty&lt;br /&gt;
* The day-to-day [[Grand blackboard]]&lt;br /&gt;
* Register to the [[LibertyEiffel-users list]]&lt;br /&gt;
* The [https://savannah.gnu.org/projects/liberty-eiffel/ GNU Savannah Project site] ...&lt;br /&gt;
&lt;br /&gt;
'''Bleeding edge'''&lt;br /&gt;
* [[GSoC|Google Summer of Code Portal]]&lt;br /&gt;
* Share your LibertyEiffel [[Coding patterns|tricks and tips]]!&lt;br /&gt;
* Automatic testing of current GIT HEAD by [http://et.liberty-eiffel.org ET]&lt;br /&gt;
* How to create a [[Release_Checklist|LibertyEiffel release]]&lt;br /&gt;
* [[ToDo|What we should improve in this wiki]]&lt;br /&gt;
&lt;br /&gt;
'''Related projects'''&lt;br /&gt;
* [http://smarteiffel.loria.fr SmartEiffel Compiler]&lt;br /&gt;
* [http://ese.sourceforge.net/ Enterprise SmartEiffel]&lt;br /&gt;
* [http://notabug.org/GermanGT/eiffel-iup eiffel-iup]&lt;/div&gt;</summary>
		<author><name>GermanGT</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Template:MainPageCommunity&amp;diff=2130</id>
		<title>Template:MainPageCommunity</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Template:MainPageCommunity&amp;diff=2130"/>
		<updated>2016-02-12T01:10:02Z</updated>

		<summary type="html">&lt;p&gt;GermanGT: Add &amp;quot;Related Projects&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* The [[Sandbox]] for all your experimentations&lt;br /&gt;
* [[Getting Started]] by bootstrapping Liberty from source&lt;br /&gt;
* [[Get in touch]] with Liberty team and other users&lt;br /&gt;
* [[Get involved]] in Liberty&lt;br /&gt;
* [[Related Projects]]&lt;br /&gt;
* The day-to-day [[Grand blackboard]]&lt;br /&gt;
* Register to the [[LibertyEiffel-users list]]&lt;br /&gt;
* The [https://savannah.gnu.org/projects/liberty-eiffel/ GNU Savannah Project site] ...&lt;br /&gt;
&lt;br /&gt;
'''Bleeding edge'''&lt;br /&gt;
* [[GSoC|Google Summer of Code Portal]]&lt;br /&gt;
* Share your LibertyEiffel [[Coding patterns|tricks and tips]]!&lt;br /&gt;
* Automatic testing of current GIT HEAD by [http://et.liberty-eiffel.org ET]&lt;br /&gt;
* How to create a [[Release_Checklist|LibertyEiffel release]]&lt;br /&gt;
&lt;br /&gt;
'''Related projects'''&lt;br /&gt;
* [http://smarteiffel.loria.fr SmartEiffel Compiler]&lt;br /&gt;
* [http://ese.sourceforge.net/ Enterprise SmartEiffel]&lt;/div&gt;</summary>
		<author><name>GermanGT</name></author>
	</entry>
	<entry>
		<id>https://wiki.liberty-eiffel.org/index.php?title=Related_Projects&amp;diff=2129</id>
		<title>Related Projects</title>
		<link rel="alternate" type="text/html" href="https://wiki.liberty-eiffel.org/index.php?title=Related_Projects&amp;diff=2129"/>
		<updated>2016-02-12T01:08:35Z</updated>

		<summary type="html">&lt;p&gt;GermanGT: Created page with &amp;quot;Here a list of related projects with Liberty Eiffel:  = eiffel-iup =  A wrapper for the IUP toolkit. IUP is a multi-platform toolkit for building graphical user interfaces. IU...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here a list of related projects with Liberty Eiffel:&lt;br /&gt;
&lt;br /&gt;
= eiffel-iup =&lt;br /&gt;
&lt;br /&gt;
A wrapper for the IUP toolkit. IUP is a multi-platform toolkit for building graphical user interfaces. IUP's purpose is to allow a program source code to be compiled in different systems without any modification. Its main advantages are:&lt;br /&gt;
&lt;br /&gt;
* High performance, due to the fact that it uses native interface elements.&lt;br /&gt;
* Fast learning by the user, due to the simplicity of its API.&lt;br /&gt;
&lt;br /&gt;
This wrapper is still under development, but is almost complete and we encourage you to use it and send feedback.&lt;br /&gt;
&lt;br /&gt;
The project website is: [https://notabug.org/GermanGT/eiffel-iup eiffel-iup]&lt;br /&gt;
&lt;br /&gt;
This package is released under the MIT license.&lt;/div&gt;</summary>
		<author><name>GermanGT</name></author>
	</entry>
</feed>