<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://dev.eiffel.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bertrand+Meyer</id>
		<title>EiffelStudio: an EiffelSoftware project - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://dev.eiffel.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bertrand+Meyer"/>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/Special:Contributions/Bertrand_Meyer"/>
		<updated>2026-04-09T11:12:40Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.24.1</generator>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Style_Guidelines&amp;diff=11107</id>
		<title>Style Guidelines</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Style_Guidelines&amp;diff=11107"/>
				<updated>2008-05-22T19:40:01Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Style Guidelines that EiffelStudio developers should use and are not intended or suggestions for developing code with the Eiffel language. The guidelines are to promote consistency in API design, making EiffelStudio's code base more readable to all.&lt;br /&gt;
&lt;br /&gt;
==Status of this page==&lt;br /&gt;
[I am starting this page by copy-pasting from existing references. It will be edited and cleaned up later on.[[User:Bertrand Meyer|Bertrand Meyer]] 12:35, 22 May 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
==From ''Object-Oriented Software Construction''==&lt;br /&gt;
&lt;br /&gt;
I mplementing the object-oriented method requires paying attention to many details of style, which a less ambitious approach might consider trifles.&lt;br /&gt;
COSMETICS MATTERS!&lt;br /&gt;
Although the rules appearing hereafter are not as fundamental as the principles of object-oriented software construction covered in earlier chapters, it would be foolish to dismiss them as just “cosmetics”. Good software is good in the large and in the small, in its high-level architecture and in its low-level details. True, quality in the details does not guarantee quality of the whole; but sloppiness in the details usually indicates that something more serious is wrong too. (If you cannot get the cosmetics right, why should your customers believe that you can master the truly difficult aspects?) A serious engineering process requires doing everything right: the grandiose and the mundane.&lt;br /&gt;
So you should not neglect the relevance of such seemingly humble details as text layout and choice of names. True, it may seem surprising to move on, without lowering our level of attention, from the mathematical notion of sufficient completeness in formal specifications (in the chapter on abstract data types) to whether a semicolon should be preceded by a space (in the present chapter). The explanation is simply that both issues deserve our care, in the same way that when you write quality O-O software both the design and the realization will require your attention.&lt;br /&gt;
We can take a cue from the notion of style in its literary sense. Although the first determinant of good writing is the author’s basic ability to tell a story and devise a coherent structure, no text is successful until everything works: every paragraph, every sentence and every word.&lt;br /&gt;
Applying the rules in practice&lt;br /&gt;
Some of the rules of this chapter can be checked or, better yet, enforced from the start by software tools. Tools will not do everything, however, and there is no substitute for care in writing every piece of the software.&lt;br /&gt;
There is often a temptation to postpone the application of the rules, writing things casually at first and thinking “I will clean up everything later on; I do not even know how much of this will eventually be discarded”. This is not the recommended way. Once you get used to the rules, they do not add any significant delay to the initial writing of the software; even without special tools, it is always more costly to fix the text later than to write it properly from the start. And given the pressure on software developers, there is ever a risk that you will forget or not find the time to clean things up. Then someone who is asked later to take up your work will waste more time than it would have cost you to write the proper header comments, devise the right feature names, apply the proper layout. That someone may be you.&lt;br /&gt;
Terseness and explicitness&lt;br /&gt;
Software styles have oscillated between the terse and the verbose. In programming languages, the two extremes are perhaps APL and Cobol. The contrast between the Fortran-C-C++ line and the Algol-Pascal-Ada tradition — not just the languages themselves, but the styles they have bred — is almost as stark.&lt;br /&gt;
What matters for us is clarity and, more generally, quality. Extreme forms of terseness and verbosity can both work against these goals. Cryptic C programs are unfortunately not limited to the famous “obfuscated C” and “Obfuscated C++” contests; but the almost equally famous DIVIDE DAYS BY 7 GIVING WEEKS of Cobol is a waste of everyone’s attention.&lt;br /&gt;
The style that follows from this chapter’s rules is a particular mix of Algol-like explicitness (although not, it is hoped, verbosity) and telegram-style terseness. It never begrudges keystrokes, even lines, when they truly help make the software readable; for example, you will find rules that enjoin using clear identifiers based on full words, not abbreviations, as it is foolish to save a few letters by calling a feature disp (ambiguous) rather than display (clear and precise), or a class ACCNT (unpronounceable) rather than ACCOUNT. There is no tax on keystrokes. But at the same time when it comes to eliminating waste and unneeded redundancies the rules below are as pitiless as the recommendations of a General Accounting Office Special Commission on Improving Government. They limit header comments to indispensable words, getting rid of all the non-essential “the” and other such amenities; they proscribe over-qualification of feature names (as in account_balance in a class ACCOUNT, where balance is perfectly sufficient); against dominant mores, they permit the grouping of related components of a complex construct on a single line, as in from i := 1 invariant i &amp;lt;= n until i = n loop; and so on.&lt;br /&gt;
This combination of terseness and explicitness is what you should seek in your own texts. Do not waste space, as exaggerated size will in the end mean exaggerated complexity; but do not hesitate to use space when it is necessary to enhance clarity.&lt;br /&gt;
Also remember, if like many people you are concerned about how much smaller the text of an object-oriented implementation will be than the text of a comparable C, Pascal, Ada or Fortran program, that the only interesting answer will appear at the level of a significant system or subsystem. If you express a basic algorithm — at the level of Quicksort, say, or Euclid’s algorithm — in C and in the notation of this book, expect the O-O version to be at least as large. In many cases, if you apply the principles thoroughly, it will be larger, since it will include assertions and more type information. Yet in ISE’s experience of looking at medium-scale systems we have sometimes found (without being able to give a general law, as the circumstances vary considerably) the object-oriented solution to be several times smaller. Why? This is not due to terseness at the “micro” level but to systemwide application of the architectural techniques of the O-O method:&lt;br /&gt;
Genericity is one of the key factors. We have found C programs that repeated essentially the same C code many times to handle different types. With a generic class — or for that matter a generic Ada package — you immediately get rid of that redundancy. It is disturbing in this respect to see that Java, a recent O-O language based on C, does not support genericity.&lt;br /&gt;
Inheritance is also fundamental in gathering commonalities and removing duplications.&lt;br /&gt;
Dynamic binding replaces many complex decision structures by much shorter calls.&lt;br /&gt;
Assertions and the associated idea of Design by Contract avoid redundant error checking, a principal source of bloat.&lt;br /&gt;
The exception mechanism gets rid of some error code.&lt;br /&gt;
If you are concerned with source size, make sure to concentrate on these architectural aspects. You should also be terse in expressing algorithms, but never skimp on keystrokes at the expense of clarity.&lt;br /&gt;
The role of convention&lt;br /&gt;
Most rules define a single permissible form, with no variants. The few exceptions include font use, which is governed by external considerations (what looks good in a book may not be visible on overhead transparencies), and semicolons, for which there exist two opposite schools with equally forceful arguments (although we will have a few universal rules anyway). In all other cases, in line with the introductory methodology chapter’s exhortations against wishy-washiness, the rules leave about as much room to doubt as a past due reminder from the Internal Revenue Service.&lt;br /&gt;
The rules are rooted in a careful analysis of what works and what works less well, resulting from many years of observation; some of the rationale will appear in the discussion. Even so, some rules may appear arbitrary at first, and indeed in a few cases the decision is a matter of taste, so that reasonable persons working from the same assumptions may disagree. If you object to one of the recommended conventions, you should define your own, provided you explain it in detail and document it explicitly; but do think carefully before making such a decision, so obvious are the advantages of abiding by a universal set of rules that have been systematically applied to thousands of classes over more than ten years, and that many people know and understand.&lt;br /&gt;
As noted in an earlier chapter (in the more general context of design principles), many of the style rules were originally developed for libraries, and then found their way into ordinary software development. In object technology, of course, all software is developed under the assumption that even if it is not reusable yet it might eventually be made reusable, so it is natural to apply the same style rules right from the start.&lt;br /&gt;
Self-practice&lt;br /&gt;
Like the design rules of the preceding chapters, the style rules which follow have been carefully applied to the many examples of this book. The reasons are obvious: one should practice what one preaches; and, more fundamentally, the rules do support clarity of thought and expression, which can only be good for a detailed presentation of the object-oriented method.&lt;br /&gt;
The only exceptions are a few occasional departures from the rules on software text layout. These rules do not hesitate to spread texts over many lines, for example by requiring that every assertion clause have its own label. Lines are not a scarce resource on computer screens; it has been observed that with the computer age we are reversing the direction of the next-to-last revolution in written communication, the switch from papyrus rolls to page-structured books. But this text is definitely a book, structured into pages, and a constant application of the layout-related rules would have made it even bigger than it is. &lt;br /&gt;
The cases of self-dispensation affect only two or three layout-related rules, and will be noted in their presentation below. Any exception only occurs after the first few examples of a construct in the book have applied the rules scrupulously.&lt;br /&gt;
Such exceptions are only justified for a paper presentation. Actual software texts should apply the rules literally.&lt;br /&gt;
Discipline and creativity&lt;br /&gt;
It would be a mistake to protest against the rules of this chapter (and others) on the grounds that they limit developer creativity. A consistent style favors rather than hampers creativity by channeling it to where it matters. A large part of the effort of producing software is spent reading existing software and making others read what is being written. Individual vagaries benefit no one; common conventions help everyone.&lt;br /&gt;
Some of the software engineering literature of the nineteen-seventies propounded the idea of “egoless programming”: developing software so that it does not reflect anything of its authors’ personality, thereby making developers interchangeable. Applied to system design, this goal is clearly undesirable, even if some managers may sometimes long for it (as in this extract of a programming management book quoted by Barry Boehm: “ºthe programmer[‘s] creative instincts should be totally dulled to insure uniform and understandable programming”, to which Boehm comments: “Given what we know about programmers and their growth motivation, such advice is a clear recipe for disaster”).&lt;br /&gt;
What quality software requires is egoful design with egoless expression.&lt;br /&gt;
More than style standards, what would seem to require justification is the current situation of software development, with its almost total lack of style standards. In no other discipline that demands to be called “engineering” is there such room for such broad personal variations of whim and fancy. To become more professional, software development needs to regulate itself.&lt;br /&gt;
CHOOSING THE RIGHT NAMES&lt;br /&gt;
The first aspect that we need to regulate is the choice of names. Feature names, in particular, will be strictly controlled for everyone’s benefit.&lt;br /&gt;
General rules&lt;br /&gt;
What matters most is the names of classes and features which will be used extensively by the authors of classes that rely on yours.&lt;br /&gt;
For feature and class names, use full words, not abbreviations, unless the abbreviations are widely accepted in the application domain. In a class PART describing parts in an inventory control system, call number, not num, the feature (query) giving the part number. Typing is cheap; software maintenance is expensive. An abbreviation such as usa in a Geographical Information System or copter in a flight control system, having gained an independent status as a word of its own, is of course acceptable. In addition, a few standard abbreviations have gained recognition over the years, such as PART for PARTIAL in class names such as PART_COMPARABLE describing objects equipped with a partial order relation.&lt;br /&gt;
In choosing names, aim for clarity. Do not hesitate to use several words connected by underscores, as in ANNUAL_RATE, a class name, or yearly_premium, a feature name.&lt;br /&gt;
Although modern languages do not place any limit on the length of identifiers, and treat all letters as significant, name length should remain reasonable. Here the rule is not the same for classes and for features. Class names are input only occasionally (in class headers, type declarations, inheritance clauses and a few other cases) and should describe an abstraction as completely as possible, so PRODUCT_QUANTITY_INDEX_EVALUATOR may be fine. For features, there is seldom a need for more than two or possibly three underscore-connected words. In particular, do not overqualify feature names. If a feature name appears too long, it is usually because it is overqualified:&lt;br /&gt;
Composite Feature Name rule&lt;br /&gt;
Do not include in a feature name the name of the underlying data abstraction (which should serve as the class name).&lt;br /&gt;
&lt;br /&gt;
The feature giving the part number in class PART should be called just number, not part_number. Such over-qualification is a typical beginner’s mistake; the resulting names obscure rather than illuminate the text. Remember that every use of the feature will unambiguously indicate the class, as in part1 l number where part1 must have been declared with a certain type, PART or a descendant.&lt;br /&gt;
For composite names, it is better to avoid the style, popularized by Smalltalk and also used in such libraries as the X Window System, of joining several words together and starting the internal ones with an upper-case letter, as in yearlyPremium. Instead, separate components with underscores, as in yearly_ premium. The use of internal upper-case letters is ugly; it conflicts with the conventions of ordinary language; and it leads to cryptic names, hence to possible errors (compare aLongAndRatherUnreadableIdentifier with an_even_longer_but_ perfectly_clear_choice_of_name).&lt;br /&gt;
Sometimes, every instance of a certain class contains a field representing an instance of another class. This suggests using the class name also as attribute name. You may for example have defined a class RATE and, in class ACCOUNT, need one attribute of type RATE, for which it seems natural to use the name rate — in lower case, according to the rules on letter case stated below. Although you should try to find a more specific name, you may, if this fails, just declare the feature as rate: RATE. The rules on identifier choice explicitly permit assigning the same name to a feature and a class. Avoid the style of prefixing the name with the, as in the_rate, which only adds noise.&lt;br /&gt;
Local entities and routine arguments&lt;br /&gt;
The emphasis on clear, spelled-out names applies to features and classes. Local entities and arguments of a routine only have a local scope, so they do not need to be as evocative. Names that carry too much meaning might almost decrease the software’s readability by giving undue weight to ancillary elements. So it is appropriate to declare local entities (here in routines of TWO_WAY_LIST in the Base libraries) as&lt;br /&gt;
move (i: INTEGER) is&lt;br /&gt;
		-- Move cursor i positions, or after if i is too large.&lt;br /&gt;
	local&lt;br /&gt;
		c: CURSOR; counter: INTEGER; p: like FIRST_ELEMENT&lt;br /&gt;
	º&lt;br /&gt;
remove is&lt;br /&gt;
		-- Remove current item; move cursor to right neighbor (of after if none).&lt;br /&gt;
	local&lt;br /&gt;
		succ, pred, removed: like first_element&lt;br /&gt;
	º&lt;br /&gt;
If succ and pred had been features they would have been called successor and predecessor. It is also common to use the names new for a local entity representing a new object to be created by a routine, and other for an argument representing an object of the same type as the current one, as in the declaration for clone in GENERAL:&lt;br /&gt;
frozen clone (other: GENERAL): like other isº&lt;br /&gt;
Letter case&lt;br /&gt;
Letter case is not significant in our notation, as it is too dangerous to let two almost identical identifiers denote different things. But strongly recommended guidelines help make class texts consistent and readable:&lt;br /&gt;
Class names appear in all upper case: POINT, LINKED_LIST, PRICING_MODEL. Formal generic parameters too, usually with just one letter: G.&lt;br /&gt;
Names of non-constant attributes, routines other than once functions, local entities and routine arguments appear in all lower case: balance, deposit, succ, i.&lt;br /&gt;
Constant attributes have their first letter in upper case and the rest in lower case: Pi: INTEGER is 3.1415926524; Welcome_message: STRING is &amp;quot;Welcome!&amp;quot;. This applies to unique values, which are constant integers.&lt;br /&gt;
The same convention applies to once functions, the equivalent of constants for non-basic types: Error_window, Io. Our first example, the complex number i, remained in lower case for compatibility with mathematical conventions.&lt;br /&gt;
This takes care of developer-chosen names. For reserved words, we distinguish two categories. Keywords such as do and class play a strictly syntactic role; they are written in lower case, and will appear in boldface (see below) in printed texts. A few reserved words are not keywords because they carry an associated semantics; written with an initial upper case since they are similar to constants, they include Current, Result, Precursor, True and False. &lt;br /&gt;
Grammatical categories&lt;br /&gt;
Precise rules also govern the grammatical category of the words from which identifiers are derived. In some languages, these rules can be applied without any hesitation; in English, as noted in an earlier chapter, they will leave more flexibility.&lt;br /&gt;
The rule for class names has already been given: you should always use a noun, as in ACCOUNT, possibly qualified as in LONG_TERM_SAVINGS_ACCOUNT, except for the case of deferred classes describing a structural property, which may use an adjective as in NUMERIC or REDEEMABLE.&lt;br /&gt;
Routine names should faithfully reflect the Command-Query separation principle:&lt;br /&gt;
Procedures (commands) should be verbs in the infinitive or imperative, possibly with complements: make, move, deposit, set_color.&lt;br /&gt;
Attributes and functions (queries) should never be imperative or infinitive verbs; never call a query get_value, but just value. Non-boolean query names should be nouns, such as number, possibly qualified as in last_month_balance. Boolean queries should use adjectives, as in full. In English, because of possible confusions between adjectives and verbs (empty, for example, could mean “is this empty?” or “empty this!”), a frequent convention for boolean queries is the is_ form, as in is_empty.&lt;br /&gt;
Standard names&lt;br /&gt;
You will have noted, throughout this book, the recurrence of a few basic names, such as put and item. They are an important part of the method.&lt;br /&gt;
Many classes will need features representing operations of a few basic kinds: insert an element into a structure, replace the value of an element, access a designated elementº Rather than devising specific names for the variants of these operations in every class, it is preferable to apply a standard terminology throughout.&lt;br /&gt;
Here are the principal standard names. We can start with creation procedures, for which the recommended is make for the most common creation procedure of a class. Non-vanilla creation procedures may be called make_some_qualification, for example make_polar and make_cartesian for a POINT or COMPLEX class.&lt;br /&gt;
For commands the most common names are:&lt;br /&gt;
extend	Add an element.&lt;br /&gt;
replace	Replace an element.&lt;br /&gt;
force	Like put but may work in more cases; for example put for arrays has a precondition to require the index to be within bounds, but force has no precondition and will resize the array if necessary.&lt;br /&gt;
remove	Remove an (unspecified) element.&lt;br /&gt;
prune	Remove a specific element.&lt;br /&gt;
wipe_out	Remove all elements.&lt;br /&gt;
&lt;br /&gt;
For non-boolean queries (attributes or functions):&lt;br /&gt;
item	The basic query for accessing an element: in ARRAY, the element at a given index; in STACK classes, the stack top; in QUEUE classes, the oldest element; and so on.&lt;br /&gt;
infix &amp;quot;@&amp;quot;	A synonym for item in a few cases, notably ARRAY.&lt;br /&gt;
count	Number of usable elements in a structure.&lt;br /&gt;
capacity	Physical size allocated to a bounded structure, measured in number of potential elements. The invariant should include 0 &amp;lt;= count and count &amp;lt;= capacity.&lt;br /&gt;
&lt;br /&gt;
For boolean queries:&lt;br /&gt;
empty	Is the structure devoid of elements?&lt;br /&gt;
full	Is there no more room in the representation to add elements? (Normally the same as count = capacity.)&lt;br /&gt;
has	Is a certain element present? (The basic membership test.)&lt;br /&gt;
extendible	Can an element be added? (May serve as a precondition to extend.)&lt;br /&gt;
prunable	Can an element be removed? (May serve as a precondition to remove and prune.)&lt;br /&gt;
readable	Is there an accessible element? (May serve as precondition to item and remove.)&lt;br /&gt;
writable	Is it possible to change an element? (May variously serve as precondition to extend, replace, put etc.)&lt;br /&gt;
&lt;br /&gt;
A few name choices which may seem strange at first are justified by considerations of clarity and consistency. For example prune goes with prunable and extend with extendible; delete and add might seem more natural, but then s l deletable and s l addable would carry the wrong connotation, since the question is not whether s can be deleted or added but whether we can add elements to it or delete elements from it. The verbs prune and extend, with the associated queries, convey the intended meaning.&lt;br /&gt;
The benefits of consistent naming&lt;br /&gt;
The set of names sketched above is one of the elements that most visibly contribute to the distinctive style of software construction developed from the principles of this book.&lt;br /&gt;
Is the concern for consistency going too far? One could fear that confusion could result from routines that bear the same name but internally do something different. For example item for a stack will return the top element, and for an array will return an element corresponding to the index specified by the client.&lt;br /&gt;
With a systematic approach to O-O software construction, using static typing and Design by Contract, this fear is not justified. To learn about a feature, a client author can rely on four kinds of property, all present in the short form of the enclosing class:&lt;br /&gt;
Its name.&lt;br /&gt;
Its signature (number and type of arguments if a routine, type of result if a query).&lt;br /&gt;
Its precondition and postcondition if any.&lt;br /&gt;
Its header comment.&lt;br /&gt;
A routine also has a body, but that is not part of what client authors are supposed to use.&lt;br /&gt;
Three of these elements will differ for the variants of a basic operation. For example in the short form of class STACK you may find the feature&lt;br /&gt;
put (x: G)&lt;br /&gt;
		-- Push x on top.&lt;br /&gt;
	require&lt;br /&gt;
		writable: not full&lt;br /&gt;
	ensure&lt;br /&gt;
		not_empty: not empty&lt;br /&gt;
		pushed: item = x&lt;br /&gt;
whereas its namesake will appear in ARRAY as&lt;br /&gt;
put (x: G; i: INTEGER)&lt;br /&gt;
		-- Replace by x the entry of index i&lt;br /&gt;
	require&lt;br /&gt;
		not_too_small: i &amp;gt;= lower&lt;br /&gt;
		not_too_large: i &amp;lt;= upper&lt;br /&gt;
	ensure&lt;br /&gt;
		replaced: item (i) = x&lt;br /&gt;
The signatures are different (one variant takes an index, the other does not); the preconditions are different; the postconditions are different; and the header comments are different. Using the same name put, far from creating confusion, draws the reader’s attention to the common role of these routines: both provide the basic element change mechanism.&lt;br /&gt;
This consistency has turned out to be one of the most attractive aspects of the method and in particular of the libraries. New users take to it quickly; then, when exploring a new class which follows the standard style, they feel immediately at home and can zero in on the features that they need.&lt;br /&gt;
USING CONSTANTS&lt;br /&gt;
Many algorithms will rely on constants. As was noted in an early chapter of this book, constants are widely known for the detestable practice of changing their values; we should prepare ourselves against the consequences of such fickleness.&lt;br /&gt;
Manifest and symbolic constants&lt;br /&gt;
The basic rule is that uses of constants should not explicitly rely on the value:&lt;br /&gt;
Symbolic Constant principle&lt;br /&gt;
Do not use a manifest constant, other than the zero elements of basic operations, in any construct other than a symbolic constant declaration.&lt;br /&gt;
&lt;br /&gt;
In this principle, a manifest constant is a constant given explicitly by its value, as in 50 (integer constant) or &amp;quot;Cannot find file&amp;quot; (string constant). The principle bars using instructions of the form&lt;br /&gt;
population_array l make (1, 50)&lt;br /&gt;
or&lt;br /&gt;
print (&amp;quot;Cannot find file&amp;quot;)						-- See mitigating comment below about this case&lt;br /&gt;
Instead, you should declare the corresponding constant attributes, and then, in the bodies of the routines that need the values, denote them through the attribute names:&lt;br /&gt;
US_state_count: INTEGER is 50&lt;br /&gt;
File_not_found: STRING is &amp;quot;Cannot find file&amp;quot;&lt;br /&gt;
º&lt;br /&gt;
population_array l make (1, state_count)&lt;br /&gt;
º&lt;br /&gt;
print (file_not_found)&lt;br /&gt;
The advantage is obvious: if a new state is added, or the message needs to be changed, you have only have to update one easy-to-locate declaration.&lt;br /&gt;
The use of 1 together with state_count in the first instruction is not a violation of the principle, since its prohibition applies to manifest constants “other than zero elements of basic operations”. These zero elements, which you may use in manifest form, include the integers 0 and 1 (zero elements of addition and multiplication), the real number 0.0, the null character written '%0', the empty string &amp;quot; &amp;quot;. Using a symbolic constant One every time you need to refer to the lower bound of an array (1 using the default convention) would lead to an unsustainable style — pedantic, and in fact less readable because of its verbosity. Sometimes, Freud is supposed to have said, a cigar is just a cigar; sometimes One is just 1.&lt;br /&gt;
Some other times 1 is just a system parameter that happens to have the value one today but could become 4,652 later — its role as addition’s zero element being irrelevant. Then it should be declared as a symbolic constant, as in Processor_count: INTEGER is 1 in a system that supports multiple processors and is initially applied to one processor. &lt;br /&gt;
The Symbolic Constant principle may be judged too harsh in the case of simple manifest strings used just once, such as &amp;quot;Cannot find file&amp;quot; above. Some readers may want to add this case to the exception already stated in the principle (replacing the qualification by “other than manifest string constants used only once in the same class, and zero elements of basic operations”). This book has indeed employed a few manifest constants in simple examples. Such a relaxation of the rule is acceptable, but in the long run it is probably preferable to stick to the rule as originally given even if the result for string constants looks a little pedantic at times. One of the principal uses of string constants, after all, is for messages to be output to users; when a successful system initially written for the home market undergoes internationalization, it will be that much less translation work if all the user-visible message strings (at least any of them that actually appear in the software text) have been put in symbolic constant declarations.&lt;br /&gt;
Where to put constant declarations&lt;br /&gt;
If you need more than a handful of local constant attributes in a class, you have probably uncovered a data abstraction — a certain concept characterized by a number of numeric or character parameters.&lt;br /&gt;
It is desirable, then, to group the constant declarations into a class, which can serve as ancestor to any class needing the constants (although some O-O designers prefer to use the client relation in this case). An example in the Base libraries is the class ASCII, which declares constant attributes for the different characters in the ASCII character set and associated properties.&lt;br /&gt;
HEADER COMMENTS AND INDEXING CLAUSES&lt;br /&gt;
Although the formal elements of a class text should give as much as possible of the information about a class, they must be accompanied by informal explanations. Header comments of routines and feature clause answer this need together with the indexing clause of each class.&lt;br /&gt;
Routine header comments: an exercise in corporate downsizing&lt;br /&gt;
Like those New York street signs that read “Don’t even think of parking here!”, the sign at the entrance of your software department should warn “Don’t even think of writing a routine without a header comment”. The header comment, coming just after the is for a routine, expresses its purpose concisely; it will be kept by the short and flat-short forms:&lt;br /&gt;
distance_to_origin: REAL is&lt;br /&gt;
			-- Distance to point (0, 0)&lt;br /&gt;
		local&lt;br /&gt;
			origin: POINT&lt;br /&gt;
		do&lt;br /&gt;
			!! origin&lt;br /&gt;
			Result := distance (origin)&lt;br /&gt;
		end&lt;br /&gt;
Note the indentation: one step further than the start of the routine body, so that the comment stands out.&lt;br /&gt;
Header comments should be informative, clear, and terse. They have a whole style of their own, which we can learn by looking at an initially imperfect example and improve it step by step. In a class CIRCLE we might start with&lt;br /&gt;
tangent_ from (p: POINT): LINE is&lt;br /&gt;
		-- Return the tangent line to the current circle going through the point p,&lt;br /&gt;
		-- if the point is outside of the current circle.&lt;br /&gt;
	require&lt;br /&gt;
		outside_circle: not has (p)&lt;br /&gt;
	º&lt;br /&gt;
There are many things wrong here. First, the comment for a query, as here, should not start with “Return theº” or “Compute theº”, or in general use a verbal form; this would go against the Command-Query Separation principle. Simply name what the query returns, typically using a qualified noun for a non-boolean query (we will see below what to use for a boolean query and a command). Here we get:&lt;br /&gt;
		-- The tangent line to the current circle going through the point p,&lt;br /&gt;
		-- if the point p is outside of the current circle&lt;br /&gt;
Since the comment is not a sentence but simply a qualified noun, the final period disappears. Next we can get rid of the auxiliary words, especially the, where they are not required for understandability. Telegram-like style is desirable for comments. (Remember that readers in search of literary frills can always choose Proust novels instead.)&lt;br /&gt;
		--Tangent line to current circle from point p,&lt;br /&gt;
		-- if point p is outside current circle&lt;br /&gt;
The next mistake is to have included, in the second line, the condition for the routine’s applicability; the precondition, not has (p), which will be retained in the short form where it appears just after the header comment, expresses this condition clearly and unambiguously. There is no need to paraphrase it: this could lead to confusion, if the informal phrasing seems to contradict the formal precondition, or even to errors (a common oversight is a precondition of the form x &amp;gt;= 0 with a comment stating “applicable only to positive x”, rather than “non-negative”); and there is always a risk that during the software’s evolution the precondition will be updated but not the comment. Our example becomes:&lt;br /&gt;
		-- Tangent line to current circle from point p.&lt;br /&gt;
Yet another mistake is to have used the words line to refer to the result and point to refer to the argument: this information is immediately obvious from the declared types, LINE and POINT. With a typed notation we can rely on the formal type declarations — which again will appear in the short form — to express such properties; repeating them in the informal text brings nothing. So:&lt;br /&gt;
		-- Tangent to current circle from p.&lt;br /&gt;
The mistakes of repeating type information and of duplicating the precondition’s requirements point to the same general rule: in writing header comments, assume the reader is competent in the fundamentals of the technology; do not include information that is obvious from the immediately adjacent short form text. This does not mean, of course, that you should never specify a type; the earlier example, -- Distance to point (0,0), could be ambiguous without the word point. &lt;br /&gt;
When you need to refer to the current object represented by a class, use phrasing such as current circle, current number and so on as above, rather than referring explicitly to the entity Current. In many cases, however, you can avoid mentioning the current object altogether, since it is clear to everyone who can read a class text that features apply to the current object. Here, for example, we just need&lt;br /&gt;
		-- Tangent from p.&lt;br /&gt;
At this stage — three words, starting from twenty-two, an 87% reduction that would make the toughest Wall Street exponent of corporate downsizing jealous — it seems hard to get terser and we can leave our comment alone. &lt;br /&gt;
A few more general guidelines. We have noted the uselessness of “Return the º” in queries; other noise words and phrases to be avoided in routines of all kinds include “This routine computesº”, “This routine returnsº”; just say what the routine does, not that it does it. Instead of&lt;br /&gt;
-- This routine records the last outgoing call.&lt;br /&gt;
write &lt;br /&gt;
-- Record outgoing call.&lt;br /&gt;
As illustrated by this example, header comments for commands (procedures) should be in the imperative or infinitive (the same in English), in the style of marching orders. They should end with a period. For boolean-valued queries, the comment should always be in the form of a question, terminated by a question mark:&lt;br /&gt;
has (v: G): BOOLEAN is&lt;br /&gt;
		-- Does v appear in list?&lt;br /&gt;
	º&lt;br /&gt;
A convention governs the use of software entities — attributes, arguments — appearing in comments. In typeset texts such as the above they will appear in italics (more on font conventions below); in the source text they should always appear between an opening quote (“backquote”) and a closing quote; the original text for the example is then:&lt;br /&gt;
		-- Does ‘v’ appear in list?&lt;br /&gt;
Tools such as the short class abstracter will recognize this convention when generating typeset output. Note that the two quotes should be different: ‘v’, not ’v’.&lt;br /&gt;
Be consistent. If a function of a class has the comment Length of string, a routine of the same class should not say Update width of string if it affects the same property. &lt;br /&gt;
All these guidelines apply to routines. Because an exported attribute should be externally indistinguishable from argumentless functions — remember the Uniform Access principle — it should also have a comment, which will appear on the line following the attribute’s declaration, with the same indentation as for functions:&lt;br /&gt;
count: INTEGER&lt;br /&gt;
			-- Number of students in course&lt;br /&gt;
For secret attributes a comment is desirable too but the rule is less strict.&lt;br /&gt;
Feature clause header comments&lt;br /&gt;
As you will remember, a class may have any number of feature clauses:&lt;br /&gt;
indexing&lt;br /&gt;
	º&lt;br /&gt;
class LINKED_LIST [G] inherit º creation&lt;br /&gt;
	º &lt;br /&gt;
feature -- Initialization&lt;br /&gt;
	make is º&lt;br /&gt;
feature -- Access&lt;br /&gt;
	item: G is º&lt;br /&gt;
	º&lt;br /&gt;
feature -- Status report&lt;br /&gt;
	before: BOOLEAN is º&lt;br /&gt;
	º&lt;br /&gt;
feature -- Status setting&lt;br /&gt;
	º&lt;br /&gt;
feature -- Element change&lt;br /&gt;
	put_left (v: G) is º&lt;br /&gt;
	º&lt;br /&gt;
feature -- Removal&lt;br /&gt;
	remove is º&lt;br /&gt;
	º&lt;br /&gt;
feature {NONE} -- Implementation&lt;br /&gt;
	first_element: LINKABLE [G].&lt;br /&gt;
	º&lt;br /&gt;
end -- class LINKED_LIST&lt;br /&gt;
One of the purposes of having several feature clauses is to allow different features to have different export privileges; in this example everything is generally available except the secret features in the last clause. But another consequence of this convention is that you could, and should, group features by categories. A comment on the same line as the keyword feature should characterize the category. Such comments are, like header comments of routines, recognized an preserved by documentation tools such as short.&lt;br /&gt;
Eighteen categories and the corresponding comments have been standardized for the Base libraries, so that every feature (out of about 2000 in all) belongs to one of them. The example above illustrates some of the most important categories. Status report corresponds to options (set by features in the Status setting category, not included in the example). Secret and selectively exported features appear in the Implementation category. These standard categories always appear in the same order, which the tools know (through a user-editable list) and will preserve or reinstate in their output. Within each category, the tools list the features alphabetically for ease of retrieval.&lt;br /&gt;
The categories cover a wide range of application domains, although for special areas you may need to add your own categories.&lt;br /&gt;
Indexing clauses&lt;br /&gt;
Similar to header comments but slightly more formal are indexing clauses, appearing at the beginning of a class:&lt;br /&gt;
indexing&lt;br /&gt;
	description: &amp;quot;Sequential lists, in chained representation&amp;quot;&lt;br /&gt;
	names: &amp;quot;Sequence&amp;quot;, &amp;quot;List&amp;quot;&lt;br /&gt;
	contents: GENERIC&lt;br /&gt;
	representation: chained&lt;br /&gt;
	date: &amp;quot;$Date: 96/10/20 12:21:03 $&amp;quot;&lt;br /&gt;
	revision: &amp;quot;$Revision: 2.4$&amp;quot;&lt;br /&gt;
	º&lt;br /&gt;
class LINKED_LIST [G] inherit&lt;br /&gt;
	º&lt;br /&gt;
Indexing clauses proceed from the same Self-Documentation principle that has led to built-in assertions and header comments: include as much as possible of the documentation in the software itself. For properties that do not directly appear in the formal text, you may include indexing entries, all of the form&lt;br /&gt;
indexing_term: indexing_value, indexing_value, º&lt;br /&gt;
where the indexing_term is an identifier and each indexing_value is some basic element such as a string, an integer and so on. Entries can indicate alternative names under which potential client authors might search for the class (names), contents type (contents), implementation choices (representation), revision control information, author information, and anything else that may facilitate understanding the class and retrieving it through keyword-based search tools — tools that support reuse and enable software developers to find their way through a potentially rich set of reusable components.&lt;br /&gt;
Both the indexing terms and the indexing values are free-form, but the possible choices should be standardized for each project. A set of standard choices has been used throughout the Base libraries; the above example illustrates six of the most common entry kinds. Every class must have a description entry, introducing as index_value a string describing the role of the class, always expressed in terms of the instances (as Sequential listsº, not “this class describes sequential lists”, or “sequential list”, or “the notion of sequential list” etc.). Most significant class texts in this book — but not short examples illustrating a specific point — include the description entry.&lt;br /&gt;
Non-header comments&lt;br /&gt;
The preceding rules on comments applied to standardized comments, appearing at specific places — feature declarations and beginning of feature clauses — and playing a special role for class documentation.&lt;br /&gt;
As in all forms of software development, there is also a need for comments within routine bodies, to provide further explanations&lt;br /&gt;
Another use of comments, although frequent in the practice of software development, does not figure much in software engineering and programming methodology textbooks. I am referring here to the technique of transforming some part of the code into comments, either because it does not work, or because it is not ready yet. This practice is clearly a substitute for better tools and techniques of configuration management. It has enriched the language with a new verb form, comment out, whose potential, surprisingly enough, has not yet been picked up by hip journalists, even though the non-technical applications seem attractive and indeed endless: “The last elections have enabled Congress to comment out the President”, “Letterman was commented out of the Academy Awards”, and so on.&lt;br /&gt;
Every comment should be of a level of abstraction higher than the code it documents. A famous counter-example is -- Increase i by 1 commenting the instruction i := i + 1. Although not always that extreme, the practice of writing comments that paraphrase the code instead of summarizing its effect is still common.&lt;br /&gt;
Low-level languages cry for ample commenting. It is a good rule of thumb, for example, that for each line of C there should be a comment line; not a negative reflection on C, but a consequence that in modern software development the role of C is to encapsulate machine-oriented and operating-system-level operations, which are tricky by nature and require a heavy explanatory apparatus. In the O-O part, non-header comments will appear much more sparsely; they remain useful when you need to explain some delicate operation or foresee possible confusion. In its constant effort to favor prevention over cure, the method decreases the need for comments through a modular style that yields small, understandable routines, and through its assertion mechanisms: preconditions and postconditions of routines, to express their semantics formally; class invariants; check instructions to express properties expected to hold at certain stages; the systematic naming conventions introduced earlier in this chapter. More generally, the secret of clear, understandable software is not adding comments after the fact but devising coherent and stable system structures right from the start.&lt;br /&gt;
TEXT LAYOUT AND PRESENTATION&lt;br /&gt;
The next set of rules affects how we should physically write our software texts on paper — real, or simulated on a screen. More than any others, they prompt cries of “Cosmetics!”; but such cosmetics should be as important to software developers as Christian Dior’s are to his customers. They play no little role in determining how quickly and accurately your software will be understood by its readers — maintainers, reusers, customers.&lt;br /&gt;
Layout &lt;br /&gt;
The recommended layout of texts results from the general form of the syntax of our notation, which is roughly what is known as an “operator grammar”, meaning that a class text is a sequence of symbols alternating between “operators” and “operands”. An operator is a fixed language symbol, such as a keyword (do etc.) or a separator (semicolon, comma º); an operand is a programmer-chosen symbol (identifier or constant).&lt;br /&gt;
Based on this property, the textual layout of the notation follows the comb-like structure introduced by Ada; the idea is that a syntactically meaningful part of a class, such as an instruction or an expression, should either:&lt;br /&gt;
Fit on a line together with a preceding and succeeding operators.&lt;br /&gt;
Be indented just by itself on one or more lines — organized so as to observe the same rules recursively.&lt;br /&gt;
Each branch of the comb is a sequence of alternating operators and operands; it should normally begin and end with an operator. In the space between two branches you find either a single operand or, recursively, a similar comb-like structure.&lt;br /&gt;
As an example, depending on the size of its constituents a, b and c, you may spread out a conditional instruction as &lt;br /&gt;
if c then a else b end&lt;br /&gt;
or &lt;br /&gt;
if&lt;br /&gt;
	c&lt;br /&gt;
then&lt;br /&gt;
	a&lt;br /&gt;
else&lt;br /&gt;
	b&lt;br /&gt;
end&lt;br /&gt;
or &lt;br /&gt;
if c then&lt;br /&gt;
	a&lt;br /&gt;
else b end&lt;br /&gt;
You would not, however, use a line containing just if c or c end, since they include an operand together with something else, and are missing an ending operator in the first case and a starting operator in the second.&lt;br /&gt;
Similarly, you may start a class, after the indexing clause, with&lt;br /&gt;
class C inherit					-- [1]&lt;br /&gt;
or&lt;br /&gt;
class C feature					-- [2]&lt;br /&gt;
or&lt;br /&gt;
class					-- [3]&lt;br /&gt;
	C&lt;br /&gt;
feature&lt;br /&gt;
but not&lt;br /&gt;
class C					-- [4]&lt;br /&gt;
feature&lt;br /&gt;
because the first line would violate the rule. Forms [1] and [2] are used in this book for small illustrative classes; since most practical classes have one or more labeled feature clauses, they should in the absence of an inherit clause use form [3] (rather than [2]):&lt;br /&gt;
class&lt;br /&gt;
	C					&lt;br /&gt;
feature -- Initialization&lt;br /&gt;
	º&lt;br /&gt;
feature -- Access&lt;br /&gt;
	etc.&lt;br /&gt;
Height and width&lt;br /&gt;
Like most modern languages, our notation does not attach any particular significance to line separations except to terminate comments, so that you can include two or more instructions (or two or more declarations) on a single line, separated by semicolons:&lt;br /&gt;
count := count + 1; forth&lt;br /&gt;
This style is for some reason not very popular (and many tools for estimating software size still measure lines rather than syntactical units); most developers seem to prefer having one instruction per line. It is indeed not desirable to pack texts very tightly; but in some cases a group of two or three short, closely related instructions can be more readable if they all appear on one line.&lt;br /&gt;
In this area it is best to defer to your judgment and good taste. If you do apply intra-line grouping, make sure that it remains moderate, and consistent with the logical relations between instructions. The Semicolon Style principle seen later in this chapter requires any same-line instructions to be separated by a semicolon.&lt;br /&gt;
For obvious reasons of space, this book makes a fair use of intra-line grouping, consistent with these guidelines. It also avoids splitting multi-line instructions into more lines than necessary; on this point one can recommend the book’s style for general use: there is really no reason to split from i:= 1 invariant i &amp;lt;= n until i = n loop or if a = b then. Whatever your personal taste, do observe the Comb structure.&lt;br /&gt;
Indenting details&lt;br /&gt;
The comb structure uses indentation, achieved through tab characters (not spaces, which are messy, error-prone, and not reader-parameterizable).&lt;br /&gt;
Here are the indentation levels for the basic kinds of construct, illustrated by the example on the facing page:&lt;br /&gt;
Level 0: the keywords introducing the primitive clauses of a class. This includes indexing (beginning of an indexing clause), class (beginning of the class body), feature (beginning of a feature clause, except if on the same line as class), invariant (beginning of an invariant clause, not yet seen) and the final end of a class.&lt;br /&gt;
Level 1: beginning of a feature declaration; indexing entries; invariant clauses.&lt;br /&gt;
Level 2: the keywords starting the successive clauses of a routine. This includes require, local, do, once, ensure, rescue, end.&lt;br /&gt;
Level 3: the header comment for a routine or (for consistency) attribute; declarations of local entities in a routine; first-level instructions of a routine.&lt;br /&gt;
Within a routine body there may be further indentation due to the nesting of control structures. For example the earlier if a then º instruction contains two branches, each of them indented. These branches could themselves contain loops or conditional instructions, leading to further nesting (although the style of object-oriented software construction developed in this book leads to simple routines, seldom reaching high levels of nesting).&lt;br /&gt;
A check instruction is indented, together with the justifying comment that normally follows it, one level to the right of the instruction that it guards.&lt;br /&gt;
indexing&lt;br /&gt;
	description: &amp;quot;Example for formating&amp;quot;&lt;br /&gt;
class EXAMPLE inherit&lt;br /&gt;
	MY_PARENT&lt;br /&gt;
		redefine f1, f2 end&lt;br /&gt;
	MY_OTHER_PARENT&lt;br /&gt;
		rename&lt;br /&gt;
			g1 as old_g1, g2 as old_g2&lt;br /&gt;
		redefine&lt;br /&gt;
			g1&lt;br /&gt;
		select&lt;br /&gt;
			g2&lt;br /&gt;
		end&lt;br /&gt;
creation&lt;br /&gt;
	make&lt;br /&gt;
feature -- Initialization&lt;br /&gt;
	make is&lt;br /&gt;
			-- Do something.&lt;br /&gt;
		require&lt;br /&gt;
			some_condition: correct (x)&lt;br /&gt;
		local&lt;br /&gt;
			my_entity: MY_TYPE&lt;br /&gt;
		do&lt;br /&gt;
			if a then&lt;br /&gt;
				b; c&lt;br /&gt;
			else&lt;br /&gt;
				other_routine&lt;br /&gt;
					check max2 &amp;gt; max1 + x ^ 2 end&lt;br /&gt;
					-- Because of the postcondition of other_routine.&lt;br /&gt;
				new_value := old_value / (max2 – max1)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
feature -- Access&lt;br /&gt;
	my_attribute: SOME_TYPE&lt;br /&gt;
			-- Explanation of its role (aligned with comment for make)&lt;br /&gt;
&lt;br /&gt;
	º Other feature declarations and feature clauses º&lt;br /&gt;
invariant&lt;br /&gt;
	upper_bound: x &amp;lt;= y&lt;br /&gt;
end -- class EXAMPLE&lt;br /&gt;
Note the trailer comment after the end of the class, a systematic convention.&lt;br /&gt;
Spaces&lt;br /&gt;
White space contributes as much to the effect produced by a software text as silence to the effect of a musical piece.&lt;br /&gt;
The general rule, for simplicity and ease of remembering, is to follow as closely as possible the practice of standard written language. By default we will assume this language to be English, although it may be appropriate to adapt the conventions to the slightly different rules of other languages.&lt;br /&gt;
Here are some of the consequences. You will use a space:&lt;br /&gt;
Before an opening parenthesis, but not after: f  (x) (not f (x), the C style, or f (  x)).&lt;br /&gt;
After a closing parenthesis unless the next character is a punctuation sign such as a period or semicolon; but not before. Hence: proc1 (x); x := f1 (x) + f2 (y)&lt;br /&gt;
After a comma but not before: g (x, y, z).&lt;br /&gt;
After the two dash signs that start a comment: -- A comment.&lt;br /&gt;
Similarly, the default rule for semicolons is to use a space after but not before:&lt;br /&gt;
p1; p2 (x); p3 (y, z)&lt;br /&gt;
Here, however, some people prefer, even for English-based software texts, the French style of including a space both before and after, which makes the semicolon stand out and emphasizes the symmetry between the components before and after it:&lt;br /&gt;
p1 ; p2 (x) ; p3 (y, z)&lt;br /&gt;
Choose either style, but then use it consistently. (This book uses the English style.) English and French styles have the same difference for colons as for semicolons; since, however, the software notation only uses colons for declarations, in which the two parts — the entity being declared and its type — do not play a symmetric role, it seems preferable to stick to the English style, as in your_entity: YOUR_TYPE.&lt;br /&gt;
Spaces should appear before and after arithmetic operators, as in a + b. (For space reasons, this book has omitted the spaces in a few cases, all of the form n+1.)&lt;br /&gt;
For periods the notation departs from the conventions of ordinary written language since it uses periods for a special construct, as originally introduced by Simula. As you know, a l r means: apply feature r to the object attached to a. In this case there is a space neither before nor after the period. To avoid any confusion, this book makes the period bigger, as illustrated:  l   rather than just .&lt;br /&gt;
There is another use of the period: as decimal point in real numbers, such as 3.14. Here, to avoid any confusion, the period is not made any bigger.&lt;br /&gt;
Some European languages use a comma rather than a period as the separator between integral and fractional parts of numbers. Here the conflict is irreconcilable, as in English the comma serves to separate parts of big numbers, as in “300,000 dollars”, where other languages would use a space. The committee discussions for Algol 60 almost collapsed when some continental members refused to bow to the majority’s choice of the period; the stalemate was resolved when someone suggested distinguishing between a reference language, fixed, and representation languages, parameterizable. (In retrospect, not such a great idea, at least not if you ever have to compile the same program in two different countries!) Today, few people would make this a point of contention, as the spread of digital watches and calculators built for world markets have accustomed almost everyone to alternate between competing conventions.&lt;br /&gt;
Precedence and parentheses&lt;br /&gt;
The precedence conventions of the notation conform to tradition and to the “Principle of Least Surprise” to avoid errors and ambiguities.&lt;br /&gt;
Do not hesitate, however, to add parentheses for clarity; for example you may write (a = (b + c)) implies (u /= v) even though the meaning of that expression would be the same if all parentheses were removed. The examples in this book have systematically over-parenthesized expressions, in particular assertions, risking heaviness to avert uncertainty.&lt;br /&gt;
The War of the Semicolons&lt;br /&gt;
Two clans inhabit the computing world, and the hatred between them is as ferocious as it is ancient. The Separatists, following Algol 60 and Pascal, fight for the recognition of the semicolon as a separator between instructions; the Terminatists, rallied behind the contrasting flags of PL/I, C and Ada, want to put a semicolon behind every instruction.&lt;br /&gt;
Each side’s arguments are endlessly relayed by its propaganda machine. The Terminatists worship uniformity: if every instruction is terminated by the same marker, no one ever has to ask the question “do I need a semicolon here?” (the answer in Terminatist languages is always yes, and anyone who forgets a semicolon is immediately beheaded for high treason). They do not want to have to add or remove a semicolon because an instruction has been moved from one syntactical location to another, for example if it has been brought into a conditional instruction or taken out of it.&lt;br /&gt;
The Separatists praise the elegance of their convention and its compatibility with mathematical practices. They see do instruction1; instruction2; instruction3 end as the natural counterpart of f (argument1, argument2, argument3). Who in his right mind, they ask, would prefer f (argument1, argument2, argument3,) with a superfluous final comma? They contend, furthermore, that the Terminatists are just a front for the Compilists, a cruel people whose only goal is to make life easy for compiler writers, even if that means making it hard for application developers.&lt;br /&gt;
The Separatists constantly have to fight against innuendo, for example the contention that Separatist languages will prevent you from including extra semicolons. Again and again they must repeat the truth: that every Separatist language worthy of the name, beginning with the venerated Patriarch of the tribe, Algol 60, has supported the notion of empty instruction, permitting all of&lt;br /&gt;
a; b; c&lt;br /&gt;
a; b; c; &lt;br /&gt;
; a ;; b ;;; c; &lt;br /&gt;
to be equally valid, and to mean exactly the same thing, as they only differ by the extra empty instructions of the last two variants, which any decent compiler will discard anyway. They like to point out how much more tolerant this convention makes them: whereas their fanatical neighbors will use any missing semicolon as an excuse for renewed attacks, the Separatists will gladly accept as many extra semicolons as a Terminatist transfuge may still, out of habit, drop into an outwardly Separatist text.&lt;br /&gt;
Modern propaganda needs science and statistics, so the Terminatists have their own experimental study, cited everywhere (in particular as the justification for the Terminatist convention of the Ada language): a 1975 measurement of the errors made by two groups of 25 programmers each, using languages that, among other distinguishing traits, treated semicolons differently. The results show the Separatist style causing almost ten times as many errors! Starting to feel the heat of incessant enemy broadcasts, the Separatist leadership turned for help to the author of the present book, who remembered a long-forgotten principle: quoting is good, but reading is better. So he fearlessly went back to the original article and discovered that the Separatist language used in the comparison — a mini-language meant only for “teaching students the concepts of asynchronous processes” — treats an extra semicolon after the final instruction of a compound, as in begin a; b; end, as an error! No real Separatist language, as noted above, has ever had such a rule, which would be absurd in any circumstance (as an extra semicolon is obviously harmless), and is even more so in the context of the article’s experiment since some of the subjects apparently had Terminatist experience from PL/I and so would have been naturally prone to add a few semicolons here and there. It then seems likely, although the article gives no data on this point, that many of the semicolon errors were a result of such normally harmless additions — enough to disqualify the experiment, once and for all, as a meaningful basis for defending Terminatism over Separatism. &lt;br /&gt;
On some of the other issues it studies, the article is not marred by such flaws in its test languages, so that it still makes good reading for people interested in language design.&lt;br /&gt;
All this shows, however, that it is dangerous to take sides in such a sensitive debate, especially for someone who takes pride in having friends in both camps. The solution adopted by the notation of this book is radical:&lt;br /&gt;
Semicolon Syntax rule&lt;br /&gt;
Semicolons, as markers to delimit instructions, declarations or assertion clauses, are optional in almost all the positions where they may appear in the notation of this book.&lt;br /&gt;
&lt;br /&gt;
“Almost” because of a few rare cases, not encountered in this book, in which omitting the semicolon would cause a syntactical ambiguity.&lt;br /&gt;
The Semicolon Syntax rule means you can choose your style:&lt;br /&gt;
Terminatist: every instruction, declaration or assertion clause ends with a semicolon.&lt;br /&gt;
Separatist: semicolons appear between successive elements but not, for example, after the last declaration of a feature or local clause.&lt;br /&gt;
Moderately Separatist: like the Separatist style, but not worrying about extra semicolons that may appear as a result of habit or of elements being moved from one context to another.&lt;br /&gt;
Discardist: no semicolons at all (except as per the Semicolon Style principle below).&lt;br /&gt;
This is one of the areas where it is preferable to let each user of the notation follow his own inclination, as the choice cannot cause serious damage. But do stick, at least across a class and preferably across an entire library or application, to the style that you have chosen (although this will not mean much for the Moderately Separatist style, which is by definition lax), and observe the following principle:&lt;br /&gt;
Semicolon Style principle&lt;br /&gt;
If you elect to include semicolons as terminators (Terminatist style), do so for all applicable elements. &lt;br /&gt;
If you elect to forego semicolons, use them only when syntactically unavoidable, or to separate elements that appear on the same line.&lt;br /&gt;
&lt;br /&gt;
The second clause governs elements that appear two or more to a line, as in&lt;br /&gt;
found := found + 1; forth&lt;br /&gt;
which should always include the semicolon; omitting it would make the line quite confusing.&lt;br /&gt;
Just for once, this discussion has no advice here, letting you decide which of the four styles you prefer. Since the earliest version of the notation required semicolons — in other words, it had not yet been tuned to support the Semicolon Syntax rule — the first edition of this book used a Separatist style. For the present one I dabbled into a few experiments; after polling a sizable group of co-workers and experienced users of the notation, I found (apart from a handful of Terminatists) an almost equal number of Discardists and Separatists. Some of the Discardists were very forceful, in particular a university professor who said that the main reason his students loved the notation is that they do not need semicolons — a comment which any future language designer, with or without grandiose plans, should find instructive or at least sobering.&lt;br /&gt;
You should defer to your own taste as long as it is consistent and respects the Semicolon Style principle. (As to this book: for a while I stuck to the original Separatist style, more out of habit than of real commitment; then, hearing the approach of the third millenium and its call to start a new life free of antique superstitions, I removed all the semicolons over a single night of utter debauchery.)&lt;br /&gt;
Assertions&lt;br /&gt;
You should label assertion clauses to make the text more readable:&lt;br /&gt;
require&lt;br /&gt;
	not_too_small: index &amp;gt;= lower&lt;br /&gt;
This convention also helps produce useful information during testing and debugging since, as you will remember, the assertion label will be included in the run-time message produced if you have enabled monitoring of assertions and one of them gets violated.&lt;br /&gt;
This convention will spread an assertion across as many lines as it has clauses. As a consequence, it is one of the rules to which the present book has made a few exceptions, again in the interest of saving space. When collapsing several clauses on one line, you should actually remove the labels for readability:&lt;br /&gt;
require&lt;br /&gt;
	index &amp;gt;= lower; index &amp;lt;= upper&lt;br /&gt;
In normal circumstances, that is to say for software texts rather than a printed textbook, better stick to the official rule and have one labeled clause per line.&lt;br /&gt;
FONTS&lt;br /&gt;
In typeset software texts, the following conventions, used throughout this book and related publications, are recommended.&lt;br /&gt;
Basic font rules&lt;br /&gt;
Print software elements (class names, feature names, entitiesº) in italics to distinguish them from non-software text elements. This facilitates their inclusion in sentences of the non-software text, such as “We can see that the feature number is a query, not an attribute”. (The word number denotes the name of the feature; you do not want to mislead your reader into believing that you are talking about the number of features!)&lt;br /&gt;
Keywords, such as class, feature, invariant and the like, appear in boldface.&lt;br /&gt;
This was also the convention of the first edition of this book. At some stage it seemed preferable to use boldface italics which blends more nicely with italics. What was esthetically pleasing, however, turned out to hamper quality; some readers complained that the keywords did not stand out clearly enough, hence the return to the original convention. This is a regrettable case of fickleness. [M 1994a] and a handful of books by other authors show the intermediate convention.&lt;br /&gt;
Keywords play a purely syntactic role: they have no semantics of their own but delimit those elements, such as feature and class names, that do carry a semantic value. As noted earlier in this chapter, there are also a few non-keyword reserved words, such as Current and Result, which have a denotation of their own — expressions or entities. They are written in non-bold italics, with an initial upper-case letter.&lt;br /&gt;
Following the tradition of mathematics, symbols — colons and semicolons : ;, brackets [ ], parentheses ( ), braces { }, question and exclamation marks ? ! and so on — should always appear in roman (straight), even when they separate text in italics. Like keywords, they are purely syntactic elements.&lt;br /&gt;
Comments appear in roman. This avoids any ambiguity when a feature name — which, according to the principles seen earlier, will normally be a word from ordinary language — or an argument name appears in a comment; the feature name will be in italics and hence will stand out. For example:&lt;br /&gt;
accelerate (s: SPEED; t: REAL) is&lt;br /&gt;
		-- Bring speed to s in at most t seconds.&lt;br /&gt;
º&lt;br /&gt;
set_number (n: INTEGER) is&lt;br /&gt;
		-- Make n the new value of number.&lt;br /&gt;
º&lt;br /&gt;
In the software text itself, where no font variations are possible, such occurrences of formal elements in comments should follow a specific convention already mentioned earlier: they will appear preceded by a back quote ‘ and followed by a normal quote ’ , as in&lt;br /&gt;
		-- Make ‘n’ the new value of ‘number’.&lt;br /&gt;
(Remember that you must use two different quote characters for opening and closing.) Tools that process class texts and can produce typeset output, such as short and flat, know this convention and so can make sure the quoted elements are printed in italics.&lt;br /&gt;
Other font conventions&lt;br /&gt;
The preceding font conventions work well for a book, an article or a Web page. Some contexts, however, may call for different approaches. In particular, elements in plain italics, and sometimes even bold italics, are not always readable when projected on a projection screen, especially if what you are projecting is the output of a laptop computer with a relatively small display.&lt;br /&gt;
In such cases I have come to using the following conventions:&lt;br /&gt;
Use non-italics boldface for everything, as this projects best.&lt;br /&gt;
Choose a wide enough font, such as Bookman (for which boldface may be called “demibold”).&lt;br /&gt;
Instead of italics versus roman versus bold, use color to distinguish the various elements: keywords in black; comments in red; the rest (entities, feature names, expressionsº) in blue. More colors can be used to highlight special elements.&lt;br /&gt;
These conventions seem to work well, although there is always room for improvement, and new media will undoubtedly prompt new conventions.&lt;br /&gt;
Color&lt;br /&gt;
The particularly attentive reader may by now have come to notice another convention used by this book: for added clarity, all formal elements — software texts or text extracts, but also mathematical elements — appear in color. This technique, which of course cannot be presented as a general requirement, enhances the effect of the rules seen so far on font usage.&lt;br /&gt;
BIBLIOGRAPHICAL NOTES&lt;br /&gt;
[Waldén 1995] is the source of the idea of showing by example that even a longer separated_by_underscores identifier is easier to read than an internalUpperCase identifier.&lt;br /&gt;
[Gannon 1975] is an experimental study of the effect of various language design choices on error rates.&lt;br /&gt;
The rules on standard feature names were first presented in [M 1990b] and are developed in detail in [M 1994a].&lt;br /&gt;
I received important comments from Richard Wiener on students’ appreciation of the optionality of semicolons, and from Kim Waldén on the respective merits of bold italics and plain bold.&lt;br /&gt;
EXERCISES&lt;br /&gt;
Header comment style&lt;br /&gt;
Rewrite the following header comments in the proper style:&lt;br /&gt;
reorder (s: SUPPLIER; t: TIME) is&lt;br /&gt;
		-- Reorders the current part from supplier s, to be delivered&lt;br /&gt;
		-- on time t; this routine will only work if t is a time in the future.&lt;br /&gt;
	require&lt;br /&gt;
		not_in_past: t &amp;gt;= Now&lt;br /&gt;
	º&lt;br /&gt;
next_reorder_date: TIME is&lt;br /&gt;
		-- Yields the next time at which the current part is scheduled&lt;br /&gt;
		-- to be reordered.&lt;br /&gt;
Semicolon ambiguity&lt;br /&gt;
Can you think of a case in which omitting a semicolon between two instructions or assertions could cause syntactic ambiguity, or at least confuse a simple-minded parser? (Hint: a feature call can have as its target a parenthesized expression, as in (vector1 + vector2)  l count.)&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Style_Guidelines&amp;diff=11106</id>
		<title>Style Guidelines</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Style_Guidelines&amp;diff=11106"/>
				<updated>2008-05-22T19:35:51Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Style Guidelines that EiffelStudio developers should use and are not intended or suggestions for developing code with the Eiffel language. The guidelines are to promote consistency in API design, making EiffelStudio's code base more readable to all.&lt;br /&gt;
&lt;br /&gt;
==Status of this page==&lt;br /&gt;
[[User:Bertrand Meyer|Bertrand Meyer]] 12:35, 22 May 2008 (PDT)I am starting this page by copy-pasting from existing references. It will be edited and cleaned up later on.[[User:Bertrand Meyer|Bertrand Meyer]] 12:35, 22 May 2008 (PDT)&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Persistence_code_samples&amp;diff=9601</id>
		<title>Persistence code samples</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Persistence_code_samples&amp;diff=9601"/>
				<updated>2007-08-27T00:34:18Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Persistence]]&lt;br /&gt;
Below are sketches of essential classes of the PERSIST framework. &lt;br /&gt;
&lt;br /&gt;
For an open discussion on the design choices please have a look at the [[persistence framework design discussion]].  &lt;br /&gt;
&lt;br /&gt;
You can download the source code here (TODO: provide a link to the sources)&lt;br /&gt;
&lt;br /&gt;
You can also go back to the [[persistence unified]] page.&lt;br /&gt;
==Simplified BON diagram==&lt;br /&gt;
[[Image:unified_persistence.png]]&lt;br /&gt;
&lt;br /&gt;
==PERSISTENCE_MANAGER==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
class&lt;br /&gt;
	PERSISTENCE_MANAGER&lt;br /&gt;
&lt;br /&gt;
feature -- Access&lt;br /&gt;
&lt;br /&gt;
	medium: PERSISTENCE_MEDIUM -- the chosen medium&lt;br /&gt;
&lt;br /&gt;
	format: PERSISTENCE_FORMAT	-- the chosen format&lt;br /&gt;
&lt;br /&gt;
feature -- Basic operations&lt;br /&gt;
&lt;br /&gt;
	store (an_object:ANY)&lt;br /&gt;
			-- persists an_object using the format and medium stored by current object&lt;br /&gt;
		require&lt;br /&gt;
			an_object_exists:an_object /= Void&lt;br /&gt;
			medium_exists: medium /= Void&lt;br /&gt;
		do&lt;br /&gt;
			format.store(an_object,medium)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	retrieve: ANY&lt;br /&gt;
			-- retrieves an_object using the medium and format stored by current object&lt;br /&gt;
		require&lt;br /&gt;
			medium_exists: medium /= Void&lt;br /&gt;
		do&lt;br /&gt;
			Result:=format.retrieve(medium)&lt;br /&gt;
		end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==BINARY_SERIALIZATION_MANAGER==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
class&lt;br /&gt;
	BINARY_SERIALIZATION_MANAGER&lt;br /&gt;
&lt;br /&gt;
inherit&lt;br /&gt;
	PERSISTENCE_MANAGER&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
	make&lt;br /&gt;
&lt;br /&gt;
feature -- Creation&lt;br /&gt;
&lt;br /&gt;
	make (file_name: STRING)&lt;br /&gt;
			-- Creation procedure&lt;br /&gt;
		require&lt;br /&gt;
			file_name_exists: file_name /= Void&lt;br /&gt;
		do&lt;br /&gt;
			create {FILE_MEDIUM} medium.make (file_name)&lt;br /&gt;
			create {INDEPENDENT_BINARY_FORMAT} format&lt;br /&gt;
		ensure&lt;br /&gt;
			medium_exists: medium /= Void&lt;br /&gt;
			format_exists: format /= Void&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PERSISTENCE_FORMAT==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
deferred class&lt;br /&gt;
	PERSISTENCE_FORMAT&lt;br /&gt;
&lt;br /&gt;
feature -- Basic operations&lt;br /&gt;
&lt;br /&gt;
	store (object:ANY; medium:PERSISTENCE_MEDIUM)&lt;br /&gt;
			-- stores object using medium&lt;br /&gt;
		require&lt;br /&gt;
			object_exists: object /= Void&lt;br /&gt;
			medium_exists: medium /= Void&lt;br /&gt;
		deferred&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	retrieve (medium: PERSISTENCE_MEDIUM):ANY&lt;br /&gt;
		require&lt;br /&gt;
			medium_exists: medium /= Void&lt;br /&gt;
		deferred&lt;br /&gt;
		end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==BINARY_FORMAT==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
deferred class&lt;br /&gt;
	BINARY_FORMAT&lt;br /&gt;
&lt;br /&gt;
inherit&lt;br /&gt;
	PERSISTENCE_FORMAT&lt;br /&gt;
&lt;br /&gt;
	redefine&lt;br /&gt;
		store,&lt;br /&gt;
		retrieve&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
feature -- Access&lt;br /&gt;
&lt;br /&gt;
	store_handler:SED_STORABLE_FACILITIES&lt;br /&gt;
	serializer:SED_MEDIUM_READER_WRITER&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
feature -- Basic operations&lt;br /&gt;
&lt;br /&gt;
	store (object:ANY; data_file:FILE_MEDIUM)&lt;br /&gt;
			-- stores object using a FILE_MEDIUM&lt;br /&gt;
		do&lt;br /&gt;
			create store_handler&lt;br /&gt;
			create serializer.make (data_file.raw_file)&lt;br /&gt;
			if data_file.exists then&lt;br /&gt;
				data_file.reopen_write (data_file.file_name)&lt;br /&gt;
			else&lt;br /&gt;
				data_file.open_write&lt;br /&gt;
			end&lt;br /&gt;
			serializer.set_for_writing&lt;br /&gt;
			store_now (object)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	store_now (object_to_store:ANY)&lt;br /&gt;
			--proper store operation depends on specific descendant&lt;br /&gt;
	require&lt;br /&gt;
		object_to_store_exists:object_to_store/=Void&lt;br /&gt;
		deferred&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	retrieve (data_file:FILE_MEDIUM):ANY&lt;br /&gt;
			-- retrieves object using a FILE_MEDIUM&lt;br /&gt;
		do&lt;br /&gt;
			create store_handler&lt;br /&gt;
			create serializer.make (data_file.raw_file)&lt;br /&gt;
			if data_file.exists then&lt;br /&gt;
				data_file.open_read&lt;br /&gt;
				serializer.set_for_reading&lt;br /&gt;
				Result:= store_handler.retrieved (serializer,true)&lt;br /&gt;
			else&lt;br /&gt;
				print (&amp;quot;%NData file does not exist! &amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==INDEPENDENT_BINARY_FORMAT==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
class&lt;br /&gt;
	INDEPENDENT_BINARY_FORMAT&lt;br /&gt;
&lt;br /&gt;
inherit&lt;br /&gt;
	BINARY_FORMAT&lt;br /&gt;
&lt;br /&gt;
feature -- Access&lt;br /&gt;
&lt;br /&gt;
	optimized_for_retrieval: BOOLEAN&lt;br /&gt;
&lt;br /&gt;
feature -- Status setting&lt;br /&gt;
&lt;br /&gt;
	set_optimized_for_retrieval (is_optimized_for_retrieval:BOOLEAN)&lt;br /&gt;
	do&lt;br /&gt;
		optimized_for_retrieval:= is_optimized_for_retrieval&lt;br /&gt;
	ensure&lt;br /&gt;
		optimized_for_retrieval_set:optimized_for_retrieval = is_optimized_for_retrieval&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
feature -- Basic operations&lt;br /&gt;
&lt;br /&gt;
	store_now (object_to_store:ANY)&lt;br /&gt;
	do&lt;br /&gt;
		store_handler.independent_store(object_to_store,serializer,optimized_for_retrieval)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FILE_MEDIUM==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
class&lt;br /&gt;
	FILE_MEDIUM&lt;br /&gt;
&lt;br /&gt;
inherit&lt;br /&gt;
	PERSISTENCE_MEDIUM&lt;br /&gt;
&lt;br /&gt;
create&lt;br /&gt;
	make&lt;br /&gt;
&lt;br /&gt;
feature --Creation&lt;br /&gt;
&lt;br /&gt;
	make (a_file_name:STRING)&lt;br /&gt;
	require&lt;br /&gt;
		a_file_name_exists:a_file_name /= Void&lt;br /&gt;
	do&lt;br /&gt;
		create raw_file.make (a_file_name)&lt;br /&gt;
		file_name:=a_file_name&lt;br /&gt;
	ensure&lt;br /&gt;
		raw_file_exists: raw_file /=Void&lt;br /&gt;
		file_name_set: file_name = a_file_name&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
feature -- Access&lt;br /&gt;
&lt;br /&gt;
	raw_file: RAW_FILE &lt;br /&gt;
	file_name: STRING&lt;br /&gt;
&lt;br /&gt;
feature -- Status report&lt;br /&gt;
&lt;br /&gt;
	exists: BOOLEAN&lt;br /&gt;
	do&lt;br /&gt;
		Result:= raw_file.exists&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
feature -- Basic operations&lt;br /&gt;
&lt;br /&gt;
	reopen_write (a_file_name:STRING)&lt;br /&gt;
			-- reopens the file named 'a_file_name' for writing&lt;br /&gt;
	require&lt;br /&gt;
		a_file_name_exists:a_file_name /= Void&lt;br /&gt;
	do&lt;br /&gt;
		raw_file.reopen_write (a_file_name)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	open_write&lt;br /&gt;
			-- opens the current file for writing&lt;br /&gt;
	require&lt;br /&gt;
		a_file_to_open_exists:raw_file /= Void&lt;br /&gt;
	do&lt;br /&gt;
		raw_file.open_write&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	open_read&lt;br /&gt;
			-- opens the current file for reading&lt;br /&gt;
	do&lt;br /&gt;
		raw_file.open_read&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Persistence_framework_design_discussion&amp;diff=9600</id>
		<title>Persistence framework design discussion</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Persistence_framework_design_discussion&amp;diff=9600"/>
				<updated>2007-08-27T00:33:23Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Persistence]]&lt;br /&gt;
==Consistency of the abstractions==&lt;br /&gt;
As there is a specific manager for binary serialization, perhaps it makes sense to move the features store, retrieve, store_handler and serializer from BINARY_FORMAT to BINARY_SERIALIZATION_MANAGER. &lt;br /&gt;
&lt;br /&gt;
One reason could be cohesion within BINARY_SERIALIZATION_MANAGER. &lt;br /&gt;
&lt;br /&gt;
Another reason could be that it is not clear how much the before mentioned features match with the BINARY_FORMAT abstraction.&lt;br /&gt;
&lt;br /&gt;
==Consistency of the names==&lt;br /&gt;
The names store and retrieve, that are already used in the EiffelBase serialization cluster can be questioned. &lt;br /&gt;
&lt;br /&gt;
Another proposal could be to use put and item, for consistency with the structures cluster.&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9599</id>
		<title>Persistence unified</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9599"/>
				<updated>2007-08-27T00:32:47Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Persistence]]&lt;br /&gt;
==Unified persistence for Eiffel==&lt;br /&gt;
(Temporary name: PERSIST.)&lt;br /&gt;
&lt;br /&gt;
The PERSIST project is about developing a single, integrated and simple persistence framework for Eiffel:&lt;br /&gt;
&lt;br /&gt;
*'''Single''': PERSIST should remove the need for any more specific solution such as serialization, object-relational interfaces, interfaces to object-oriented databases, all of which become functionalities of PERSIST.&lt;br /&gt;
*'''Integrated''': PERSIST  should integrate existing mechanisms and add new ones as needed, in a consistent framework.&lt;br /&gt;
*'''Simple''': PERSIST should hide all unnecessary complexity from programmers; in Alan Kay's words, easy things should be easy and difficult things should possible.&lt;br /&gt;
&lt;br /&gt;
Community input is expressly sought to help PERSIST achieve these goals.&lt;br /&gt;
&lt;br /&gt;
==Existing persistence mechanisms==&lt;br /&gt;
Many people have devoted considerable efforts to persistence in Eiffel. It is important to take advantage of their insights and tools, and not to reinvent what has already been devised. Please make sure you are familiar with the list on the [[:Category:Persistence|general persistence page]], and if you are familiar with a project not referenced there please add it.&lt;br /&gt;
&lt;br /&gt;
==Design principles==&lt;br /&gt;
The following goals, detailed next, appear essential:&lt;br /&gt;
&lt;br /&gt;
# Design orthogonality&lt;br /&gt;
# Persistence uniformity&lt;br /&gt;
# Encapsulation and extension&lt;br /&gt;
# Pure Eiffel&lt;br /&gt;
# Object versioning&lt;br /&gt;
# Newbie-proof&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Design orthogonality===&lt;br /&gt;
It should be possible to add persistence mechanisms to an application without affecting the other aspects of its design. Developers should not, for example, need to add persistence-related attributes, or require application classes to inherit from specific persistence classes.&lt;br /&gt;
&lt;br /&gt;
===Persistence uniformity===&lt;br /&gt;
There are many kinds of persistence medium, from plain files to relational databases, object-oriented databases and networks. Programmers using PERSIST should only have to take into account the properties of the persistence medium that they choose to consider. This means in particular that it must be possible to write a PERSIST application that will work with different persistence media.&lt;br /&gt;
&lt;br /&gt;
===Extendibility===&lt;br /&gt;
It should be possible to add new kinds of persistence medium. For a possible approach see XXX_FORMAT classes below.&lt;br /&gt;
&lt;br /&gt;
===Pure Eiffel===&lt;br /&gt;
PERSIST should entirely be implementable in Eiffel: no C routines or macros. &lt;br /&gt;
&lt;br /&gt;
(Handles to existing C-based mechanisms, e.g. a relational DBMS, may as usual require short C routines.)&lt;br /&gt;
&lt;br /&gt;
==Object versioning==&lt;br /&gt;
PERSIST should make it possible to retrieve objects even if the class description has changed. Conversions should be safe; developers should be given the choice of how much control they exert over them.&lt;br /&gt;
&lt;br /&gt;
===Newbie-proof===&lt;br /&gt;
This is a direct application of the above requirement of simplicity: it should be possible for a novice programmer to store an object or an object structure using a straightforward single instruction, similar to what STORABLE permits today.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Initial design==&lt;br /&gt;
What follows is a first attempt at isolating the critical abstractions and the architecture of PERSIST.&lt;br /&gt;
&lt;br /&gt;
===Essential abstractions===&lt;br /&gt;
We have produced a first design intended to satisfy the above criteria.&lt;br /&gt;
&lt;br /&gt;
In this approach it will be possible to develop most persistence-aware applications based on knowledge of just three abstractions:&lt;br /&gt;
*PERSISTENCE_MEDIUM, covering the kind of medium onto which objects are mapped; it should be possible to work with a very abstract view of such a medium, or, if desired, to take advantage of more specific properties.&lt;br /&gt;
*PERSISTENCE_FORMAT, controlling the mapping between object properties and their outside representation.&lt;br /&gt;
*PERSISTENCE_MANAGER: control object to specify modalities of writing and reading, and find out how the operations actually occurred.&lt;br /&gt;
&lt;br /&gt;
Possible specializations of these abstractions include: &lt;br /&gt;
&lt;br /&gt;
* FILE_MEDIUM, NETWORK_MEDIUM, RELATIONAL_DB_MEDIUM, CUSTOM_MEDIUM, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_FORMAT, STRING_FORMAT, XML_FORMAT, DADL_FORMAT, CUSTOM_FORMAT, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_SERIALIZATION_MANAGER, RDBMS_MANAGER, CUSTOM_MANAGER, ...&lt;br /&gt;
&lt;br /&gt;
==Diagrams and high-level Eiffel descriptions==&lt;br /&gt;
A separate [[persistence code samples]] page provides a class diagram and the essentials of selected classes.&lt;br /&gt;
&lt;br /&gt;
==Discussion==&lt;br /&gt;
Feel free to participate in the [[persistence framework design discussion]]. &lt;br /&gt;
&lt;br /&gt;
===Name search===&lt;br /&gt;
PERSIST is a placeholder name. Suggestions are welcome.&lt;br /&gt;
&lt;br /&gt;
==Contacts==&lt;br /&gt;
*Marco Piccioni&lt;br /&gt;
*Bertrand Meyer&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9598</id>
		<title>Persistence unified</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9598"/>
				<updated>2007-08-27T00:11:18Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Design orthogonality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Persistence]]&lt;br /&gt;
==Unified persistence for Eiffel==&lt;br /&gt;
(Temporary name: PERSIST.)&lt;br /&gt;
&lt;br /&gt;
The PERSIST project is about developing a single, integrated and simple persistence framework for Eiffel:&lt;br /&gt;
&lt;br /&gt;
*'''Single''': PERSIST should remove the need for any more specific solution such as serialization, object-relational interfaces, interfaces to object-oriented databases, all of which become functionalities of PERSIST.&lt;br /&gt;
*'''Integrated''': PERSIST  should integrate existing mechanisms and add new ones as needed, in a consistent framework.&lt;br /&gt;
*'''Simple''': PERSIST should hide all unnecessary complexity from programmers; in Alan Kay's words, easy things should be easy and difficult things should possible.&lt;br /&gt;
&lt;br /&gt;
Community input is expressly sought to help PERSIST achieve these goals.&lt;br /&gt;
&lt;br /&gt;
==Existing persistence mechanisms==&lt;br /&gt;
Many people have devoted considerable efforts to persistence in Eiffel. It is important to take advantage of their insights and tools, and not to reinvent what has already been devised. Please make sure you are familiar with the list on the [[:Category:Persistence|general persistence page]], and if you are familiar with a project not referenced there please add it.&lt;br /&gt;
&lt;br /&gt;
==Design principles==&lt;br /&gt;
The first task is to agree on desirable features for PERSIST. Here is a first proposal:&lt;br /&gt;
&lt;br /&gt;
# Design orthogonality&lt;br /&gt;
# Persistence uniformity&lt;br /&gt;
# Encapsulation and extension&lt;br /&gt;
# Pure Eiffel&lt;br /&gt;
# Newbie-proof&lt;br /&gt;
# Essential abstractions&lt;br /&gt;
&lt;br /&gt;
You can find some details in the following paragraphs. &lt;br /&gt;
&lt;br /&gt;
===Design orthogonality===&lt;br /&gt;
It should be possible to add persistence mechanisms to an application without affecting the other aspects of its design. Developers should not, for example, need to add persistence-related attributes, or require application classes to inherit from specific persistence classes.&lt;br /&gt;
&lt;br /&gt;
===Persistence uniformity===&lt;br /&gt;
&lt;br /&gt;
There are many kinds of persistence medium, from plain files to relational databases, object-oriented databases and networks. Programmers using PERSIST should only have to take into account the properties of the persistence medium that they choose to consider. This means in particular that it must be possible to write a PERSIST application that will work with different persistence media.&lt;br /&gt;
&lt;br /&gt;
===Extendibility===&lt;br /&gt;
It should be possible to add new kinds of persistence medium. (For a possible approach see XXX_FORMAT classes below.)&lt;br /&gt;
&lt;br /&gt;
===Pure Eiffel===&lt;br /&gt;
No external calls to C macros, just plain Eiffel should be used to implement the framework&lt;br /&gt;
&lt;br /&gt;
===Newbie-proof===&lt;br /&gt;
Ideally the programmer should only create the desired manager object and invoke the features to store or retrieve an object  passing the object itself as an argument.&lt;br /&gt;
&lt;br /&gt;
===Essential abstractions===&lt;br /&gt;
It should be possible to develop most persistence-aware applications based on knowledge of just three abstractions:&lt;br /&gt;
*PERSISTENCE_MEDIUM, covering the kind of medium onto which objects are mapped; it should be possible to work with a very abstract view of such a medium, or, if desired, to take advantage of more specific properties.&lt;br /&gt;
*PERSISTENCE_FORMAT, controlling the mapping between object properties and their outside representation.&lt;br /&gt;
*PERSISTENCE_MANAGER: control object to specify modalities of writing and reading, and find out how the operations actually occurred.&lt;br /&gt;
&lt;br /&gt;
Possible specializations of these abstractions could be: &lt;br /&gt;
&lt;br /&gt;
* FILE_MEDIUM, NETWORK_MEDIUM, RELATIONAL_DB_MEDIUM, CUSTOM_MEDIUM, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_FORMAT, STRING_FORMAT, XML_FORMAT, DADL_FORMAT, CUSTOM_FORMAT, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_SERIALIZATION_MANAGER, RDBMS_MANAGER, CUSTOM_MANAGER, ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Diagrams and code samples==&lt;br /&gt;
Here is a link to the [[persistence code samples]] page where you can have a look at some code and a class diagram.&lt;br /&gt;
&lt;br /&gt;
==Open discussion==&lt;br /&gt;
For an open discussion on the design choices please have a look at the [[persistence framework design discussion]]. &lt;br /&gt;
==Additional tasks==&lt;br /&gt;
===Which name?===&lt;br /&gt;
Find an appropriate name for the framework is, of course, absolutely fundamental. It seems fair that anyone interested could provide one or more names within a certain period of time. After that a poll may be created to determine the winner. A first proposal could be EIUNPE which stands for EIffel UNified PErsistence.&lt;br /&gt;
&lt;br /&gt;
==Contacts==&lt;br /&gt;
*Marco Piccioni&lt;br /&gt;
*Bertrand Meyer&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9597</id>
		<title>Persistence unified</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9597"/>
				<updated>2007-08-27T00:11:01Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Persistence]]&lt;br /&gt;
==Unified persistence for Eiffel==&lt;br /&gt;
(Temporary name: PERSIST.)&lt;br /&gt;
&lt;br /&gt;
The PERSIST project is about developing a single, integrated and simple persistence framework for Eiffel:&lt;br /&gt;
&lt;br /&gt;
*'''Single''': PERSIST should remove the need for any more specific solution such as serialization, object-relational interfaces, interfaces to object-oriented databases, all of which become functionalities of PERSIST.&lt;br /&gt;
*'''Integrated''': PERSIST  should integrate existing mechanisms and add new ones as needed, in a consistent framework.&lt;br /&gt;
*'''Simple''': PERSIST should hide all unnecessary complexity from programmers; in Alan Kay's words, easy things should be easy and difficult things should possible.&lt;br /&gt;
&lt;br /&gt;
Community input is expressly sought to help PERSIST achieve these goals.&lt;br /&gt;
&lt;br /&gt;
==Existing persistence mechanisms==&lt;br /&gt;
Many people have devoted considerable efforts to persistence in Eiffel. It is important to take advantage of their insights and tools, and not to reinvent what has already been devised. Please make sure you are familiar with the list on the [[:Category:Persistence|general persistence page]], and if you are familiar with a project not referenced there please add it.&lt;br /&gt;
&lt;br /&gt;
==Design principles==&lt;br /&gt;
The first task is to agree on desirable features for PERSIST. Here is a first proposal:&lt;br /&gt;
&lt;br /&gt;
# Design orthogonality&lt;br /&gt;
# Persistence uniformity&lt;br /&gt;
# Encapsulation and extension&lt;br /&gt;
# Pure Eiffel&lt;br /&gt;
# Newbie-proof&lt;br /&gt;
# Essential abstractions&lt;br /&gt;
&lt;br /&gt;
You can find some details in the following paragraphs. &lt;br /&gt;
&lt;br /&gt;
===Design orthogonality===&lt;br /&gt;
It should be possible to add persistence mechanisms to an application without affecting the other aspects of its design. Developers should not, for example, need to add persistence-related attributes, or require application classes to inherit from specific persistence classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence uniformity===&lt;br /&gt;
&lt;br /&gt;
There are many kinds of persistence medium, from plain files to relational databases, object-oriented databases and networks. Programmers using PERSIST should only have to take into account the properties of the persistence medium that they choose to consider. This means in particular that it must be possible to write a PERSIST application that will work with different persistence media.&lt;br /&gt;
&lt;br /&gt;
===Extendibility===&lt;br /&gt;
It should be possible to add new kinds of persistence medium. (For a possible approach see XXX_FORMAT classes below.)&lt;br /&gt;
&lt;br /&gt;
===Pure Eiffel===&lt;br /&gt;
No external calls to C macros, just plain Eiffel should be used to implement the framework&lt;br /&gt;
&lt;br /&gt;
===Newbie-proof===&lt;br /&gt;
Ideally the programmer should only create the desired manager object and invoke the features to store or retrieve an object  passing the object itself as an argument.&lt;br /&gt;
&lt;br /&gt;
===Essential abstractions===&lt;br /&gt;
It should be possible to develop most persistence-aware applications based on knowledge of just three abstractions:&lt;br /&gt;
*PERSISTENCE_MEDIUM, covering the kind of medium onto which objects are mapped; it should be possible to work with a very abstract view of such a medium, or, if desired, to take advantage of more specific properties.&lt;br /&gt;
*PERSISTENCE_FORMAT, controlling the mapping between object properties and their outside representation.&lt;br /&gt;
*PERSISTENCE_MANAGER: control object to specify modalities of writing and reading, and find out how the operations actually occurred.&lt;br /&gt;
&lt;br /&gt;
Possible specializations of these abstractions could be: &lt;br /&gt;
&lt;br /&gt;
* FILE_MEDIUM, NETWORK_MEDIUM, RELATIONAL_DB_MEDIUM, CUSTOM_MEDIUM, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_FORMAT, STRING_FORMAT, XML_FORMAT, DADL_FORMAT, CUSTOM_FORMAT, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_SERIALIZATION_MANAGER, RDBMS_MANAGER, CUSTOM_MANAGER, ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Diagrams and code samples==&lt;br /&gt;
Here is a link to the [[persistence code samples]] page where you can have a look at some code and a class diagram.&lt;br /&gt;
&lt;br /&gt;
==Open discussion==&lt;br /&gt;
For an open discussion on the design choices please have a look at the [[persistence framework design discussion]]. &lt;br /&gt;
==Additional tasks==&lt;br /&gt;
===Which name?===&lt;br /&gt;
Find an appropriate name for the framework is, of course, absolutely fundamental. It seems fair that anyone interested could provide one or more names within a certain period of time. After that a poll may be created to determine the winner. A first proposal could be EIUNPE which stands for EIffel UNified PErsistence.&lt;br /&gt;
&lt;br /&gt;
==Contacts==&lt;br /&gt;
*Marco Piccioni&lt;br /&gt;
*Bertrand Meyer&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9596</id>
		<title>Persistence unified</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9596"/>
				<updated>2007-08-26T23:50:39Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* A tentative manifesto */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Persistence]]&lt;br /&gt;
==Unified persistence for Eiffel==&lt;br /&gt;
(Temporary name: PERSIST.)&lt;br /&gt;
&lt;br /&gt;
The PERSIST project is about developing a single, integrated and simple persistence framework for Eiffel:&lt;br /&gt;
&lt;br /&gt;
*'''Single''': PERSIST should remove the need for any more specific solution such as serialization, object-relational interfaces, interfaces to object-oriented databases, all of which become functionalities of PERSIST.&lt;br /&gt;
*'''Integrated''': PERSIST  should integrate existing mechanisms and add new ones as needed, in a consistent framework.&lt;br /&gt;
*'''Simple''': PERSIST should hide all unnecessary complexity from programmers; in Alan Kay's words, easy things should be easy and difficult things should possible.&lt;br /&gt;
&lt;br /&gt;
Community input is expressly sought to help PERSIST achieve these goals.&lt;br /&gt;
&lt;br /&gt;
==Existing persistence mechanisms==&lt;br /&gt;
Many people have devoted considerable efforts to persistence in Eiffel. It is important to take advantage of their insights and tools, and not to reinvent what has already been devised. Please make sure you are familiar with the list on the [[:Category:Persistence|general persistence page]], and if you are familiar with a project not referenced there please add it.&lt;br /&gt;
&lt;br /&gt;
==A tentative manifesto==&lt;br /&gt;
The first task is to agree on desirable features for PERSIST. Here is a first proposal:&lt;br /&gt;
&lt;br /&gt;
# Essential abstractions&lt;br /&gt;
# Independence from persistence code&lt;br /&gt;
# Uniform access&lt;br /&gt;
# Encapsulation and extension&lt;br /&gt;
# Pure Eiffel&lt;br /&gt;
# Newbie-proof&lt;br /&gt;
&lt;br /&gt;
You can find some details in the following paragraphs. &lt;br /&gt;
&lt;br /&gt;
===Essential abstractions===&lt;br /&gt;
It should be possible to develop most persistence-aware applications based on knowledge of just three abstractions:&lt;br /&gt;
*PERSISTENCE_MEDIUM, covering the kind of medium onto which objects are mapped; it should be possible to work with a very abstract view of such a medium, or, if desired, to take advantage of more specific properties.&lt;br /&gt;
*PERSISTENCE_FORMAT, controlling the mapping between object properties and their outside representation.&lt;br /&gt;
*PERSISTENCE_MANAGER: control object to specify modalities of writing and reading, and find out how the operations actually occurred.&lt;br /&gt;
&lt;br /&gt;
Possible specializations of these abstractions could be: &lt;br /&gt;
&lt;br /&gt;
* FILE_MEDIUM, NETWORK_MEDIUM, RELATIONAL_DB_MEDIUM, CUSTOM_MEDIUM, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_FORMAT, STRING_FORMAT, XML_FORMAT, DADL_FORMAT, CUSTOM_FORMAT, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_SERIALIZATION_MANAGER, RDBMS_MANAGER, CUSTOM_MANAGER, ...&lt;br /&gt;
&lt;br /&gt;
===Independence from persistence code===&lt;br /&gt;
Classes which objects have to be persisted should not be polluted with persistence code, for example by adding specific persistence-related attributes or by inhering from some other class that provides persistence services.&lt;br /&gt;
&lt;br /&gt;
===Uniform access===&lt;br /&gt;
The access to the persistence services should be as uniform as possible. This can be achieved using the XXX_MANAGER class hierarchy that handles access to specific kinds of persistence stores.&lt;br /&gt;
&lt;br /&gt;
===Encapsulation and extension===&lt;br /&gt;
The different media should be properly incapsulated and the same time there should be place for extensions. This can be achieved using the XXX_MEDIUM class hierarchy. &lt;br /&gt;
&lt;br /&gt;
The different formats should be properly incapsulated and the same time there should be place for extensions. This can be achieved using the XXX_FORMAT class hierarchy.&lt;br /&gt;
&lt;br /&gt;
===Pure Eiffel===&lt;br /&gt;
No external calls to C macros, just plain Eiffel should be used to implement the framework&lt;br /&gt;
&lt;br /&gt;
===Newbie-proof===&lt;br /&gt;
Ideally the programmer should only create the desired manager object and invoke the features to store or retrieve an object  passing the object itself as an argument.&lt;br /&gt;
&lt;br /&gt;
==Diagrams and code samples==&lt;br /&gt;
Here is a link to the [[persistence code samples]] page where you can have a look at some code and a class diagram.&lt;br /&gt;
&lt;br /&gt;
==Open discussion==&lt;br /&gt;
For an open discussion on the design choices please have a look at the [[persistence framework design discussion]]. &lt;br /&gt;
==Additional tasks==&lt;br /&gt;
===Which name?===&lt;br /&gt;
Find an appropriate name for the framework is, of course, absolutely fundamental. It seems fair that anyone interested could provide one or more names within a certain period of time. After that a poll may be created to determine the winner. A first proposal could be EIUNPE which stands for EIffel UNified PErsistence.&lt;br /&gt;
&lt;br /&gt;
==Contacts==&lt;br /&gt;
*Marco Piccioni&lt;br /&gt;
*Bertrand Meyer&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9595</id>
		<title>Persistence unified</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9595"/>
				<updated>2007-08-26T23:36:56Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Persistence]]&lt;br /&gt;
==Unified persistence for Eiffel==&lt;br /&gt;
(Temporary name: PERSIST.)&lt;br /&gt;
&lt;br /&gt;
The PERSIST project is about developing a single, integrated and simple persistence framework for Eiffel:&lt;br /&gt;
&lt;br /&gt;
*'''Single''': PERSIST should remove the need for any more specific solution such as serialization, object-relational interfaces, interfaces to object-oriented databases, all of which become functionalities of PERSIST.&lt;br /&gt;
*'''Integrated''': PERSIST  should integrate existing mechanisms and add new ones as needed, in a consistent framework.&lt;br /&gt;
*'''Simple''': PERSIST should hide all unnecessary complexity from programmers; in Alan Kay's words, easy things should be easy and difficult things should possible.&lt;br /&gt;
&lt;br /&gt;
Community input is expressly sought to help PERSIST achieve these goals.&lt;br /&gt;
&lt;br /&gt;
==Existing persistence mechanisms==&lt;br /&gt;
Many people have devoted considerable efforts to persistence in Eiffel. It is important to take advantage of their insights and tools, and not to reinvent what has already been devised. Please make sure you are familiar with the list on the [[:Category:Persistence|general persistence page]], and if you are familiar with a project not referenced there please add it.&lt;br /&gt;
&lt;br /&gt;
==A tentative manifesto==&lt;br /&gt;
The first task is to agree on desirable features for PERSIST. Here is a first proposal:&lt;br /&gt;
&lt;br /&gt;
# Essential abstractions&lt;br /&gt;
# Independence from persistence code&lt;br /&gt;
# Uniform access&lt;br /&gt;
# Encapsulation and extension&lt;br /&gt;
# Pure Eiffel&lt;br /&gt;
# Newbie-proof&lt;br /&gt;
&lt;br /&gt;
You can find some details in the following paragraphs. &lt;br /&gt;
&lt;br /&gt;
===Essential abstractions===&lt;br /&gt;
The framework should provide just three abstractions to the developer: PERSISTENCE_MEDIUM, PERSISTENCE_FORMAT and PERSISTENCE_MANAGER.&lt;br /&gt;
&lt;br /&gt;
Possible specializations of these abstractions could be: &lt;br /&gt;
&lt;br /&gt;
* FILE_MEDIUM, NETWORK_MEDIUM, RELATIONAL_DB_MEDIUM, CUSTOM_MEDIUM, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_FORMAT, STRING_FORMAT, XML_FORMAT, DADL_FORMAT, CUSTOM_FORMAT, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_SERIALIZATION_MANAGER, RDBMS_MANAGER, CUSTOM_MANAGER, ...&lt;br /&gt;
&lt;br /&gt;
===Independence from persistence code===&lt;br /&gt;
Classes which objects have to be persisted should not be polluted with persistence code, for example by adding specific persistence-related attributes or by inhering from some other class that provides persistence services.&lt;br /&gt;
&lt;br /&gt;
===Uniform access===&lt;br /&gt;
The access to the persistence services should be as uniform as possible. This can be achieved using the XXX_MANAGER class hierarchy that handles access to specific kinds of persistence stores.&lt;br /&gt;
&lt;br /&gt;
===Encapsulation and extension===&lt;br /&gt;
The different media should be properly incapsulated and the same time there should be place for extensions. This can be achieved using the XXX_MEDIUM class hierarchy. &lt;br /&gt;
&lt;br /&gt;
The different formats should be properly incapsulated and the same time there should be place for extensions. This can be achieved using the XXX_FORMAT class hierarchy.&lt;br /&gt;
&lt;br /&gt;
===Pure Eiffel===&lt;br /&gt;
No external calls to C macros, just plain Eiffel should be used to implement the framework&lt;br /&gt;
&lt;br /&gt;
===Newbie-proof===&lt;br /&gt;
Ideally the programmer should only create the desired manager object and invoke the features to store or retrieve an object  passing the object itself as an argument.&lt;br /&gt;
&lt;br /&gt;
==Diagrams and code samples==&lt;br /&gt;
Here is a link to the [[persistence code samples]] page where you can have a look at some code and a class diagram.&lt;br /&gt;
&lt;br /&gt;
==Open discussion==&lt;br /&gt;
For an open discussion on the design choices please have a look at the [[persistence framework design discussion]]. &lt;br /&gt;
==Additional tasks==&lt;br /&gt;
===Which name?===&lt;br /&gt;
Find an appropriate name for the framework is, of course, absolutely fundamental. It seems fair that anyone interested could provide one or more names within a certain period of time. After that a poll may be created to determine the winner. A first proposal could be EIUNPE which stands for EIffel UNified PErsistence.&lt;br /&gt;
&lt;br /&gt;
==Contacts==&lt;br /&gt;
*Marco Piccioni&lt;br /&gt;
*Bertrand Meyer&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Persistence&amp;diff=9594</id>
		<title>Category:Persistence</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Persistence&amp;diff=9594"/>
				<updated>2007-08-26T23:35:31Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The term &amp;quot;persistence&amp;quot; covers all mechanisms that allow Eiffel objects to exist beyond the scope of a particular system execution.&lt;br /&gt;
&lt;br /&gt;
A number of persistence solutions have been developed. The aim of this Category page is twofold:&lt;br /&gt;
* To identify, document and catalog existing solutions.&lt;br /&gt;
* To provide the basis for a single, unified mechanism covering all future persistence needs (the [[Persistence_unified|Unified Persistence Project]].&lt;br /&gt;
&lt;br /&gt;
==Existing persistence mechanisms==&lt;br /&gt;
(If you know of an approach not covered in the list, please add a short mention here and, if appropriate, a link to a more detailed description, e.g. a new page in the Persistence category. Only approaches that can work with EiffelStudio are relevant.)&lt;br /&gt;
&lt;br /&gt;
*STORABLE mechanism: general facility for storing object structures (all objects reachable from a given object, following the &amp;quot;persistence closure&amp;quot; principle). There are several variants of this mechanism:&lt;br /&gt;
**Class STORABLE in the original EiffelBase, since widely used.&lt;br /&gt;
** ...&lt;br /&gt;
*EiffelStore library: Object-relational interface.&lt;br /&gt;
*EiffelNet library: uses STORABLE to exchange object structures over a network&lt;br /&gt;
&lt;br /&gt;
==Unified Persistence Project==&lt;br /&gt;
An ongoing project to provide a solution combining the best of all previous approaches.&lt;br /&gt;
&lt;br /&gt;
==OOSC specification==&lt;br /&gt;
A number of the developments listed here rely in whole or in part on the specification given in chapter 30 of [http://archive.eiffel.com/doc/oosc/ Object-Oriented Software Construction].&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Persistence&amp;diff=9593</id>
		<title>Category:Persistence</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Persistence&amp;diff=9593"/>
				<updated>2007-08-26T23:34:53Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Existing persistence mechanisms */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The term &amp;quot;persistence&amp;quot; covers all mechanisms that allow Eiffel objects to exist beyond the scope of a particular system execution.&lt;br /&gt;
&lt;br /&gt;
A number of persistence solutions have been developed. The aim of this Category page is twofold:&lt;br /&gt;
* To identify, document and catalog existing solutions.&lt;br /&gt;
* To provide the basis for a single, unified mechanism covering all future persistence needs (the [[Persistence_unified|Unified Persistence Project]].&lt;br /&gt;
&lt;br /&gt;
==Existing persistence mechanisms==&lt;br /&gt;
(If you know of an approach not covered in the list, please add a short mention here and, if appropriate, a link to a more detailed description, e.g. a new page in the Persistence category. Only approaches that can work with EiffelStudio are relevant.)&lt;br /&gt;
&lt;br /&gt;
*STORABLE mechanism: general facility for storing object structures (all objects reachable from a given object, following the &amp;quot;persistence closure&amp;quot; principle). There are several variants of this mechanism:&lt;br /&gt;
**Class STORABLE in the original EiffelBase, since widely used.&lt;br /&gt;
** ...&lt;br /&gt;
*EiffelStore library: Object-relational interface.&lt;br /&gt;
*EiffelNet library: uses STORABLE to exchange object structures over a network&lt;br /&gt;
&lt;br /&gt;
==OOSC mechanism==&lt;br /&gt;
A number of the developments listed here rely in whole or in part on the specification given in chapter 30 of [http://archive.eiffel.com/doc/oosc/ OOSC].&lt;br /&gt;
&lt;br /&gt;
==Unified Persistence Project==&lt;br /&gt;
An ongoing project to provide a solution combining the best of all previous approaches.&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9592</id>
		<title>Persistence unified</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9592"/>
				<updated>2007-08-26T23:29:23Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Unified persistence for Eiffel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Persistence]]&lt;br /&gt;
==Unified persistence for Eiffel==&lt;br /&gt;
(Temporary name: PERSIST.)&lt;br /&gt;
&lt;br /&gt;
The PERSIST project is about developing a single, integrated and simple persistence framework for Eiffel:&lt;br /&gt;
&lt;br /&gt;
*'''Single''': PERSIST should remove the need for any more specific solution such as serialization, object-relational interfaces, interfaces to object-oriented databases, all of which become functionalities of PERSIST.&lt;br /&gt;
*'''Integrated''': PERSIST  should integrate existing mechanisms and add new ones as needed, in a consistent framework.&lt;br /&gt;
*'''Simple''': PERSIST should hide all unnecessary complexity from programmers; in Alan Kay's words, easy things should be easy and difficult things should possible.&lt;br /&gt;
&lt;br /&gt;
Community input is expressly sought to help PERSIST achieve these goals.&lt;br /&gt;
&lt;br /&gt;
==Existing persistence mechanisms==&lt;br /&gt;
Many people have devoted considerable efforts to persistence in Eiffel. It is important to take advantage of their insights and tools, and not to reinvent what has already been devised. Please make sure you are familiar with the list on the [[:Category:Persistence|general persistence page]], and if you are familiar with a project not referenced there please add it.&lt;br /&gt;
&lt;br /&gt;
==A tentative manifesto==&lt;br /&gt;
The first proposed task is to agree upon a sort of ‘manifesto’ of desirable features for the framework. &lt;br /&gt;
&lt;br /&gt;
Here is a first proposal:&lt;br /&gt;
&lt;br /&gt;
# Essential abstractions&lt;br /&gt;
# Independence from persistence code&lt;br /&gt;
# Uniform access&lt;br /&gt;
# Encapsulation and extension&lt;br /&gt;
# Pure Eiffel&lt;br /&gt;
# Newbie-proof&lt;br /&gt;
&lt;br /&gt;
You can find some details in the following paragraphs. &lt;br /&gt;
&lt;br /&gt;
===Essential abstractions===&lt;br /&gt;
The framework should provide just three abstractions to the developer: PERSISTENCE_MEDIUM, PERSISTENCE_FORMAT and PERSISTENCE_MANAGER.&lt;br /&gt;
&lt;br /&gt;
Possible specializations of these abstractions could be: &lt;br /&gt;
&lt;br /&gt;
* FILE_MEDIUM, NETWORK_MEDIUM, RELATIONAL_DB_MEDIUM, CUSTOM_MEDIUM, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_FORMAT, STRING_FORMAT, XML_FORMAT, DADL_FORMAT, CUSTOM_FORMAT, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_SERIALIZATION_MANAGER, RDBMS_MANAGER, CUSTOM_MANAGER, ...&lt;br /&gt;
&lt;br /&gt;
===Independence from persistence code===&lt;br /&gt;
Classes which objects have to be persisted should not be polluted with persistence code, for example by adding specific persistence-related attributes or by inhering from some other class that provides persistence services.&lt;br /&gt;
&lt;br /&gt;
===Uniform access===&lt;br /&gt;
The access to the persistence services should be as uniform as possible. This can be achieved using the XXX_MANAGER class hierarchy that handles access to specific kinds of persistence stores.&lt;br /&gt;
&lt;br /&gt;
===Encapsulation and extension===&lt;br /&gt;
The different media should be properly incapsulated and the same time there should be place for extensions. This can be achieved using the XXX_MEDIUM class hierarchy. &lt;br /&gt;
&lt;br /&gt;
The different formats should be properly incapsulated and the same time there should be place for extensions. This can be achieved using the XXX_FORMAT class hierarchy.&lt;br /&gt;
&lt;br /&gt;
===Pure Eiffel===&lt;br /&gt;
No external calls to C macros, just plain Eiffel should be used to implement the framework&lt;br /&gt;
&lt;br /&gt;
===Newbie-proof===&lt;br /&gt;
Ideally the programmer should only create the desired manager object and invoke the features to store or retrieve an object  passing the object itself as an argument.&lt;br /&gt;
&lt;br /&gt;
==Diagrams and code samples==&lt;br /&gt;
Here is a link to the [[persistence code samples]] page where you can have a look at some code and a class diagram.&lt;br /&gt;
&lt;br /&gt;
==Open discussion==&lt;br /&gt;
For an open discussion on the design choices please have a look at the [[persistence framework design discussion]]. &lt;br /&gt;
==Additional tasks==&lt;br /&gt;
===Which name?===&lt;br /&gt;
Find an appropriate name for the framework is, of course, absolutely fundamental. It seems fair that anyone interested could provide one or more names within a certain period of time. After that a poll may be created to determine the winner. A first proposal could be EIUNPE which stands for EIffel UNified PErsistence.&lt;br /&gt;
&lt;br /&gt;
==Contacts==&lt;br /&gt;
*Marco Piccioni&lt;br /&gt;
*Bertrand Meyer&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9591</id>
		<title>Persistence unified</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9591"/>
				<updated>2007-08-26T23:20:27Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Persistence]]&lt;br /&gt;
==Unified persistence for Eiffel==&lt;br /&gt;
(Temporary name: PERSIST.)&lt;br /&gt;
&lt;br /&gt;
The PERSIST project is about developing a single, integrated and simple persistence framework for Eiffel:&lt;br /&gt;
&lt;br /&gt;
*'''Single''': PERSIST should remove the need for any more specific solution such as serialization, object-relational interfaces, interfaces to object-oriented databases, all of which become functionalities of PERSIST.&lt;br /&gt;
*'''Integrated''': PERSIST  should integrate existing mechanisms and add new ones as needed, in a consistent framework.&lt;br /&gt;
*'''Simple''': PERSIST should hide all unnecessary complexity from programmers; in Alan Kay's words, easy things should be easy and difficult things should possible.&lt;br /&gt;
&lt;br /&gt;
Community input is expressly sought to help PERSIST achieve these goals.&lt;br /&gt;
&lt;br /&gt;
==A tentative manifesto==&lt;br /&gt;
The first proposed task is to agree upon a sort of ‘manifesto’ of desirable features for the framework. &lt;br /&gt;
&lt;br /&gt;
Here is a first proposal:&lt;br /&gt;
&lt;br /&gt;
# Essential abstractions&lt;br /&gt;
# Independence from persistence code&lt;br /&gt;
# Uniform access&lt;br /&gt;
# Encapsulation and extension&lt;br /&gt;
# Pure Eiffel&lt;br /&gt;
# Newbie-proof&lt;br /&gt;
&lt;br /&gt;
You can find some details in the following paragraphs. &lt;br /&gt;
&lt;br /&gt;
===Essential abstractions===&lt;br /&gt;
The framework should provide just three abstractions to the developer: PERSISTENCE_MEDIUM, PERSISTENCE_FORMAT and PERSISTENCE_MANAGER.&lt;br /&gt;
&lt;br /&gt;
Possible specializations of these abstractions could be: &lt;br /&gt;
&lt;br /&gt;
* FILE_MEDIUM, NETWORK_MEDIUM, RELATIONAL_DB_MEDIUM, CUSTOM_MEDIUM, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_FORMAT, STRING_FORMAT, XML_FORMAT, DADL_FORMAT, CUSTOM_FORMAT, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_SERIALIZATION_MANAGER, RDBMS_MANAGER, CUSTOM_MANAGER, ...&lt;br /&gt;
&lt;br /&gt;
===Independence from persistence code===&lt;br /&gt;
Classes which objects have to be persisted should not be polluted with persistence code, for example by adding specific persistence-related attributes or by inhering from some other class that provides persistence services.&lt;br /&gt;
&lt;br /&gt;
===Uniform access===&lt;br /&gt;
The access to the persistence services should be as uniform as possible. This can be achieved using the XXX_MANAGER class hierarchy that handles access to specific kinds of persistence stores.&lt;br /&gt;
&lt;br /&gt;
===Encapsulation and extension===&lt;br /&gt;
The different media should be properly incapsulated and the same time there should be place for extensions. This can be achieved using the XXX_MEDIUM class hierarchy. &lt;br /&gt;
&lt;br /&gt;
The different formats should be properly incapsulated and the same time there should be place for extensions. This can be achieved using the XXX_FORMAT class hierarchy.&lt;br /&gt;
&lt;br /&gt;
===Pure Eiffel===&lt;br /&gt;
No external calls to C macros, just plain Eiffel should be used to implement the framework&lt;br /&gt;
&lt;br /&gt;
===Newbie-proof===&lt;br /&gt;
Ideally the programmer should only create the desired manager object and invoke the features to store or retrieve an object  passing the object itself as an argument.&lt;br /&gt;
&lt;br /&gt;
==Diagrams and code samples==&lt;br /&gt;
Here is a link to the [[persistence code samples]] page where you can have a look at some code and a class diagram.&lt;br /&gt;
&lt;br /&gt;
==Open discussion==&lt;br /&gt;
For an open discussion on the design choices please have a look at the [[persistence framework design discussion]]. &lt;br /&gt;
==Additional tasks==&lt;br /&gt;
===Which name?===&lt;br /&gt;
Find an appropriate name for the framework is, of course, absolutely fundamental. It seems fair that anyone interested could provide one or more names within a certain period of time. After that a poll may be created to determine the winner. A first proposal could be EIUNPE which stands for EIffel UNified PErsistence.&lt;br /&gt;
&lt;br /&gt;
==Contacts==&lt;br /&gt;
*Marco Piccioni&lt;br /&gt;
*Bertrand Meyer&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9590</id>
		<title>Persistence unified</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9590"/>
				<updated>2007-08-26T22:57:29Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Persistence]]&lt;br /&gt;
==Unified persistence for Eiffel==&lt;br /&gt;
This project is about developing a single, integrated and simple persistence framework for Eiffel.&lt;br /&gt;
&lt;br /&gt;
*Single because nothing else should be needed to access any kind of persistence services (e.g. serialization, RDBMS, OODBMS).&lt;br /&gt;
*Integrated because aims at integrating both the already existing technologies  and frameworks and possibly new ones, as far as they all deliver the intended benefits.&lt;br /&gt;
*Simple because by removing all the unnecessary complexity it should be very easy and straightforward to use even for an Eiffel newcomer programmer.&lt;br /&gt;
&lt;br /&gt;
==A tentative manifesto==&lt;br /&gt;
The first proposed task is to agree upon a sort of ‘manifesto’ of desirable features for the framework. &lt;br /&gt;
&lt;br /&gt;
Here is a first proposal:&lt;br /&gt;
&lt;br /&gt;
# Essential abstractions&lt;br /&gt;
# Independence from persistence code&lt;br /&gt;
# Uniform access&lt;br /&gt;
# Encapsulation and extension&lt;br /&gt;
# Pure Eiffel&lt;br /&gt;
# Newbie-proof&lt;br /&gt;
&lt;br /&gt;
You can find some details in the following paragraphs. &lt;br /&gt;
&lt;br /&gt;
===Essential abstractions===&lt;br /&gt;
The framework should provide just three abstractions to the developer: PERSISTENCE_MEDIUM, PERSISTENCE_FORMAT and PERSISTENCE_MANAGER.&lt;br /&gt;
&lt;br /&gt;
Possible specializations of these abstractions could be: &lt;br /&gt;
&lt;br /&gt;
* FILE_MEDIUM, NETWORK_MEDIUM, RELATIONAL_DB_MEDIUM, CUSTOM_MEDIUM, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_FORMAT, STRING_FORMAT, XML_FORMAT, DADL_FORMAT, CUSTOM_FORMAT, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_SERIALIZATION_MANAGER, RDBMS_MANAGER, CUSTOM_MANAGER, ...&lt;br /&gt;
&lt;br /&gt;
===Independence from persistence code===&lt;br /&gt;
Classes which objects have to be persisted should not be polluted with persistence code, for example by adding specific persistence-related attributes or by inhering from some other class that provides persistence services.&lt;br /&gt;
&lt;br /&gt;
===Uniform access===&lt;br /&gt;
The access to the persistence services should be as uniform as possible. This can be achieved using the XXX_MANAGER class hierarchy that handles access to specific kinds of persistence stores.&lt;br /&gt;
&lt;br /&gt;
===Encapsulation and extension===&lt;br /&gt;
The different media should be properly incapsulated and the same time there should be place for extensions. This can be achieved using the XXX_MEDIUM class hierarchy. &lt;br /&gt;
&lt;br /&gt;
The different formats should be properly incapsulated and the same time there should be place for extensions. This can be achieved using the XXX_FORMAT class hierarchy.&lt;br /&gt;
&lt;br /&gt;
===Pure Eiffel===&lt;br /&gt;
No external calls to C macros, just plain Eiffel should be used to implement the framework&lt;br /&gt;
&lt;br /&gt;
===Newbie-proof===&lt;br /&gt;
Ideally the programmer should only create the desired manager object and invoke the features to store or retrieve an object  passing the object itself as an argument.&lt;br /&gt;
&lt;br /&gt;
==Diagrams and code samples==&lt;br /&gt;
Here is a link to the [[persistence code samples]] page where you can have a look at some code and a class diagram.&lt;br /&gt;
&lt;br /&gt;
==Open discussion==&lt;br /&gt;
For an open discussion on the design choices please have a look at the [[persistence framework design discussion]]. &lt;br /&gt;
==Additional tasks==&lt;br /&gt;
===Which name?===&lt;br /&gt;
Find an appropriate name for the framework is, of course, absolutely fundamental. It seems fair that anyone interested could provide one or more names within a certain period of time. After that a poll may be created to determine the winner. A first proposal could be EIUNPE which stands for EIffel UNified PErsistence.&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Persistence&amp;diff=9589</id>
		<title>Category:Persistence</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Persistence&amp;diff=9589"/>
				<updated>2007-08-26T22:23:37Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The term &amp;quot;persistence&amp;quot; covers all mechanisms that allow Eiffel objects to exist beyond the scope of a particular system execution.&lt;br /&gt;
&lt;br /&gt;
A number of persistence solutions have been developed. The aim of this Category page is twofold:&lt;br /&gt;
* To identify, document and catalog existing solutions.&lt;br /&gt;
* To provide the basis for a single, unified mechanism covering all future persistence needs (the [[Persistence_unified|Unified Persistence Project]].&lt;br /&gt;
&lt;br /&gt;
==Existing persistence mechanisms==&lt;br /&gt;
(If you know of an approach not covered in the list, please add a short mention here and, if appropriate, a link to a more detailed description, e.g. a new page in the Persistence category. Only approaches that can work with EiffelStudio are relevant.)&lt;br /&gt;
&lt;br /&gt;
*STORABLE mechanism: general facility for storing object structures (all objects reachable from a given object, following the &amp;quot;persistence closure&amp;quot; principle). There are several variants of this mechanism:&lt;br /&gt;
**Class STORABLE in the original EiffelBase, since widely used.&lt;br /&gt;
** ...&lt;br /&gt;
*EiffelStore library: Object-relational interface.&lt;br /&gt;
*EiffelNet library: uses STORABLE to exchange object structures over a network&lt;br /&gt;
&lt;br /&gt;
==Unified Persistence Project==&lt;br /&gt;
An ongoing project to provide a solution combining the best of all previous approaches.&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9588</id>
		<title>Persistence unified</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9588"/>
				<updated>2007-08-26T22:13:40Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Category:Persistence}}&lt;br /&gt;
==Unified persistence for Eiffel==&lt;br /&gt;
This project is about developing a single, integrated and simple persistence framework for Eiffel.&lt;br /&gt;
&lt;br /&gt;
*Single because nothing else should be needed to access any kind of persistence services (e.g. serialization, RDBMS, OODBMS).&lt;br /&gt;
*Integrated because aims at integrating both the already existing technologies  and frameworks and possibly new ones, as far as they all deliver the intended benefits.&lt;br /&gt;
*Simple because by removing all the unnecessary complexity it should be very easy and straightforward to use even for an Eiffel newcomer programmer.&lt;br /&gt;
&lt;br /&gt;
==A tentative manifesto==&lt;br /&gt;
The first proposed task is to agree upon a sort of ‘manifesto’ of desirable features for the framework. &lt;br /&gt;
&lt;br /&gt;
Here is a first proposal:&lt;br /&gt;
&lt;br /&gt;
# Essential abstractions&lt;br /&gt;
# Independence from persistence code&lt;br /&gt;
# Uniform access&lt;br /&gt;
# Encapsulation and extension&lt;br /&gt;
# Pure Eiffel&lt;br /&gt;
# Newbie-proof&lt;br /&gt;
&lt;br /&gt;
You can find some details in the following paragraphs. &lt;br /&gt;
&lt;br /&gt;
===Essential abstractions===&lt;br /&gt;
The framework should provide just three abstractions to the developer: PERSISTENCE_MEDIUM, PERSISTENCE_FORMAT and PERSISTENCE_MANAGER.&lt;br /&gt;
&lt;br /&gt;
Possible specializations of these abstractions could be: &lt;br /&gt;
&lt;br /&gt;
* FILE_MEDIUM, NETWORK_MEDIUM, RELATIONAL_DB_MEDIUM, CUSTOM_MEDIUM, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_FORMAT, STRING_FORMAT, XML_FORMAT, DADL_FORMAT, CUSTOM_FORMAT, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_SERIALIZATION_MANAGER, RDBMS_MANAGER, CUSTOM_MANAGER, ...&lt;br /&gt;
&lt;br /&gt;
===Independence from persistence code===&lt;br /&gt;
Classes which objects have to be persisted should not be polluted with persistence code, for example by adding specific persistence-related attributes or by inhering from some other class that provides persistence services.&lt;br /&gt;
&lt;br /&gt;
===Uniform access===&lt;br /&gt;
The access to the persistence services should be as uniform as possible. This can be achieved using the XXX_MANAGER class hierarchy that handles access to specific kinds of persistence stores.&lt;br /&gt;
&lt;br /&gt;
===Encapsulation and extension===&lt;br /&gt;
The different media should be properly incapsulated and the same time there should be place for extensions. This can be achieved using the XXX_MEDIUM class hierarchy. &lt;br /&gt;
&lt;br /&gt;
The different formats should be properly incapsulated and the same time there should be place for extensions. This can be achieved using the XXX_FORMAT class hierarchy.&lt;br /&gt;
&lt;br /&gt;
===Pure Eiffel===&lt;br /&gt;
No external calls to C macros, just plain Eiffel should be used to implement the framework&lt;br /&gt;
&lt;br /&gt;
===Newbie-proof===&lt;br /&gt;
Ideally the programmer should only create the desired manager object and invoke the features to store or retrieve an object  passing the object itself as an argument.&lt;br /&gt;
&lt;br /&gt;
==Diagrams and code samples==&lt;br /&gt;
Here is a link to the [[persistence code samples]] page where you can have a look at some code and a class diagram.&lt;br /&gt;
&lt;br /&gt;
==Open discussion==&lt;br /&gt;
For an open discussion on the design choices please have a look at the [[persistence framework design discussion]]. &lt;br /&gt;
==Additional tasks==&lt;br /&gt;
===Which name?===&lt;br /&gt;
Find an appropriate name for the framework is, of course, absolutely fundamental. It seems fair that anyone interested could provide one or more names within a certain period of time. After that a poll may be created to determine the winner. A first proposal could be EIUNPE which stands for EIffel UNified PErsistence.&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9587</id>
		<title>Persistence unified</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9587"/>
				<updated>2007-08-26T22:13:23Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{Category:Persistence}&lt;br /&gt;
==Unified persistence for Eiffel==&lt;br /&gt;
This project is about developing a single, integrated and simple persistence framework for Eiffel.&lt;br /&gt;
&lt;br /&gt;
*Single because nothing else should be needed to access any kind of persistence services (e.g. serialization, RDBMS, OODBMS).&lt;br /&gt;
*Integrated because aims at integrating both the already existing technologies  and frameworks and possibly new ones, as far as they all deliver the intended benefits.&lt;br /&gt;
*Simple because by removing all the unnecessary complexity it should be very easy and straightforward to use even for an Eiffel newcomer programmer.&lt;br /&gt;
&lt;br /&gt;
==A tentative manifesto==&lt;br /&gt;
The first proposed task is to agree upon a sort of ‘manifesto’ of desirable features for the framework. &lt;br /&gt;
&lt;br /&gt;
Here is a first proposal:&lt;br /&gt;
&lt;br /&gt;
# Essential abstractions&lt;br /&gt;
# Independence from persistence code&lt;br /&gt;
# Uniform access&lt;br /&gt;
# Encapsulation and extension&lt;br /&gt;
# Pure Eiffel&lt;br /&gt;
# Newbie-proof&lt;br /&gt;
&lt;br /&gt;
You can find some details in the following paragraphs. &lt;br /&gt;
&lt;br /&gt;
===Essential abstractions===&lt;br /&gt;
The framework should provide just three abstractions to the developer: PERSISTENCE_MEDIUM, PERSISTENCE_FORMAT and PERSISTENCE_MANAGER.&lt;br /&gt;
&lt;br /&gt;
Possible specializations of these abstractions could be: &lt;br /&gt;
&lt;br /&gt;
* FILE_MEDIUM, NETWORK_MEDIUM, RELATIONAL_DB_MEDIUM, CUSTOM_MEDIUM, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_FORMAT, STRING_FORMAT, XML_FORMAT, DADL_FORMAT, CUSTOM_FORMAT, ...&lt;br /&gt;
&lt;br /&gt;
* BINARY_SERIALIZATION_MANAGER, RDBMS_MANAGER, CUSTOM_MANAGER, ...&lt;br /&gt;
&lt;br /&gt;
===Independence from persistence code===&lt;br /&gt;
Classes which objects have to be persisted should not be polluted with persistence code, for example by adding specific persistence-related attributes or by inhering from some other class that provides persistence services.&lt;br /&gt;
&lt;br /&gt;
===Uniform access===&lt;br /&gt;
The access to the persistence services should be as uniform as possible. This can be achieved using the XXX_MANAGER class hierarchy that handles access to specific kinds of persistence stores.&lt;br /&gt;
&lt;br /&gt;
===Encapsulation and extension===&lt;br /&gt;
The different media should be properly incapsulated and the same time there should be place for extensions. This can be achieved using the XXX_MEDIUM class hierarchy. &lt;br /&gt;
&lt;br /&gt;
The different formats should be properly incapsulated and the same time there should be place for extensions. This can be achieved using the XXX_FORMAT class hierarchy.&lt;br /&gt;
&lt;br /&gt;
===Pure Eiffel===&lt;br /&gt;
No external calls to C macros, just plain Eiffel should be used to implement the framework&lt;br /&gt;
&lt;br /&gt;
===Newbie-proof===&lt;br /&gt;
Ideally the programmer should only create the desired manager object and invoke the features to store or retrieve an object  passing the object itself as an argument.&lt;br /&gt;
&lt;br /&gt;
==Diagrams and code samples==&lt;br /&gt;
Here is a link to the [[persistence code samples]] page where you can have a look at some code and a class diagram.&lt;br /&gt;
&lt;br /&gt;
==Open discussion==&lt;br /&gt;
For an open discussion on the design choices please have a look at the [[persistence framework design discussion]]. &lt;br /&gt;
==Additional tasks==&lt;br /&gt;
===Which name?===&lt;br /&gt;
Find an appropriate name for the framework is, of course, absolutely fundamental. It seems fair that anyone interested could provide one or more names within a certain period of time. After that a poll may be created to determine the winner. A first proposal could be EIUNPE which stands for EIffel UNified PErsistence.&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Exceptions_as_Objects&amp;diff=9577</id>
		<title>Exceptions as Objects</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Exceptions_as_Objects&amp;diff=9577"/>
				<updated>2007-08-22T15:56:29Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Exception class hierarchy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Exception]]&lt;br /&gt;
== Overview ==&lt;br /&gt;
This article describes many aspects of Exceptions as Objects (ECMA-367 8.26) which will be implemented in ISE Eiffel. All exceptions will be raised as objects which can be accessed by `last_exception'. Exceptions as objects are known as type EXCEPTION and its descendants. EXCEPTION_MANAGER is introduced to handle common exception class operations, i.e. catch, and ignore.&lt;br /&gt;
&lt;br /&gt;
This doc is from the original working version: http://docs.google.com/Doc?docid=dckspcv8_9htpfm4&amp;amp;hl=en&lt;br /&gt;
&lt;br /&gt;
== Exception class hierarchy ==&lt;br /&gt;
  EXCEPTION&lt;br /&gt;
     SYSTEM_EXCEPTION&lt;br /&gt;
        MACHINE_EXCEPTION&lt;br /&gt;
           OPERATING_SYSTEM_EXCEPTION&lt;br /&gt;
              COM_FAILURE&lt;br /&gt;
              OPERATING_SYSTEM_FAILURE&lt;br /&gt;
              OPERATING_SYSTEM_SIGNAL_FAILURE&lt;br /&gt;
           HARDWARE_EXCEPTION&lt;br /&gt;
              FLOATING_POINT_FAILURE&lt;br /&gt;
           EIFFEL_EXCEPTION&lt;br /&gt;
           LANGUAGE_EXCEPTION&lt;br /&gt;
              BAD_INSPECT_VALUE&lt;br /&gt;
              VOID_TARGET&lt;br /&gt;
              VOID_ASSIGNED_TO_EXPANDED&lt;br /&gt;
                 ROUTINE_FAILURE&lt;br /&gt;
                 EIFFELSTUDIO_SPECIFIC_LANGUAGE_EXCEPTION&lt;br /&gt;
                    CREATE_ON_DEFERRED&lt;br /&gt;
                    DOLLAR_APPLIED_TO_MELTED_FEATURE    REMOVE ?  IF NOT, CHANGE NAME (USE E.G. &amp;quot;ADDRESS&amp;quot; INST. OF &amp;quot;DOLLAR&amp;quot;&lt;br /&gt;
           EIFFEL_RUNTIME_EXCEPTION&lt;br /&gt;
              NO_MORE_MEMORY&lt;br /&gt;
              DATA_EXCEPTION&lt;br /&gt;
                 IO_FAILURE&lt;br /&gt;
                 SERIALIZATION_FAILURE&lt;br /&gt;
                 MISMATCH_FAILURE&lt;br /&gt;
                 EXTERNAL_FAILURE-- Only used for threads at the moment&lt;br /&gt;
                 EIFFEL_RUNTIME_PANIC               &lt;br /&gt;
    ASSERTION_VIOLATION&lt;br /&gt;
       INVARIANT_VIOLATION&lt;br /&gt;
       PRECONDITION_VIOLATION&lt;br /&gt;
       POSTCONDITION_VIOLATION&lt;br /&gt;
       CHECK_VIOLATION&lt;br /&gt;
       VARIANT_VIOLATION&lt;br /&gt;
       OLD_VIOLATION&lt;br /&gt;
       LOOP_INVARIANT_VIOLATION&lt;br /&gt;
    DEVELOPER_EXCEPTION&lt;br /&gt;
    OBSOLETE EXCEPTION        &lt;br /&gt;
       RESUMPTION_FAILURE Was RESUMPTION_FAILED.&lt;br /&gt;
       RESCUE_FAILURE --------- SHOULD NOT APPLY ANY MORE WITH ISO/ECMA, CHECK!!!&lt;br /&gt;
       EXCEPTION_IN_SIGNAL_HANDLER_FAILURE&lt;br /&gt;
&lt;br /&gt;
These classes plus EXCEPTION_MANAGER will be place at base\elks\kernel\exceptions\.&lt;br /&gt;
&lt;br /&gt;
'''Terminology'''&lt;br /&gt;
We use _EXCEPTION for intermediate nodes in the hierarchy; when we need a term in the leaves of the hierarchy we don't use EXCEPTION but&lt;br /&gt;
  &lt;br /&gt;
    * _VIOLATION for assertions (also used for ASSERTION_VIOLATION, an intermediate node)&lt;br /&gt;
    * _FAILURE otherwise&lt;br /&gt;
  &lt;br /&gt;
  This is consistent with Eiffel exception terminology since from the viewpoint of Eiffel these things have failed, for example a signal was not handled properly. The Eiffel runtime is causing an exception in the Eiffel code as a result, but the original event was a failure.  Hence SERIALIZATION_FAILURE etc.&lt;br /&gt;
&lt;br /&gt;
== Raise and catch an exception ==&lt;br /&gt;
&lt;br /&gt;
==== Catching an exception ====&lt;br /&gt;
All exceptions can possibly be caught. `is_caught' is set by default. Only the given type of exception is `ignore'd in EXCEPTION_MANAGER if possible, it hence is not caught.&lt;br /&gt;
The caught exception can be accessed by `last_exception'.&lt;br /&gt;
&lt;br /&gt;
==== Raising an exception ====&lt;br /&gt;
There are two types of exceptions concerning how an exception is raised.&lt;br /&gt;
* System raised&lt;br /&gt;
Exception raised through the runtime. Most exceptions of this type are predefine as classes in base library. i.e. assertion violations, no memory exceptions and routine failures.&lt;br /&gt;
* User raised&lt;br /&gt;
User raised exceptions are initialized by users and raised by explicit call of {EXCEPTION}.raise.&lt;br /&gt;
&lt;br /&gt;
Theoretically the runtime can raise any exceptions known. A user can only raise an EXCEPTION that is `is_raisable'. `is_raisable' is possible true only when the exception is of DEVELOPER_EXCEPTION. This means only raising a DEVELOPER_EXCEPTION or its descendant is guaranteed correct.&lt;br /&gt;
&lt;br /&gt;
== Ignoring, continuing an exception ==&lt;br /&gt;
&lt;br /&gt;
Quote from ECMA 8.26.12:&lt;br /&gt;
  It is possible, through routines of the Kernel Library class EXCEPTION, to ensure that exceptions of certain types be:&lt;br /&gt;
  &lt;br /&gt;
  * Ignored: lead to no change of non-exception semantics.&lt;br /&gt;
  * Continued: lead to execution of a programmer-specified routine, then to continuation of the execution according to non-exception semantics.&lt;br /&gt;
&lt;br /&gt;
An ignorable exception can be ignored. When an exception is ignored, the raising does nothing as if non-exception semantics.&lt;br /&gt;
What are the exceptions not ignorable?&lt;br /&gt;
&lt;br /&gt;
Related queries in EXCEPTION:&lt;br /&gt;
  is_ignored: BOOLEAN&lt;br /&gt;
  is_caught: BOOLEAN&lt;br /&gt;
  is_ignorable: BOOLEAN&lt;br /&gt;
&lt;br /&gt;
Related routines in EXCEPTION_MANAGER:&lt;br /&gt;
  is_caught (a_exception: TYPE [EXCEPTION]): BOOLEAN&lt;br /&gt;
  is_ignored (a_exception: TYPE [EXCEPTION]): BOOLEAN&lt;br /&gt;
  is_ignorable (a_exception: TYPE [EXCEPTION]): BOOLEAN&lt;br /&gt;
  catch (a_exception: TYPE [EXCEPTION]) &lt;br /&gt;
  ignore (a_exception: TYPE [EXCEPTION]) &lt;br /&gt;
  set_is_ignored (a_exception: TYPE [EXCEPTION]; a_ignored: BOOLEAN)&lt;br /&gt;
&lt;br /&gt;
== Exception at rescue clause ==&lt;br /&gt;
See the following diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:exception_in_rescue.png]]&lt;br /&gt;
&lt;br /&gt;
Exception e2 is thrown away at c.f3, instruction of rescue clause, in which e3 is raised. In this case we only keep e3 in the stack and accessible by `last_exception'.&lt;br /&gt;
&lt;br /&gt;
== Class ANY ==&lt;br /&gt;
&amp;lt;eiffel&amp;gt;&lt;br /&gt;
class ANY&lt;br /&gt;
...&lt;br /&gt;
feature -- Exception&lt;br /&gt;
&lt;br /&gt;
    frozen last_exception: EXCEPTION&lt;br /&gt;
            -- Last exception&lt;br /&gt;
        external&lt;br /&gt;
            &amp;quot;built_in&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/eiffel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class EXCEPTION ==&lt;br /&gt;
&amp;lt;eiffel&amp;gt;&lt;br /&gt;
deferred class interface&lt;br /&gt;
	EXCEPTION&lt;br /&gt;
&lt;br /&gt;
feature -- Access&lt;br /&gt;
&lt;br /&gt;
	code: INTEGER_32&lt;br /&gt;
			-- Code of the exception.&lt;br /&gt;
			-- |Maybe we don't need this anymore&lt;br /&gt;
&lt;br /&gt;
	data: ANY&lt;br /&gt;
			-- Data set by user&lt;br /&gt;
&lt;br /&gt;
	exception_trace: STRING_8&lt;br /&gt;
			-- String representation of current exception trace&lt;br /&gt;
&lt;br /&gt;
	meaning: STRING_8&lt;br /&gt;
			-- A message in English describing what `except' is&lt;br /&gt;
&lt;br /&gt;
	message: STRING_8&lt;br /&gt;
			-- Tag of current exception&lt;br /&gt;
&lt;br /&gt;
	original: EXCEPTION&lt;br /&gt;
			-- Original exception that triggered current exception&lt;br /&gt;
&lt;br /&gt;
	recipient_name: STRING_8&lt;br /&gt;
			-- Name of the routine whose execution was&lt;br /&gt;
			-- interrupted by current exception&lt;br /&gt;
&lt;br /&gt;
	type_name: STRING_8&lt;br /&gt;
			-- Name of the class that includes the recipient&lt;br /&gt;
			-- of original form of current exception&lt;br /&gt;
	&lt;br /&gt;
feature -- Status report&lt;br /&gt;
&lt;br /&gt;
	is_caught: BOOLEAN&lt;br /&gt;
			-- If set, exception is raised.&lt;br /&gt;
		ensure&lt;br /&gt;
			not_is_caught_implies_is_ignorable: not Result implies is_ignorable&lt;br /&gt;
			not_is_ignored: not is_ignored&lt;br /&gt;
&lt;br /&gt;
	is_ignorable: BOOLEAN&lt;br /&gt;
			-- Is current exception ignorable?&lt;br /&gt;
&lt;br /&gt;
	is_ignored: BOOLEAN&lt;br /&gt;
			-- If set, no exception is raised.&lt;br /&gt;
		ensure&lt;br /&gt;
			is_ignored_implies_is_ignorable: Result implies is_ignorable&lt;br /&gt;
			not_is_caught: not is_caught&lt;br /&gt;
&lt;br /&gt;
	is_raisable: BOOLEAN&lt;br /&gt;
			-- Is current exception raisable by raise?&lt;br /&gt;
	&lt;br /&gt;
feature -- Raise&lt;br /&gt;
&lt;br /&gt;
	raise&lt;br /&gt;
			-- Raise current exception&lt;br /&gt;
		require&lt;br /&gt;
			is_raisable: is_raisable&lt;br /&gt;
	&lt;br /&gt;
feature -- Status settings&lt;br /&gt;
&lt;br /&gt;
	set_data (a_data: like data)&lt;br /&gt;
			-- Set data with `a_data'.&lt;br /&gt;
		ensure&lt;br /&gt;
			data_is_set: data = a_data&lt;br /&gt;
	&lt;br /&gt;
end -- class EXCEPTION&lt;br /&gt;
&amp;lt;/eiffel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class EXCEPTION_MANAGER ==&lt;br /&gt;
&amp;lt;eiffel&amp;gt;&lt;br /&gt;
class interface&lt;br /&gt;
	EXCEPTION_MANAGER&lt;br /&gt;
&lt;br /&gt;
create &lt;br /&gt;
	default_create&lt;br /&gt;
&lt;br /&gt;
feature -- Status report&lt;br /&gt;
&lt;br /&gt;
	is_caught (a_exception: TYPE [EXCEPTION]): BOOLEAN&lt;br /&gt;
			-- If set, type of `a_exception' is raised.&lt;br /&gt;
		ensure&lt;br /&gt;
			not_is_ignored: not is_ignored (a_exception)&lt;br /&gt;
&lt;br /&gt;
	is_ignorable (a_exception: TYPE [EXCEPTION]): BOOLEAN&lt;br /&gt;
			-- If set, type of `a_exception' is ignorable.&lt;br /&gt;
&lt;br /&gt;
	is_ignored (a_exception: TYPE [EXCEPTION]): BOOLEAN&lt;br /&gt;
			-- If set, type of `a_exception' is not raised.&lt;br /&gt;
		ensure&lt;br /&gt;
			not_is_caught: not is_caught (a_exception)&lt;br /&gt;
	&lt;br /&gt;
feature -- Status setting&lt;br /&gt;
&lt;br /&gt;
	catch (a_exception: TYPE [EXCEPTION])&lt;br /&gt;
			-- Set type of `a_exception' is_ignored.&lt;br /&gt;
		require&lt;br /&gt;
			a_exception_not_void: a_exception /= Void&lt;br /&gt;
		ensure&lt;br /&gt;
			is_ignored: not is_ignored (a_exception)&lt;br /&gt;
&lt;br /&gt;
	ignore (a_exception: TYPE [EXCEPTION])&lt;br /&gt;
			-- Make sure that any exception of code `code' will be&lt;br /&gt;
			-- ignored. This is not the default.&lt;br /&gt;
		require&lt;br /&gt;
			a_exception_not_void: a_exception /= Void&lt;br /&gt;
			is_ignorable: is_ignorable (a_exception)&lt;br /&gt;
		ensure&lt;br /&gt;
			is_caught: is_ignored (a_exception)&lt;br /&gt;
&lt;br /&gt;
	set_is_ignored (a_exception: TYPE [EXCEPTION]; a_ignored: BOOLEAN)&lt;br /&gt;
			-- Set type of `a_exception' to be `a_ignored'.&lt;br /&gt;
		require&lt;br /&gt;
			a_exception_not_void: a_exception /= Void&lt;br /&gt;
			a_ignored_implies_is_ignorable: a_ignored implies is_ignorable (a_exception)&lt;br /&gt;
		ensure&lt;br /&gt;
			is_ignored_set: is_ignored (a_exception) = a_ignored&lt;br /&gt;
	&lt;br /&gt;
end -- class EXCEPTION_MANAGER&lt;br /&gt;
&amp;lt;/eiffel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Default rescue ==&lt;br /&gt;
As specified in ECMA, `default_rescue' in ANY or its descendant is called as unqualified when an internal routine or an attributes with no rescue clause fails.&lt;br /&gt;
We choose not to invoke it when it is not redefined, or this will be too expensive.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;eiffel&amp;gt;&lt;br /&gt;
class ANY&lt;br /&gt;
...&lt;br /&gt;
    default_rescue is&lt;br /&gt;
       do&lt;br /&gt;
       end&lt;br /&gt;
...&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/eiffel&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sample code: Raising and catching developer exception ==&lt;br /&gt;
&amp;lt;eiffel&amp;gt;&lt;br /&gt;
    class&lt;br /&gt;
        MY_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
    inherit&lt;br /&gt;
        DEVELOPER_EXCEPTION&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/eiffel&amp;gt;&lt;br /&gt;
&amp;lt;eiffel&amp;gt;&lt;br /&gt;
    class&lt;br /&gt;
        A&lt;br /&gt;
&lt;br /&gt;
    feature&lt;br /&gt;
&lt;br /&gt;
        f is&lt;br /&gt;
            local&lt;br /&gt;
                retried: BOOLEAN&lt;br /&gt;
            do&lt;br /&gt;
                if not retried then&lt;br /&gt;
                    my_exception.raise   -- Raise user-defined exception.&lt;br /&gt;
                end&lt;br /&gt;
            rescue&lt;br /&gt;
                if last_exception = my_exception then   -- Check the exception object was the one user defined.&lt;br /&gt;
                    print (&amp;quot;True&amp;quot; + &amp;quot;%N&amp;quot;)&lt;br /&gt;
                else&lt;br /&gt;
                    print (&amp;quot;False&amp;quot; + &amp;quot;%N&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
        my_exception: MY_EXCEPTION is&lt;br /&gt;
            once&lt;br /&gt;
                create Result&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/eiffel&amp;gt;&lt;br /&gt;
&amp;lt;eiffel&amp;gt;&lt;br /&gt;
    class&lt;br /&gt;
        APPLICATION&lt;br /&gt;
&lt;br /&gt;
    inherit&lt;br /&gt;
        A&lt;br /&gt;
&lt;br /&gt;
    create&lt;br /&gt;
        make&lt;br /&gt;
&lt;br /&gt;
    feature -- Initialization&lt;br /&gt;
&lt;br /&gt;
        make is&lt;br /&gt;
                -- Run application.&lt;br /&gt;
            local&lt;br /&gt;
                a: A&lt;br /&gt;
                l_exception: ROUTINE_FAILURE&lt;br /&gt;
                retried: BOOLEAN&lt;br /&gt;
            do&lt;br /&gt;
                if not retried then&lt;br /&gt;
                    create a&lt;br /&gt;
                    a.f&lt;br /&gt;
                end&lt;br /&gt;
            rescue&lt;br /&gt;
                retried := True&lt;br /&gt;
                l_exception ?= last_exception   -- Check `last_exception' is an object of ROUTINE_FAILURE&lt;br /&gt;
                if l_exception /= Void then&lt;br /&gt;
                    print (&amp;quot;True&amp;quot; + &amp;quot;%N&amp;quot;)&lt;br /&gt;
                else&lt;br /&gt;
                    print (&amp;quot;False&amp;quot; + &amp;quot;%N&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
                if last_exception.original = my_exception then   -- `original' exception is the one caused `last_exception'&lt;br /&gt;
                    print (&amp;quot;True&amp;quot; + &amp;quot;%N&amp;quot;)&lt;br /&gt;
                else&lt;br /&gt;
                    print (&amp;quot;False&amp;quot; + &amp;quot;%N&amp;quot;)&lt;br /&gt;
                end&lt;br /&gt;
                retry&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
    end -- class APPLICATION&lt;br /&gt;
&amp;lt;/eiffel&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=EiffelStudio_6.1_Releases&amp;diff=9442</id>
		<title>EiffelStudio 6.1 Releases</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=EiffelStudio_6.1_Releases&amp;diff=9442"/>
				<updated>2007-08-15T17:31:00Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* 6.1.6.9962 (August 14th) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Releases]]__NOTOC__{{ReleaseHistoryHeader}}&lt;br /&gt;
&lt;br /&gt;
= EiffelStudio 6.1.x Releases=&lt;br /&gt;
&lt;br /&gt;
==6.1.x==&lt;br /&gt;
Placeholder for new stuff since last intermediate release.&lt;br /&gt;
===New features===&lt;br /&gt;
*runtime: Implemented on Windows the GC_INFO features: cpu_* and sys_*.&lt;br /&gt;
===Feature removed===&lt;br /&gt;
===Bug fixes===&lt;br /&gt;
===User changes===&lt;br /&gt;
===Developer changes===&lt;br /&gt;
&lt;br /&gt;
==6.1.6.9962 (August 14th)==&lt;br /&gt;
===New features===&lt;br /&gt;
* studio: All new [[Error_warning_tool|Errors and Warning tool]] to replace Errors tool and Warnings tool.&lt;br /&gt;
* studio: Tool tips now use variable width fonts instead of the editor mono-spaced fonts.&lt;br /&gt;
* studio: C/C++ compilation failures now show up in as an error in the Errors and Warnings tool.&lt;br /&gt;
&lt;br /&gt;
===Feature removed===&lt;br /&gt;
===Bug fixes===&lt;br /&gt;
*vision2: Fixed a USER object leak on Windows in the Vision2 and WEL library for pixmaps and accelerators. This was causing EiffelStudio to not work properly after creating/closing many windows or when changing the layout of EiffelStudio many times.&lt;br /&gt;
*installer: Fixed installer on Windows which would update the 6.0 registry keys.&lt;br /&gt;
*mingw: Fixed some incorrect C compiler configuration files.&lt;br /&gt;
&lt;br /&gt;
===Developer changes===&lt;br /&gt;
* studio: Added Griffin service-based framework for EiffelStudio&lt;br /&gt;
&lt;br /&gt;
==6.1.6.9765 (August 2nd)==&lt;br /&gt;
===New features===&lt;br /&gt;
* Added support for the MinGW C compiler on Windows.&lt;br /&gt;
* New default layout of EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
==Roadmap to ISO/ECMA Eiffel==&lt;br /&gt;
&lt;br /&gt;
This important &lt;br /&gt;
[[Language_road_map|page]]&lt;br /&gt;
describes the steps, accomplished and planned, towards completing the integration into the EiffelStudio compiler of the whole set of mechanisms specified by the ISO/ECMA international standard for the Eiffel language.&lt;br /&gt;
&lt;br /&gt;
==Major 6.1 features==&lt;br /&gt;
See [[EiffelStudio_6.1_Features|here]].&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9441</id>
		<title>Persistence unified</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Persistence_unified&amp;diff=9441"/>
				<updated>2007-08-14T18:19:35Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Unified persistence for Eiffel==&lt;br /&gt;
This project is about developing a single, integrated persistence framework for Eiffel.&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9373</id>
		<title>Category:Projects</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9373"/>
				<updated>2007-08-10T20:52:21Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Contributing to open-source EiffelStudio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contributing to open-source EiffelStudio==&lt;br /&gt;
Now that you have [[Spread_the_word|spread the word]] about Eiffel, you feel the urge to contribute to the product itself. There are many ways to help develop EiffelStudio through projects large and small. Check the list of open projects below; if you see one of interest, contact the project members as listed on the corresponding project page. Don't forget to subscribe to the Eiffel developers list (see the [[Mailing_Lists|the mailing lists page]]) where you can post questions about past, current and possible projects.&lt;br /&gt;
&lt;br /&gt;
If you feel none of the current projects covers your special interest, see below how to [[#Adding_your_own_project|add your own project]].&lt;br /&gt;
&lt;br /&gt;
Whatever your contribution, remember that Eiffel is also about style. Make sure you are familiar with the [[Design_and_coding_rules|design and coding rules]] and apply them thoroughly.&lt;br /&gt;
&lt;br /&gt;
'''Note to author of projects''' available from this page: please make sure the project description is up to date and in particular that '''the project members are listed''' and reachable; that's the best way to gain more collaborators. If the project is no longer active please move the entry to [[#Projects_to_be_started_or_restarted|projects to be started or restarted]] section so that someone else may pick it up.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Libraries (other than EiffelVision) ==&lt;br /&gt;
&lt;br /&gt;
Eiffel is all about reuse of quality components. The best way to get started as an Eiffel contributor is to extend an existing library, or start a new one to fill a need.&lt;br /&gt;
&lt;br /&gt;
EiffelVision-related developments appear under [[#Graphics_and_user_interface|graphics and user interface]].&lt;br /&gt;
* [[Eiffel_NXT | Eiffel LEGO NXT Commumication Library and EiffelStudio Integration]]&lt;br /&gt;
::Remote communication with LEGO NXT Mindstorms &amp;quot;bricks&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Language and compiler ==&lt;br /&gt;
This is the heart of the Eiffel environment: providing the best possible implementation of the Eiffel language. See the [[:Category:Compiler|compiler pages]] for detailed information about EiffelStudio's compiling techniques including the Melting Ice Technology.&lt;br /&gt;
* [[:Category:ECMA| Full ISO/ECMA support]]&lt;br /&gt;
::The Eiffel standard developed by the ECMA TC39-TG4 committee and approved in 2006 by the International Standards Organization is the definitive reference on the Eiffel language. Work is progressing quickly to include all ECMA-ISO mechanisms into the EiffelStudio compiler; you can help fill the remaining gaps.&lt;br /&gt;
&lt;br /&gt;
== General environment mechanisms ==&lt;br /&gt;
There are always new ideas to improve the user experience with EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
* [[AutoTest_Integration|Integrating AutoTest into EiffelStudio]]&lt;br /&gt;
::[http://se.ethz.ch/research/autotest/ AutoTest] is an automated testing framework taking advantage of Eiffel's Design by Contract to provide far more automation than current solutions such as JUnit. Currently it is a separate tool; ideally it should be part of EiffelStudio.&lt;br /&gt;
* [[Advanced Class and Feature Wizard| Advanced class and feature wizard ]]&lt;br /&gt;
::Improve ease of use, for both novice and advanced users, by refining the tools that create classes and features from templates.&lt;br /&gt;
*[[Editor|Editor]]&lt;br /&gt;
::Improve the EiffelStudio built-in smart editor.&lt;br /&gt;
* [[Refactoring|More refactoring mechanisms]]&lt;br /&gt;
::While Eiffel doesn't need some of the refactoring mechanisms of other languages, the environment could benefit from new refactoring mechanisms in addition to the ones currently supported.&lt;br /&gt;
* [[Eiffel_Mutation_Testing_Tool| Eiffel Mutation Testing Tool]]&lt;br /&gt;
::Build a high-quality mutation testing tool (for evaluating the quality of test strategies, fault detectability and redundancy) taking advantage of Eiffel's mechanisms, especially Design by Contract.&lt;br /&gt;
&lt;br /&gt;
== Graphics and user interface ==&lt;br /&gt;
Make the user interface of EiffelStudio more appealing. Much of the work is to be done in the underlying EiffelVision library, with the added benefit that improvements will be available to user applications as well.&lt;br /&gt;
&lt;br /&gt;
*[[Vision2_Accelerator|EiffelVision Accelerators]]&lt;br /&gt;
::More keyboard accelerators for EiffelVision applications.&lt;br /&gt;
*[[EiffelVision_Unicode|Unicode support for EiffelVision]]&lt;br /&gt;
::EiffelVision support for the character set of arbitrary human languages (see also [[Unicode]]).&lt;br /&gt;
*[[EiffelBuild_Integration|EiffelBuild Integration]]&lt;br /&gt;
::The graphical user interface builder, EiffelBuild, is currently a separate product. Ideally it should be completely integrated with EiffelStudio.&lt;br /&gt;
*[[Cocoa_for_EiffelVision2|Cocoa for EiffelVision]]&lt;br /&gt;
::Provide EiffelVision with a Carbon back-end to make it truly native on the Mac.&lt;br /&gt;
* [[Internationalization|EiffelStudio UI for other languages (internationalization)]]&lt;br /&gt;
::EiffelStudio provides support for changing the user interface messages and dialogs to any language. If you are a fluent speaker of a language other than English, you can help the localization into that language.&lt;br /&gt;
&lt;br /&gt;
== Build infrastructure ==&lt;br /&gt;
Developments in this category are intended to help produce new versions of EiffelStudio faster and better.&lt;br /&gt;
&lt;br /&gt;
*[[Build_tool | Build tool]]&lt;br /&gt;
::Simplify and streamline the EiffelStudio build process.&lt;br /&gt;
*[[Debian_packages | Debian packages]]&lt;br /&gt;
::Include EiffelStudio in standard Debian installation&lt;br /&gt;
*[[OSX_release_infrastructure|OSX release infrastructure]]&lt;br /&gt;
::Script the release of Mac universal binaries for OS X&lt;br /&gt;
&lt;br /&gt;
== Other Stuff ==&lt;br /&gt;
&lt;br /&gt;
* [[ESTeaching | Eiffel Studio for Teaching]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Developing is not everything; the results must also be tested for functionality and performance. The EiffelStudio testing process is completely open and follows advanced software engineering standard. Please visit the special [[:Category:Testing|category devoted to EiffelStudio testing]].&lt;br /&gt;
&lt;br /&gt;
== Projects to be started or restarted ==&lt;br /&gt;
The projects in this list are mere ideas which may not yet have a project page. Some of them were started but not completed. Feel free to take over! If you do so, move the project to one of the above sections (compiler, libraries etc.). If you have further suggestions you may include them here.&lt;br /&gt;
* [[EiffelStudio_Wish_List|EiffelStudio Wish List]]&lt;br /&gt;
::Not really the description of a single project, but a collection of ideas of cool things to add to EiffelStudio. Feel free to add to it.&lt;br /&gt;
* [[Compilation_Without_Configuration|Compilation without configuration]]&lt;br /&gt;
::A mechanism to compile classes without providing a control file.&lt;br /&gt;
* [[Wish CHARACTER 16|CHARACTER 16]]&lt;br /&gt;
::A request for a new basic type.&lt;br /&gt;
*[[Component_standards| Standards and tools for Eiffel-based components]]&lt;br /&gt;
::Develop a standard for distributing Eiffel components in binary form, and implement it&lt;br /&gt;
* [[Unicode|Unicode support improvement]]&lt;br /&gt;
::Improve support for character sets of arbitrary human languages. See also [[EiffelVision_Unicode|EiffelVision Unicode support]].&lt;br /&gt;
* [[New_ports|Porting to new platforms (OSX Intel, OpenBSD)]]&lt;br /&gt;
::Eiffel is highly portable; a port to a new platform is a moderate effort.&lt;br /&gt;
* [[IDE|IDE improvements]]&lt;br /&gt;
::This should be replaced by more specific goals, see [[#General_environment_mechanisms|general environment mechanisms]] above.&lt;br /&gt;
* [[Extended_static_checking|Extended static checking]]&lt;br /&gt;
::See e.g. ESC-Java, Spec#...&lt;br /&gt;
* [[Code_checking|Direct code checking (red squiggly lines)]]&lt;br /&gt;
::More user-friendly error &amp;quot;non-messages&amp;quot;, following the lead of spelling error reporting in MS Word&lt;br /&gt;
* [[Learning|Integrated learning support]]&lt;br /&gt;
::Support for total beginners&lt;br /&gt;
* [[Macros|Editor macro recording and playback]]&lt;br /&gt;
::Give EiffelStudio, in particular the editor, a macro facility&lt;br /&gt;
* [[Editor_breakpoints|Inserting and navigation of editor breakpoints]]&lt;br /&gt;
::Add breakpoints to the editor for better navigation&lt;br /&gt;
* [[EMU| Eiffel Multi User]]&lt;br /&gt;
::Integrate a repository mechanism&lt;br /&gt;
* [[Trace_points|Adding trace points]]&lt;br /&gt;
:: Output a trace statement indicating a trace point has been hit, without the need to write code or stop execution&lt;br /&gt;
* [[Update_notification|Update notification]]&lt;br /&gt;
::An update notification service to let developers know there is a new version available.&lt;br /&gt;
* [[Configuration_management|Integrated support for configuration management]]&lt;br /&gt;
::Integrate configuration management into EiffelStudio.&lt;br /&gt;
*[[Scintilla_component| Multiplatform editor component: Scintilla]]&lt;br /&gt;
::Encapsulate Scintilla multi-platform editor&lt;br /&gt;
*[[Gecko_component| Multiplatform layout engine component: Mozilla/Gecko]]&lt;br /&gt;
::Encapsulate Gecko html multi-platform engine component&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
== Adding your own project ==&lt;br /&gt;
To add your own project:&lt;br /&gt;
*Make sure it is not redundant with one of the existing projects. If there is any chance of duplication, please contact the project authors first.&lt;br /&gt;
*If you have not already done so, subscribe to the developers' mailing list (see the [[Mailing_Lists|the mailing lists page]]). Post a message to the list explaining your idea and asking for feedback.&lt;br /&gt;
*Also check the above [[#Projects_to_be_started_or_restarted|list of &amp;quot;projects to be started or restarted&amp;quot;]], in particular the [[EiffelStudio_Wish_List|EiffelStudio Wish List]]. Some of the pages are just stubs, but others already have a detailed analysis which can serve as a framework for future work on the corresponding features.&lt;br /&gt;
*If you decide to go forward, create a page about your project, listing the goals of the project, the rationale (why is this useful?), the issues to be solved, the overall techniques proposed, and a general development strategy. Make sure to include a &amp;quot;project members&amp;quot; section so that people can contact you (for example through your user name on this Wiki).&lt;br /&gt;
*Edit the present page so that it includes a link to your project page; select the appropriate category. Below the link, include (as in current entries) a one- or two-line summary of the project's goal.&lt;br /&gt;
*Do it!&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Main_Page&amp;diff=9372</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Main_Page&amp;diff=9372"/>
				<updated>2007-08-10T20:50:48Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Developing EiffelStudio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:General]]__NOTOC__&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;firstHeading&amp;quot;&amp;gt;EiffelStudio Integrated Development Environment&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:EiffelStudioScreenshot.png|thumb|250px|right|EiffelStudio IDE ([http://eiffel.com/products/studio/screenshots.html more screenshots]) ]]&lt;br /&gt;
&lt;br /&gt;
Welcome to the central resource for EiffelStudio developers and contributors.&lt;br /&gt;
&lt;br /&gt;
EiffelStudio is an advanced commercial-grade IDE for the [http://en.wikipedia.org/wiki/Eiffel_programming_language Eiffel programming language]. It is maintained and developed mostly by [http://www.eiffel.com  Eiffel Software] and hosted at the [http://se.inf.ethz.ch/ Chair of Software Engineering] at [http://www.ethz.ch/ ETH Zurich].&lt;br /&gt;
&lt;br /&gt;
On April 5th, 2006, Eiffel Software relicensed the EiffelStudio product under the [[Gnu Public License]]. Eiffel Software still offers a commercial variant. Both versions share the same source code.&lt;br /&gt;
&lt;br /&gt;
EiffelStudio is a full-featured IDE offering the following features, many of them unique:&lt;br /&gt;
&lt;br /&gt;
* Complete compiler for the Eiffel programming language, with Design By Contract (DBC) support and both high compile-time speed and high-performance executables, based on the Melting Ice Technology.&lt;br /&gt;
* Full portability (including graphics) across Windows, MacOS X, Linux, *BSD, Solaris and other operating systems&lt;br /&gt;
* Smart code editor&lt;br /&gt;
* Sophisticated multi-view browsing and viewing facilities&lt;br /&gt;
* Interactive debugger&lt;br /&gt;
* Graphical modeling tool for UML and BON with full roundtrip&lt;br /&gt;
* Refactoring support&lt;br /&gt;
* GUI development tool (EiffelBuild) and fully portable GUI library (EiffelVision)&lt;br /&gt;
* Many other libraries of reusable component.&lt;br /&gt;
&lt;br /&gt;
The Eiffel compiler creates C code that is then handed to a standard C compiler. As a result, Eiffel programs have a run-time performance comparable to those directly written in C or C++, but with the benefits of an advanced object-oriented model and strong typing. EiffelStudio uses a highly efficient compacting garbage collector to free the developer from the burden of memory management.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;If you want to know more about the unique features of Eiffel and EiffelStudio, check out our [[Reasons for using Eiffel]] page.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;font-size:80%;&amp;quot; bgcolor=white|&lt;br /&gt;
{| cellspacing=8 width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; bgcolor=&amp;quot;#f6f9fb&amp;quot; style=&amp;quot;border:1px solid #8f8f8f;padding:0 .5em .5em .5em;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
* [[Downloads]]&lt;br /&gt;
* [[EiffelStudio 6.0 Releases|Changelog of 6.0 (release branch)]]&lt;br /&gt;
* [http://docs.eiffel.com/eiffelstudio/installation/studio57 Installing EiffelStudio]&lt;br /&gt;
* [[Compiling Hello World]]&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; bgcolor=&amp;quot;#f6f9fb&amp;quot; style=&amp;quot;border:1px solid #8f8f8f;padding:0 .5em .5em .5em;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
== Working with EiffelStudio ==&lt;br /&gt;
&lt;br /&gt;
* [[Frequently Asked Questions]]&lt;br /&gt;
* [[Eiffel Glossary]]&lt;br /&gt;
* [[Eiffel Compilation Explained]]&lt;br /&gt;
* [[EiffelStudio Wish List]]&lt;br /&gt;
&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; bgcolor=&amp;quot;#f6f9fb&amp;quot; style=&amp;quot;border:1px solid #8f8f8f;padding:0 .5em .5em .5em;&amp;quot;|&lt;br /&gt;
== Contributing! ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Projects|How to contribute: the Projects page]]&lt;br /&gt;
* [[:Category:Testing|EiffelStudio testing process: you can participate!]]&lt;br /&gt;
* [[EiffelStudio 6.1 Releases|Changelog of latest development version, currently 6.1 (development trunk)]]&lt;br /&gt;
* [[Repository|Getting the source: Subversion repository]]&lt;br /&gt;
* [[Compiling EiffelStudio]]&lt;br /&gt;
* [[:Category:Tools|Developer's tools]]&lt;br /&gt;
* [[Language_Roadmap|Language roadmap]]&lt;br /&gt;
* [[Environment_Roadmap|Environment roadmap]]&lt;br /&gt;
* [[Design_and_coding_rules|Design and coding rules]]&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; bgcolor=&amp;quot;#f6f9fb&amp;quot; style=&amp;quot;border:1px solid #8f8f8f;padding:0 .5em .5em .5em;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
== Community ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.eiffelroom.com EiffelRoom]&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
* [[Eiffel Sites and Links]]&lt;br /&gt;
* [[Mailing Lists]]&lt;br /&gt;
* [[:Category:News|News]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Design_and_coding_rules&amp;diff=9371</id>
		<title>Design and coding rules</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Design_and_coding_rules&amp;diff=9371"/>
				<updated>2007-08-10T20:48:54Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: Creating page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;EiffelStudio contributors should maintain a high standard of quality and consistency. Please make sure you are familiar with the following guidelines and observe them throughout.&lt;br /&gt;
&lt;br /&gt;
EiffelStudio has been developed by many people over many years, during which the rules have evolved. You may encounter older code that does not fully comply with the rules. Eventually all EiffelStudio code should be in full compliance&lt;br /&gt;
&lt;br /&gt;
==General Eiffel style rules==&lt;br /&gt;
&lt;br /&gt;
The first rule is to apply the general Eiffel style guidelines systematically. You will find them in both the books Object-Oriented Software Construction, 2nd edition, and Eiffel: The Language. The OOSC chapter is available [http://archive.eiffel.com/doc/manuals/language/style/style.pdf online].&lt;br /&gt;
&lt;br /&gt;
Please be strict about applying these rules, paying special attention to:&lt;br /&gt;
*Command-Query separation (a function should not have a verb as its name, and should not modify the state).&lt;br /&gt;
*Names in general (separate elements by an underscore, as in turn_left, not with camelcase as in other languages).&lt;br /&gt;
*Feature names (use standard names such as put, item, force etc. whenever applicable; do not overqualify, e.g. in a class VEHICLE use turn, not turn_vehicle; etc.)&lt;br /&gt;
*Class names (upper-case and clear, e.g. LAND_VEHICLE).&lt;br /&gt;
*Layout and indentation, spacing (space before opening parenthesis but not after, space after closing parenthesis but not before etc.).&lt;br /&gt;
*Everything else explained in the OOSC chapter.&lt;br /&gt;
&lt;br /&gt;
==Naming EiffelStudio classes==&lt;br /&gt;
==Commenting EiffelStudio features==&lt;br /&gt;
(These sections to be completed.)&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9339</id>
		<title>Category:Projects</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9339"/>
				<updated>2007-08-09T02:05:26Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Projects to be started or restarted */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contributing to open-source EiffelStudio==&lt;br /&gt;
Now that you have [[Spread_the_word|spread the word]] about Eiffel, you feel the urge to contribute to the product itself. There are many ways to help develop EiffelStudio through projects large and small. Check the list of open projects below; if you see one of interest, contact the project members as listed on the corresponding project page. Don't forget to subscribe to the Eiffel developers list (see the [[Mailing_Lists|the mailing lists page]]) where you can post questions about past, current and possible projects.&lt;br /&gt;
&lt;br /&gt;
If you feel none of the current projects covers your special interest, see below how to [[#Adding_your_own_project|add your own project]].&lt;br /&gt;
&lt;br /&gt;
'''Note to author of projects''' available from this page: please make sure the project description is up to date and in particular that '''the project members are listed''' and reachable; that's the best way to gain more collaborators. If the project is no longer active please move the entry to [[#Projects_to_be_started_or_restarted|projects to be started or restarted]] section so that someone else may pick it up.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Libraries (other than EiffelVision) ==&lt;br /&gt;
&lt;br /&gt;
Eiffel is all about reuse of quality components. The best way to get started as an Eiffel contributor is to extend an existing library, or start a new one to fill a need.&lt;br /&gt;
&lt;br /&gt;
EiffelVision-related developments appear under [[#Graphics_and_user_interface|graphics and user interface]].&lt;br /&gt;
* [[Eiffel_NXT | Eiffel LEGO NXT Commumication Library and EiffelStudio Integration]]&lt;br /&gt;
::Remote communication with LEGO NXT Mindstorms &amp;quot;bricks&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Language and compiler ==&lt;br /&gt;
This is the heart of the Eiffel environment: providing the best possible implementation of the Eiffel language. See the [[:Category:Compiler|compiler pages]] for detailed information about EiffelStudio's compiling techniques including the Melting Ice Technology.&lt;br /&gt;
* [[:Category:ECMA| Full ISO/ECMA support]]&lt;br /&gt;
::The Eiffel standard developed by the ECMA TC39-TG4 committee and approved in 2006 by the International Standards Organization is the definitive reference on the Eiffel language. Work is progressing quickly to include all ECMA-ISO mechanisms into the EiffelStudio compiler; you can help fill the remaining gaps.&lt;br /&gt;
&lt;br /&gt;
== General environment mechanisms ==&lt;br /&gt;
There are always new ideas to improve the user experience with EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
* [[AutoTest_Integration|Integrating AutoTest into EiffelStudio]]&lt;br /&gt;
::[http://se.ethz.ch/research/autotest/ AutoTest] is an automated testing framework taking advantage of Eiffel's Design by Contract to provide far more automation than current solutions such as JUnit. Currently it is a separate tool; ideally it should be part of EiffelStudio.&lt;br /&gt;
* [[Advanced Class and Feature Wizard| Advanced class and feature wizard ]]&lt;br /&gt;
::Improve ease of use, for both novice and advanced users, by refining the tools that create classes and features from templates.&lt;br /&gt;
*[[Editor|Editor]]&lt;br /&gt;
::Improve the EiffelStudio built-in smart editor.&lt;br /&gt;
* [[Refactoring|More refactoring mechanisms]]&lt;br /&gt;
::While Eiffel doesn't need some of the refactoring mechanisms of other languages, the environment could benefit from new refactoring mechanisms in addition to the ones currently supported.&lt;br /&gt;
* [[Eiffel_Mutation_Testing_Tool| Eiffel Mutation Testing Tool]]&lt;br /&gt;
::Build a high-quality mutation testing tool (for evaluating the quality of test strategies, fault detectability and redundancy) taking advantage of Eiffel's mechanisms, especially Design by Contract.&lt;br /&gt;
&lt;br /&gt;
== Graphics and user interface ==&lt;br /&gt;
Make the user interface of EiffelStudio more appealing. Much of the work is to be done in the underlying EiffelVision library, with the added benefit that improvements will be available to user applications as well.&lt;br /&gt;
&lt;br /&gt;
*[[Vision2_Accelerator|EiffelVision Accelerators]]&lt;br /&gt;
::More keyboard accelerators for EiffelVision applications.&lt;br /&gt;
*[[EiffelVision_Unicode|Unicode support for EiffelVision]]&lt;br /&gt;
::EiffelVision support for the character set of arbitrary human languages (see also [[Unicode]]).&lt;br /&gt;
*[[EiffelBuild_Integration|EiffelBuild Integration]]&lt;br /&gt;
::The graphical user interface builder, EiffelBuild, is currently a separate product. Ideally it should be completely integrated with EiffelStudio.&lt;br /&gt;
*[[Cocoa_for_EiffelVision2|Cocoa for EiffelVision]]&lt;br /&gt;
::Provide EiffelVision with a Carbon back-end to make it truly native on the Mac.&lt;br /&gt;
* [[Internationalization|EiffelStudio UI for other languages (internationalization)]]&lt;br /&gt;
::EiffelStudio provides support for changing the user interface messages and dialogs to any language. If you are a fluent speaker of a language other than English, you can help the localization into that language.&lt;br /&gt;
&lt;br /&gt;
== Build infrastructure ==&lt;br /&gt;
Developments in this category are intended to help produce new versions of EiffelStudio faster and better.&lt;br /&gt;
&lt;br /&gt;
*[[Build_tool | Build tool]]&lt;br /&gt;
::Simplify and streamline the EiffelStudio build process.&lt;br /&gt;
*[[Debian_packages | Debian packages]]&lt;br /&gt;
::Include EiffelStudio in standard Debian installation&lt;br /&gt;
*[[OSX_release_infrastructure|OSX release infrastructure]]&lt;br /&gt;
::Script the release of Mac universal binaries for OS X&lt;br /&gt;
&lt;br /&gt;
== Other Stuff ==&lt;br /&gt;
&lt;br /&gt;
* [[ESTeaching | Eiffel Studio for Teaching]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Developing is not everything; the results must also be tested for functionality and performance. The EiffelStudio testing process is completely open and follows advanced software engineering standard. Please visit the special [[:Category:Testing|category devoted to EiffelStudio testing]].&lt;br /&gt;
&lt;br /&gt;
== Projects to be started or restarted ==&lt;br /&gt;
The projects in this list are mere ideas which may not yet have a project page. Some of them were started but not completed. Feel free to take over! If you do so, move the project to one of the above sections (compiler, libraries etc.). If you have further suggestions you may include them here.&lt;br /&gt;
* [[EiffelStudio_Wish_List|EiffelStudio Wish List]]&lt;br /&gt;
::Not really the description of a single project, but a collection of ideas of cool things to add to EiffelStudio. Feel free to add to it.&lt;br /&gt;
* [[Compilation_Without_Configuration|Compilation without configuration]]&lt;br /&gt;
::A mechanism to compile classes without providing a control file.&lt;br /&gt;
* [[Wish CHARACTER 16|CHARACTER 16]]&lt;br /&gt;
::A request for a new basic type.&lt;br /&gt;
*[[Component_standards| Standards and tools for Eiffel-based components]]&lt;br /&gt;
::Develop a standard for distributing Eiffel components in binary form, and implement it&lt;br /&gt;
* [[Unicode|Unicode support improvement]]&lt;br /&gt;
::Improve support for character sets of arbitrary human languages. See also [[EiffelVision_Unicode|EiffelVision Unicode support]].&lt;br /&gt;
* [[New_ports|Porting to new platforms (OSX Intel, OpenBSD)]]&lt;br /&gt;
::Eiffel is highly portable; a port to a new platform is a moderate effort.&lt;br /&gt;
* [[IDE|IDE improvements]]&lt;br /&gt;
::This should be replaced by more specific goals, see [[#General_environment_mechanisms|general environment mechanisms]] above.&lt;br /&gt;
* [[Extended_static_checking|Extended static checking]]&lt;br /&gt;
::See e.g. ESC-Java, Spec#...&lt;br /&gt;
* [[Code_checking|Direct code checking (red squiggly lines)]]&lt;br /&gt;
::More user-friendly error &amp;quot;non-messages&amp;quot;, following the lead of spelling error reporting in MS Word&lt;br /&gt;
* [[Learning|Integrated learning support]]&lt;br /&gt;
::Support for total beginners&lt;br /&gt;
* [[Macros|Editor macro recording and playback]]&lt;br /&gt;
::Give EiffelStudio, in particular the editor, a macro facility&lt;br /&gt;
* [[Editor_breakpoints|Inserting and navigation of editor breakpoints]]&lt;br /&gt;
::Add breakpoints to the editor for better navigation&lt;br /&gt;
* [[EMU| Eiffel Multi User]]&lt;br /&gt;
::Integrate a repository mechanism&lt;br /&gt;
* [[Trace_points|Adding trace points]]&lt;br /&gt;
:: Output a trace statement indicating a trace point has been hit, without the need to write code or stop execution&lt;br /&gt;
* [[Update_notification|Update notification]]&lt;br /&gt;
::An update notification service to let developers know there is a new version available.&lt;br /&gt;
* [[Configuration_management|Integrated support for configuration management]]&lt;br /&gt;
::Integrate configuration management into EiffelStudio.&lt;br /&gt;
*[[Scintilla_component| Multiplatform editor component: Scintilla]]&lt;br /&gt;
::Encapsulate Scintilla multi-platform editor&lt;br /&gt;
*[[Gecko_component| Multiplatform layout engine component: Mozilla/Gecko]]&lt;br /&gt;
::Encapsulate Gecko html multi-platform engine component&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
== Adding your own project ==&lt;br /&gt;
To add your own project:&lt;br /&gt;
*Make sure it is not redundant with one of the existing projects. If there is any chance of duplication, please contact the project authors first.&lt;br /&gt;
*If you have not already done so, subscribe to the developers' mailing list (see the [[Mailing_Lists|the mailing lists page]]). Post a message to the list explaining your idea and asking for feedback.&lt;br /&gt;
*Also check the above [[#Projects_to_be_started_or_restarted|list of &amp;quot;projects to be started or restarted&amp;quot;]], in particular the [[EiffelStudio_Wish_List|EiffelStudio Wish List]]. Some of the pages are just stubs, but others already have a detailed analysis which can serve as a framework for future work on the corresponding features.&lt;br /&gt;
*If you decide to go forward, create a page about your project, listing the goals of the project, the rationale (why is this useful?), the issues to be solved, the overall techniques proposed, and a general development strategy. Make sure to include a &amp;quot;project members&amp;quot; section so that people can contact you (for example through your user name on this Wiki).&lt;br /&gt;
*Edit the present page so that it includes a link to your project page; select the appropriate category. Below the link, include (as in current entries) a one- or two-line summary of the project's goal.&lt;br /&gt;
*Do it!&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9338</id>
		<title>Category:Projects</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9338"/>
				<updated>2007-08-09T02:04:32Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contributing to open-source EiffelStudio==&lt;br /&gt;
Now that you have [[Spread_the_word|spread the word]] about Eiffel, you feel the urge to contribute to the product itself. There are many ways to help develop EiffelStudio through projects large and small. Check the list of open projects below; if you see one of interest, contact the project members as listed on the corresponding project page. Don't forget to subscribe to the Eiffel developers list (see the [[Mailing_Lists|the mailing lists page]]) where you can post questions about past, current and possible projects.&lt;br /&gt;
&lt;br /&gt;
If you feel none of the current projects covers your special interest, see below how to [[#Adding_your_own_project|add your own project]].&lt;br /&gt;
&lt;br /&gt;
'''Note to author of projects''' available from this page: please make sure the project description is up to date and in particular that '''the project members are listed''' and reachable; that's the best way to gain more collaborators. If the project is no longer active please move the entry to [[#Projects_to_be_started_or_restarted|projects to be started or restarted]] section so that someone else may pick it up.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Libraries (other than EiffelVision) ==&lt;br /&gt;
&lt;br /&gt;
Eiffel is all about reuse of quality components. The best way to get started as an Eiffel contributor is to extend an existing library, or start a new one to fill a need.&lt;br /&gt;
&lt;br /&gt;
EiffelVision-related developments appear under [[#Graphics_and_user_interface|graphics and user interface]].&lt;br /&gt;
* [[Eiffel_NXT | Eiffel LEGO NXT Commumication Library and EiffelStudio Integration]]&lt;br /&gt;
::Remote communication with LEGO NXT Mindstorms &amp;quot;bricks&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Language and compiler ==&lt;br /&gt;
This is the heart of the Eiffel environment: providing the best possible implementation of the Eiffel language. See the [[:Category:Compiler|compiler pages]] for detailed information about EiffelStudio's compiling techniques including the Melting Ice Technology.&lt;br /&gt;
* [[:Category:ECMA| Full ISO/ECMA support]]&lt;br /&gt;
::The Eiffel standard developed by the ECMA TC39-TG4 committee and approved in 2006 by the International Standards Organization is the definitive reference on the Eiffel language. Work is progressing quickly to include all ECMA-ISO mechanisms into the EiffelStudio compiler; you can help fill the remaining gaps.&lt;br /&gt;
&lt;br /&gt;
== General environment mechanisms ==&lt;br /&gt;
There are always new ideas to improve the user experience with EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
* [[AutoTest_Integration|Integrating AutoTest into EiffelStudio]]&lt;br /&gt;
::[http://se.ethz.ch/research/autotest/ AutoTest] is an automated testing framework taking advantage of Eiffel's Design by Contract to provide far more automation than current solutions such as JUnit. Currently it is a separate tool; ideally it should be part of EiffelStudio.&lt;br /&gt;
* [[Advanced Class and Feature Wizard| Advanced class and feature wizard ]]&lt;br /&gt;
::Improve ease of use, for both novice and advanced users, by refining the tools that create classes and features from templates.&lt;br /&gt;
*[[Editor|Editor]]&lt;br /&gt;
::Improve the EiffelStudio built-in smart editor.&lt;br /&gt;
* [[Refactoring|More refactoring mechanisms]]&lt;br /&gt;
::While Eiffel doesn't need some of the refactoring mechanisms of other languages, the environment could benefit from new refactoring mechanisms in addition to the ones currently supported.&lt;br /&gt;
* [[Eiffel_Mutation_Testing_Tool| Eiffel Mutation Testing Tool]]&lt;br /&gt;
::Build a high-quality mutation testing tool (for evaluating the quality of test strategies, fault detectability and redundancy) taking advantage of Eiffel's mechanisms, especially Design by Contract.&lt;br /&gt;
&lt;br /&gt;
== Graphics and user interface ==&lt;br /&gt;
Make the user interface of EiffelStudio more appealing. Much of the work is to be done in the underlying EiffelVision library, with the added benefit that improvements will be available to user applications as well.&lt;br /&gt;
&lt;br /&gt;
*[[Vision2_Accelerator|EiffelVision Accelerators]]&lt;br /&gt;
::More keyboard accelerators for EiffelVision applications.&lt;br /&gt;
*[[EiffelVision_Unicode|Unicode support for EiffelVision]]&lt;br /&gt;
::EiffelVision support for the character set of arbitrary human languages (see also [[Unicode]]).&lt;br /&gt;
*[[EiffelBuild_Integration|EiffelBuild Integration]]&lt;br /&gt;
::The graphical user interface builder, EiffelBuild, is currently a separate product. Ideally it should be completely integrated with EiffelStudio.&lt;br /&gt;
*[[Cocoa_for_EiffelVision2|Cocoa for EiffelVision]]&lt;br /&gt;
::Provide EiffelVision with a Carbon back-end to make it truly native on the Mac.&lt;br /&gt;
* [[Internationalization|EiffelStudio UI for other languages (internationalization)]]&lt;br /&gt;
::EiffelStudio provides support for changing the user interface messages and dialogs to any language. If you are a fluent speaker of a language other than English, you can help the localization into that language.&lt;br /&gt;
&lt;br /&gt;
== Build infrastructure ==&lt;br /&gt;
Developments in this category are intended to help produce new versions of EiffelStudio faster and better.&lt;br /&gt;
&lt;br /&gt;
*[[Build_tool | Build tool]]&lt;br /&gt;
::Simplify and streamline the EiffelStudio build process.&lt;br /&gt;
*[[Debian_packages | Debian packages]]&lt;br /&gt;
::Include EiffelStudio in standard Debian installation&lt;br /&gt;
*[[OSX_release_infrastructure|OSX release infrastructure]]&lt;br /&gt;
::Script the release of Mac universal binaries for OS X&lt;br /&gt;
&lt;br /&gt;
== Other Stuff ==&lt;br /&gt;
&lt;br /&gt;
* [[ESTeaching | Eiffel Studio for Teaching]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Developing is not everything; the results must also be tested for functionality and performance. The EiffelStudio testing process is completely open and follows advanced software engineering standard. Please visit the special [[:Category:Testing|category devoted to EiffelStudio testing]].&lt;br /&gt;
&lt;br /&gt;
== Projects to be started or restarted ==&lt;br /&gt;
The projects in this list are mere ideas which may not yet have a project page. Some of them were started but not completed. Feel free to take over! If you do so, move the project to one of the above sections (compiler, libraries etc.).&lt;br /&gt;
* [[EiffelStudio_Wish_List|EiffelStudio Wish List]]&lt;br /&gt;
::Not really the description of a single project, but a collection of ideas of cool things to add to EiffelStudio. Feel free to add to it.&lt;br /&gt;
* [[Compilation_Without_Configuration|Compilation without configuration]]&lt;br /&gt;
::A mechanism to compile classes without providing a control file.&lt;br /&gt;
* [[Wish CHARACTER 16|CHARACTER 16]]&lt;br /&gt;
::A request for a new basic type.&lt;br /&gt;
*[[Component_standards| Standards and tools for Eiffel-based components]]&lt;br /&gt;
::Develop a standard for distributing Eiffel components in binary form, and implement it&lt;br /&gt;
* [[Unicode|Unicode support improvement]]&lt;br /&gt;
::Improve support for character sets of arbitrary human languages. See also [[EiffelVision_Unicode|EiffelVision Unicode support]].&lt;br /&gt;
* [[New_ports|Porting to new platforms (OSX Intel, OpenBSD)]]&lt;br /&gt;
::Eiffel is highly portable; a port to a new platform is a moderate effort.&lt;br /&gt;
* [[IDE|IDE improvements]]&lt;br /&gt;
::This should be replaced by more specific goals, see [[#General_environment_mechanisms|general environment mechanisms]] above.&lt;br /&gt;
* [[Extended_static_checking|Extended static checking]]&lt;br /&gt;
::See e.g. ESC-Java, Spec#...&lt;br /&gt;
* [[Code_checking|Direct code checking (red squiggly lines)]]&lt;br /&gt;
::More user-friendly error &amp;quot;non-messages&amp;quot;, following the lead of spelling error reporting in MS Word&lt;br /&gt;
* [[Learning|Integrated learning support]]&lt;br /&gt;
::Support for total beginners&lt;br /&gt;
* [[Macros|Editor macro recording and playback]]&lt;br /&gt;
::Give EiffelStudio, in particular the editor, a macro facility&lt;br /&gt;
* [[Editor_breakpoints|Inserting and navigation of editor breakpoints]]&lt;br /&gt;
::Add breakpoints to the editor for better navigation&lt;br /&gt;
* [[EMU| Eiffel Multi User]]&lt;br /&gt;
::Integrate a repository mechanism&lt;br /&gt;
* [[Trace_points|Adding trace points]]&lt;br /&gt;
:: Output a trace statement indicating a trace point has been hit, without the need to write code or stop execution&lt;br /&gt;
* [[Update_notification|Update notification]]&lt;br /&gt;
::An update notification service to let developers know there is a new version available.&lt;br /&gt;
* [[Configuration_management|Integrated support for configuration management]]&lt;br /&gt;
::Integrate configuration management into EiffelStudio.&lt;br /&gt;
*[[Scintilla_component| Multiplatform editor component: Scintilla]]&lt;br /&gt;
::Encapsulate Scintilla multi-platform editor&lt;br /&gt;
*[[Gecko_component| Multiplatform layout engine component: Mozilla/Gecko]]&lt;br /&gt;
::Encapsulate Gecko html multi-platform engine component&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
== Adding your own project ==&lt;br /&gt;
To add your own project:&lt;br /&gt;
*Make sure it is not redundant with one of the existing projects. If there is any chance of duplication, please contact the project authors first.&lt;br /&gt;
*If you have not already done so, subscribe to the developers' mailing list (see the [[Mailing_Lists|the mailing lists page]]). Post a message to the list explaining your idea and asking for feedback.&lt;br /&gt;
*Also check the above [[#Projects_to_be_started_or_restarted|list of &amp;quot;projects to be started or restarted&amp;quot;]], in particular the [[EiffelStudio_Wish_List|EiffelStudio Wish List]]. Some of the pages are just stubs, but others already have a detailed analysis which can serve as a framework for future work on the corresponding features.&lt;br /&gt;
*If you decide to go forward, create a page about your project, listing the goals of the project, the rationale (why is this useful?), the issues to be solved, the overall techniques proposed, and a general development strategy. Make sure to include a &amp;quot;project members&amp;quot; section so that people can contact you (for example through your user name on this Wiki).&lt;br /&gt;
*Edit the present page so that it includes a link to your project page; select the appropriate category. Below the link, include (as in current entries) a one- or two-line summary of the project's goal.&lt;br /&gt;
*Do it!&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:User_suggestions&amp;diff=9337</id>
		<title>Category:User suggestions</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:User_suggestions&amp;diff=9337"/>
				<updated>2007-08-09T02:03:57Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Various pages made by user for ideas and proposals.&lt;br /&gt;
&lt;br /&gt;
User suggestions are now grouped in the Projects page, under [[:Category:Projects#Projects_to_be_started_or_restarted|&amp;quot;projects to be started or restarted&amp;quot;]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Wish_CHARACTER_16&amp;diff=9336</id>
		<title>Wish CHARACTER 16</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Wish_CHARACTER_16&amp;diff=9336"/>
				<updated>2007-08-09T02:02:40Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
'''[[User:Colin-adams|Colin Paul Adams]] 07:05, 18 January 2007 (CET)''':&lt;br /&gt;
On the [[EiffelStudio_Wish_List|wish-list]], there is a request for a class CHARACTER_16.&lt;br /&gt;
&lt;br /&gt;
I wrote some reasons there why it is bad, but due to space limitations, it doesn't read very well. I thought it well worth the time to write a proper answer here.&lt;br /&gt;
&lt;br /&gt;
First, the requestor's justification for the class:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Smaller footprint than CHARACTER_32, UTF-16 is the default internal text representation for Windows/.Net/OS X/Java so conversion from CHARACTER_32 is costly, particular when dealing with large amounts of text&amp;quot; &lt;br /&gt;
&lt;br /&gt;
There are a number of unjustified assumptions here.&lt;br /&gt;
&lt;br /&gt;
First:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;conversion from CHARACTER_32 is costly&amp;quot;&lt;br /&gt;
&lt;br /&gt;
But you are not starting with CHARACTER_32, you are starting with STRING_32.&lt;br /&gt;
&lt;br /&gt;
There is nothing in ECMA that specifies that STRING_32 must be UTF-32 (though it is perhaps intended - there are a large number of points related to Unicode in ECMA that are unclear or under-specified. I have written a report for the ECMA committee detailing these).&lt;br /&gt;
&lt;br /&gt;
So as it stands, an implementor is free to implement STRING_32 as&lt;br /&gt;
UTF-16 encoded. In which case there would be zero conversion cost (let us put aside the possible endianess conversion).&lt;br /&gt;
&lt;br /&gt;
But let us suppose that the ECMA committee clarifies the standard to say that STRING_32 is indeed meant to be implemented as UTF-32. Is there then a need for CHARACTER_16?&lt;br /&gt;
&lt;br /&gt;
No. In fact, it makes no sense at all.&lt;br /&gt;
&lt;br /&gt;
First, let us assume that in the interests of conversion efficiency, we have a class representing UTF-16 encoded strings. Let us call it for the sake of argument UC_UTF_16 (STRING_16 might suggest 16-bit characters, which is not the case for UTF-16).&lt;br /&gt;
&lt;br /&gt;
What then will you get if you call `item' on this class? To explore the answer, let us look at the definition of `item' in STRING_32:&lt;br /&gt;
&amp;lt;code&amp;gt;item, infix &amp;quot;@&amp;quot; (i: INTEGER): WIDE_CHARACTER assign put is&lt;br /&gt;
		-- Character at position `i'&lt;br /&gt;
	do&lt;br /&gt;
		Result := area.item (i - 1)&lt;br /&gt;
	end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Clicking on WIDE_CHARACTER gives me CHARACTER_32)&lt;br /&gt;
&lt;br /&gt;
The point is the header comment - you get a character, not a Unicode code point.&lt;br /&gt;
&lt;br /&gt;
Now if we call `item' on our hypothetical class UC_UTF_16, what should we get back? Again, a character. Should it be CHARACTER_32 or the requested CHARACTER_16?&lt;br /&gt;
&lt;br /&gt;
The answer is that it must be CHARACTER_32. In UTF-16, a single character may be represented by a pair of 16-bit numbers, but the components of this pair are not individual characters - the code points that these individual 16-bit numbers represent are technically knwon as surrogate code points, and they are defined in The Unicode Standard to be non-characters. So if you were somehow able to get a&lt;br /&gt;
CHARACTER_16 for eaxh of these surrogate code points, then you would have an Eiffel object that supposedly represents a character, which does not do so.&lt;br /&gt;
&lt;br /&gt;
So the whole idea of CHARACTER_16 is a nonsense.&lt;br /&gt;
&lt;br /&gt;
In some scenarios you may need access to the individual code points&lt;br /&gt;
(UTF-16 debugging, for instance), but to address this, the correct queries should be something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;is_surrogate_pair (a_index: INTEGER): BOOLEAN&lt;br /&gt;
 &lt;br /&gt;
lower_surrogate (a_index: INTEGER): NATURAL_16&lt;br /&gt;
  require&lt;br /&gt;
    surrogate_pair: is_surrogate_pair (a_index)&lt;br /&gt;
 &lt;br /&gt;
upper_surrogate (a_index: INTEGER): NATURAL_16&lt;br /&gt;
  require&lt;br /&gt;
    surrogate_pair: is_surrogate_pair (a_index)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I hope that whoever added CHARACTER_16 to the wish list will now remove it, and replace it with a request for a UTF-16 class (which should NOT be called STRING_16 - I would suggest UTF_16_STRING).)&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Component_standards&amp;diff=9335</id>
		<title>Component standards</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Component_standards&amp;diff=9335"/>
				<updated>2007-08-09T02:02:14Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
&lt;br /&gt;
{{NoProjectMembers}}&lt;br /&gt;
&lt;br /&gt;
'''Standards and Tools for Eiffel-based Components'''&lt;br /&gt;
&lt;br /&gt;
While Eiffel appears to be an ideal language for building libraries, it has not developed a standard for distributing binary components. Today, the most common way of distributing Eiffel libraries is as source code, for Eiffel compilers.&lt;br /&gt;
&lt;br /&gt;
At the same time, other languages heavily leverage the distribution of binary components. This is true for both open source and proprietary software. &lt;br /&gt;
&lt;br /&gt;
I'd like to see some emphasis placed on standards and tools to make it easier to distribute binary components written in Eiffel. Among the problems that need to be addressed are issues of data interchange, what to do with MI, exception handling, and multithreading.&lt;br /&gt;
&lt;br /&gt;
One possible starting place: for binary Eiffel library, designate for the compiler an &amp;quot;export&amp;quot; cluster. This cluster contains the root classes for the library. Constraints may be placed on these classes to ease integration with other languages. For example, members of the cluster may not be implemented with MI. The public interface for the classes may only reference other classes within the cluster, or primitive data types.&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9334</id>
		<title>Category:Projects</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9334"/>
				<updated>2007-08-09T02:01:06Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Adding your own project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contributing to open-source EiffelStudio==&lt;br /&gt;
Now that you have [[Spread_the_word|spread the word]] about Eiffel, you feel the urge to contribute to the product itself. There are many ways to help develop EiffelStudio through projects large and small. Check the list of open projects below; if you see one of interest, contact the project members as listed on the corresponding project page. Don't forget to subscribe to the Eiffel developers list (see the [[Mailing_Lists|the mailing lists page]]) where you can post questions about past, current and possible projects.&lt;br /&gt;
&lt;br /&gt;
If you feel none of the current projects covers your special interest, see below how to [[#Adding_your_own_project|add your own project]].&lt;br /&gt;
&lt;br /&gt;
'''Note to author of projects''' available from this page: please make sure the project description is up to date and in particular that '''the project members are listed''' and reachable; that's the best way to gain more collaborators. If the project is no longer active please move the entry to [[#Projects_to_be_started_or_restarted|projects to be started or restarted]] section so that someone else may pick it up.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Libraries (other than EiffelVision) ==&lt;br /&gt;
&lt;br /&gt;
Eiffel is all about reuse of quality components. The best way to get started as an Eiffel contributor is to extend an existing library, or start a new one to fill a need.&lt;br /&gt;
&lt;br /&gt;
EiffelVision-related developments appear under [[#Graphics_and_user_interface|graphics and user interface]].&lt;br /&gt;
* [[Eiffel_NXT | Eiffel LEGO NXT Commumication Library and EiffelStudio Integration]]&lt;br /&gt;
::Remote communication with LEGO NXT Mindstorms &amp;quot;bricks&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Language and compiler ==&lt;br /&gt;
This is the heart of the Eiffel environment: providing the best possible implementation of the Eiffel language. See the [[:Category:Compiler|compiler pages]] for detailed information about EiffelStudio's compiling techniques including the Melting Ice Technology.&lt;br /&gt;
* [[:Category:ECMA| Full ISO/ECMA support]]&lt;br /&gt;
::The Eiffel standard developed by the ECMA TC39-TG4 committee and approved in 2006 by the International Standards Organization is the definitive reference on the Eiffel language. Work is progressing quickly to include all ECMA-ISO mechanisms into the EiffelStudio compiler; you can help fill the remaining gaps.&lt;br /&gt;
&lt;br /&gt;
== General environment mechanisms ==&lt;br /&gt;
There are always new ideas to improve the user experience with EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
* [[AutoTest_Integration|Integrating AutoTest into EiffelStudio]]&lt;br /&gt;
::[http://se.ethz.ch/research/autotest/ AutoTest] is an automated testing framework taking advantage of Eiffel's Design by Contract to provide far more automation than current solutions such as JUnit. Currently it is a separate tool; ideally it should be part of EiffelStudio.&lt;br /&gt;
* [[Advanced Class and Feature Wizard| Advanced class and feature wizard ]]&lt;br /&gt;
::Improve ease of use, for both novice and advanced users, by refining the tools that create classes and features from templates.&lt;br /&gt;
*[[Editor|Editor]]&lt;br /&gt;
::Improve the EiffelStudio built-in smart editor.&lt;br /&gt;
* [[Refactoring|More refactoring mechanisms]]&lt;br /&gt;
::While Eiffel doesn't need some of the refactoring mechanisms of other languages, the environment could benefit from new refactoring mechanisms in addition to the ones currently supported.&lt;br /&gt;
* [[Eiffel_Mutation_Testing_Tool| Eiffel Mutation Testing Tool]]&lt;br /&gt;
::Build a high-quality mutation testing tool (for evaluating the quality of test strategies, fault detectability and redundancy) taking advantage of Eiffel's mechanisms, especially Design by Contract.&lt;br /&gt;
&lt;br /&gt;
== Graphics and user interface ==&lt;br /&gt;
Make the user interface of EiffelStudio more appealing. Much of the work is to be done in the underlying EiffelVision library, with the added benefit that improvements will be available to user applications as well.&lt;br /&gt;
&lt;br /&gt;
*[[Vision2_Accelerator|EiffelVision Accelerators]]&lt;br /&gt;
::More keyboard accelerators for EiffelVision applications.&lt;br /&gt;
*[[EiffelVision_Unicode|Unicode support for EiffelVision]]&lt;br /&gt;
::EiffelVision support for the character set of arbitrary human languages (see also [[Unicode]]).&lt;br /&gt;
*[[EiffelBuild_Integration|EiffelBuild Integration]]&lt;br /&gt;
::The graphical user interface builder, EiffelBuild, is currently a separate product. Ideally it should be completely integrated with EiffelStudio.&lt;br /&gt;
*[[Cocoa_for_EiffelVision2|Cocoa for EiffelVision]]&lt;br /&gt;
::Provide EiffelVision with a Carbon back-end to make it truly native on the Mac.&lt;br /&gt;
* [[Internationalization|EiffelStudio UI for other languages (internationalization)]]&lt;br /&gt;
::EiffelStudio provides support for changing the user interface messages and dialogs to any language. If you are a fluent speaker of a language other than English, you can help the localization into that language.&lt;br /&gt;
&lt;br /&gt;
== Build infrastructure ==&lt;br /&gt;
Developments in this category are intended to help produce new versions of EiffelStudio faster and better.&lt;br /&gt;
&lt;br /&gt;
*[[Build_tool | Build tool]]&lt;br /&gt;
::Simplify and streamline the EiffelStudio build process.&lt;br /&gt;
*[[Debian_packages | Debian packages]]&lt;br /&gt;
::Include EiffelStudio in standard Debian installation&lt;br /&gt;
*[[OSX_release_infrastructure|OSX release infrastructure]]&lt;br /&gt;
::Script the release of Mac universal binaries for OS X&lt;br /&gt;
&lt;br /&gt;
== Other Stuff ==&lt;br /&gt;
&lt;br /&gt;
* [[ESTeaching | Eiffel Studio for Teaching]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Developing is not everything; the results must also be tested for functionality and performance. The EiffelStudio testing process is completely open and follows advanced software engineering standard. Please visit the special [[:Category:Testing|category devoted to EiffelStudio testing]].&lt;br /&gt;
&lt;br /&gt;
== Projects to be started or restarted ==&lt;br /&gt;
The projects in this list are mere ideas which may not yet have a project page. Some of them were started but not completed. Feel free to take over! If you do so, move the project to one of the above sections (compiler, libraries etc.).&lt;br /&gt;
* [[EiffelStudio_Wish_List|EiffelStudio Wish List]]&lt;br /&gt;
::Not really the description of a single project, but a collection of ideas of cool things to add to EiffelStudio. Feel free to add to it.&lt;br /&gt;
* [[Compilation_Without_Configuration|Compilation without configuration]]&lt;br /&gt;
::A mechanism to compile classes without providing a control file.&lt;br /&gt;
* [[Wish CHARACTER 16|CHARACTER 16]]&lt;br /&gt;
::A request for a new basic type.&lt;br /&gt;
*[[Component_standards| Standards and tools for Eiffel-based components]]&lt;br /&gt;
::Develop a standard for distributing Eiffel components in binary form, and implement it&lt;br /&gt;
* [[Unicode|Unicode support improvement]]&lt;br /&gt;
::Improve support for character sets of arbitrary human languages. See also [[EiffelVision_Unicode|EiffelVision Unicode support]].&lt;br /&gt;
* [[New_ports|Porting to new platforms (OSX Intel, OpenBSD)]]&lt;br /&gt;
::Eiffel is highly portable; a port to a new platform is a moderate effort.&lt;br /&gt;
* [[IDE|IDE improvements]]&lt;br /&gt;
::This should be replaced by more specific goals, see [[#General_environment_mechanisms|general environment mechanisms]] above.&lt;br /&gt;
* [[Extended_static_checking|Extended static checking]]&lt;br /&gt;
::See e.g. ESC-Java, Spec#...&lt;br /&gt;
* [[Code_checking|Direct code checking (red squiggly lines)]]&lt;br /&gt;
::More user-friendly error &amp;quot;non-messages&amp;quot;, following the lead of spelling error reporting in MS Word&lt;br /&gt;
* [[Learning|Integrated learning support]]&lt;br /&gt;
::Support for total beginners&lt;br /&gt;
* [[Macros|Editor macro recording and playback]]&lt;br /&gt;
::Give EiffelStudio, in particular the editor, a macro facility&lt;br /&gt;
* [[Editor_breakpoints|Inserting and navigation of editor breakpoints]]&lt;br /&gt;
::Add breakpoints to the editor for better navigation&lt;br /&gt;
* [[EMU| Eiffel Multi User]]&lt;br /&gt;
::Integrate a repository mechanism&lt;br /&gt;
* [[Trace_points|Adding trace points]]&lt;br /&gt;
:: Output a trace statement indicating a trace point has been hit, without the need to write code or stop execution&lt;br /&gt;
* [[Update_notification|Update notification]]&lt;br /&gt;
::An update notification service to let developers know there is a new version available.&lt;br /&gt;
* [[Configuration_management|Integrated support for configuration management]]&lt;br /&gt;
::Integrate configuration management into EiffelStudio.&lt;br /&gt;
*[[Scintilla_component| Multiplatform editor component: Scintilla]]&lt;br /&gt;
::Encapsulate Scintilla multi-platform editor&lt;br /&gt;
*[[Gecko_component| Multiplatform layout engine component: Mozilla/Gecko]]&lt;br /&gt;
::Encapsulate Gecko html multi-platform engine component&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
== Adding your own project ==&lt;br /&gt;
To add your own project:&lt;br /&gt;
*Make sure it is not redundant with one of the existing projects. If there is any chance of duplication, please contact the project authors first.&lt;br /&gt;
*If you have not already done so, subscribe to the developers' mailing list (see the [[Mailing_Lists|the mailing lists page]]). Post a message to the list explaining your idea and asking for feedback.&lt;br /&gt;
*Also check the above [[#Projects_to_be_started_or_restarted|list of &amp;quot;projects to be started or restarted&amp;quot;]], in particular the [[EiffelStudio_Wish_List|EiffelStudio Wish List]]. Some of the pages are just stubs, but others already have a detailed analysis which can serve as a framework for future work on the corresponding features.&lt;br /&gt;
*If you decide to go forward, create a page about your project, listing the goals of the project, the rationale (why is this useful?), the issues to be solved, the overall techniques proposed, and a general development strategy. Make sure to include a &amp;quot;project members&amp;quot; section so that people can contact you (for example through your user name on this Wiki).&lt;br /&gt;
*Edit the present page so that it includes a link to your project page; select the appropriate category. Below the link, include (as in current entries) a one- or two-line summary of the project's goal.&lt;br /&gt;
*Do it!&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
* [[:Category:User_suggestions|User suggestions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9333</id>
		<title>Category:Projects</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9333"/>
				<updated>2007-08-09T02:00:50Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Adding your own project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contributing to open-source EiffelStudio==&lt;br /&gt;
Now that you have [[Spread_the_word|spread the word]] about Eiffel, you feel the urge to contribute to the product itself. There are many ways to help develop EiffelStudio through projects large and small. Check the list of open projects below; if you see one of interest, contact the project members as listed on the corresponding project page. Don't forget to subscribe to the Eiffel developers list (see the [[Mailing_Lists|the mailing lists page]]) where you can post questions about past, current and possible projects.&lt;br /&gt;
&lt;br /&gt;
If you feel none of the current projects covers your special interest, see below how to [[#Adding_your_own_project|add your own project]].&lt;br /&gt;
&lt;br /&gt;
'''Note to author of projects''' available from this page: please make sure the project description is up to date and in particular that '''the project members are listed''' and reachable; that's the best way to gain more collaborators. If the project is no longer active please move the entry to [[#Projects_to_be_started_or_restarted|projects to be started or restarted]] section so that someone else may pick it up.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Libraries (other than EiffelVision) ==&lt;br /&gt;
&lt;br /&gt;
Eiffel is all about reuse of quality components. The best way to get started as an Eiffel contributor is to extend an existing library, or start a new one to fill a need.&lt;br /&gt;
&lt;br /&gt;
EiffelVision-related developments appear under [[#Graphics_and_user_interface|graphics and user interface]].&lt;br /&gt;
* [[Eiffel_NXT | Eiffel LEGO NXT Commumication Library and EiffelStudio Integration]]&lt;br /&gt;
::Remote communication with LEGO NXT Mindstorms &amp;quot;bricks&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Language and compiler ==&lt;br /&gt;
This is the heart of the Eiffel environment: providing the best possible implementation of the Eiffel language. See the [[:Category:Compiler|compiler pages]] for detailed information about EiffelStudio's compiling techniques including the Melting Ice Technology.&lt;br /&gt;
* [[:Category:ECMA| Full ISO/ECMA support]]&lt;br /&gt;
::The Eiffel standard developed by the ECMA TC39-TG4 committee and approved in 2006 by the International Standards Organization is the definitive reference on the Eiffel language. Work is progressing quickly to include all ECMA-ISO mechanisms into the EiffelStudio compiler; you can help fill the remaining gaps.&lt;br /&gt;
&lt;br /&gt;
== General environment mechanisms ==&lt;br /&gt;
There are always new ideas to improve the user experience with EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
* [[AutoTest_Integration|Integrating AutoTest into EiffelStudio]]&lt;br /&gt;
::[http://se.ethz.ch/research/autotest/ AutoTest] is an automated testing framework taking advantage of Eiffel's Design by Contract to provide far more automation than current solutions such as JUnit. Currently it is a separate tool; ideally it should be part of EiffelStudio.&lt;br /&gt;
* [[Advanced Class and Feature Wizard| Advanced class and feature wizard ]]&lt;br /&gt;
::Improve ease of use, for both novice and advanced users, by refining the tools that create classes and features from templates.&lt;br /&gt;
*[[Editor|Editor]]&lt;br /&gt;
::Improve the EiffelStudio built-in smart editor.&lt;br /&gt;
* [[Refactoring|More refactoring mechanisms]]&lt;br /&gt;
::While Eiffel doesn't need some of the refactoring mechanisms of other languages, the environment could benefit from new refactoring mechanisms in addition to the ones currently supported.&lt;br /&gt;
* [[Eiffel_Mutation_Testing_Tool| Eiffel Mutation Testing Tool]]&lt;br /&gt;
::Build a high-quality mutation testing tool (for evaluating the quality of test strategies, fault detectability and redundancy) taking advantage of Eiffel's mechanisms, especially Design by Contract.&lt;br /&gt;
&lt;br /&gt;
== Graphics and user interface ==&lt;br /&gt;
Make the user interface of EiffelStudio more appealing. Much of the work is to be done in the underlying EiffelVision library, with the added benefit that improvements will be available to user applications as well.&lt;br /&gt;
&lt;br /&gt;
*[[Vision2_Accelerator|EiffelVision Accelerators]]&lt;br /&gt;
::More keyboard accelerators for EiffelVision applications.&lt;br /&gt;
*[[EiffelVision_Unicode|Unicode support for EiffelVision]]&lt;br /&gt;
::EiffelVision support for the character set of arbitrary human languages (see also [[Unicode]]).&lt;br /&gt;
*[[EiffelBuild_Integration|EiffelBuild Integration]]&lt;br /&gt;
::The graphical user interface builder, EiffelBuild, is currently a separate product. Ideally it should be completely integrated with EiffelStudio.&lt;br /&gt;
*[[Cocoa_for_EiffelVision2|Cocoa for EiffelVision]]&lt;br /&gt;
::Provide EiffelVision with a Carbon back-end to make it truly native on the Mac.&lt;br /&gt;
* [[Internationalization|EiffelStudio UI for other languages (internationalization)]]&lt;br /&gt;
::EiffelStudio provides support for changing the user interface messages and dialogs to any language. If you are a fluent speaker of a language other than English, you can help the localization into that language.&lt;br /&gt;
&lt;br /&gt;
== Build infrastructure ==&lt;br /&gt;
Developments in this category are intended to help produce new versions of EiffelStudio faster and better.&lt;br /&gt;
&lt;br /&gt;
*[[Build_tool | Build tool]]&lt;br /&gt;
::Simplify and streamline the EiffelStudio build process.&lt;br /&gt;
*[[Debian_packages | Debian packages]]&lt;br /&gt;
::Include EiffelStudio in standard Debian installation&lt;br /&gt;
*[[OSX_release_infrastructure|OSX release infrastructure]]&lt;br /&gt;
::Script the release of Mac universal binaries for OS X&lt;br /&gt;
&lt;br /&gt;
== Other Stuff ==&lt;br /&gt;
&lt;br /&gt;
* [[ESTeaching | Eiffel Studio for Teaching]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Developing is not everything; the results must also be tested for functionality and performance. The EiffelStudio testing process is completely open and follows advanced software engineering standard. Please visit the special [[:Category:Testing|category devoted to EiffelStudio testing]].&lt;br /&gt;
&lt;br /&gt;
== Projects to be started or restarted ==&lt;br /&gt;
The projects in this list are mere ideas which may not yet have a project page. Some of them were started but not completed. Feel free to take over! If you do so, move the project to one of the above sections (compiler, libraries etc.).&lt;br /&gt;
* [[EiffelStudio_Wish_List|EiffelStudio Wish List]]&lt;br /&gt;
::Not really the description of a single project, but a collection of ideas of cool things to add to EiffelStudio. Feel free to add to it.&lt;br /&gt;
* [[Compilation_Without_Configuration|Compilation without configuration]]&lt;br /&gt;
::A mechanism to compile classes without providing a control file.&lt;br /&gt;
* [[Wish CHARACTER 16|CHARACTER 16]]&lt;br /&gt;
::A request for a new basic type.&lt;br /&gt;
*[[Component_standards| Standards and tools for Eiffel-based components]]&lt;br /&gt;
::Develop a standard for distributing Eiffel components in binary form, and implement it&lt;br /&gt;
* [[Unicode|Unicode support improvement]]&lt;br /&gt;
::Improve support for character sets of arbitrary human languages. See also [[EiffelVision_Unicode|EiffelVision Unicode support]].&lt;br /&gt;
* [[New_ports|Porting to new platforms (OSX Intel, OpenBSD)]]&lt;br /&gt;
::Eiffel is highly portable; a port to a new platform is a moderate effort.&lt;br /&gt;
* [[IDE|IDE improvements]]&lt;br /&gt;
::This should be replaced by more specific goals, see [[#General_environment_mechanisms|general environment mechanisms]] above.&lt;br /&gt;
* [[Extended_static_checking|Extended static checking]]&lt;br /&gt;
::See e.g. ESC-Java, Spec#...&lt;br /&gt;
* [[Code_checking|Direct code checking (red squiggly lines)]]&lt;br /&gt;
::More user-friendly error &amp;quot;non-messages&amp;quot;, following the lead of spelling error reporting in MS Word&lt;br /&gt;
* [[Learning|Integrated learning support]]&lt;br /&gt;
::Support for total beginners&lt;br /&gt;
* [[Macros|Editor macro recording and playback]]&lt;br /&gt;
::Give EiffelStudio, in particular the editor, a macro facility&lt;br /&gt;
* [[Editor_breakpoints|Inserting and navigation of editor breakpoints]]&lt;br /&gt;
::Add breakpoints to the editor for better navigation&lt;br /&gt;
* [[EMU| Eiffel Multi User]]&lt;br /&gt;
::Integrate a repository mechanism&lt;br /&gt;
* [[Trace_points|Adding trace points]]&lt;br /&gt;
:: Output a trace statement indicating a trace point has been hit, without the need to write code or stop execution&lt;br /&gt;
* [[Update_notification|Update notification]]&lt;br /&gt;
::An update notification service to let developers know there is a new version available.&lt;br /&gt;
* [[Configuration_management|Integrated support for configuration management]]&lt;br /&gt;
::Integrate configuration management into EiffelStudio.&lt;br /&gt;
*[[Scintilla_component| Multiplatform editor component: Scintilla]]&lt;br /&gt;
::Encapsulate Scintilla multi-platform editor&lt;br /&gt;
*[[Gecko_component| Multiplatform layout engine component: Mozilla/Gecko]]&lt;br /&gt;
::Encapsulate Gecko html multi-platform engine component&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
== Adding your own project ==&lt;br /&gt;
To add your own project:&lt;br /&gt;
*Make sure it is not redundant with one of the existing projects. If there is any chance of duplication, please contact the project authors first.&lt;br /&gt;
*If you have not already done so, subscribe to the developers' mailing list (see the [[Mailing_Lists|the mailing lists page]]). Post a message to the list explaining your idea and asking for feedback.&lt;br /&gt;
*Also check the above [[Projects_to_be_started_or_restarted|list of &amp;quot;projects to be started or restarted&amp;quot;]], in particular the [[EiffelStudio_Wish_List|EiffelStudio Wish List]]. Some of the pages are just stubs, but others already have a detailed analysis which can serve as a framework for future work on the corresponding features.&lt;br /&gt;
*If you decide to go forward, create a page about your project, listing the goals of the project, the rationale (why is this useful?), the issues to be solved, the overall techniques proposed, and a general development strategy. Make sure to include a &amp;quot;project members&amp;quot; section so that people can contact you (for example through your user name on this Wiki).&lt;br /&gt;
*Edit the present page so that it includes a link to your project page; select the appropriate category. Below the link, include (as in current entries) a one- or two-line summary of the project's goal.&lt;br /&gt;
*Do it!&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
* [[:Category:User_suggestions|User suggestions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9332</id>
		<title>Category:Projects</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9332"/>
				<updated>2007-08-09T02:00:07Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Adding your own project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contributing to open-source EiffelStudio==&lt;br /&gt;
Now that you have [[Spread_the_word|spread the word]] about Eiffel, you feel the urge to contribute to the product itself. There are many ways to help develop EiffelStudio through projects large and small. Check the list of open projects below; if you see one of interest, contact the project members as listed on the corresponding project page. Don't forget to subscribe to the Eiffel developers list (see the [[Mailing_Lists|the mailing lists page]]) where you can post questions about past, current and possible projects.&lt;br /&gt;
&lt;br /&gt;
If you feel none of the current projects covers your special interest, see below how to [[#Adding_your_own_project|add your own project]].&lt;br /&gt;
&lt;br /&gt;
'''Note to author of projects''' available from this page: please make sure the project description is up to date and in particular that '''the project members are listed''' and reachable; that's the best way to gain more collaborators. If the project is no longer active please move the entry to [[#Projects_to_be_started_or_restarted|projects to be started or restarted]] section so that someone else may pick it up.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Libraries (other than EiffelVision) ==&lt;br /&gt;
&lt;br /&gt;
Eiffel is all about reuse of quality components. The best way to get started as an Eiffel contributor is to extend an existing library, or start a new one to fill a need.&lt;br /&gt;
&lt;br /&gt;
EiffelVision-related developments appear under [[#Graphics_and_user_interface|graphics and user interface]].&lt;br /&gt;
* [[Eiffel_NXT | Eiffel LEGO NXT Commumication Library and EiffelStudio Integration]]&lt;br /&gt;
::Remote communication with LEGO NXT Mindstorms &amp;quot;bricks&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Language and compiler ==&lt;br /&gt;
This is the heart of the Eiffel environment: providing the best possible implementation of the Eiffel language. See the [[:Category:Compiler|compiler pages]] for detailed information about EiffelStudio's compiling techniques including the Melting Ice Technology.&lt;br /&gt;
* [[:Category:ECMA| Full ISO/ECMA support]]&lt;br /&gt;
::The Eiffel standard developed by the ECMA TC39-TG4 committee and approved in 2006 by the International Standards Organization is the definitive reference on the Eiffel language. Work is progressing quickly to include all ECMA-ISO mechanisms into the EiffelStudio compiler; you can help fill the remaining gaps.&lt;br /&gt;
&lt;br /&gt;
== General environment mechanisms ==&lt;br /&gt;
There are always new ideas to improve the user experience with EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
* [[AutoTest_Integration|Integrating AutoTest into EiffelStudio]]&lt;br /&gt;
::[http://se.ethz.ch/research/autotest/ AutoTest] is an automated testing framework taking advantage of Eiffel's Design by Contract to provide far more automation than current solutions such as JUnit. Currently it is a separate tool; ideally it should be part of EiffelStudio.&lt;br /&gt;
* [[Advanced Class and Feature Wizard| Advanced class and feature wizard ]]&lt;br /&gt;
::Improve ease of use, for both novice and advanced users, by refining the tools that create classes and features from templates.&lt;br /&gt;
*[[Editor|Editor]]&lt;br /&gt;
::Improve the EiffelStudio built-in smart editor.&lt;br /&gt;
* [[Refactoring|More refactoring mechanisms]]&lt;br /&gt;
::While Eiffel doesn't need some of the refactoring mechanisms of other languages, the environment could benefit from new refactoring mechanisms in addition to the ones currently supported.&lt;br /&gt;
* [[Eiffel_Mutation_Testing_Tool| Eiffel Mutation Testing Tool]]&lt;br /&gt;
::Build a high-quality mutation testing tool (for evaluating the quality of test strategies, fault detectability and redundancy) taking advantage of Eiffel's mechanisms, especially Design by Contract.&lt;br /&gt;
&lt;br /&gt;
== Graphics and user interface ==&lt;br /&gt;
Make the user interface of EiffelStudio more appealing. Much of the work is to be done in the underlying EiffelVision library, with the added benefit that improvements will be available to user applications as well.&lt;br /&gt;
&lt;br /&gt;
*[[Vision2_Accelerator|EiffelVision Accelerators]]&lt;br /&gt;
::More keyboard accelerators for EiffelVision applications.&lt;br /&gt;
*[[EiffelVision_Unicode|Unicode support for EiffelVision]]&lt;br /&gt;
::EiffelVision support for the character set of arbitrary human languages (see also [[Unicode]]).&lt;br /&gt;
*[[EiffelBuild_Integration|EiffelBuild Integration]]&lt;br /&gt;
::The graphical user interface builder, EiffelBuild, is currently a separate product. Ideally it should be completely integrated with EiffelStudio.&lt;br /&gt;
*[[Cocoa_for_EiffelVision2|Cocoa for EiffelVision]]&lt;br /&gt;
::Provide EiffelVision with a Carbon back-end to make it truly native on the Mac.&lt;br /&gt;
* [[Internationalization|EiffelStudio UI for other languages (internationalization)]]&lt;br /&gt;
::EiffelStudio provides support for changing the user interface messages and dialogs to any language. If you are a fluent speaker of a language other than English, you can help the localization into that language.&lt;br /&gt;
&lt;br /&gt;
== Build infrastructure ==&lt;br /&gt;
Developments in this category are intended to help produce new versions of EiffelStudio faster and better.&lt;br /&gt;
&lt;br /&gt;
*[[Build_tool | Build tool]]&lt;br /&gt;
::Simplify and streamline the EiffelStudio build process.&lt;br /&gt;
*[[Debian_packages | Debian packages]]&lt;br /&gt;
::Include EiffelStudio in standard Debian installation&lt;br /&gt;
*[[OSX_release_infrastructure|OSX release infrastructure]]&lt;br /&gt;
::Script the release of Mac universal binaries for OS X&lt;br /&gt;
&lt;br /&gt;
== Other Stuff ==&lt;br /&gt;
&lt;br /&gt;
* [[ESTeaching | Eiffel Studio for Teaching]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Developing is not everything; the results must also be tested for functionality and performance. The EiffelStudio testing process is completely open and follows advanced software engineering standard. Please visit the special [[:Category:Testing|category devoted to EiffelStudio testing]].&lt;br /&gt;
&lt;br /&gt;
== Projects to be started or restarted ==&lt;br /&gt;
The projects in this list are mere ideas which may not yet have a project page. Some of them were started but not completed. Feel free to take over! If you do so, move the project to one of the above sections (compiler, libraries etc.).&lt;br /&gt;
* [[EiffelStudio_Wish_List|EiffelStudio Wish List]]&lt;br /&gt;
::Not really the description of a single project, but a collection of ideas of cool things to add to EiffelStudio. Feel free to add to it.&lt;br /&gt;
* [[Compilation_Without_Configuration|Compilation without configuration]]&lt;br /&gt;
::A mechanism to compile classes without providing a control file.&lt;br /&gt;
* [[Wish CHARACTER 16|CHARACTER 16]]&lt;br /&gt;
::A request for a new basic type.&lt;br /&gt;
*[[Component_standards| Standards and tools for Eiffel-based components]]&lt;br /&gt;
::Develop a standard for distributing Eiffel components in binary form, and implement it&lt;br /&gt;
* [[Unicode|Unicode support improvement]]&lt;br /&gt;
::Improve support for character sets of arbitrary human languages. See also [[EiffelVision_Unicode|EiffelVision Unicode support]].&lt;br /&gt;
* [[New_ports|Porting to new platforms (OSX Intel, OpenBSD)]]&lt;br /&gt;
::Eiffel is highly portable; a port to a new platform is a moderate effort.&lt;br /&gt;
* [[IDE|IDE improvements]]&lt;br /&gt;
::This should be replaced by more specific goals, see [[#General_environment_mechanisms|general environment mechanisms]] above.&lt;br /&gt;
* [[Extended_static_checking|Extended static checking]]&lt;br /&gt;
::See e.g. ESC-Java, Spec#...&lt;br /&gt;
* [[Code_checking|Direct code checking (red squiggly lines)]]&lt;br /&gt;
::More user-friendly error &amp;quot;non-messages&amp;quot;, following the lead of spelling error reporting in MS Word&lt;br /&gt;
* [[Learning|Integrated learning support]]&lt;br /&gt;
::Support for total beginners&lt;br /&gt;
* [[Macros|Editor macro recording and playback]]&lt;br /&gt;
::Give EiffelStudio, in particular the editor, a macro facility&lt;br /&gt;
* [[Editor_breakpoints|Inserting and navigation of editor breakpoints]]&lt;br /&gt;
::Add breakpoints to the editor for better navigation&lt;br /&gt;
* [[EMU| Eiffel Multi User]]&lt;br /&gt;
::Integrate a repository mechanism&lt;br /&gt;
* [[Trace_points|Adding trace points]]&lt;br /&gt;
:: Output a trace statement indicating a trace point has been hit, without the need to write code or stop execution&lt;br /&gt;
* [[Update_notification|Update notification]]&lt;br /&gt;
::An update notification service to let developers know there is a new version available.&lt;br /&gt;
* [[Configuration_management|Integrated support for configuration management]]&lt;br /&gt;
::Integrate configuration management into EiffelStudio.&lt;br /&gt;
*[[Scintilla_component| Multiplatform editor component: Scintilla]]&lt;br /&gt;
::Encapsulate Scintilla multi-platform editor&lt;br /&gt;
*[[Gecko_component| Multiplatform layout engine component: Mozilla/Gecko]]&lt;br /&gt;
::Encapsulate Gecko html multi-platform engine component&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
== Adding your own project ==&lt;br /&gt;
To add your own project:&lt;br /&gt;
*Make sure it is not redundant with one of the existing projects. If there is any chance of duplication, please contact the project authors first.&lt;br /&gt;
*If you have not already done so, subscribe to the developers' mailing list (see the [[Mailing_Lists|the mailing lists page]]). Post a message to the list explaining your idea and asking for feedback.&lt;br /&gt;
*Also check the above list [[Projects_to_be_started_or_restarted|list of &amp;quot;projects to be started or restarted&amp;quot;]], in particular the [[EiffelStudio_Wish_List|EiffelStudio Wish List]]. Some of the pages are just stubs, but others already have a detailed analysis which can serve as a framework for future work on the corresponding features.&lt;br /&gt;
*If you decide to go forward, create a page about your project, listing the goals of the project, the rationale (why is this useful?), the issues to be solved, the overall techniques proposed, and a general development strategy. Make sure to include a &amp;quot;project members&amp;quot; section so that people can contact you (for example through your user name on this Wiki).&lt;br /&gt;
*Edit the present page so that it includes a link to your project page; select the appropriate category. Below the link, include (as in current entries) a one- or two-line summary of the project's goal.&lt;br /&gt;
*Do it!&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
* [[:Category:User_suggestions|User suggestions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9331</id>
		<title>Category:Projects</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9331"/>
				<updated>2007-08-09T01:59:11Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Adding your own project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contributing to open-source EiffelStudio==&lt;br /&gt;
Now that you have [[Spread_the_word|spread the word]] about Eiffel, you feel the urge to contribute to the product itself. There are many ways to help develop EiffelStudio through projects large and small. Check the list of open projects below; if you see one of interest, contact the project members as listed on the corresponding project page. Don't forget to subscribe to the Eiffel developers list (see the [[Mailing_Lists|the mailing lists page]]) where you can post questions about past, current and possible projects.&lt;br /&gt;
&lt;br /&gt;
If you feel none of the current projects covers your special interest, see below how to [[#Adding_your_own_project|add your own project]].&lt;br /&gt;
&lt;br /&gt;
'''Note to author of projects''' available from this page: please make sure the project description is up to date and in particular that '''the project members are listed''' and reachable; that's the best way to gain more collaborators. If the project is no longer active please move the entry to [[#Projects_to_be_started_or_restarted|projects to be started or restarted]] section so that someone else may pick it up.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Libraries (other than EiffelVision) ==&lt;br /&gt;
&lt;br /&gt;
Eiffel is all about reuse of quality components. The best way to get started as an Eiffel contributor is to extend an existing library, or start a new one to fill a need.&lt;br /&gt;
&lt;br /&gt;
EiffelVision-related developments appear under [[#Graphics_and_user_interface|graphics and user interface]].&lt;br /&gt;
* [[Eiffel_NXT | Eiffel LEGO NXT Commumication Library and EiffelStudio Integration]]&lt;br /&gt;
::Remote communication with LEGO NXT Mindstorms &amp;quot;bricks&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Language and compiler ==&lt;br /&gt;
This is the heart of the Eiffel environment: providing the best possible implementation of the Eiffel language. See the [[:Category:Compiler|compiler pages]] for detailed information about EiffelStudio's compiling techniques including the Melting Ice Technology.&lt;br /&gt;
* [[:Category:ECMA| Full ISO/ECMA support]]&lt;br /&gt;
::The Eiffel standard developed by the ECMA TC39-TG4 committee and approved in 2006 by the International Standards Organization is the definitive reference on the Eiffel language. Work is progressing quickly to include all ECMA-ISO mechanisms into the EiffelStudio compiler; you can help fill the remaining gaps.&lt;br /&gt;
&lt;br /&gt;
== General environment mechanisms ==&lt;br /&gt;
There are always new ideas to improve the user experience with EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
* [[AutoTest_Integration|Integrating AutoTest into EiffelStudio]]&lt;br /&gt;
::[http://se.ethz.ch/research/autotest/ AutoTest] is an automated testing framework taking advantage of Eiffel's Design by Contract to provide far more automation than current solutions such as JUnit. Currently it is a separate tool; ideally it should be part of EiffelStudio.&lt;br /&gt;
* [[Advanced Class and Feature Wizard| Advanced class and feature wizard ]]&lt;br /&gt;
::Improve ease of use, for both novice and advanced users, by refining the tools that create classes and features from templates.&lt;br /&gt;
*[[Editor|Editor]]&lt;br /&gt;
::Improve the EiffelStudio built-in smart editor.&lt;br /&gt;
* [[Refactoring|More refactoring mechanisms]]&lt;br /&gt;
::While Eiffel doesn't need some of the refactoring mechanisms of other languages, the environment could benefit from new refactoring mechanisms in addition to the ones currently supported.&lt;br /&gt;
* [[Eiffel_Mutation_Testing_Tool| Eiffel Mutation Testing Tool]]&lt;br /&gt;
::Build a high-quality mutation testing tool (for evaluating the quality of test strategies, fault detectability and redundancy) taking advantage of Eiffel's mechanisms, especially Design by Contract.&lt;br /&gt;
&lt;br /&gt;
== Graphics and user interface ==&lt;br /&gt;
Make the user interface of EiffelStudio more appealing. Much of the work is to be done in the underlying EiffelVision library, with the added benefit that improvements will be available to user applications as well.&lt;br /&gt;
&lt;br /&gt;
*[[Vision2_Accelerator|EiffelVision Accelerators]]&lt;br /&gt;
::More keyboard accelerators for EiffelVision applications.&lt;br /&gt;
*[[EiffelVision_Unicode|Unicode support for EiffelVision]]&lt;br /&gt;
::EiffelVision support for the character set of arbitrary human languages (see also [[Unicode]]).&lt;br /&gt;
*[[EiffelBuild_Integration|EiffelBuild Integration]]&lt;br /&gt;
::The graphical user interface builder, EiffelBuild, is currently a separate product. Ideally it should be completely integrated with EiffelStudio.&lt;br /&gt;
*[[Cocoa_for_EiffelVision2|Cocoa for EiffelVision]]&lt;br /&gt;
::Provide EiffelVision with a Carbon back-end to make it truly native on the Mac.&lt;br /&gt;
* [[Internationalization|EiffelStudio UI for other languages (internationalization)]]&lt;br /&gt;
::EiffelStudio provides support for changing the user interface messages and dialogs to any language. If you are a fluent speaker of a language other than English, you can help the localization into that language.&lt;br /&gt;
&lt;br /&gt;
== Build infrastructure ==&lt;br /&gt;
Developments in this category are intended to help produce new versions of EiffelStudio faster and better.&lt;br /&gt;
&lt;br /&gt;
*[[Build_tool | Build tool]]&lt;br /&gt;
::Simplify and streamline the EiffelStudio build process.&lt;br /&gt;
*[[Debian_packages | Debian packages]]&lt;br /&gt;
::Include EiffelStudio in standard Debian installation&lt;br /&gt;
*[[OSX_release_infrastructure|OSX release infrastructure]]&lt;br /&gt;
::Script the release of Mac universal binaries for OS X&lt;br /&gt;
&lt;br /&gt;
== Other Stuff ==&lt;br /&gt;
&lt;br /&gt;
* [[ESTeaching | Eiffel Studio for Teaching]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Developing is not everything; the results must also be tested for functionality and performance. The EiffelStudio testing process is completely open and follows advanced software engineering standard. Please visit the special [[:Category:Testing|category devoted to EiffelStudio testing]].&lt;br /&gt;
&lt;br /&gt;
== Projects to be started or restarted ==&lt;br /&gt;
The projects in this list are mere ideas which may not yet have a project page. Some of them were started but not completed. Feel free to take over! If you do so, move the project to one of the above sections (compiler, libraries etc.).&lt;br /&gt;
* [[EiffelStudio_Wish_List|EiffelStudio Wish List]]&lt;br /&gt;
::Not really the description of a single project, but a collection of ideas of cool things to add to EiffelStudio. Feel free to add to it.&lt;br /&gt;
* [[Compilation_Without_Configuration|Compilation without configuration]]&lt;br /&gt;
::A mechanism to compile classes without providing a control file.&lt;br /&gt;
* [[Wish CHARACTER 16|CHARACTER 16]]&lt;br /&gt;
::A request for a new basic type.&lt;br /&gt;
*[[Component_standards| Standards and tools for Eiffel-based components]]&lt;br /&gt;
::Develop a standard for distributing Eiffel components in binary form, and implement it&lt;br /&gt;
* [[Unicode|Unicode support improvement]]&lt;br /&gt;
::Improve support for character sets of arbitrary human languages. See also [[EiffelVision_Unicode|EiffelVision Unicode support]].&lt;br /&gt;
* [[New_ports|Porting to new platforms (OSX Intel, OpenBSD)]]&lt;br /&gt;
::Eiffel is highly portable; a port to a new platform is a moderate effort.&lt;br /&gt;
* [[IDE|IDE improvements]]&lt;br /&gt;
::This should be replaced by more specific goals, see [[#General_environment_mechanisms|general environment mechanisms]] above.&lt;br /&gt;
* [[Extended_static_checking|Extended static checking]]&lt;br /&gt;
::See e.g. ESC-Java, Spec#...&lt;br /&gt;
* [[Code_checking|Direct code checking (red squiggly lines)]]&lt;br /&gt;
::More user-friendly error &amp;quot;non-messages&amp;quot;, following the lead of spelling error reporting in MS Word&lt;br /&gt;
* [[Learning|Integrated learning support]]&lt;br /&gt;
::Support for total beginners&lt;br /&gt;
* [[Macros|Editor macro recording and playback]]&lt;br /&gt;
::Give EiffelStudio, in particular the editor, a macro facility&lt;br /&gt;
* [[Editor_breakpoints|Inserting and navigation of editor breakpoints]]&lt;br /&gt;
::Add breakpoints to the editor for better navigation&lt;br /&gt;
* [[EMU| Eiffel Multi User]]&lt;br /&gt;
::Integrate a repository mechanism&lt;br /&gt;
* [[Trace_points|Adding trace points]]&lt;br /&gt;
:: Output a trace statement indicating a trace point has been hit, without the need to write code or stop execution&lt;br /&gt;
* [[Update_notification|Update notification]]&lt;br /&gt;
::An update notification service to let developers know there is a new version available.&lt;br /&gt;
* [[Configuration_management|Integrated support for configuration management]]&lt;br /&gt;
::Integrate configuration management into EiffelStudio.&lt;br /&gt;
*[[Scintilla_component| Multiplatform editor component: Scintilla]]&lt;br /&gt;
::Encapsulate Scintilla multi-platform editor&lt;br /&gt;
*[[Gecko_component| Multiplatform layout engine component: Mozilla/Gecko]]&lt;br /&gt;
::Encapsulate Gecko html multi-platform engine component&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
== Adding your own project ==&lt;br /&gt;
To add your own project:&lt;br /&gt;
*Make sure it is not redundant with one of the existing projects. If there is any chance of duplication, please contact the project authors first.&lt;br /&gt;
*If you have not already done so, subscribe to the developers' mailing list (see the [[Mailing_Lists|the mailing lists page]]). Post a message to the list explaining your idea and asking for feedback.&lt;br /&gt;
*Also check the above list of &amp;quot;projects to be started or restarted&amp;quot;, in particular the [[EiffelStudio_Wish_List|EiffelStudio Wish List]]. Some of the pages are just stubs, but others already have a detailed analysis which can serve as a framework for future work on the corresponding features.&lt;br /&gt;
*If you decide to go forward, create a page about your project, listing the goals of the project, the rationale (why is this useful?), the issues to be solved, the overall techniques proposed, and a general development strategy. Make sure to include a &amp;quot;project members&amp;quot; section so that people can contact you (for example through your user name on this Wiki).&lt;br /&gt;
*Edit the present page so that it includes a link to your project page; select the appropriate category. Below the link, include (as in current entries) a one- or two-line summary of the project's goal.&lt;br /&gt;
*Do it!&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
* [[:Category:User_suggestions|User suggestions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9330</id>
		<title>Category:Projects</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9330"/>
				<updated>2007-08-09T01:57:09Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Projects to be started or restarted */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contributing to open-source EiffelStudio==&lt;br /&gt;
Now that you have [[Spread_the_word|spread the word]] about Eiffel, you feel the urge to contribute to the product itself. There are many ways to help develop EiffelStudio through projects large and small. Check the list of open projects below; if you see one of interest, contact the project members as listed on the corresponding project page. Don't forget to subscribe to the Eiffel developers list (see the [[Mailing_Lists|the mailing lists page]]) where you can post questions about past, current and possible projects.&lt;br /&gt;
&lt;br /&gt;
If you feel none of the current projects covers your special interest, see below how to [[#Adding_your_own_project|add your own project]].&lt;br /&gt;
&lt;br /&gt;
'''Note to author of projects''' available from this page: please make sure the project description is up to date and in particular that '''the project members are listed''' and reachable; that's the best way to gain more collaborators. If the project is no longer active please move the entry to [[#Projects_to_be_started_or_restarted|projects to be started or restarted]] section so that someone else may pick it up.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Libraries (other than EiffelVision) ==&lt;br /&gt;
&lt;br /&gt;
Eiffel is all about reuse of quality components. The best way to get started as an Eiffel contributor is to extend an existing library, or start a new one to fill a need.&lt;br /&gt;
&lt;br /&gt;
EiffelVision-related developments appear under [[#Graphics_and_user_interface|graphics and user interface]].&lt;br /&gt;
* [[Eiffel_NXT | Eiffel LEGO NXT Commumication Library and EiffelStudio Integration]]&lt;br /&gt;
::Remote communication with LEGO NXT Mindstorms &amp;quot;bricks&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Language and compiler ==&lt;br /&gt;
This is the heart of the Eiffel environment: providing the best possible implementation of the Eiffel language. See the [[:Category:Compiler|compiler pages]] for detailed information about EiffelStudio's compiling techniques including the Melting Ice Technology.&lt;br /&gt;
* [[:Category:ECMA| Full ISO/ECMA support]]&lt;br /&gt;
::The Eiffel standard developed by the ECMA TC39-TG4 committee and approved in 2006 by the International Standards Organization is the definitive reference on the Eiffel language. Work is progressing quickly to include all ECMA-ISO mechanisms into the EiffelStudio compiler; you can help fill the remaining gaps.&lt;br /&gt;
&lt;br /&gt;
== General environment mechanisms ==&lt;br /&gt;
There are always new ideas to improve the user experience with EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
* [[AutoTest_Integration|Integrating AutoTest into EiffelStudio]]&lt;br /&gt;
::[http://se.ethz.ch/research/autotest/ AutoTest] is an automated testing framework taking advantage of Eiffel's Design by Contract to provide far more automation than current solutions such as JUnit. Currently it is a separate tool; ideally it should be part of EiffelStudio.&lt;br /&gt;
* [[Advanced Class and Feature Wizard| Advanced class and feature wizard ]]&lt;br /&gt;
::Improve ease of use, for both novice and advanced users, by refining the tools that create classes and features from templates.&lt;br /&gt;
*[[Editor|Editor]]&lt;br /&gt;
::Improve the EiffelStudio built-in smart editor.&lt;br /&gt;
* [[Refactoring|More refactoring mechanisms]]&lt;br /&gt;
::While Eiffel doesn't need some of the refactoring mechanisms of other languages, the environment could benefit from new refactoring mechanisms in addition to the ones currently supported.&lt;br /&gt;
* [[Eiffel_Mutation_Testing_Tool| Eiffel Mutation Testing Tool]]&lt;br /&gt;
::Build a high-quality mutation testing tool (for evaluating the quality of test strategies, fault detectability and redundancy) taking advantage of Eiffel's mechanisms, especially Design by Contract.&lt;br /&gt;
&lt;br /&gt;
== Graphics and user interface ==&lt;br /&gt;
Make the user interface of EiffelStudio more appealing. Much of the work is to be done in the underlying EiffelVision library, with the added benefit that improvements will be available to user applications as well.&lt;br /&gt;
&lt;br /&gt;
*[[Vision2_Accelerator|EiffelVision Accelerators]]&lt;br /&gt;
::More keyboard accelerators for EiffelVision applications.&lt;br /&gt;
*[[EiffelVision_Unicode|Unicode support for EiffelVision]]&lt;br /&gt;
::EiffelVision support for the character set of arbitrary human languages (see also [[Unicode]]).&lt;br /&gt;
*[[EiffelBuild_Integration|EiffelBuild Integration]]&lt;br /&gt;
::The graphical user interface builder, EiffelBuild, is currently a separate product. Ideally it should be completely integrated with EiffelStudio.&lt;br /&gt;
*[[Cocoa_for_EiffelVision2|Cocoa for EiffelVision]]&lt;br /&gt;
::Provide EiffelVision with a Carbon back-end to make it truly native on the Mac.&lt;br /&gt;
* [[Internationalization|EiffelStudio UI for other languages (internationalization)]]&lt;br /&gt;
::EiffelStudio provides support for changing the user interface messages and dialogs to any language. If you are a fluent speaker of a language other than English, you can help the localization into that language.&lt;br /&gt;
&lt;br /&gt;
== Build infrastructure ==&lt;br /&gt;
Developments in this category are intended to help produce new versions of EiffelStudio faster and better.&lt;br /&gt;
&lt;br /&gt;
*[[Build_tool | Build tool]]&lt;br /&gt;
::Simplify and streamline the EiffelStudio build process.&lt;br /&gt;
*[[Debian_packages | Debian packages]]&lt;br /&gt;
::Include EiffelStudio in standard Debian installation&lt;br /&gt;
*[[OSX_release_infrastructure|OSX release infrastructure]]&lt;br /&gt;
::Script the release of Mac universal binaries for OS X&lt;br /&gt;
&lt;br /&gt;
== Other Stuff ==&lt;br /&gt;
&lt;br /&gt;
* [[ESTeaching | Eiffel Studio for Teaching]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Developing is not everything; the results must also be tested for functionality and performance. The EiffelStudio testing process is completely open and follows advanced software engineering standard. Please visit the special [[:Category:Testing|category devoted to EiffelStudio testing]].&lt;br /&gt;
&lt;br /&gt;
== Projects to be started or restarted ==&lt;br /&gt;
The projects in this list are mere ideas which may not yet have a project page. Some of them were started but not completed. Feel free to take over! If you do so, move the project to one of the above sections (compiler, libraries etc.).&lt;br /&gt;
* [[EiffelStudio_Wish_List|EiffelStudio Wish List]]&lt;br /&gt;
::Not really the description of a single project, but a collection of ideas of cool things to add to EiffelStudio. Feel free to add to it.&lt;br /&gt;
* [[Compilation_Without_Configuration|Compilation without configuration]]&lt;br /&gt;
::A mechanism to compile classes without providing a control file.&lt;br /&gt;
* [[Wish CHARACTER 16|CHARACTER 16]]&lt;br /&gt;
::A request for a new basic type.&lt;br /&gt;
*[[Component_standards| Standards and tools for Eiffel-based components]]&lt;br /&gt;
::Develop a standard for distributing Eiffel components in binary form, and implement it&lt;br /&gt;
* [[Unicode|Unicode support improvement]]&lt;br /&gt;
::Improve support for character sets of arbitrary human languages. See also [[EiffelVision_Unicode|EiffelVision Unicode support]].&lt;br /&gt;
* [[New_ports|Porting to new platforms (OSX Intel, OpenBSD)]]&lt;br /&gt;
::Eiffel is highly portable; a port to a new platform is a moderate effort.&lt;br /&gt;
* [[IDE|IDE improvements]]&lt;br /&gt;
::This should be replaced by more specific goals, see [[#General_environment_mechanisms|general environment mechanisms]] above.&lt;br /&gt;
* [[Extended_static_checking|Extended static checking]]&lt;br /&gt;
::See e.g. ESC-Java, Spec#...&lt;br /&gt;
* [[Code_checking|Direct code checking (red squiggly lines)]]&lt;br /&gt;
::More user-friendly error &amp;quot;non-messages&amp;quot;, following the lead of spelling error reporting in MS Word&lt;br /&gt;
* [[Learning|Integrated learning support]]&lt;br /&gt;
::Support for total beginners&lt;br /&gt;
* [[Macros|Editor macro recording and playback]]&lt;br /&gt;
::Give EiffelStudio, in particular the editor, a macro facility&lt;br /&gt;
* [[Editor_breakpoints|Inserting and navigation of editor breakpoints]]&lt;br /&gt;
::Add breakpoints to the editor for better navigation&lt;br /&gt;
* [[EMU| Eiffel Multi User]]&lt;br /&gt;
::Integrate a repository mechanism&lt;br /&gt;
* [[Trace_points|Adding trace points]]&lt;br /&gt;
:: Output a trace statement indicating a trace point has been hit, without the need to write code or stop execution&lt;br /&gt;
* [[Update_notification|Update notification]]&lt;br /&gt;
::An update notification service to let developers know there is a new version available.&lt;br /&gt;
* [[Configuration_management|Integrated support for configuration management]]&lt;br /&gt;
::Integrate configuration management into EiffelStudio.&lt;br /&gt;
*[[Scintilla_component| Multiplatform editor component: Scintilla]]&lt;br /&gt;
::Encapsulate Scintilla multi-platform editor&lt;br /&gt;
*[[Gecko_component| Multiplatform layout engine component: Mozilla/Gecko]]&lt;br /&gt;
::Encapsulate Gecko html multi-platform engine component&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
== Adding your own project ==&lt;br /&gt;
To add your own project:&lt;br /&gt;
*Make sure it is not redundant with one of the existing projects. If there is any chance of duplication, please contact the project authors first.&lt;br /&gt;
*If you have not already done so, subscribe to the developers' mailing list (see the [[Mailing_Lists|the mailing lists page]]). Post a message to the list explaining your idea and asking for feedback.&lt;br /&gt;
*Also check the [[:Category:User_suggestions|user suggestion pages]]. They often contain a detailed analysis of an envisioned extension, which can help define a project and write the project page.&lt;br /&gt;
*If you decide to go forward, create a page about your project, listing the goals of the project, the rationale (why is this useful?), the issues to be solved, the overall techniques proposed, and a general development strategy. Make sure to include a &amp;quot;project members&amp;quot; section so that people can contact you (for example through your user name on this Wiki).&lt;br /&gt;
*Edit the present page so that it includes a link to your project page; select the appropriate category. Below the link, include (as in current entries) a one- or two-line summary of the project's goal.&lt;br /&gt;
*Do it!&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
* [[:Category:User_suggestions|User suggestions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9329</id>
		<title>Category:Projects</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9329"/>
				<updated>2007-08-09T01:56:37Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Projects to be started or restarted */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contributing to open-source EiffelStudio==&lt;br /&gt;
Now that you have [[Spread_the_word|spread the word]] about Eiffel, you feel the urge to contribute to the product itself. There are many ways to help develop EiffelStudio through projects large and small. Check the list of open projects below; if you see one of interest, contact the project members as listed on the corresponding project page. Don't forget to subscribe to the Eiffel developers list (see the [[Mailing_Lists|the mailing lists page]]) where you can post questions about past, current and possible projects.&lt;br /&gt;
&lt;br /&gt;
If you feel none of the current projects covers your special interest, see below how to [[#Adding_your_own_project|add your own project]].&lt;br /&gt;
&lt;br /&gt;
'''Note to author of projects''' available from this page: please make sure the project description is up to date and in particular that '''the project members are listed''' and reachable; that's the best way to gain more collaborators. If the project is no longer active please move the entry to [[#Projects_to_be_started_or_restarted|projects to be started or restarted]] section so that someone else may pick it up.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Libraries (other than EiffelVision) ==&lt;br /&gt;
&lt;br /&gt;
Eiffel is all about reuse of quality components. The best way to get started as an Eiffel contributor is to extend an existing library, or start a new one to fill a need.&lt;br /&gt;
&lt;br /&gt;
EiffelVision-related developments appear under [[#Graphics_and_user_interface|graphics and user interface]].&lt;br /&gt;
* [[Eiffel_NXT | Eiffel LEGO NXT Commumication Library and EiffelStudio Integration]]&lt;br /&gt;
::Remote communication with LEGO NXT Mindstorms &amp;quot;bricks&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Language and compiler ==&lt;br /&gt;
This is the heart of the Eiffel environment: providing the best possible implementation of the Eiffel language. See the [[:Category:Compiler|compiler pages]] for detailed information about EiffelStudio's compiling techniques including the Melting Ice Technology.&lt;br /&gt;
* [[:Category:ECMA| Full ISO/ECMA support]]&lt;br /&gt;
::The Eiffel standard developed by the ECMA TC39-TG4 committee and approved in 2006 by the International Standards Organization is the definitive reference on the Eiffel language. Work is progressing quickly to include all ECMA-ISO mechanisms into the EiffelStudio compiler; you can help fill the remaining gaps.&lt;br /&gt;
&lt;br /&gt;
== General environment mechanisms ==&lt;br /&gt;
There are always new ideas to improve the user experience with EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
* [[AutoTest_Integration|Integrating AutoTest into EiffelStudio]]&lt;br /&gt;
::[http://se.ethz.ch/research/autotest/ AutoTest] is an automated testing framework taking advantage of Eiffel's Design by Contract to provide far more automation than current solutions such as JUnit. Currently it is a separate tool; ideally it should be part of EiffelStudio.&lt;br /&gt;
* [[Advanced Class and Feature Wizard| Advanced class and feature wizard ]]&lt;br /&gt;
::Improve ease of use, for both novice and advanced users, by refining the tools that create classes and features from templates.&lt;br /&gt;
*[[Editor|Editor]]&lt;br /&gt;
::Improve the EiffelStudio built-in smart editor.&lt;br /&gt;
* [[Refactoring|More refactoring mechanisms]]&lt;br /&gt;
::While Eiffel doesn't need some of the refactoring mechanisms of other languages, the environment could benefit from new refactoring mechanisms in addition to the ones currently supported.&lt;br /&gt;
* [[Eiffel_Mutation_Testing_Tool| Eiffel Mutation Testing Tool]]&lt;br /&gt;
::Build a high-quality mutation testing tool (for evaluating the quality of test strategies, fault detectability and redundancy) taking advantage of Eiffel's mechanisms, especially Design by Contract.&lt;br /&gt;
&lt;br /&gt;
== Graphics and user interface ==&lt;br /&gt;
Make the user interface of EiffelStudio more appealing. Much of the work is to be done in the underlying EiffelVision library, with the added benefit that improvements will be available to user applications as well.&lt;br /&gt;
&lt;br /&gt;
*[[Vision2_Accelerator|EiffelVision Accelerators]]&lt;br /&gt;
::More keyboard accelerators for EiffelVision applications.&lt;br /&gt;
*[[EiffelVision_Unicode|Unicode support for EiffelVision]]&lt;br /&gt;
::EiffelVision support for the character set of arbitrary human languages (see also [[Unicode]]).&lt;br /&gt;
*[[EiffelBuild_Integration|EiffelBuild Integration]]&lt;br /&gt;
::The graphical user interface builder, EiffelBuild, is currently a separate product. Ideally it should be completely integrated with EiffelStudio.&lt;br /&gt;
*[[Cocoa_for_EiffelVision2|Cocoa for EiffelVision]]&lt;br /&gt;
::Provide EiffelVision with a Carbon back-end to make it truly native on the Mac.&lt;br /&gt;
* [[Internationalization|EiffelStudio UI for other languages (internationalization)]]&lt;br /&gt;
::EiffelStudio provides support for changing the user interface messages and dialogs to any language. If you are a fluent speaker of a language other than English, you can help the localization into that language.&lt;br /&gt;
&lt;br /&gt;
== Build infrastructure ==&lt;br /&gt;
Developments in this category are intended to help produce new versions of EiffelStudio faster and better.&lt;br /&gt;
&lt;br /&gt;
*[[Build_tool | Build tool]]&lt;br /&gt;
::Simplify and streamline the EiffelStudio build process.&lt;br /&gt;
*[[Debian_packages | Debian packages]]&lt;br /&gt;
::Include EiffelStudio in standard Debian installation&lt;br /&gt;
*[[OSX_release_infrastructure|OSX release infrastructure]]&lt;br /&gt;
::Script the release of Mac universal binaries for OS X&lt;br /&gt;
&lt;br /&gt;
== Other Stuff ==&lt;br /&gt;
&lt;br /&gt;
* [[ESTeaching | Eiffel Studio for Teaching]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Developing is not everything; the results must also be tested for functionality and performance. The EiffelStudio testing process is completely open and follows advanced software engineering standard. Please visit the special [[:Category:Testing|category devoted to EiffelStudio testing]].&lt;br /&gt;
&lt;br /&gt;
== Projects to be started or restarted ==&lt;br /&gt;
The projects in this list are mere ideas which may not yet have a project page. Some of them were started but not completed. Feel free to take over! If you do so, move the project to one of the above sections (compiler, libraries etc.).&lt;br /&gt;
* [[EiffelStudio_Wish_List|EiffelStudio Wish List]]&lt;br /&gt;
::Not really the description of a single project, but a collection of ideas of cool things to add to EiffelStudio. Feel free to add to it.&lt;br /&gt;
* [[Compilation_Without_Configuration|Compilation without configuration]]&lt;br /&gt;
::A mechanism to compile classes without providing a control file.&lt;br /&gt;
* [[Wish CHARACTER 16|CHARACTER 16]]&lt;br /&gt;
::A request for a new basic type.&lt;br /&gt;
*[[Component_standards| Standards and tools for Eiffel-based components]]&lt;br /&gt;
::Develop a standard for distributing Eiffel components in binary form, and implement it&lt;br /&gt;
* [[Unicode|Unicode support improvement]]&lt;br /&gt;
::Improve support for character sets of arbitrary human languages. See also [[EiffelVision_Unicode|EiffelVision Unicode support]].&lt;br /&gt;
* [[New_ports|Porting to new platforms (OSX Intel, OpenBSD)]]&lt;br /&gt;
::Eiffel is highly portable; a port to a new platform is a moderate effort.&lt;br /&gt;
* [[IDE|IDE improvements]]&lt;br /&gt;
::This should be replaced by more specific goals, see [[#General_environment_mechanisms|general environment mechanisms]] above.&lt;br /&gt;
* [[Extended_static_checking|Extended static checking]]&lt;br /&gt;
::See e.g. ESC-Java, Spec#...&lt;br /&gt;
* [[Code_checking|Direct code checking (red squiggly lines)]]&lt;br /&gt;
::More user-friendly error &amp;quot;non-messages&amp;quot;, following the lead of spelling error reporting in MS Word&lt;br /&gt;
* [[Learning|Integrated learning support]]&lt;br /&gt;
::Support for total beginners&lt;br /&gt;
* [[Macros|Editor macro recording and playback]]&lt;br /&gt;
::Give EiffelStudio, in particular the editor, a macro facility&lt;br /&gt;
* [[Editor_breakpoints|Inserting and navigation of editor breakpoints]]&lt;br /&gt;
::Add breakpoints to the editor for better navigation&lt;br /&gt;
* [[EMU| Eiffel Multi User]]&lt;br /&gt;
::Integrate a repository mechanism&lt;br /&gt;
* [[Trace_points|Adding trace points]]&lt;br /&gt;
:: Output a trace statement indicating a trace point has been hit, without the need to write code or stop execution&lt;br /&gt;
* [[Update_notification|Update notification]]&lt;br /&gt;
::An update notification service to let developers know there is a new version available.&lt;br /&gt;
* [[Configuration_management|Integrated support for configuration management]]&lt;br /&gt;
::Integrate configuration management into EiffelStudio.&lt;br /&gt;
*[[Scintilla_component| Multiplatform editor component: Scintilla]]&lt;br /&gt;
::Encapsulate Scintilla multi-platform editor&lt;br /&gt;
*[[Gecko_component| Multiplatform layout engine component: Mozilla/Gecko]]&lt;br /&gt;
::Encapsulate Gecko html multi-platform engine component&lt;br /&gt;
&lt;br /&gt;
For more ideas see [[:Category:User suggestions|user suggestions]].&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
== Adding your own project ==&lt;br /&gt;
To add your own project:&lt;br /&gt;
*Make sure it is not redundant with one of the existing projects. If there is any chance of duplication, please contact the project authors first.&lt;br /&gt;
*If you have not already done so, subscribe to the developers' mailing list (see the [[Mailing_Lists|the mailing lists page]]). Post a message to the list explaining your idea and asking for feedback.&lt;br /&gt;
*Also check the [[:Category:User_suggestions|user suggestion pages]]. They often contain a detailed analysis of an envisioned extension, which can help define a project and write the project page.&lt;br /&gt;
*If you decide to go forward, create a page about your project, listing the goals of the project, the rationale (why is this useful?), the issues to be solved, the overall techniques proposed, and a general development strategy. Make sure to include a &amp;quot;project members&amp;quot; section so that people can contact you (for example through your user name on this Wiki).&lt;br /&gt;
*Edit the present page so that it includes a link to your project page; select the appropriate category. Below the link, include (as in current entries) a one- or two-line summary of the project's goal.&lt;br /&gt;
*Do it!&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
* [[:Category:User_suggestions|User suggestions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9328</id>
		<title>Category:Projects</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9328"/>
				<updated>2007-08-09T01:55:32Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Projects to be started or restarted */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contributing to open-source EiffelStudio==&lt;br /&gt;
Now that you have [[Spread_the_word|spread the word]] about Eiffel, you feel the urge to contribute to the product itself. There are many ways to help develop EiffelStudio through projects large and small. Check the list of open projects below; if you see one of interest, contact the project members as listed on the corresponding project page. Don't forget to subscribe to the Eiffel developers list (see the [[Mailing_Lists|the mailing lists page]]) where you can post questions about past, current and possible projects.&lt;br /&gt;
&lt;br /&gt;
If you feel none of the current projects covers your special interest, see below how to [[#Adding_your_own_project|add your own project]].&lt;br /&gt;
&lt;br /&gt;
'''Note to author of projects''' available from this page: please make sure the project description is up to date and in particular that '''the project members are listed''' and reachable; that's the best way to gain more collaborators. If the project is no longer active please move the entry to [[#Projects_to_be_started_or_restarted|projects to be started or restarted]] section so that someone else may pick it up.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Libraries (other than EiffelVision) ==&lt;br /&gt;
&lt;br /&gt;
Eiffel is all about reuse of quality components. The best way to get started as an Eiffel contributor is to extend an existing library, or start a new one to fill a need.&lt;br /&gt;
&lt;br /&gt;
EiffelVision-related developments appear under [[#Graphics_and_user_interface|graphics and user interface]].&lt;br /&gt;
* [[Eiffel_NXT | Eiffel LEGO NXT Commumication Library and EiffelStudio Integration]]&lt;br /&gt;
::Remote communication with LEGO NXT Mindstorms &amp;quot;bricks&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Language and compiler ==&lt;br /&gt;
This is the heart of the Eiffel environment: providing the best possible implementation of the Eiffel language. See the [[:Category:Compiler|compiler pages]] for detailed information about EiffelStudio's compiling techniques including the Melting Ice Technology.&lt;br /&gt;
* [[:Category:ECMA| Full ISO/ECMA support]]&lt;br /&gt;
::The Eiffel standard developed by the ECMA TC39-TG4 committee and approved in 2006 by the International Standards Organization is the definitive reference on the Eiffel language. Work is progressing quickly to include all ECMA-ISO mechanisms into the EiffelStudio compiler; you can help fill the remaining gaps.&lt;br /&gt;
&lt;br /&gt;
== General environment mechanisms ==&lt;br /&gt;
There are always new ideas to improve the user experience with EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
* [[AutoTest_Integration|Integrating AutoTest into EiffelStudio]]&lt;br /&gt;
::[http://se.ethz.ch/research/autotest/ AutoTest] is an automated testing framework taking advantage of Eiffel's Design by Contract to provide far more automation than current solutions such as JUnit. Currently it is a separate tool; ideally it should be part of EiffelStudio.&lt;br /&gt;
* [[Advanced Class and Feature Wizard| Advanced class and feature wizard ]]&lt;br /&gt;
::Improve ease of use, for both novice and advanced users, by refining the tools that create classes and features from templates.&lt;br /&gt;
*[[Editor|Editor]]&lt;br /&gt;
::Improve the EiffelStudio built-in smart editor.&lt;br /&gt;
* [[Refactoring|More refactoring mechanisms]]&lt;br /&gt;
::While Eiffel doesn't need some of the refactoring mechanisms of other languages, the environment could benefit from new refactoring mechanisms in addition to the ones currently supported.&lt;br /&gt;
* [[Eiffel_Mutation_Testing_Tool| Eiffel Mutation Testing Tool]]&lt;br /&gt;
::Build a high-quality mutation testing tool (for evaluating the quality of test strategies, fault detectability and redundancy) taking advantage of Eiffel's mechanisms, especially Design by Contract.&lt;br /&gt;
&lt;br /&gt;
== Graphics and user interface ==&lt;br /&gt;
Make the user interface of EiffelStudio more appealing. Much of the work is to be done in the underlying EiffelVision library, with the added benefit that improvements will be available to user applications as well.&lt;br /&gt;
&lt;br /&gt;
*[[Vision2_Accelerator|EiffelVision Accelerators]]&lt;br /&gt;
::More keyboard accelerators for EiffelVision applications.&lt;br /&gt;
*[[EiffelVision_Unicode|Unicode support for EiffelVision]]&lt;br /&gt;
::EiffelVision support for the character set of arbitrary human languages (see also [[Unicode]]).&lt;br /&gt;
*[[EiffelBuild_Integration|EiffelBuild Integration]]&lt;br /&gt;
::The graphical user interface builder, EiffelBuild, is currently a separate product. Ideally it should be completely integrated with EiffelStudio.&lt;br /&gt;
*[[Cocoa_for_EiffelVision2|Cocoa for EiffelVision]]&lt;br /&gt;
::Provide EiffelVision with a Carbon back-end to make it truly native on the Mac.&lt;br /&gt;
* [[Internationalization|EiffelStudio UI for other languages (internationalization)]]&lt;br /&gt;
::EiffelStudio provides support for changing the user interface messages and dialogs to any language. If you are a fluent speaker of a language other than English, you can help the localization into that language.&lt;br /&gt;
&lt;br /&gt;
== Build infrastructure ==&lt;br /&gt;
Developments in this category are intended to help produce new versions of EiffelStudio faster and better.&lt;br /&gt;
&lt;br /&gt;
*[[Build_tool | Build tool]]&lt;br /&gt;
::Simplify and streamline the EiffelStudio build process.&lt;br /&gt;
*[[Debian_packages | Debian packages]]&lt;br /&gt;
::Include EiffelStudio in standard Debian installation&lt;br /&gt;
*[[OSX_release_infrastructure|OSX release infrastructure]]&lt;br /&gt;
::Script the release of Mac universal binaries for OS X&lt;br /&gt;
&lt;br /&gt;
== Other Stuff ==&lt;br /&gt;
&lt;br /&gt;
* [[ESTeaching | Eiffel Studio for Teaching]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Developing is not everything; the results must also be tested for functionality and performance. The EiffelStudio testing process is completely open and follows advanced software engineering standard. Please visit the special [[:Category:Testing|category devoted to EiffelStudio testing]].&lt;br /&gt;
&lt;br /&gt;
== Projects to be started or restarted ==&lt;br /&gt;
The projects in this list are mere ideas which may not yet have a project page. Some of them were started but not completed. Feel free to take over! If you do so, move the project to one of the above sections (compiler, libraries etc.).&lt;br /&gt;
* [[EiffelStudio_Wish_List|EiffelStudio Wish List]]&lt;br /&gt;
::Not really the description of a single project, but a collection of ideas of cool things to add to EiffelStudio. Feel free to add to it.&lt;br /&gt;
* [[Compilation_Without_Configuration|Compilation without configuration]]&lt;br /&gt;
::A mechanism to compile classes without providing a control file.&lt;br /&gt;
* [[Wish CHARACTER 16|CHARACTER 16]]&lt;br /&gt;
*[[Component_standards| Standards and tools for Eiffel-based components]]&lt;br /&gt;
::Develop a standard for distributing Eiffel components in binary form, and implement it&lt;br /&gt;
* [[Unicode|Unicode support improvement]]&lt;br /&gt;
::Improve support for character sets of arbitrary human languages. See also [[EiffelVision_Unicode|EiffelVision Unicode support]].&lt;br /&gt;
* [[New_ports|Porting to new platforms (OSX Intel, OpenBSD)]]&lt;br /&gt;
::Eiffel is highly portable; a port to a new platform is a moderate effort.&lt;br /&gt;
* [[IDE|IDE improvements]]&lt;br /&gt;
::This should be replaced by more specific goals, see [[#General_environment_mechanisms|general environment mechanisms]] above.&lt;br /&gt;
* [[Extended_static_checking|Extended static checking]]&lt;br /&gt;
::See e.g. ESC-Java, Spec#...&lt;br /&gt;
* [[Code_checking|Direct code checking (red squiggly lines)]]&lt;br /&gt;
::More user-friendly error &amp;quot;non-messages&amp;quot;, following the lead of spelling error reporting in MS Word&lt;br /&gt;
* [[Learning|Integrated learning support]]&lt;br /&gt;
::Support for total beginners&lt;br /&gt;
* [[Macros|Editor macro recording and playback]]&lt;br /&gt;
::Give EiffelStudio, in particular the editor, a macro facility&lt;br /&gt;
* [[Editor_breakpoints|Inserting and navigation of editor breakpoints]]&lt;br /&gt;
::Add breakpoints to the editor for better navigation&lt;br /&gt;
* [[EMU| Eiffel Multi User]]&lt;br /&gt;
::Integrate a repository mechanism&lt;br /&gt;
* [[Trace_points|Adding trace points]]&lt;br /&gt;
:: Output a trace statement indicating a trace point has been hit, without the need to write code or stop execution&lt;br /&gt;
* [[Update_notification|Update notification]]&lt;br /&gt;
::An update notification service to let developers know there is a new version available.&lt;br /&gt;
* [[Configuration_management|Integrated support for configuration management]]&lt;br /&gt;
::Integrate configuration management into EiffelStudio.&lt;br /&gt;
*[[Scintilla_component| Multiplatform editor component: Scintilla]]&lt;br /&gt;
::Encapsulate Scintilla multi-platform editor&lt;br /&gt;
*[[Gecko_component| Multiplatform layout engine component: Mozilla/Gecko]]&lt;br /&gt;
::Encapsulate Gecko html multi-platform engine component&lt;br /&gt;
&lt;br /&gt;
For more ideas see [[:Category:User suggestions|user suggestions]].&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
== Adding your own project ==&lt;br /&gt;
To add your own project:&lt;br /&gt;
*Make sure it is not redundant with one of the existing projects. If there is any chance of duplication, please contact the project authors first.&lt;br /&gt;
*If you have not already done so, subscribe to the developers' mailing list (see the [[Mailing_Lists|the mailing lists page]]). Post a message to the list explaining your idea and asking for feedback.&lt;br /&gt;
*Also check the [[:Category:User_suggestions|user suggestion pages]]. They often contain a detailed analysis of an envisioned extension, which can help define a project and write the project page.&lt;br /&gt;
*If you decide to go forward, create a page about your project, listing the goals of the project, the rationale (why is this useful?), the issues to be solved, the overall techniques proposed, and a general development strategy. Make sure to include a &amp;quot;project members&amp;quot; section so that people can contact you (for example through your user name on this Wiki).&lt;br /&gt;
*Edit the present page so that it includes a link to your project page; select the appropriate category. Below the link, include (as in current entries) a one- or two-line summary of the project's goal.&lt;br /&gt;
*Do it!&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
* [[:Category:User_suggestions|User suggestions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9327</id>
		<title>Category:Projects</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9327"/>
				<updated>2007-08-09T01:54:02Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Projects to be started or restarted */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contributing to open-source EiffelStudio==&lt;br /&gt;
Now that you have [[Spread_the_word|spread the word]] about Eiffel, you feel the urge to contribute to the product itself. There are many ways to help develop EiffelStudio through projects large and small. Check the list of open projects below; if you see one of interest, contact the project members as listed on the corresponding project page. Don't forget to subscribe to the Eiffel developers list (see the [[Mailing_Lists|the mailing lists page]]) where you can post questions about past, current and possible projects.&lt;br /&gt;
&lt;br /&gt;
If you feel none of the current projects covers your special interest, see below how to [[#Adding_your_own_project|add your own project]].&lt;br /&gt;
&lt;br /&gt;
'''Note to author of projects''' available from this page: please make sure the project description is up to date and in particular that '''the project members are listed''' and reachable; that's the best way to gain more collaborators. If the project is no longer active please move the entry to [[#Projects_to_be_started_or_restarted|projects to be started or restarted]] section so that someone else may pick it up.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Libraries (other than EiffelVision) ==&lt;br /&gt;
&lt;br /&gt;
Eiffel is all about reuse of quality components. The best way to get started as an Eiffel contributor is to extend an existing library, or start a new one to fill a need.&lt;br /&gt;
&lt;br /&gt;
EiffelVision-related developments appear under [[#Graphics_and_user_interface|graphics and user interface]].&lt;br /&gt;
* [[Eiffel_NXT | Eiffel LEGO NXT Commumication Library and EiffelStudio Integration]]&lt;br /&gt;
::Remote communication with LEGO NXT Mindstorms &amp;quot;bricks&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Language and compiler ==&lt;br /&gt;
This is the heart of the Eiffel environment: providing the best possible implementation of the Eiffel language. See the [[:Category:Compiler|compiler pages]] for detailed information about EiffelStudio's compiling techniques including the Melting Ice Technology.&lt;br /&gt;
* [[:Category:ECMA| Full ISO/ECMA support]]&lt;br /&gt;
::The Eiffel standard developed by the ECMA TC39-TG4 committee and approved in 2006 by the International Standards Organization is the definitive reference on the Eiffel language. Work is progressing quickly to include all ECMA-ISO mechanisms into the EiffelStudio compiler; you can help fill the remaining gaps.&lt;br /&gt;
&lt;br /&gt;
== General environment mechanisms ==&lt;br /&gt;
There are always new ideas to improve the user experience with EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
* [[AutoTest_Integration|Integrating AutoTest into EiffelStudio]]&lt;br /&gt;
::[http://se.ethz.ch/research/autotest/ AutoTest] is an automated testing framework taking advantage of Eiffel's Design by Contract to provide far more automation than current solutions such as JUnit. Currently it is a separate tool; ideally it should be part of EiffelStudio.&lt;br /&gt;
* [[Advanced Class and Feature Wizard| Advanced class and feature wizard ]]&lt;br /&gt;
::Improve ease of use, for both novice and advanced users, by refining the tools that create classes and features from templates.&lt;br /&gt;
*[[Editor|Editor]]&lt;br /&gt;
::Improve the EiffelStudio built-in smart editor.&lt;br /&gt;
* [[Refactoring|More refactoring mechanisms]]&lt;br /&gt;
::While Eiffel doesn't need some of the refactoring mechanisms of other languages, the environment could benefit from new refactoring mechanisms in addition to the ones currently supported.&lt;br /&gt;
* [[Eiffel_Mutation_Testing_Tool| Eiffel Mutation Testing Tool]]&lt;br /&gt;
::Build a high-quality mutation testing tool (for evaluating the quality of test strategies, fault detectability and redundancy) taking advantage of Eiffel's mechanisms, especially Design by Contract.&lt;br /&gt;
&lt;br /&gt;
== Graphics and user interface ==&lt;br /&gt;
Make the user interface of EiffelStudio more appealing. Much of the work is to be done in the underlying EiffelVision library, with the added benefit that improvements will be available to user applications as well.&lt;br /&gt;
&lt;br /&gt;
*[[Vision2_Accelerator|EiffelVision Accelerators]]&lt;br /&gt;
::More keyboard accelerators for EiffelVision applications.&lt;br /&gt;
*[[EiffelVision_Unicode|Unicode support for EiffelVision]]&lt;br /&gt;
::EiffelVision support for the character set of arbitrary human languages (see also [[Unicode]]).&lt;br /&gt;
*[[EiffelBuild_Integration|EiffelBuild Integration]]&lt;br /&gt;
::The graphical user interface builder, EiffelBuild, is currently a separate product. Ideally it should be completely integrated with EiffelStudio.&lt;br /&gt;
*[[Cocoa_for_EiffelVision2|Cocoa for EiffelVision]]&lt;br /&gt;
::Provide EiffelVision with a Carbon back-end to make it truly native on the Mac.&lt;br /&gt;
* [[Internationalization|EiffelStudio UI for other languages (internationalization)]]&lt;br /&gt;
::EiffelStudio provides support for changing the user interface messages and dialogs to any language. If you are a fluent speaker of a language other than English, you can help the localization into that language.&lt;br /&gt;
&lt;br /&gt;
== Build infrastructure ==&lt;br /&gt;
Developments in this category are intended to help produce new versions of EiffelStudio faster and better.&lt;br /&gt;
&lt;br /&gt;
*[[Build_tool | Build tool]]&lt;br /&gt;
::Simplify and streamline the EiffelStudio build process.&lt;br /&gt;
*[[Debian_packages | Debian packages]]&lt;br /&gt;
::Include EiffelStudio in standard Debian installation&lt;br /&gt;
*[[OSX_release_infrastructure|OSX release infrastructure]]&lt;br /&gt;
::Script the release of Mac universal binaries for OS X&lt;br /&gt;
&lt;br /&gt;
== Other Stuff ==&lt;br /&gt;
&lt;br /&gt;
* [[ESTeaching | Eiffel Studio for Teaching]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Developing is not everything; the results must also be tested for functionality and performance. The EiffelStudio testing process is completely open and follows advanced software engineering standard. Please visit the special [[:Category:Testing|category devoted to EiffelStudio testing]].&lt;br /&gt;
&lt;br /&gt;
== Projects to be started or restarted ==&lt;br /&gt;
The projects in this list are mere ideas which may not yet have a project page. Some of them were started but not completed. Feel free to take over! If you do so, move the project to one of the above sections (compiler, libraries etc.).&lt;br /&gt;
* [[EiffelStudio_Wish_List|EiffelStudio Wish List]]&lt;br /&gt;
::Not really the description of a single project, but a collection of ideas of cool things to add to EiffelStudio. Feel free to add to it.&lt;br /&gt;
* [[Compilation_Without_Configuration|Compilation Without Configuration]]&lt;br /&gt;
* [[Wish CHARACTER 16|CHARACTER 16]]&lt;br /&gt;
*[[Component_standards| Standards and tools for Eiffel-based components]]&lt;br /&gt;
::Develop a standard for distributing Eiffel components in binary form, and implement it&lt;br /&gt;
* [[Unicode|Unicode support improvement]]&lt;br /&gt;
::Improve support for character sets of arbitrary human languages. See also [[EiffelVision_Unicode|EiffelVision Unicode support]].&lt;br /&gt;
* [[New_ports|Porting to new platforms (OSX Intel, OpenBSD)]]&lt;br /&gt;
::Eiffel is highly portable; a port to a new platform is a moderate effort.&lt;br /&gt;
* [[IDE|IDE improvements]]&lt;br /&gt;
::This should be replaced by more specific goals, see [[#General_environment_mechanisms|general environment mechanisms]] above.&lt;br /&gt;
* [[Extended_static_checking|Extended static checking]]&lt;br /&gt;
::See e.g. ESC-Java, Spec#...&lt;br /&gt;
* [[Code_checking|Direct code checking (red squiggly lines)]]&lt;br /&gt;
::More user-friendly error &amp;quot;non-messages&amp;quot;, following the lead of spelling error reporting in MS Word&lt;br /&gt;
* [[Learning|Integrated learning support]]&lt;br /&gt;
::Support for total beginners&lt;br /&gt;
* [[Macros|Editor macro recording and playback]]&lt;br /&gt;
::Give EiffelStudio, in particular the editor, a macro facility&lt;br /&gt;
* [[Editor_breakpoints|Inserting and navigation of editor breakpoints]]&lt;br /&gt;
::Add breakpoints to the editor for better navigation&lt;br /&gt;
* [[EMU| Eiffel Multi User]]&lt;br /&gt;
::Integrate a repository mechanism&lt;br /&gt;
* [[Trace_points|Adding trace points]]&lt;br /&gt;
:: Output a trace statement indicating a trace point has been hit, without the need to write code or stop execution&lt;br /&gt;
* [[Update_notification|Update notification]]&lt;br /&gt;
::An update notification service to let developers know there is a new version available.&lt;br /&gt;
* [[Configuration_management|Integrated support for configuration management]]&lt;br /&gt;
::Integrate configuration management into EiffelStudio.&lt;br /&gt;
*[[Scintilla_component| Multiplatform editor component: Scintilla]]&lt;br /&gt;
::Encapsulate Scintilla multi-platform editor&lt;br /&gt;
*[[Gecko_component| Multiplatform layout engine component: Mozilla/Gecko]]&lt;br /&gt;
::Encapsulate Gecko html multi-platform engine component&lt;br /&gt;
&lt;br /&gt;
For more ideas see [[:Category:User suggestions|user suggestions]].&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
== Adding your own project ==&lt;br /&gt;
To add your own project:&lt;br /&gt;
*Make sure it is not redundant with one of the existing projects. If there is any chance of duplication, please contact the project authors first.&lt;br /&gt;
*If you have not already done so, subscribe to the developers' mailing list (see the [[Mailing_Lists|the mailing lists page]]). Post a message to the list explaining your idea and asking for feedback.&lt;br /&gt;
*Also check the [[:Category:User_suggestions|user suggestion pages]]. They often contain a detailed analysis of an envisioned extension, which can help define a project and write the project page.&lt;br /&gt;
*If you decide to go forward, create a page about your project, listing the goals of the project, the rationale (why is this useful?), the issues to be solved, the overall techniques proposed, and a general development strategy. Make sure to include a &amp;quot;project members&amp;quot; section so that people can contact you (for example through your user name on this Wiki).&lt;br /&gt;
*Edit the present page so that it includes a link to your project page; select the appropriate category. Below the link, include (as in current entries) a one- or two-line summary of the project's goal.&lt;br /&gt;
*Do it!&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
* [[:Category:User_suggestions|User suggestions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=EiffelStudio_Wish_List&amp;diff=9326</id>
		<title>EiffelStudio Wish List</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=EiffelStudio_Wish_List&amp;diff=9326"/>
				<updated>2007-08-09T01:53:11Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
Welcome to the Eiffel/EiffelStudio Wish List. This is the place where you, the community, get a chance to tell us what you think is important to include in the future versions of the Eiffel compiler and EiffelStudio IDE.&lt;br /&gt;
&lt;br /&gt;
Please use this list responsibly and try to correctly categorize your wishes. A brief description may help us evaluate your requirements but please be brief.&lt;br /&gt;
&lt;br /&gt;
Our stock pile of genie snared, dusty gold lamps is running low for our next release ([[EiffelStudio Releases]]) but we'll be sure to scour the lands for more.&lt;br /&gt;
&lt;br /&gt;
== Compiler ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!ID !! Short Summary !! Pros !! Cons !! More info&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Source &amp;amp; Generated Files in an RDBMS and (optionally) Compile directly from database &lt;br /&gt;
| Use an RDBMS to store all sources,libraries and generated files instead of a filesystem.  Optionally directly compile from the database. Repository can be shared amongst multiple users &lt;br /&gt;
|| Pro's:&lt;br /&gt;
* Easy queriable&lt;br /&gt;
* Much more appropriate to use a database to store relations (dependencies) between objects.&lt;br /&gt;
* Easier for using a shared repository amongst multiple users&lt;br /&gt;
||&lt;br /&gt;
* Sophisticated collaboration tools already exist for sharing project source e.g. SVN, CVS&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Shared EIFGEN&lt;br /&gt;
| Allow sharing of EIFGENs (in read-only mode)|| || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Enum&lt;br /&gt;
| A way to author Enum-like class for typed options or flags. Currently using INTEGER and a bag of analogous constants doesn't make Eiffel &amp;quot;elegant&amp;quot;. || ||&lt;br /&gt;
* The best practice way to get a value that only needs to be defined once is by using the &amp;quot;once&amp;quot; keyword in combination with a feature.&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Decimal&lt;br /&gt;
|Addition of a decimal type / REAL_128 for 28 digit precision -  || MA_DECIMAL is not efficient || MA_DECIMAL already covers this||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!User types&lt;br /&gt;
|I want to be able to define types .e.g. a decimal type as mentioned above. I know all built in types can be defined from scratch, except I a way to initialise from literals. So we need a way to define them as well. Suggest a new defered class with create methods from_literal( s:STRING), and queries is_interger_ok:BOOLIAN, is_real_ok:BOOLIAN, is_arbitary_string_ok:BOOLIAN, is_type_string_ok:BOOLIAN (we would define a new type of string just for this). The compiler when generating optimised code will have to compile the new types and dynamicaly bind to them to create an object that can be embeded into the code. I beleave this would let us write code like: x:DECIMAL; x=1.23 (without a conversion from REAL (float base2)) || || ||   &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! CHARACTER_16&lt;br /&gt;
| CHARACTER_16 type || Smaller footprint than CHARACTER_32, UTF-16 is the default internal text representation for Windows/.Net/OS X/Java so conversion from CHARACTER_32 is costly, particular when dealing with large amounts of text || Please No! CHARACTER_32 covers this already. And UTF-8 is more space-efficient than UTF-16, which is an abomination. What will happen if you have a character from above the BMP? You will then have two CHARACTER_16s in the string for one real character - neither of which is a valid character - then `count' and `item' are all wrong. If you must have UTF-16 STRINGs, then let item return a CHARACTER_32. But note that having a UTF_16 STRING in itself won't eliminate all conversion costs - there is still the endian problem - this could be tackled by each individual UTF-16 STRING knowing whether it is UTF-16BE or UTF-16LE, but you may still need to convert. Comparing two such strings with different endianness would then have to be done using the codes - in what way is that going to be more efficient than using UTF-32? See [[Wish_CHARACTER_16]] for more details on why it is not ok.||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! 7-bit ASCII&lt;br /&gt;
| 7-bit (US) ASCII_CHARACTER and ASCII_STRING which extends upon an ARRAY [ASCII_CHARACTER] with values of 0-127, removing the need for UTF8 conversion/checking when passing basic char values to C (gtk interfacing for example when connecting to signals) || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! MUTEX&lt;br /&gt;
| Make MUTEX recursive on non-windows platforms or at least provide a mutex and separate recursive mutex for all platforms. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Multiple Precompiled.&lt;br /&gt;
| Ability for multiple precompiles in a system. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Ability to compile/debug for both 32/64 bit systems via project settings || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Ability for for a fully optimal finalization for systems marked as 'client only', so that unused variables will not get generated in the finalized C Code. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Ability for Eiffel Studio to cross compile || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Ability to be able to control all user settable options in studio without having to resort to manually editing files, this is mainly for C compilation options || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Have a smarter C code generation system that can launch a C compilation of any module as soon as the C code is generated, this way we can also be smarter when monitoring C compilation progress || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Ability for ANY to generate a unique id for each object for referencing and hashability || ||&lt;br /&gt;
Objects that are hashable should implement HASHABLE&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| With hashable ability of ANY, change object graph traversal for serialization so that multiple threads can serialize at the same time without having to wait linearly (lock_marking/unlock_marking). This may also require a reworking of the mismatch corrector facility as this does not appear to be thread-safe when magically called by the run-time|| || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Ability for Studio to work and compile with Cygwin || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Ability to get a list of file dependencies in the form of a file listing to stdout. This list would contain a) all .e files used in the system, b) all .lib/.so files explicitly listed in the ECF/Ace file and c) all .h files referenced in external features (ideally that have not been subjected to dead code removal). Preferably, this feature should be able to be used without performing a full compilation (level 4?). || || ||&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== .NET ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!ID !! Short Summary !! Pros !! Cons !! More info&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Consume .NET generics. Not being able to use them is becoming harder.&amp;lt;br/&amp;gt;We cannot write Atlas (AJAX) based web applications because of it. The Visual Studio SDK, used by EiffelEnvision, is increasing it's use of generics and preventing use from supporting some features. The people who want to use the .NET framework classes instead of the Eiffel ones cannot use generics and have to resort to using the non-generic versions of list, which bulks implementation and leads ambiguity. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Emit .NET generics types for Eiffel generic classes. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Allow direct access to member of TYPED_POINTER [xxx] item out/ref routine arguments. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Allow direct setting of TYPED_POINTER [xxx] item for out/ref routine arguments. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Optimized ''call.do_nothing'' as a IL pop instruction to removed returned value. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Custom attributes on routine arguments and Result. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| An ability to call a parent .NET constructor from an Eiffel creation routine. || || ||&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IDE ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!ID !! Short Summary !! Pros !! Cons !! More info&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Give the user control over which classes will be compiled over the GUI (say: click on grey class and it becomes yellow and will be compiled always from now on, even though it may not be used at all. This is good for development of classes which are not added over GUI in ES.) || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| While searching for word or after a double click on a word, it would be nice if all words would be highlighted in pastel color style. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Allow arguments and locals of a routine to be pickable so that they can be renamed via the refactoring tool. || || || In the case of arguments it might be interesting to allow&lt;br /&gt;
renaming in ancestor and descendant versions of the feature.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| It's a pain to pick`n`drop huge features source code into the context window for setting break point. What about the following: Pick on the right side of the class text picks the feature as well? (Pick on the left side of the class text picks already the feature call). || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Make editor and grid more theme compliant in terms of color and font || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Remove all use of EV_TREE and EV_MULTI_COLUMN_LIST from studio so that all list widgets are drawn by vision2, this will make porting easier, we can also use the grid items to be able to change names of clusters, classes and features inline via the tree items. || || To which other platform would it make porting easier? For the Mac OS port that's completely unnecessary I think. Also it would make the tree view look uglier (not as other tree views etc on the same platform) and inline editing can be made accessible in other ways (at least in OS X that's quite easy) ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Extended Static Checking&lt;br /&gt;
| Extended static checking integrated into the IDE. || Provides more immediate feedback on potential contract violations. || ||See, for example, [http://secure.ucd.ie/products/opensource/ESCJava2/ ESC/Java2] and the associated Eclipse plugin, or Spec# integration into VisualStudio [http://download.microsoft.com/download/9/4/1/94138e2a-d9dc-435a-9240-bcd985bf5bd7/MikeBarnett-SpecSharp.wmv]. Eiffel has most of the necessary language constructs already and doesn't require annotations. See also [http://fm06.mcmaster.ca/es-verify.pdf ES-Verify]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Rearrange widgets of ''search tool'' so that they use free space on the right. Currently it uses too much vertical space. || || I don't see free space on the right. Has this already been done? ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Add an option to show the target name before the current edited class in the application title bar. When multiple projects are open, it's not possible to identify an EStudio session based on the title that appears on the tray bar|| || |||&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
!Step-by-step debugging&lt;br /&gt;
| It would be useful in step-by-step debugging to be able to follow the execution cursor when checking the invariants as it is done for the preconditions and postconditions of a routine.  This way, it would be easy to step into the right features and skip some (or all) of those present in the invariant. || || |||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!Integrated Designer&lt;br /&gt;
| It would be nice to have an integrated visual designer so that building business applications where visual design is very import can be created more easily. || || || &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Drag-n-Drop&lt;br /&gt;
| Allow the alternative of using drag and drop everywhere instead of pick and drop. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Code annotation tags support&lt;br /&gt;
| Log the tags contained in comments.  For example, when using Eclipse, it is useful to leave TODO comments behind to ensure that a part that is not implemented will be eventually.  When the time comes to clean up the TODO tags, a tool can list them all along with the descriptions and the locations of the comments.  || || || Similar approach can be applied to indexing/note tags.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Token locations in flat-view&lt;br /&gt;
| When debugging, I always look at flat view of a feature, then I found something that I want to change, so I have to go back to basic view. Buf often, I need to search the basic view to relocate the code. It would be nice if I can somehow pick a location in flat view and drop it into the right location in basic view. &lt;br /&gt;
|| || ||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! External commands in context menu&lt;br /&gt;
| Suppose there is an external command &amp;quot;tortoisediff $file_name&amp;quot; to show diff of a file from its working base, then when a context menu for a class is displayed, this command will be in it, and before launch this command, the  $file_name placeholder will be replaced by the actual file name. Also, some special placeholders starting with # will be recognized. They represent open arguments. So before launching the command, a dialog will prompt out asking for those values. &lt;br /&gt;
|Easy to use, no need to go to Console tool anymore. || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Outline&lt;br /&gt;
| When a mouse pointer is over a class name, a feature name, etc., it would be nice to see in a pop-up tooltip some basic information about it like description, header comment, signature, etc. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Current value of a variable&lt;br /&gt;
| When a mouse pointer is over a variable in debug mode if would be nice to see in a pop-up tooltip its value. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Immediate syntax checks&lt;br /&gt;
| It would be nice if editor can detect syntax errors and warnings and highlight them inline as well as outline (using a vertical bar, an icon of a particular color, etc.). || || || Syntax warnings include obsolete language constructs as well as unused code (such as unused local variables). For them it should be possible to suggest a replacement, so that manual editing is not required.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Refactoring: unused inheritance&lt;br /&gt;
| A new tool can be introduced to check if a given inheritance path is actually used in a project and if not, would suggest to remove it. || || || It would be great to be able to run such tools in background, so that the checks are invisible to the user that only gets a warning and a suggestion to remove the unused parent clause. This way some other similar tools can be added.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Refactoring: unused arguments&lt;br /&gt;
| A new tool can be introduced to check if all arguments of a feature are used (including all versions of the feature) and would suggest to remove those that are never used. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Refactoring: more interactive renaming&lt;br /&gt;
| Renaming tool can be changed to prompt for renaming in comments and strings (one by one) rather than to apply renaming for all of them silently. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Improve search tool&lt;br /&gt;
| Progress of search operation could be shown when performing search on a project and would ensure that the IDE remains responsible at that time. It should be also possible for a user to break the search operation. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Automatic source format&lt;br /&gt;
| There could be an option to tell the editor to reformat the code according to user preference settings.  Those can address the multi-line expression format and the exceptions to the comb format (like for a class' name), for example.  The reformat feature can be made to affect only the display so that different project members can view the source as it pleases them in an uniform way. || || ||&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Language ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!ID !! Short Summary !! Pros !! Cons !! More info&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Allow to use '''?''' in assigner declaration For instance &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 foo: STRING assign set_key_value (&amp;quot;foo&amp;quot;, ?) is&lt;br /&gt;
     do&lt;br /&gt;
         Result := values.item (&amp;quot;foo&amp;quot;)&lt;br /&gt;
     end&lt;br /&gt;
 &lt;br /&gt;
 values: HASH_TABLE [STRING, STRING]&lt;br /&gt;
 &lt;br /&gt;
 set_key_value (k: STRING; v: STRING) is&lt;br /&gt;
     do&lt;br /&gt;
         values.force (v,k)&lt;br /&gt;
     end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!ID !! Short Summary !! Pros !! Cons !! More info&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Make every effective EiffelBase class implement default_create so that it can be used to instantiate any class with default values. || || ||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Provide a WEAK_REFERENCE [G] class to abstract away the implementation details currently provided by IDENTIFIED for implementing weak references. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Locale support to determine what the default charset is (or whether it is UTF-8 or not) || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Build an object storing database with built-in record locking so that multiple systems can have access to the same 'objects' || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Make base.ecf rely on smaller ecf's (kernel.ecf, structures.ecf, support.ecf) so that these smaller dependancies can be compiled in only if needs be.  It would be good if ANY could be optimized so that it doesn't have any references to io (or print) or mismatch information (only needed when storable is employed) as these bring in a lot of overhead when compiling a simple system.  The smaller ecf could also link in with the object files of the runtime to avoid linking against a monolithic runtime (cecil, storable, etc) when you only want to print (&amp;quot;Hello World&amp;quot;) || ||&lt;br /&gt;
* Unused features are already eliminated in the dead code removal step when finalizing a system.&lt;br /&gt;
 ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! XXX&lt;br /&gt;
| Put more of the run-time code in to inline C code reducing the size of the executable if you are not using certain features, ideally the linked against runtime should only contain the core functionality needed to create objects, perform simple operations and garbage collect, any other features can be brought in on a class/library/configuration level. || || ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! Additional Classes&lt;br /&gt;
| It would be nice to have classes in the basic eiffel libraries for handling serial port communication, zip compression, encryption, smtp, pop3, ftp, http, TCP/IP, usb, pdf generation, print engine for report writing.  I am sure their are others but the basic idea is that it would be nice to have a complete multi-OS tool for developing business applications with quick access to classes needed.  Presently you have to search the internet to find some of these classes.  It would be nicer to have a more complete library available from within the IDE. || || ||&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Compilation_Without_Configuration&amp;diff=9325</id>
		<title>Compilation Without Configuration</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Compilation_Without_Configuration&amp;diff=9325"/>
				<updated>2007-08-09T01:52:10Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Projects]]&lt;br /&gt;
{{NoProjectMembers}}&lt;br /&gt;
=== Preamble ===&lt;br /&gt;
&lt;br /&gt;
It would be nice if we could provide a mechanism for compiling a system without first providing a configuration file to the compiler.  This would be useful for compiling simple samples such as 'Hello world!' without having to supply a configuration file.  Not only would this remove the need to keep the configuration file always up to date with the latest compiler (LACE -&amp;gt; ECF) but it would make samples easier to write as you don't have to explain the configuration process or the wizard process. All that needs to be done is to copy and paste the class file in to a text file and compile the text file.  Or you could even write a simple example and compile it totally from scratch via the command line, something which is extremely difficult to do now without the use of EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
=== Potential Solutions ===&lt;br /&gt;
&lt;br /&gt;
* The default way: ec -root_class my_root_class.e  'my_root_class.e' would have either a make or default_create routine defined in it.  The compiler would then compile the system against either a precompiled base or compile against base if a precompile is not available.  The compiler would look in $ISE_LIBRARY/library/base to find the configuration file.  The compiler would use the directory (and possibly all child directories) of the root class as the root cluster.&lt;br /&gt;
&lt;br /&gt;
* The indexing clause way: Starts off by compiling the ec my_root_class.e but looks for the libraries based on a tag in the indexing clause (such as libraries: &amp;quot;base, vision2, thread&amp;quot;), if would also look in the $ISE_LIBRARY path to find the associating libraries, which will be associated via name rather than ecf path.  This would require initial lexing of class files (or just the root class) to retrieve the libraries: indexing clause.&lt;br /&gt;
&lt;br /&gt;
* The command line switch way: The user would have to supply the libraries needed as a command line switch (ec -libraries base vision2 -root_class.e)&lt;br /&gt;
&lt;br /&gt;
=== Things to consider ===&lt;br /&gt;
&lt;br /&gt;
* Do we keep the compilation output or default to a finalization, clean up and then copy the generated binary to the location of the root class? We could also have a -keep_object_code which would't delete the EIFGEN output so that it could be incrementally compiled.&lt;br /&gt;
&lt;br /&gt;
* Should EiffelStudio compile a system from scratch if we double click on a class by using this default option?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is not intended to be a do all mechanism, just a simple way to compile an Eiffel system with just a class file, as is possible in other languages.&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9324</id>
		<title>Category:Projects</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9324"/>
				<updated>2007-08-09T01:51:21Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Projects to be started or restarted */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contributing to open-source EiffelStudio==&lt;br /&gt;
Now that you have [[Spread_the_word|spread the word]] about Eiffel, you feel the urge to contribute to the product itself. There are many ways to help develop EiffelStudio through projects large and small. Check the list of open projects below; if you see one of interest, contact the project members as listed on the corresponding project page. Don't forget to subscribe to the Eiffel developers list (see the [[Mailing_Lists|the mailing lists page]]) where you can post questions about past, current and possible projects.&lt;br /&gt;
&lt;br /&gt;
If you feel none of the current projects covers your special interest, see below how to [[#Adding_your_own_project|add your own project]].&lt;br /&gt;
&lt;br /&gt;
'''Note to author of projects''' available from this page: please make sure the project description is up to date and in particular that '''the project members are listed''' and reachable; that's the best way to gain more collaborators. If the project is no longer active please move the entry to [[#Projects_to_be_started_or_restarted|projects to be started or restarted]] section so that someone else may pick it up.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Libraries (other than EiffelVision) ==&lt;br /&gt;
&lt;br /&gt;
Eiffel is all about reuse of quality components. The best way to get started as an Eiffel contributor is to extend an existing library, or start a new one to fill a need.&lt;br /&gt;
&lt;br /&gt;
EiffelVision-related developments appear under [[#Graphics_and_user_interface|graphics and user interface]].&lt;br /&gt;
* [[Eiffel_NXT | Eiffel LEGO NXT Commumication Library and EiffelStudio Integration]]&lt;br /&gt;
::Remote communication with LEGO NXT Mindstorms &amp;quot;bricks&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Language and compiler ==&lt;br /&gt;
This is the heart of the Eiffel environment: providing the best possible implementation of the Eiffel language. See the [[:Category:Compiler|compiler pages]] for detailed information about EiffelStudio's compiling techniques including the Melting Ice Technology.&lt;br /&gt;
* [[:Category:ECMA| Full ISO/ECMA support]]&lt;br /&gt;
::The Eiffel standard developed by the ECMA TC39-TG4 committee and approved in 2006 by the International Standards Organization is the definitive reference on the Eiffel language. Work is progressing quickly to include all ECMA-ISO mechanisms into the EiffelStudio compiler; you can help fill the remaining gaps.&lt;br /&gt;
&lt;br /&gt;
== General environment mechanisms ==&lt;br /&gt;
There are always new ideas to improve the user experience with EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
* [[AutoTest_Integration|Integrating AutoTest into EiffelStudio]]&lt;br /&gt;
::[http://se.ethz.ch/research/autotest/ AutoTest] is an automated testing framework taking advantage of Eiffel's Design by Contract to provide far more automation than current solutions such as JUnit. Currently it is a separate tool; ideally it should be part of EiffelStudio.&lt;br /&gt;
* [[Advanced Class and Feature Wizard| Advanced class and feature wizard ]]&lt;br /&gt;
::Improve ease of use, for both novice and advanced users, by refining the tools that create classes and features from templates.&lt;br /&gt;
*[[Editor|Editor]]&lt;br /&gt;
::Improve the EiffelStudio built-in smart editor.&lt;br /&gt;
* [[Refactoring|More refactoring mechanisms]]&lt;br /&gt;
::While Eiffel doesn't need some of the refactoring mechanisms of other languages, the environment could benefit from new refactoring mechanisms in addition to the ones currently supported.&lt;br /&gt;
* [[Eiffel_Mutation_Testing_Tool| Eiffel Mutation Testing Tool]]&lt;br /&gt;
::Build a high-quality mutation testing tool (for evaluating the quality of test strategies, fault detectability and redundancy) taking advantage of Eiffel's mechanisms, especially Design by Contract.&lt;br /&gt;
&lt;br /&gt;
== Graphics and user interface ==&lt;br /&gt;
Make the user interface of EiffelStudio more appealing. Much of the work is to be done in the underlying EiffelVision library, with the added benefit that improvements will be available to user applications as well.&lt;br /&gt;
&lt;br /&gt;
*[[Vision2_Accelerator|EiffelVision Accelerators]]&lt;br /&gt;
::More keyboard accelerators for EiffelVision applications.&lt;br /&gt;
*[[EiffelVision_Unicode|Unicode support for EiffelVision]]&lt;br /&gt;
::EiffelVision support for the character set of arbitrary human languages (see also [[Unicode]]).&lt;br /&gt;
*[[EiffelBuild_Integration|EiffelBuild Integration]]&lt;br /&gt;
::The graphical user interface builder, EiffelBuild, is currently a separate product. Ideally it should be completely integrated with EiffelStudio.&lt;br /&gt;
*[[Cocoa_for_EiffelVision2|Cocoa for EiffelVision]]&lt;br /&gt;
::Provide EiffelVision with a Carbon back-end to make it truly native on the Mac.&lt;br /&gt;
* [[Internationalization|EiffelStudio UI for other languages (internationalization)]]&lt;br /&gt;
::EiffelStudio provides support for changing the user interface messages and dialogs to any language. If you are a fluent speaker of a language other than English, you can help the localization into that language.&lt;br /&gt;
&lt;br /&gt;
== Build infrastructure ==&lt;br /&gt;
Developments in this category are intended to help produce new versions of EiffelStudio faster and better.&lt;br /&gt;
&lt;br /&gt;
*[[Build_tool | Build tool]]&lt;br /&gt;
::Simplify and streamline the EiffelStudio build process.&lt;br /&gt;
*[[Debian_packages | Debian packages]]&lt;br /&gt;
::Include EiffelStudio in standard Debian installation&lt;br /&gt;
*[[OSX_release_infrastructure|OSX release infrastructure]]&lt;br /&gt;
::Script the release of Mac universal binaries for OS X&lt;br /&gt;
&lt;br /&gt;
== Other Stuff ==&lt;br /&gt;
&lt;br /&gt;
* [[ESTeaching | Eiffel Studio for Teaching]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Developing is not everything; the results must also be tested for functionality and performance. The EiffelStudio testing process is completely open and follows advanced software engineering standard. Please visit the special [[:Category:Testing|category devoted to EiffelStudio testing]].&lt;br /&gt;
&lt;br /&gt;
== Projects to be started or restarted ==&lt;br /&gt;
The projects in this list are mere ideas which may not yet have a project page. Some of them were started but not completed. Feel free to take over! If you do so, move the project to one of the above sections (compiler, libraries etc.).&lt;br /&gt;
* [[EiffelStudio_Wish_List|EiffelStudio Wish List]]&lt;br /&gt;
::Not really the description of a single project, but a collection of ideas of cool things to add to EiffelStudio&lt;br /&gt;
* [[Compilation_Without_Configuration|Compilation Without Configuration]]&lt;br /&gt;
* [[Wish CHARACTER 16|CHARACTER 16]]&lt;br /&gt;
*[[Component_standards| Standards and tools for Eiffel-based components]]&lt;br /&gt;
::Develop a standard for distributing Eiffel components in binary form, and implement it&lt;br /&gt;
* [[Unicode|Unicode support improvement]]&lt;br /&gt;
::Improve support for character sets of arbitrary human languages. See also [[EiffelVision_Unicode|EiffelVision Unicode support]].&lt;br /&gt;
* [[New_ports|Porting to new platforms (OSX Intel, OpenBSD)]]&lt;br /&gt;
::Eiffel is highly portable; a port to a new platform is a moderate effort.&lt;br /&gt;
* [[IDE|IDE improvements]]&lt;br /&gt;
::This should be replaced by more specific goals, see [[#General_environment_mechanisms|general environment mechanisms]] above.&lt;br /&gt;
* [[Extended_static_checking|Extended static checking]]&lt;br /&gt;
::See e.g. ESC-Java, Spec#...&lt;br /&gt;
* [[Code_checking|Direct code checking (red squiggly lines)]]&lt;br /&gt;
::More user-friendly error &amp;quot;non-messages&amp;quot;, following the lead of spelling error reporting in MS Word&lt;br /&gt;
* [[Learning|Integrated learning support]]&lt;br /&gt;
::Support for total beginners&lt;br /&gt;
* [[Macros|Editor macro recording and playback]]&lt;br /&gt;
::Give EiffelStudio, in particular the editor, a macro facility&lt;br /&gt;
* [[Editor_breakpoints|Inserting and navigation of editor breakpoints]]&lt;br /&gt;
::Add breakpoints to the editor for better navigation&lt;br /&gt;
* [[EMU| Eiffel Multi User]]&lt;br /&gt;
::Integrate a repository mechanism&lt;br /&gt;
* [[Trace_points|Adding trace points]]&lt;br /&gt;
:: Output a trace statement indicating a trace point has been hit, without the need to write code or stop execution&lt;br /&gt;
* [[Update_notification|Update notification]]&lt;br /&gt;
::An update notification service to let developers know there is a new version available.&lt;br /&gt;
* [[Configuration_management|Integrated support for configuration management]]&lt;br /&gt;
::Integrate configuration management into EiffelStudio.&lt;br /&gt;
*[[Scintilla_component| Multiplatform editor component: Scintilla]]&lt;br /&gt;
::Encapsulate Scintilla multi-platform editor&lt;br /&gt;
*[[Gecko_component| Multiplatform layout engine component: Mozilla/Gecko]]&lt;br /&gt;
::Encapsulate Gecko html multi-platform engine component&lt;br /&gt;
&lt;br /&gt;
For more ideas see [[:Category:User suggestions|user suggestions]].&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
== Adding your own project ==&lt;br /&gt;
To add your own project:&lt;br /&gt;
*Make sure it is not redundant with one of the existing projects. If there is any chance of duplication, please contact the project authors first.&lt;br /&gt;
*If you have not already done so, subscribe to the developers' mailing list (see the [[Mailing_Lists|the mailing lists page]]). Post a message to the list explaining your idea and asking for feedback.&lt;br /&gt;
*Also check the [[:Category:User_suggestions|user suggestion pages]]. They often contain a detailed analysis of an envisioned extension, which can help define a project and write the project page.&lt;br /&gt;
*If you decide to go forward, create a page about your project, listing the goals of the project, the rationale (why is this useful?), the issues to be solved, the overall techniques proposed, and a general development strategy. Make sure to include a &amp;quot;project members&amp;quot; section so that people can contact you (for example through your user name on this Wiki).&lt;br /&gt;
*Edit the present page so that it includes a link to your project page; select the appropriate category. Below the link, include (as in current entries) a one- or two-line summary of the project's goal.&lt;br /&gt;
*Do it!&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
* [[:Category:User_suggestions|User suggestions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9323</id>
		<title>Category:Projects</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9323"/>
				<updated>2007-08-09T01:47:02Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Adding your own project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contributing to open-source EiffelStudio==&lt;br /&gt;
Now that you have [[Spread_the_word|spread the word]] about Eiffel, you feel the urge to contribute to the product itself. There are many ways to help develop EiffelStudio through projects large and small. Check the list of open projects below; if you see one of interest, contact the project members as listed on the corresponding project page. Don't forget to subscribe to the Eiffel developers list (see the [[Mailing_Lists|the mailing lists page]]) where you can post questions about past, current and possible projects.&lt;br /&gt;
&lt;br /&gt;
If you feel none of the current projects covers your special interest, see below how to [[#Adding_your_own_project|add your own project]].&lt;br /&gt;
&lt;br /&gt;
'''Note to author of projects''' available from this page: please make sure the project description is up to date and in particular that '''the project members are listed''' and reachable; that's the best way to gain more collaborators. If the project is no longer active please move the entry to [[#Projects_to_be_started_or_restarted|projects to be started or restarted]] section so that someone else may pick it up.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Libraries (other than EiffelVision) ==&lt;br /&gt;
&lt;br /&gt;
Eiffel is all about reuse of quality components. The best way to get started as an Eiffel contributor is to extend an existing library, or start a new one to fill a need.&lt;br /&gt;
&lt;br /&gt;
EiffelVision-related developments appear under [[#Graphics_and_user_interface|graphics and user interface]].&lt;br /&gt;
* [[Eiffel_NXT | Eiffel LEGO NXT Commumication Library and EiffelStudio Integration]]&lt;br /&gt;
::Remote communication with LEGO NXT Mindstorms &amp;quot;bricks&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Language and compiler ==&lt;br /&gt;
This is the heart of the Eiffel environment: providing the best possible implementation of the Eiffel language. See the [[:Category:Compiler|compiler pages]] for detailed information about EiffelStudio's compiling techniques including the Melting Ice Technology.&lt;br /&gt;
* [[:Category:ECMA| Full ISO/ECMA support]]&lt;br /&gt;
::The Eiffel standard developed by the ECMA TC39-TG4 committee and approved in 2006 by the International Standards Organization is the definitive reference on the Eiffel language. Work is progressing quickly to include all ECMA-ISO mechanisms into the EiffelStudio compiler; you can help fill the remaining gaps.&lt;br /&gt;
&lt;br /&gt;
== General environment mechanisms ==&lt;br /&gt;
There are always new ideas to improve the user experience with EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
* [[AutoTest_Integration|Integrating AutoTest into EiffelStudio]]&lt;br /&gt;
::[http://se.ethz.ch/research/autotest/ AutoTest] is an automated testing framework taking advantage of Eiffel's Design by Contract to provide far more automation than current solutions such as JUnit. Currently it is a separate tool; ideally it should be part of EiffelStudio.&lt;br /&gt;
* [[Advanced Class and Feature Wizard| Advanced class and feature wizard ]]&lt;br /&gt;
::Improve ease of use, for both novice and advanced users, by refining the tools that create classes and features from templates.&lt;br /&gt;
*[[Editor|Editor]]&lt;br /&gt;
::Improve the EiffelStudio built-in smart editor.&lt;br /&gt;
* [[Refactoring|More refactoring mechanisms]]&lt;br /&gt;
::While Eiffel doesn't need some of the refactoring mechanisms of other languages, the environment could benefit from new refactoring mechanisms in addition to the ones currently supported.&lt;br /&gt;
* [[Eiffel_Mutation_Testing_Tool| Eiffel Mutation Testing Tool]]&lt;br /&gt;
::Build a high-quality mutation testing tool (for evaluating the quality of test strategies, fault detectability and redundancy) taking advantage of Eiffel's mechanisms, especially Design by Contract.&lt;br /&gt;
&lt;br /&gt;
== Graphics and user interface ==&lt;br /&gt;
Make the user interface of EiffelStudio more appealing. Much of the work is to be done in the underlying EiffelVision library, with the added benefit that improvements will be available to user applications as well.&lt;br /&gt;
&lt;br /&gt;
*[[Vision2_Accelerator|EiffelVision Accelerators]]&lt;br /&gt;
::More keyboard accelerators for EiffelVision applications.&lt;br /&gt;
*[[EiffelVision_Unicode|Unicode support for EiffelVision]]&lt;br /&gt;
::EiffelVision support for the character set of arbitrary human languages (see also [[Unicode]]).&lt;br /&gt;
*[[EiffelBuild_Integration|EiffelBuild Integration]]&lt;br /&gt;
::The graphical user interface builder, EiffelBuild, is currently a separate product. Ideally it should be completely integrated with EiffelStudio.&lt;br /&gt;
*[[Cocoa_for_EiffelVision2|Cocoa for EiffelVision]]&lt;br /&gt;
::Provide EiffelVision with a Carbon back-end to make it truly native on the Mac.&lt;br /&gt;
* [[Internationalization|EiffelStudio UI for other languages (internationalization)]]&lt;br /&gt;
::EiffelStudio provides support for changing the user interface messages and dialogs to any language. If you are a fluent speaker of a language other than English, you can help the localization into that language.&lt;br /&gt;
&lt;br /&gt;
== Build infrastructure ==&lt;br /&gt;
Developments in this category are intended to help produce new versions of EiffelStudio faster and better.&lt;br /&gt;
&lt;br /&gt;
*[[Build_tool | Build tool]]&lt;br /&gt;
::Simplify and streamline the EiffelStudio build process.&lt;br /&gt;
*[[Debian_packages | Debian packages]]&lt;br /&gt;
::Include EiffelStudio in standard Debian installation&lt;br /&gt;
*[[OSX_release_infrastructure|OSX release infrastructure]]&lt;br /&gt;
::Script the release of Mac universal binaries for OS X&lt;br /&gt;
&lt;br /&gt;
== Other Stuff ==&lt;br /&gt;
&lt;br /&gt;
* [[ESTeaching | Eiffel Studio for Teaching]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Developing is not everything; the results must also be tested for functionality and performance. The EiffelStudio testing process is completely open and follows advanced software engineering standard. Please visit the special [[:Category:Testing|category devoted to EiffelStudio testing]].&lt;br /&gt;
&lt;br /&gt;
== Projects to be started or restarted ==&lt;br /&gt;
The projects in this list are mere ideas which may not yet have a project page. Some of them were started but not completed. Feel free to take over! If you do so, move the project to one of the above sections (compiler, libraries etc.).&lt;br /&gt;
*[[Component_standards| Standards and tools for Eiffel-based components]]&lt;br /&gt;
::Develop a standard for distributing Eiffel components in binary form, and implement it&lt;br /&gt;
* [[Unicode|Unicode support improvement]]&lt;br /&gt;
::Improve support for character sets of arbitrary human languages. See also [[EiffelVision_Unicode|EiffelVision Unicode support]].&lt;br /&gt;
* [[New_ports|Porting to new platforms (OSX Intel, OpenBSD)]]&lt;br /&gt;
::Eiffel is highly portable; a port to a new platform is a moderate effort.&lt;br /&gt;
* [[IDE|IDE improvements]]&lt;br /&gt;
::This should be replaced by more specific goals, see [[#General_environment_mechanisms|general environment mechanisms]] above.&lt;br /&gt;
* [[Extended_static_checking|Extended static checking]]&lt;br /&gt;
::See e.g. ESC-Java, Spec#...&lt;br /&gt;
* [[Code_checking|Direct code checking (red squiggly lines)]]&lt;br /&gt;
::More user-friendly error &amp;quot;non-messages&amp;quot;, following the lead of spelling error reporting in MS Word&lt;br /&gt;
* [[Learning|Integrated learning support]]&lt;br /&gt;
::Support for total beginners&lt;br /&gt;
* [[Macros|Editor macro recording and playback]]&lt;br /&gt;
::Give EiffelStudio, in particular the editor, a macro facility&lt;br /&gt;
* [[Editor_breakpoints|Inserting and navigation of editor breakpoints]]&lt;br /&gt;
::Add breakpoints to the editor for better navigation&lt;br /&gt;
* [[EMU| Eiffel Multi User]]&lt;br /&gt;
::Integrate a repository mechanism&lt;br /&gt;
* [[Trace_points|Adding trace points]]&lt;br /&gt;
:: Output a trace statement indicating a trace point has been hit, without the need to write code or stop execution&lt;br /&gt;
* [[Update_notification|Update notification]]&lt;br /&gt;
::An update notification service to let developers know there is a new version available.&lt;br /&gt;
* [[Configuration_management|Integrated support for configuration management]]&lt;br /&gt;
::Integrate configuration management into EiffelStudio.&lt;br /&gt;
*[[Scintilla_component| Multiplatform editor component: Scintilla]]&lt;br /&gt;
::Encapsulate Scintilla multi-platform editor&lt;br /&gt;
*[[Gecko_component| Multiplatform layout engine component: Mozilla/Gecko]]&lt;br /&gt;
::Encapsulate Gecko html multi-platform engine component&lt;br /&gt;
&lt;br /&gt;
For more ideas see [[:Category:User suggestions|user suggestions]].&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
== Adding your own project ==&lt;br /&gt;
To add your own project:&lt;br /&gt;
*Make sure it is not redundant with one of the existing projects. If there is any chance of duplication, please contact the project authors first.&lt;br /&gt;
*If you have not already done so, subscribe to the developers' mailing list (see the [[Mailing_Lists|the mailing lists page]]). Post a message to the list explaining your idea and asking for feedback.&lt;br /&gt;
*Also check the [[:Category:User_suggestions|user suggestion pages]]. They often contain a detailed analysis of an envisioned extension, which can help define a project and write the project page.&lt;br /&gt;
*If you decide to go forward, create a page about your project, listing the goals of the project, the rationale (why is this useful?), the issues to be solved, the overall techniques proposed, and a general development strategy. Make sure to include a &amp;quot;project members&amp;quot; section so that people can contact you (for example through your user name on this Wiki).&lt;br /&gt;
*Edit the present page so that it includes a link to your project page; select the appropriate category. Below the link, include (as in current entries) a one- or two-line summary of the project's goal.&lt;br /&gt;
*Do it!&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
* [[:Category:User_suggestions|User suggestions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9322</id>
		<title>Category:Projects</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9322"/>
				<updated>2007-08-09T01:46:41Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Adding your own project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contributing to open-source EiffelStudio==&lt;br /&gt;
Now that you have [[Spread_the_word|spread the word]] about Eiffel, you feel the urge to contribute to the product itself. There are many ways to help develop EiffelStudio through projects large and small. Check the list of open projects below; if you see one of interest, contact the project members as listed on the corresponding project page. Don't forget to subscribe to the Eiffel developers list (see the [[Mailing_Lists|the mailing lists page]]) where you can post questions about past, current and possible projects.&lt;br /&gt;
&lt;br /&gt;
If you feel none of the current projects covers your special interest, see below how to [[#Adding_your_own_project|add your own project]].&lt;br /&gt;
&lt;br /&gt;
'''Note to author of projects''' available from this page: please make sure the project description is up to date and in particular that '''the project members are listed''' and reachable; that's the best way to gain more collaborators. If the project is no longer active please move the entry to [[#Projects_to_be_started_or_restarted|projects to be started or restarted]] section so that someone else may pick it up.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Libraries (other than EiffelVision) ==&lt;br /&gt;
&lt;br /&gt;
Eiffel is all about reuse of quality components. The best way to get started as an Eiffel contributor is to extend an existing library, or start a new one to fill a need.&lt;br /&gt;
&lt;br /&gt;
EiffelVision-related developments appear under [[#Graphics_and_user_interface|graphics and user interface]].&lt;br /&gt;
* [[Eiffel_NXT | Eiffel LEGO NXT Commumication Library and EiffelStudio Integration]]&lt;br /&gt;
::Remote communication with LEGO NXT Mindstorms &amp;quot;bricks&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Language and compiler ==&lt;br /&gt;
This is the heart of the Eiffel environment: providing the best possible implementation of the Eiffel language. See the [[:Category:Compiler|compiler pages]] for detailed information about EiffelStudio's compiling techniques including the Melting Ice Technology.&lt;br /&gt;
* [[:Category:ECMA| Full ISO/ECMA support]]&lt;br /&gt;
::The Eiffel standard developed by the ECMA TC39-TG4 committee and approved in 2006 by the International Standards Organization is the definitive reference on the Eiffel language. Work is progressing quickly to include all ECMA-ISO mechanisms into the EiffelStudio compiler; you can help fill the remaining gaps.&lt;br /&gt;
&lt;br /&gt;
== General environment mechanisms ==&lt;br /&gt;
There are always new ideas to improve the user experience with EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
* [[AutoTest_Integration|Integrating AutoTest into EiffelStudio]]&lt;br /&gt;
::[http://se.ethz.ch/research/autotest/ AutoTest] is an automated testing framework taking advantage of Eiffel's Design by Contract to provide far more automation than current solutions such as JUnit. Currently it is a separate tool; ideally it should be part of EiffelStudio.&lt;br /&gt;
* [[Advanced Class and Feature Wizard| Advanced class and feature wizard ]]&lt;br /&gt;
::Improve ease of use, for both novice and advanced users, by refining the tools that create classes and features from templates.&lt;br /&gt;
*[[Editor|Editor]]&lt;br /&gt;
::Improve the EiffelStudio built-in smart editor.&lt;br /&gt;
* [[Refactoring|More refactoring mechanisms]]&lt;br /&gt;
::While Eiffel doesn't need some of the refactoring mechanisms of other languages, the environment could benefit from new refactoring mechanisms in addition to the ones currently supported.&lt;br /&gt;
* [[Eiffel_Mutation_Testing_Tool| Eiffel Mutation Testing Tool]]&lt;br /&gt;
::Build a high-quality mutation testing tool (for evaluating the quality of test strategies, fault detectability and redundancy) taking advantage of Eiffel's mechanisms, especially Design by Contract.&lt;br /&gt;
&lt;br /&gt;
== Graphics and user interface ==&lt;br /&gt;
Make the user interface of EiffelStudio more appealing. Much of the work is to be done in the underlying EiffelVision library, with the added benefit that improvements will be available to user applications as well.&lt;br /&gt;
&lt;br /&gt;
*[[Vision2_Accelerator|EiffelVision Accelerators]]&lt;br /&gt;
::More keyboard accelerators for EiffelVision applications.&lt;br /&gt;
*[[EiffelVision_Unicode|Unicode support for EiffelVision]]&lt;br /&gt;
::EiffelVision support for the character set of arbitrary human languages (see also [[Unicode]]).&lt;br /&gt;
*[[EiffelBuild_Integration|EiffelBuild Integration]]&lt;br /&gt;
::The graphical user interface builder, EiffelBuild, is currently a separate product. Ideally it should be completely integrated with EiffelStudio.&lt;br /&gt;
*[[Cocoa_for_EiffelVision2|Cocoa for EiffelVision]]&lt;br /&gt;
::Provide EiffelVision with a Carbon back-end to make it truly native on the Mac.&lt;br /&gt;
* [[Internationalization|EiffelStudio UI for other languages (internationalization)]]&lt;br /&gt;
::EiffelStudio provides support for changing the user interface messages and dialogs to any language. If you are a fluent speaker of a language other than English, you can help the localization into that language.&lt;br /&gt;
&lt;br /&gt;
== Build infrastructure ==&lt;br /&gt;
Developments in this category are intended to help produce new versions of EiffelStudio faster and better.&lt;br /&gt;
&lt;br /&gt;
*[[Build_tool | Build tool]]&lt;br /&gt;
::Simplify and streamline the EiffelStudio build process.&lt;br /&gt;
*[[Debian_packages | Debian packages]]&lt;br /&gt;
::Include EiffelStudio in standard Debian installation&lt;br /&gt;
*[[OSX_release_infrastructure|OSX release infrastructure]]&lt;br /&gt;
::Script the release of Mac universal binaries for OS X&lt;br /&gt;
&lt;br /&gt;
== Other Stuff ==&lt;br /&gt;
&lt;br /&gt;
* [[ESTeaching | Eiffel Studio for Teaching]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Developing is not everything; the results must also be tested for functionality and performance. The EiffelStudio testing process is completely open and follows advanced software engineering standard. Please visit the special [[:Category:Testing|category devoted to EiffelStudio testing]].&lt;br /&gt;
&lt;br /&gt;
== Projects to be started or restarted ==&lt;br /&gt;
The projects in this list are mere ideas which may not yet have a project page. Some of them were started but not completed. Feel free to take over! If you do so, move the project to one of the above sections (compiler, libraries etc.).&lt;br /&gt;
*[[Component_standards| Standards and tools for Eiffel-based components]]&lt;br /&gt;
::Develop a standard for distributing Eiffel components in binary form, and implement it&lt;br /&gt;
* [[Unicode|Unicode support improvement]]&lt;br /&gt;
::Improve support for character sets of arbitrary human languages. See also [[EiffelVision_Unicode|EiffelVision Unicode support]].&lt;br /&gt;
* [[New_ports|Porting to new platforms (OSX Intel, OpenBSD)]]&lt;br /&gt;
::Eiffel is highly portable; a port to a new platform is a moderate effort.&lt;br /&gt;
* [[IDE|IDE improvements]]&lt;br /&gt;
::This should be replaced by more specific goals, see [[#General_environment_mechanisms|general environment mechanisms]] above.&lt;br /&gt;
* [[Extended_static_checking|Extended static checking]]&lt;br /&gt;
::See e.g. ESC-Java, Spec#...&lt;br /&gt;
* [[Code_checking|Direct code checking (red squiggly lines)]]&lt;br /&gt;
::More user-friendly error &amp;quot;non-messages&amp;quot;, following the lead of spelling error reporting in MS Word&lt;br /&gt;
* [[Learning|Integrated learning support]]&lt;br /&gt;
::Support for total beginners&lt;br /&gt;
* [[Macros|Editor macro recording and playback]]&lt;br /&gt;
::Give EiffelStudio, in particular the editor, a macro facility&lt;br /&gt;
* [[Editor_breakpoints|Inserting and navigation of editor breakpoints]]&lt;br /&gt;
::Add breakpoints to the editor for better navigation&lt;br /&gt;
* [[EMU| Eiffel Multi User]]&lt;br /&gt;
::Integrate a repository mechanism&lt;br /&gt;
* [[Trace_points|Adding trace points]]&lt;br /&gt;
:: Output a trace statement indicating a trace point has been hit, without the need to write code or stop execution&lt;br /&gt;
* [[Update_notification|Update notification]]&lt;br /&gt;
::An update notification service to let developers know there is a new version available.&lt;br /&gt;
* [[Configuration_management|Integrated support for configuration management]]&lt;br /&gt;
::Integrate configuration management into EiffelStudio.&lt;br /&gt;
*[[Scintilla_component| Multiplatform editor component: Scintilla]]&lt;br /&gt;
::Encapsulate Scintilla multi-platform editor&lt;br /&gt;
*[[Gecko_component| Multiplatform layout engine component: Mozilla/Gecko]]&lt;br /&gt;
::Encapsulate Gecko html multi-platform engine component&lt;br /&gt;
&lt;br /&gt;
For more ideas see [[:Category:User suggestions|user suggestions]].&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
== Adding your own project ==&lt;br /&gt;
To add your own project:&lt;br /&gt;
*Make sure it is not redundant with one of the existing projects. If there is any chance of duplication, please contact the project authors first.&lt;br /&gt;
*If you have not already done so, subscribe to the developers' mailing list (see the [[Mailing_Lists|the mailing lists page]]). Post a message to the list explaining your idea and asking for feedback.&lt;br /&gt;
*Also check the [[User_suggestions|user suggestion pages]]. They often contain a detailed analysis of an envisioned extension, which can help define a project and write the project page.&lt;br /&gt;
*If you decide to go forward, create a page about your project, listing the goals of the project, the rationale (why is this useful?), the issues to be solved, the overall techniques proposed, and a general development strategy. Make sure to include a &amp;quot;project members&amp;quot; section so that people can contact you (for example through your user name on this Wiki).&lt;br /&gt;
*Edit the present page so that it includes a link to your project page; select the appropriate category. Below the link, include (as in current entries) a one- or two-line summary of the project's goal.&lt;br /&gt;
*Do it!&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
* [[:Category:User_suggestions|User suggestions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9321</id>
		<title>Category:Projects</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9321"/>
				<updated>2007-08-09T01:44:47Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Projects to be started or restarted */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contributing to open-source EiffelStudio==&lt;br /&gt;
Now that you have [[Spread_the_word|spread the word]] about Eiffel, you feel the urge to contribute to the product itself. There are many ways to help develop EiffelStudio through projects large and small. Check the list of open projects below; if you see one of interest, contact the project members as listed on the corresponding project page. Don't forget to subscribe to the Eiffel developers list (see the [[Mailing_Lists|the mailing lists page]]) where you can post questions about past, current and possible projects.&lt;br /&gt;
&lt;br /&gt;
If you feel none of the current projects covers your special interest, see below how to [[#Adding_your_own_project|add your own project]].&lt;br /&gt;
&lt;br /&gt;
'''Note to author of projects''' available from this page: please make sure the project description is up to date and in particular that '''the project members are listed''' and reachable; that's the best way to gain more collaborators. If the project is no longer active please move the entry to [[#Projects_to_be_started_or_restarted|projects to be started or restarted]] section so that someone else may pick it up.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Libraries (other than EiffelVision) ==&lt;br /&gt;
&lt;br /&gt;
Eiffel is all about reuse of quality components. The best way to get started as an Eiffel contributor is to extend an existing library, or start a new one to fill a need.&lt;br /&gt;
&lt;br /&gt;
EiffelVision-related developments appear under [[#Graphics_and_user_interface|graphics and user interface]].&lt;br /&gt;
* [[Eiffel_NXT | Eiffel LEGO NXT Commumication Library and EiffelStudio Integration]]&lt;br /&gt;
::Remote communication with LEGO NXT Mindstorms &amp;quot;bricks&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Language and compiler ==&lt;br /&gt;
This is the heart of the Eiffel environment: providing the best possible implementation of the Eiffel language. See the [[:Category:Compiler|compiler pages]] for detailed information about EiffelStudio's compiling techniques including the Melting Ice Technology.&lt;br /&gt;
* [[:Category:ECMA| Full ISO/ECMA support]]&lt;br /&gt;
::The Eiffel standard developed by the ECMA TC39-TG4 committee and approved in 2006 by the International Standards Organization is the definitive reference on the Eiffel language. Work is progressing quickly to include all ECMA-ISO mechanisms into the EiffelStudio compiler; you can help fill the remaining gaps.&lt;br /&gt;
&lt;br /&gt;
== General environment mechanisms ==&lt;br /&gt;
There are always new ideas to improve the user experience with EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
* [[AutoTest_Integration|Integrating AutoTest into EiffelStudio]]&lt;br /&gt;
::[http://se.ethz.ch/research/autotest/ AutoTest] is an automated testing framework taking advantage of Eiffel's Design by Contract to provide far more automation than current solutions such as JUnit. Currently it is a separate tool; ideally it should be part of EiffelStudio.&lt;br /&gt;
* [[Advanced Class and Feature Wizard| Advanced class and feature wizard ]]&lt;br /&gt;
::Improve ease of use, for both novice and advanced users, by refining the tools that create classes and features from templates.&lt;br /&gt;
*[[Editor|Editor]]&lt;br /&gt;
::Improve the EiffelStudio built-in smart editor.&lt;br /&gt;
* [[Refactoring|More refactoring mechanisms]]&lt;br /&gt;
::While Eiffel doesn't need some of the refactoring mechanisms of other languages, the environment could benefit from new refactoring mechanisms in addition to the ones currently supported.&lt;br /&gt;
* [[Eiffel_Mutation_Testing_Tool| Eiffel Mutation Testing Tool]]&lt;br /&gt;
::Build a high-quality mutation testing tool (for evaluating the quality of test strategies, fault detectability and redundancy) taking advantage of Eiffel's mechanisms, especially Design by Contract.&lt;br /&gt;
&lt;br /&gt;
== Graphics and user interface ==&lt;br /&gt;
Make the user interface of EiffelStudio more appealing. Much of the work is to be done in the underlying EiffelVision library, with the added benefit that improvements will be available to user applications as well.&lt;br /&gt;
&lt;br /&gt;
*[[Vision2_Accelerator|EiffelVision Accelerators]]&lt;br /&gt;
::More keyboard accelerators for EiffelVision applications.&lt;br /&gt;
*[[EiffelVision_Unicode|Unicode support for EiffelVision]]&lt;br /&gt;
::EiffelVision support for the character set of arbitrary human languages (see also [[Unicode]]).&lt;br /&gt;
*[[EiffelBuild_Integration|EiffelBuild Integration]]&lt;br /&gt;
::The graphical user interface builder, EiffelBuild, is currently a separate product. Ideally it should be completely integrated with EiffelStudio.&lt;br /&gt;
*[[Cocoa_for_EiffelVision2|Cocoa for EiffelVision]]&lt;br /&gt;
::Provide EiffelVision with a Carbon back-end to make it truly native on the Mac.&lt;br /&gt;
* [[Internationalization|EiffelStudio UI for other languages (internationalization)]]&lt;br /&gt;
::EiffelStudio provides support for changing the user interface messages and dialogs to any language. If you are a fluent speaker of a language other than English, you can help the localization into that language.&lt;br /&gt;
&lt;br /&gt;
== Build infrastructure ==&lt;br /&gt;
Developments in this category are intended to help produce new versions of EiffelStudio faster and better.&lt;br /&gt;
&lt;br /&gt;
*[[Build_tool | Build tool]]&lt;br /&gt;
::Simplify and streamline the EiffelStudio build process.&lt;br /&gt;
*[[Debian_packages | Debian packages]]&lt;br /&gt;
::Include EiffelStudio in standard Debian installation&lt;br /&gt;
*[[OSX_release_infrastructure|OSX release infrastructure]]&lt;br /&gt;
::Script the release of Mac universal binaries for OS X&lt;br /&gt;
&lt;br /&gt;
== Other Stuff ==&lt;br /&gt;
&lt;br /&gt;
* [[ESTeaching | Eiffel Studio for Teaching]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Developing is not everything; the results must also be tested for functionality and performance. The EiffelStudio testing process is completely open and follows advanced software engineering standard. Please visit the special [[:Category:Testing|category devoted to EiffelStudio testing]].&lt;br /&gt;
&lt;br /&gt;
== Projects to be started or restarted ==&lt;br /&gt;
The projects in this list are mere ideas which may not yet have a project page. Some of them were started but not completed. Feel free to take over! If you do so, move the project to one of the above sections (compiler, libraries etc.).&lt;br /&gt;
*[[Component_standards| Standards and tools for Eiffel-based components]]&lt;br /&gt;
::Develop a standard for distributing Eiffel components in binary form, and implement it&lt;br /&gt;
* [[Unicode|Unicode support improvement]]&lt;br /&gt;
::Improve support for character sets of arbitrary human languages. See also [[EiffelVision_Unicode|EiffelVision Unicode support]].&lt;br /&gt;
* [[New_ports|Porting to new platforms (OSX Intel, OpenBSD)]]&lt;br /&gt;
::Eiffel is highly portable; a port to a new platform is a moderate effort.&lt;br /&gt;
* [[IDE|IDE improvements]]&lt;br /&gt;
::This should be replaced by more specific goals, see [[#General_environment_mechanisms|general environment mechanisms]] above.&lt;br /&gt;
* [[Extended_static_checking|Extended static checking]]&lt;br /&gt;
::See e.g. ESC-Java, Spec#...&lt;br /&gt;
* [[Code_checking|Direct code checking (red squiggly lines)]]&lt;br /&gt;
::More user-friendly error &amp;quot;non-messages&amp;quot;, following the lead of spelling error reporting in MS Word&lt;br /&gt;
* [[Learning|Integrated learning support]]&lt;br /&gt;
::Support for total beginners&lt;br /&gt;
* [[Macros|Editor macro recording and playback]]&lt;br /&gt;
::Give EiffelStudio, in particular the editor, a macro facility&lt;br /&gt;
* [[Editor_breakpoints|Inserting and navigation of editor breakpoints]]&lt;br /&gt;
::Add breakpoints to the editor for better navigation&lt;br /&gt;
* [[EMU| Eiffel Multi User]]&lt;br /&gt;
::Integrate a repository mechanism&lt;br /&gt;
* [[Trace_points|Adding trace points]]&lt;br /&gt;
:: Output a trace statement indicating a trace point has been hit, without the need to write code or stop execution&lt;br /&gt;
* [[Update_notification|Update notification]]&lt;br /&gt;
::An update notification service to let developers know there is a new version available.&lt;br /&gt;
* [[Configuration_management|Integrated support for configuration management]]&lt;br /&gt;
::Integrate configuration management into EiffelStudio.&lt;br /&gt;
*[[Scintilla_component| Multiplatform editor component: Scintilla]]&lt;br /&gt;
::Encapsulate Scintilla multi-platform editor&lt;br /&gt;
*[[Gecko_component| Multiplatform layout engine component: Mozilla/Gecko]]&lt;br /&gt;
::Encapsulate Gecko html multi-platform engine component&lt;br /&gt;
&lt;br /&gt;
For more ideas see [[:Category:User suggestions|user suggestions]].&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
== Adding your own project ==&lt;br /&gt;
To add your own project:&lt;br /&gt;
*Make sure it is not redundant with one of the existing projects. If there is any chance of duplication, please contact the project authors first.&lt;br /&gt;
*If you have not already done so, subscribe to the developers' mailing list (see the [[Mailing_Lists|the mailing lists page]]). Post a message to the list explaining your idea and asking for feedback.&lt;br /&gt;
*If you decide to go forward, create a page about your project, listing the goals of the project, the rationale (why is this useful?), the issues to be solved, the overall techniques proposed, and a general development strategy. Make sure to include a &amp;quot;project members&amp;quot; section so that people can contact you (for example through your user name on this Wiki).&lt;br /&gt;
*Edit the present page so that it includes a link to your project page; select the appropriate category. Below the link, include (as in current entries) a one- or two-line summary of the project's goal.&lt;br /&gt;
*Do it!&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
* [[:Category:User_suggestions|User suggestions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9320</id>
		<title>Category:Projects</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:Projects&amp;diff=9320"/>
				<updated>2007-08-09T01:42:37Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Contributing to open-source EiffelStudio==&lt;br /&gt;
Now that you have [[Spread_the_word|spread the word]] about Eiffel, you feel the urge to contribute to the product itself. There are many ways to help develop EiffelStudio through projects large and small. Check the list of open projects below; if you see one of interest, contact the project members as listed on the corresponding project page. Don't forget to subscribe to the Eiffel developers list (see the [[Mailing_Lists|the mailing lists page]]) where you can post questions about past, current and possible projects.&lt;br /&gt;
&lt;br /&gt;
If you feel none of the current projects covers your special interest, see below how to [[#Adding_your_own_project|add your own project]].&lt;br /&gt;
&lt;br /&gt;
'''Note to author of projects''' available from this page: please make sure the project description is up to date and in particular that '''the project members are listed''' and reachable; that's the best way to gain more collaborators. If the project is no longer active please move the entry to [[#Projects_to_be_started_or_restarted|projects to be started or restarted]] section so that someone else may pick it up.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Libraries (other than EiffelVision) ==&lt;br /&gt;
&lt;br /&gt;
Eiffel is all about reuse of quality components. The best way to get started as an Eiffel contributor is to extend an existing library, or start a new one to fill a need.&lt;br /&gt;
&lt;br /&gt;
EiffelVision-related developments appear under [[#Graphics_and_user_interface|graphics and user interface]].&lt;br /&gt;
* [[Eiffel_NXT | Eiffel LEGO NXT Commumication Library and EiffelStudio Integration]]&lt;br /&gt;
::Remote communication with LEGO NXT Mindstorms &amp;quot;bricks&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Language and compiler ==&lt;br /&gt;
This is the heart of the Eiffel environment: providing the best possible implementation of the Eiffel language. See the [[:Category:Compiler|compiler pages]] for detailed information about EiffelStudio's compiling techniques including the Melting Ice Technology.&lt;br /&gt;
* [[:Category:ECMA| Full ISO/ECMA support]]&lt;br /&gt;
::The Eiffel standard developed by the ECMA TC39-TG4 committee and approved in 2006 by the International Standards Organization is the definitive reference on the Eiffel language. Work is progressing quickly to include all ECMA-ISO mechanisms into the EiffelStudio compiler; you can help fill the remaining gaps.&lt;br /&gt;
&lt;br /&gt;
== General environment mechanisms ==&lt;br /&gt;
There are always new ideas to improve the user experience with EiffelStudio.&lt;br /&gt;
&lt;br /&gt;
* [[AutoTest_Integration|Integrating AutoTest into EiffelStudio]]&lt;br /&gt;
::[http://se.ethz.ch/research/autotest/ AutoTest] is an automated testing framework taking advantage of Eiffel's Design by Contract to provide far more automation than current solutions such as JUnit. Currently it is a separate tool; ideally it should be part of EiffelStudio.&lt;br /&gt;
* [[Advanced Class and Feature Wizard| Advanced class and feature wizard ]]&lt;br /&gt;
::Improve ease of use, for both novice and advanced users, by refining the tools that create classes and features from templates.&lt;br /&gt;
*[[Editor|Editor]]&lt;br /&gt;
::Improve the EiffelStudio built-in smart editor.&lt;br /&gt;
* [[Refactoring|More refactoring mechanisms]]&lt;br /&gt;
::While Eiffel doesn't need some of the refactoring mechanisms of other languages, the environment could benefit from new refactoring mechanisms in addition to the ones currently supported.&lt;br /&gt;
* [[Eiffel_Mutation_Testing_Tool| Eiffel Mutation Testing Tool]]&lt;br /&gt;
::Build a high-quality mutation testing tool (for evaluating the quality of test strategies, fault detectability and redundancy) taking advantage of Eiffel's mechanisms, especially Design by Contract.&lt;br /&gt;
&lt;br /&gt;
== Graphics and user interface ==&lt;br /&gt;
Make the user interface of EiffelStudio more appealing. Much of the work is to be done in the underlying EiffelVision library, with the added benefit that improvements will be available to user applications as well.&lt;br /&gt;
&lt;br /&gt;
*[[Vision2_Accelerator|EiffelVision Accelerators]]&lt;br /&gt;
::More keyboard accelerators for EiffelVision applications.&lt;br /&gt;
*[[EiffelVision_Unicode|Unicode support for EiffelVision]]&lt;br /&gt;
::EiffelVision support for the character set of arbitrary human languages (see also [[Unicode]]).&lt;br /&gt;
*[[EiffelBuild_Integration|EiffelBuild Integration]]&lt;br /&gt;
::The graphical user interface builder, EiffelBuild, is currently a separate product. Ideally it should be completely integrated with EiffelStudio.&lt;br /&gt;
*[[Cocoa_for_EiffelVision2|Cocoa for EiffelVision]]&lt;br /&gt;
::Provide EiffelVision with a Carbon back-end to make it truly native on the Mac.&lt;br /&gt;
* [[Internationalization|EiffelStudio UI for other languages (internationalization)]]&lt;br /&gt;
::EiffelStudio provides support for changing the user interface messages and dialogs to any language. If you are a fluent speaker of a language other than English, you can help the localization into that language.&lt;br /&gt;
&lt;br /&gt;
== Build infrastructure ==&lt;br /&gt;
Developments in this category are intended to help produce new versions of EiffelStudio faster and better.&lt;br /&gt;
&lt;br /&gt;
*[[Build_tool | Build tool]]&lt;br /&gt;
::Simplify and streamline the EiffelStudio build process.&lt;br /&gt;
*[[Debian_packages | Debian packages]]&lt;br /&gt;
::Include EiffelStudio in standard Debian installation&lt;br /&gt;
*[[OSX_release_infrastructure|OSX release infrastructure]]&lt;br /&gt;
::Script the release of Mac universal binaries for OS X&lt;br /&gt;
&lt;br /&gt;
== Other Stuff ==&lt;br /&gt;
&lt;br /&gt;
* [[ESTeaching | Eiffel Studio for Teaching]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
Developing is not everything; the results must also be tested for functionality and performance. The EiffelStudio testing process is completely open and follows advanced software engineering standard. Please visit the special [[:Category:Testing|category devoted to EiffelStudio testing]].&lt;br /&gt;
&lt;br /&gt;
== Projects to be started or restarted ==&lt;br /&gt;
The projects in this list are mere ideas which may not yet have a project page. Some of them were started but not completed. Feel free to take over! If you do so, move the project to one of the above sections (compiler, libraries etc.).&lt;br /&gt;
*[[Component_standards| Standards and tools for Eiffel-based components]]&lt;br /&gt;
::Develop a standard for distributing Eiffel components in binary form, and implement it&lt;br /&gt;
* [[Unicode|Unicode support improvement]]&lt;br /&gt;
::Improve support for character sets of arbitrary human languages. See also [[EiffelVision_Unicode|EiffelVision Unicode support]].&lt;br /&gt;
* [[New_ports|Porting to new platforms (OSX Intel, OpenBSD)]]&lt;br /&gt;
::Eiffel is highly portable; a port to a new platform is a moderate effort.&lt;br /&gt;
* [[IDE|IDE improvements]]&lt;br /&gt;
::This should be replaced by more specific goals, see [[#General_environment_mechanisms|general environment mechanisms]] above.&lt;br /&gt;
* [[Extended_static_checking|Extended static checking]]&lt;br /&gt;
::See e.g. ESC-Java, Spec#...&lt;br /&gt;
* [[Code_checking|Direct code checking (red squiggly lines)]]&lt;br /&gt;
::More user-friendly error &amp;quot;non-messages&amp;quot;, following the lead of spelling error reporting in MS Word&lt;br /&gt;
* [[Learning|Integrated learning support]]&lt;br /&gt;
::Support for total beginners&lt;br /&gt;
* [[Macros|Editor macro recording and playback]]&lt;br /&gt;
::Give EiffelStudio, in particular the editor, a macro facility&lt;br /&gt;
* [[Editor_breakpoints|Inserting and navigation of editor breakpoints]]&lt;br /&gt;
::Add breakpoints to the editor for better navigation&lt;br /&gt;
* [[EMU| Eiffel Multi User]]&lt;br /&gt;
::Integrate a repository mechanism&lt;br /&gt;
* [[Trace_points|Adding trace points]]&lt;br /&gt;
:: Output a trace statement indicating a trace point has been hit, without the need to write code or stop execution&lt;br /&gt;
* [[Update_notification|Update notification]]&lt;br /&gt;
::An update notification service to let developers know there is a new version available.&lt;br /&gt;
* [[Configuration_management|Integrated support for configuration management]]&lt;br /&gt;
::Integrate configuration management into EiffelStudio.&lt;br /&gt;
*[[Scintilla_component| Multiplatform editor component: Scintilla]]&lt;br /&gt;
::Encapsulate Scintilla multi-platform editor&lt;br /&gt;
*[[Gecko_component| Multiplatform layout engine component: Mozilla/Gecko]]&lt;br /&gt;
::Encapsulate Gecko html multi-platform engine component&lt;br /&gt;
&lt;br /&gt;
== Completed projects ==&lt;br /&gt;
&lt;br /&gt;
== Adding your own project ==&lt;br /&gt;
To add your own project:&lt;br /&gt;
*Make sure it is not redundant with one of the existing projects. If there is any chance of duplication, please contact the project authors first.&lt;br /&gt;
*If you have not already done so, subscribe to the developers' mailing list (see the [[Mailing_Lists|the mailing lists page]]). Post a message to the list explaining your idea and asking for feedback.&lt;br /&gt;
*If you decide to go forward, create a page about your project, listing the goals of the project, the rationale (why is this useful?), the issues to be solved, the overall techniques proposed, and a general development strategy. Make sure to include a &amp;quot;project members&amp;quot; section so that people can contact you (for example through your user name on this Wiki).&lt;br /&gt;
*Edit the present page so that it includes a link to your project page; select the appropriate category. Below the link, include (as in current entries) a one- or two-line summary of the project's goal.&lt;br /&gt;
*Do it!&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
* [[:Category:User_suggestions|User suggestions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributions]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Category:User_suggestions&amp;diff=9319</id>
		<title>Category:User suggestions</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Category:User_suggestions&amp;diff=9319"/>
				<updated>2007-08-09T01:41:45Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Various pages made by user for ideas and proposals.&lt;br /&gt;
==See also==&lt;br /&gt;
[[:Category:Projects|The Projects page]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Main_Page&amp;diff=9318</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Main_Page&amp;diff=9318"/>
				<updated>2007-08-09T00:04:37Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: /* Developing EiffelStudio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:General]]__NOTOC__&lt;br /&gt;
&amp;lt;h1 class=&amp;quot;firstHeading&amp;quot;&amp;gt;EiffelStudio Integrated Development Environment&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:EiffelStudioScreenshot.png|thumb|250px|right|EiffelStudio IDE ([http://eiffel.com/products/studio/screenshots.html more screenshots]) ]]&lt;br /&gt;
&lt;br /&gt;
Welcome to the central resource for EiffelStudio developers and contributors.&lt;br /&gt;
&lt;br /&gt;
EiffelStudio is an advanced commercial-grade IDE for the [http://en.wikipedia.org/wiki/Eiffel_programming_language Eiffel programming language]. It is maintained and developed mostly by [http://www.eiffel.com  Eiffel Software] and hosted at the [http://se.inf.ethz.ch/ Chair of Software Engineering] at [http://www.ethz.ch/ ETH Zurich].&lt;br /&gt;
&lt;br /&gt;
On April 5th, 2006, Eiffel Software relicensed the EiffelStudio product under the [[Gnu Public License]]. Eiffel Software still offers a commercial variant. Both versions share the same source code.&lt;br /&gt;
&lt;br /&gt;
EiffelStudio is a full-featured IDE offering the following features, many of them unique:&lt;br /&gt;
&lt;br /&gt;
* Complete compiler for the Eiffel programming language, with Design By Contract (DBC) support and both high compile-time speed and high-performance executables, based on the Melting Ice Technology.&lt;br /&gt;
* Full portability (including graphics) across Windows, MacOS X, Linux, *BSD, Solaris and other operating systems&lt;br /&gt;
* Smart code editor&lt;br /&gt;
* Sophisticated multi-view browsing and viewing facilities&lt;br /&gt;
* Interactive debugger&lt;br /&gt;
* Graphical modeling tool for UML and BON with full roundtrip&lt;br /&gt;
* Refactoring support&lt;br /&gt;
* GUI development tool (EiffelBuild) and fully portable GUI library (EiffelVision)&lt;br /&gt;
* Many other libraries of reusable component.&lt;br /&gt;
&lt;br /&gt;
The Eiffel compiler creates C code that is then handed to a standard C compiler. As a result, Eiffel programs have a run-time performance comparable to those directly written in C or C++, but with the benefits of an advanced object-oriented model and strong typing. EiffelStudio uses a highly efficient compacting garbage collector to free the developer from the burden of memory management.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;If you want to know more about the unique features of Eiffel and EiffelStudio, check out our [[Reasons for using Eiffel]] page.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;font-size:80%;&amp;quot; bgcolor=white|&lt;br /&gt;
{| cellspacing=8 width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; bgcolor=&amp;quot;#f6f9fb&amp;quot; style=&amp;quot;border:1px solid #8f8f8f;padding:0 .5em .5em .5em;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
* [[Downloads]]&lt;br /&gt;
* [[EiffelStudio 6.0 Releases|Changelog of 6.0 (release branch)]]&lt;br /&gt;
* [http://docs.eiffel.com/eiffelstudio/installation/studio57 Installing EiffelStudio]&lt;br /&gt;
* [[Compiling Hello World]]&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; bgcolor=&amp;quot;#f6f9fb&amp;quot; style=&amp;quot;border:1px solid #8f8f8f;padding:0 .5em .5em .5em;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
== Working with EiffelStudio ==&lt;br /&gt;
&lt;br /&gt;
* [[Frequently Asked Questions]]&lt;br /&gt;
* [[Eiffel Glossary]]&lt;br /&gt;
* [[Eiffel Compilation Explained]]&lt;br /&gt;
* [[EiffelStudio Wish List]]&lt;br /&gt;
&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; bgcolor=&amp;quot;#f6f9fb&amp;quot; style=&amp;quot;border:1px solid #8f8f8f;padding:0 .5em .5em .5em;&amp;quot;|&lt;br /&gt;
== Developing EiffelStudio ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Projects|How to contribute: the Projects page]]&lt;br /&gt;
* [[:Category:Testing|EiffelStudio testing process: you can participate!]]&lt;br /&gt;
* [[EiffelStudio 6.1 Releases|Changelog of 6.x (development trunk)]]&lt;br /&gt;
* [[Repository|Getting the source: Subversion repository]]&lt;br /&gt;
* [[Compiling EiffelStudio]]&lt;br /&gt;
* [[:Category:Tools|Developer's tools]]&lt;br /&gt;
* [[Language_Roadmap|Language roadmap]]&lt;br /&gt;
* [[Environment_Roadmap|Environment roadmap]]&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; bgcolor=&amp;quot;#f6f9fb&amp;quot; style=&amp;quot;border:1px solid #8f8f8f;padding:0 .5em .5em .5em;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
== Community ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.eiffelroom.com EiffelRoom]&lt;br /&gt;
* [[Spread_the_word|Spread the word]]&lt;br /&gt;
* [[Eiffel Sites and Links]]&lt;br /&gt;
* [[Mailing Lists]]&lt;br /&gt;
* [[:Category:News|News]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Environment_Roadmap&amp;diff=9316</id>
		<title>Environment Roadmap</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Environment_Roadmap&amp;diff=9316"/>
				<updated>2007-08-09T00:04:16Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: EiffelStudio Roadmap moved to Environment Roadmap&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:EiffelStudio]]&lt;br /&gt;
&lt;br /&gt;
A [http://eiffelsoftware.origo.ethz.ch/index.php/Language_road_map separate page] gives the detailed roadmap for implementation of the '''full ISO/ECMA Eiffel standard'''.&lt;br /&gt;
&lt;br /&gt;
Roadmap information for EiffelStudio releases:&lt;br /&gt;
&lt;br /&gt;
==EiffelStudio 6.2 (2nd quarter 2008)==&lt;br /&gt;
* Attached mechanism&lt;br /&gt;
* Non-conforming inheritance&lt;br /&gt;
* Proper semantics of feature replication&lt;br /&gt;
* Ability to download libraries/applications from a website directly from EiffelStudio (see [[Configuration_Discovery|Discovering Configuration Files]])&lt;br /&gt;
&lt;br /&gt;
===Ports===&lt;br /&gt;
* Mac native support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==EiffelStudio 6.1 (4th quarter 2007)==&lt;br /&gt;
===UI===&lt;br /&gt;
* Customizable menus and toolbars&lt;br /&gt;
* Revisit the project settings window&lt;br /&gt;
* Keyboard support for code browsing/activation - Esc to go to context reference in editor, F9 to set a breakpoint, etc.&lt;br /&gt;
&lt;br /&gt;
===Library===&lt;br /&gt;
* Resource library&lt;br /&gt;
===Compiler===&lt;br /&gt;
* Progress bar for degree 6, C compilation and automatic precompilation&lt;br /&gt;
* Exception as object&lt;br /&gt;
* Object test syntax support&lt;br /&gt;
* Reading of UTF-8 Eiffel source file&lt;br /&gt;
&lt;br /&gt;
===Internal===&lt;br /&gt;
* Reduce size of C generated in workbench mode&lt;br /&gt;
&lt;br /&gt;
==EiffelStudio 6.0 (2nd quarter 2007)==&lt;br /&gt;
===UI===&lt;br /&gt;
* &amp;lt;del&amp;gt;Improved docking facilities in EiffelStudio to fully control the layout of EiffelStudio&amp;lt;/del&amp;gt;&lt;br /&gt;
* &amp;lt;del&amp;gt;Configurable pick-and-drop: user can choose between a contextual menu or pick-and-drop within the EiffelStudio environment&amp;lt;/del&amp;gt;&lt;br /&gt;
* &amp;lt;del&amp;gt;Internationalization support&amp;lt;/del&amp;gt;&lt;br /&gt;
* &amp;lt;del&amp;gt;Customizable shortcuts&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Compiler===&lt;br /&gt;
* &amp;lt;del&amp;gt;Warning/error for changed environment variables used in a project configuration file&amp;lt;/del&amp;gt;&lt;br /&gt;
* &amp;lt;del&amp;gt;&amp;quot;Hidden&amp;quot; clusters in libraries, clusters that are not accessible if the library is used (like libraries in libraries are not accessible).&amp;lt;/del&amp;gt;&lt;br /&gt;
* &amp;lt;del&amp;gt;Clean up &amp;quot;inheritance&amp;quot; rules for project settings (e.g. assertion levels of libraries)&amp;lt;/del&amp;gt;&lt;br /&gt;
* &amp;lt;del&amp;gt;Addition of binary and octal notation for manifest integers&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Internal===&lt;br /&gt;
* &amp;lt;del&amp;gt;Clean up delivery, names of tools, directory layout.&amp;lt;/del&amp;gt;&lt;br /&gt;
* &amp;lt;del&amp;gt;Get rid of *.wb files and store this in the user settings.&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EiffelStudio 5.7 (4th quarter 2006)==&lt;br /&gt;
* This is the first open source version of EiffelStudio. Look at the [http://eiffelsoftware.origo.ethz.ch/index.php/EiffelStudio_5.7_Releases release notes of 5.7] for more information.&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=EiffelStudio_Roadmap&amp;diff=9317</id>
		<title>EiffelStudio Roadmap</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=EiffelStudio_Roadmap&amp;diff=9317"/>
				<updated>2007-08-09T00:04:16Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: EiffelStudio Roadmap moved to Environment Roadmap&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Environment Roadmap]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Language_Roadmap&amp;diff=9312</id>
		<title>Language Roadmap</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Language_Roadmap&amp;diff=9312"/>
				<updated>2007-08-09T00:02:50Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: Language road map moved to Language Roadmap: Consistency&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Releases]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
The present page focuses on '''language''' constructs. Related information:&lt;br /&gt;
&lt;br /&gt;
*For the '''general EiffelStudio Roadmap''': the [http://eiffelsoftware.origo.ethz.ch/index.php/Roadmap relevant page].&lt;br /&gt;
*For a history of Eiffel development and its milestones: the [http://www.eiffel.com/general/ relevant page] at Eiffel Software.&lt;br /&gt;
*For a detailed list of the ISO/ECMA facilities listed in relation with various releases below, and when each of them is integrated into releases: the [[ECMA_Implementation|ISO/ECMA implementation page]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==OVERVIEW==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Eiffel language is described by an international standard, ECMA standard 367, &amp;lt;i&amp;gt;Eiffel: Analysis, Design and Programming Language&amp;lt;/i&amp;gt;. The first version was published in June of 2005; the current revision (revision 2) is from June, 2006. In November 2006 this standard was adopted by the International Standards Organization (ISO). The text of the ISO standard is identical to the text of the ECMA standard except for a few differences in front matter and typography. &amp;quot;ISO/ECMA Eiffel&amp;quot; denotes here the language defined by these standards.&lt;br /&gt;
&lt;br /&gt;
The text can be found, among other places, at [http://www.ecma-international.org/publications/standards/Ecma-367.htm this location] on the ECMA site.&lt;br /&gt;
&lt;br /&gt;
While ISO/ECMA Eiffel for a large part consolidates the current language as implemented by Eiffel compilers, a number of innovative aspects have preceded actual releases of the environment, and some are not implemented yet. '''Eiffel Software is committed to implementing the full ISO/ECMA Eiffel specification'''. Each successive release of the compiler brings the implementation closer to that goal. This effort started several years before the completion of the ISO/ECMA standard, indeed before the start of the ECMA process, with the experimental introduction of language revisions either as input to the committee or to validate the committee's ongoing work.&lt;br /&gt;
&lt;br /&gt;
The following sections present the plan for integration of all novelties, both in past versions and in future ones. The future part is for informative purposes only and subject to revision as the implementation work progresses.&lt;br /&gt;
&lt;br /&gt;
==HISTORICAL NOTE: UP TO EIFFEL 3==&lt;br /&gt;
&lt;br /&gt;
Earlier versions included:&lt;br /&gt;
*ISE Eiffel 1: 1986&lt;br /&gt;
*ISE Eiffel 2: 1988 (corresponds to the language used in the first edition of ''Object-Oriented Software Construction'').&lt;br /&gt;
*ISE Eiffel 2.3: 1989&lt;br /&gt;
*ISE Eiffel 3: 1990-1992 (corresponds to the language described in ''Eiffel: The Language'', Prentice Hall, 1992, and until the start of the ECMA committee the version of reference).&lt;br /&gt;
&lt;br /&gt;
==PAST RELEASES AFTER EIFFEL 3==&lt;br /&gt;
Note that the ECMA Eiffel committee (TC-39/TG4) started its work in mid-2002. Many of the language innovations and improvements introduced in the standard were, however, implemented by ISE Eiffel compiler versions starting in 1997.&lt;br /&gt;
&lt;br /&gt;
Only the releases that introduced significant language innovations are listed. For a more complete timeline see [http://www.eiffel.com/general/ here].&lt;br /&gt;
&lt;br /&gt;
===4.1 (June 1996)===&lt;br /&gt;
*Thread support&lt;br /&gt;
&lt;br /&gt;
===4.2 (February 1998)===&lt;br /&gt;
*Precursor mechanism; see [http://archive.eiffel.com/doc/manuals/technology/precursor/page.html initial description].&lt;br /&gt;
&lt;br /&gt;
===4.3 (March 1999)===&lt;br /&gt;
This release introduced a whole set of new constructs and mechanisms which later (with adaptations) provided the basis for much of the ISO/ECMA standard work. For a summary of its novelties see ''Extension Season'', a short [http://se.ethz.ch/~meyer/publications/joop/extensions.pdf article] published in the Journal of Object-Oriented Programming.&lt;br /&gt;
*Major new language mechanism: agents.&lt;br /&gt;
*Another key addition: tuples.&lt;br /&gt;
*New creation syntax (replacing the !! syntax by a more Eiffel-style form using the '''create''' keyword).&lt;br /&gt;
*Recursive generic constraints&lt;br /&gt;
*Generic conformance; see [http://archive.eiffel.com/doc/manuals/language/genconf/page.html description]. Note that this mechanism is generalized and superseded by ISO/ECMA Eiffel.&lt;br /&gt;
&lt;br /&gt;
===4.4 (July 1999)===&lt;br /&gt;
*Major new language mechanism: ''default_create'' semantics.&lt;br /&gt;
&lt;br /&gt;
===5.0 (July 2001)===&lt;br /&gt;
See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel50.html release notes].&lt;br /&gt;
*Extended and improved external syntax, later adopted by ISO/ECMA Eiffel.&lt;br /&gt;
*Verbatim strings, as introduced by ISO/ECMA Eiffel.&lt;br /&gt;
*Agent creation on '''Result''' and '''Current'''.&lt;br /&gt;
*New basic types: ''INTEGER_8'', ''INTEGER_16'', ''INTEGER_64'', ''WIDE_CHARACTER''.&lt;br /&gt;
&lt;br /&gt;
===5.1 (November 2001)===&lt;br /&gt;
See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel51.html release notes].&lt;br /&gt;
*INTEGER_64 constants&lt;br /&gt;
&lt;br /&gt;
===5.2 (October 2002)===&lt;br /&gt;
*Extended support for integer constants of sized types (''INTEGER_xx'' etc.) per ISO/ECMA Eiffel.&lt;br /&gt;
See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel52.html release notes].&lt;br /&gt;
&lt;br /&gt;
===5.4 (October 2003)===&lt;br /&gt;
&lt;br /&gt;
Major improvements in support for external language interfaces (C, C++...) per ISO/ECMA EIffel:&lt;br /&gt;
*Contracts on external features.&lt;br /&gt;
*Inline C.&lt;br /&gt;
Also initial, limited support for new conversion mechanism ('''convert''' keyword).&lt;br /&gt;
&lt;br /&gt;
See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel54.html release notes].&lt;br /&gt;
===5.5 (September 2004)===&lt;br /&gt;
&lt;br /&gt;
*Major new mechanism: full support for '''convert''' facility of ISO/ECMA Eiffel.&lt;br /&gt;
*'''Void''' becomes a keyword as per ISO/ECMA Eiffel (previously was a feature of class ''ANY'').&lt;br /&gt;
*Agent creation on operator features.&lt;br /&gt;
See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel55.html release notes].&lt;br /&gt;
&lt;br /&gt;
===5.6 (July 2005)===&lt;br /&gt;
Major ISO/ECMA additions:&lt;br /&gt;
*Alias features (replacing infix/prefix features, still supported of course for compatibility).&lt;br /&gt;
*Bracket features, allowing notations such as ''your_array'' [''i''] or ''your_dictionary'' [''HELLO''] as per ISO/ECMA Eiffel.&lt;br /&gt;
*Assigner commands, allowing e.g. ''your_array'' [''i''] := 5, or ''your_dictionary'' [''HELLO''] := &amp;quot;''GUTEN TAG''&amp;quot;, or ''a''.''item'' (''i'') := 3, as per ISO/ECMA Eiffel.&lt;br /&gt;
*Once manifest strings mechanism of ISO/ECMA Eiffel.&lt;br /&gt;
*Aligned and non-aligned verbatim strings as per ISO/ECMA Eiffel&lt;br /&gt;
*Manifest type expressions ({''YOUR_TYPE''} denotes a run-time object representing the given type).&lt;br /&gt;
*New sized types: ''NATURAL_8'', ''NATURAL_16'', ''NATURAL_32'', ''NATURAL_64'' as per ISO/ECMA Eiffel.&lt;br /&gt;
See [http://docs.eiffel.com/eiffelstudio/tools/eiffelstudio/reference/02_what_s_new/Eiffel56.html release notes].&lt;br /&gt;
&lt;br /&gt;
===5.7 (October 2006)===&lt;br /&gt;
*Major ISO/ECMA Eiffel addition: inline agents.&lt;br /&gt;
*Major semantics update per ISO/ECMA Eiffel: new &amp;quot;expanded&amp;quot; semantics.&lt;br /&gt;
*Major ISO/ECMA Eiffel addition: named tuples.&lt;br /&gt;
*Unicode support: CHARACTER_32, per ISO/ECMA Eiffel.&lt;br /&gt;
*Keyword &amp;quot;is&amp;quot; no longer required (but still supported)&lt;br /&gt;
See [http://docs.eiffel.com/eiffelstudio/docs_no_content.html release notes].&lt;br /&gt;
&lt;br /&gt;
==FUTURE RELEASES==&lt;br /&gt;
&lt;br /&gt;
Starting with 6.0 the release cycle is fixed: two official releases a year, &amp;quot;Northern Spring&amp;quot; in May (June in 2007) and &amp;quot;Southern Spring&amp;quot; in November (with Eiffel, it's Spring Eternal). In addition, beta releases continue to be provided at frequent intervals for the EiffelStudio open-source development community.&lt;br /&gt;
&lt;br /&gt;
===The 2007 Spring Release: 6.0 (June)===&lt;br /&gt;
This release introduces a number of critical additions to the EiffelStudio environment; on the language front it introduces a number of important ISO/ECMA Eiffel mechanisms with a focus on not breaking existing code. &lt;br /&gt;
&lt;br /&gt;
*&amp;quot;Flat&amp;quot; class checking: type checking of features performed in every class, even for inherited features.&lt;br /&gt;
::For example ''x'' := ''y'' in a routine ''r'' could be valid in a class ''C'', but in a descendant of ''C'' that redefines the type of ''x'' or ''y'' it might become invalid.&lt;br /&gt;
::(The type policy of ISO/ECMA Eiffel explicitly specifies that every feature must be valid in every class that has it.)&lt;br /&gt;
&lt;br /&gt;
*`~' symbol for object equality. `''a'' ~ ''b'' means ''a''.''is_equal'' (''b'') (or ''equal'' (''a'', ''b'')) and follows the redefinitions of ''is_equal''. This goes with a change of signature for ''is_equal'', reducing the risk of catcalls: ''is_equal'' (''x'':'' ANY'') rather than with an argument of type `'''like''' '''Current''''.&lt;br /&gt;
&lt;br /&gt;
*Multiple generic constraints: the ability to specify that a formal generic parameter of a class represents a type that conforms to several listed types. For example&lt;br /&gt;
   '''class''' ''SORTABLE_VECTOR'' [''G'' -&amp;gt; {''NUMERIC'', ''COMPARABLE''}] ... &lt;br /&gt;
&lt;br /&gt;
meaning that ''SORTABLE_VECTOR'' [''T''] is only valid if ''T'' is a descendant of both ''NUMERIC'' and ''COMPARABLE''.&lt;br /&gt;
&lt;br /&gt;
===The 2007 Fall Release: 6.1 (November)===&lt;br /&gt;
This release will be a critical upgrade towards full ISO/ECMA Eiffel. Its specific focus is to make a major advance in what is already one of the principal Eiffel advantages: the ability to produce highly reliable software. ISO/ECMA Eiffel goes further than any existing programming language through a number of mechanisms including in particular:&lt;br /&gt;
&lt;br /&gt;
*The [http://se.ethz.ch/~meyer/publications/lncs/attached.pdf attached type] mechanism guaranteeing the absence of any &amp;quot;void calls&amp;quot; (also known as null pointer errors). 6.1 will introduce the first step towards full implementation of this mechanism, with special attention on facilitating migration to void-safe programs. A [http://eiffelsoftware.origo.ethz.ch/index.php/Attached_types working document] describes the strategy towards this goal.&lt;br /&gt;
&lt;br /&gt;
Unlike 6.0, release 6.1 may introduce &amp;quot;code-breaking&amp;quot; changes, necessary to gain full advantage of the most advanced mechanisms of ISO/ECMA Eiffel. The principles are:&lt;br /&gt;
&lt;br /&gt;
*In all cases provide a backward-compatibility option so that all existing code will still compile and run.&lt;br /&gt;
*Allow incremental introduction of language innovations, and the corresponding checking and update of code as necessary, through fine-tuned compilation options.&lt;br /&gt;
*Provide support for migration, e.g. through automatic or semi-automatic translation tools integrated in the refactoring mechanism of EiffelStudio.&lt;br /&gt;
*Clearly explain to all Eiffel developers the benefit of the needed changes, and help them through the process.&lt;br /&gt;
*Provide these explanations long in advance (starting in April 2007 for release in November).&lt;br /&gt;
*As much as possible concentrate all potentially breaking or delicate changes on 6.1, so that developers go through no more than one update process. Previous and subsequent releases are free from such changes&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Talk:Language_Roadmap&amp;diff=9314</id>
		<title>Talk:Language Roadmap</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Talk:Language_Roadmap&amp;diff=9314"/>
				<updated>2007-08-09T00:02:50Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: Talk:Language road map moved to Talk:Language Roadmap: Consistency&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Some rather trivial remarks:&lt;br /&gt;
&lt;br /&gt;
In England, June is Summer, not Spring. In Australia, Winter, I would think.&lt;br /&gt;
&lt;br /&gt;
I am rather surprised by the version numbering changes - 5.7 and 6.1 are major changes - either one would have been a more obvious candidate for 6.0.&lt;br /&gt;
&lt;br /&gt;
:Wikipedia on Spring: &amp;quot;In all technicality, spring begins on the Vernal Equinox (March 20th or 21st in the Northern Hemisphere and September 22 or 23 in the Southern) and lasts till Summer Solstice (June 21st or 22nd in the Northern Hemisphere and December 21st or December 22nd in the Southern)&amp;quot;. &lt;br /&gt;
:Anyone who has lived in Australia knows that people there are used to and tolerant of the mirrored semantics for Spring and Summer.&lt;br /&gt;
&lt;br /&gt;
That is a very odd &amp;quot;technicality&amp;quot;. The summer solstice is mid-summer day, astronomically. What other &amp;quot;technicality&amp;quot; is there?&lt;br /&gt;
Anyway, I am well off topic here. To get back on-topic - it is nice to see a clear timetable for the way ahead.&lt;br /&gt;
&lt;br /&gt;
--[[User:Paulb|Paulb]] 19:46, 12 April 2007 (CEST) Bertrand, section 2.10 5.6 has the same date as 2.9 5.5.&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	<entry>
		<id>https://dev.eiffel.com/index.php?title=Language_road_map&amp;diff=9313</id>
		<title>Language road map</title>
		<link rel="alternate" type="text/html" href="https://dev.eiffel.com/index.php?title=Language_road_map&amp;diff=9313"/>
				<updated>2007-08-09T00:02:50Z</updated>
		
		<summary type="html">&lt;p&gt;Bertrand Meyer: Language road map moved to Language Roadmap: Consistency&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Language Roadmap]]&lt;/div&gt;</summary>
		<author><name>Bertrand Meyer</name></author>	</entry>

	</feed>