Eiffel is an object-oriented programming language designed by Bertrand Meyer (an object-orientation proponent and author of Object-Oriented Software Construction) and Eiffel Software. Meyer conceived the language in 1985 with the goal of increasing the reliability of commercial software development; the first version becoming available in 1986. In 2005, Eiffel became an ISO-standardized language.
The design of the language is closely connected with the Eiffel programming method. Both are based on a set of principles, including design by contract, command–query separation, the uniform-access principle, the single-choice principle, the open–closed principle, and option–operand separation.
Many concepts initially introduced by Eiffel later found their way into Java, C#, and other languages. New language design ideas, particularly through the Ecma/ISO standardization process, continue to be incorporated into the Eiffel language.
The key characteristics of the Eiffel language include:
An object-oriented program structure in which a class serves as the basic unit of decomposition.
Design by contract tightly integrated with other language constructs.
Automatic memory management, typically implemented by garbage collection.
Inheritance, including multiple inheritance, renaming, redefinition, "select", non-conforming inheritance, and other mechanisms intended to make inheritance safe.
Constrained and unconstrained generic programming
A uniform type system handling both value and reference semantics in which all types, including basic types such as INTEGER, are class-based.
Static typing
Void safety, or static protection against calls on null references, through the attached-types mechanism.
Agents, or objects that wrap computations, closely connected with closures and lambda calculus.
Once routines, or routines evaluated only once, for object sharing and decentralized initialization.
Keyword-based syntax in the ALGOL/Pascal tradition but separator-free, insofar as semicolons are optional, with operator syntax available for routines.