Eiffel is a statically typed object-oriented programming language closely related with the programming method of the same name. Both are based on a set of principles like Design by Contract, Command-Query Separation, Uniform Access, etc. Many concepts initially introduced by Eiffel find their way to C#, Java and other languages. The program in Eiffel can be compiled unchanged for almost any target platform.
Background
The design goal behind the Eiffel language, libraries, and programming methods is to enable programmers to create reliable, reusable software modules. Eiffel supports multiple inheritance, genericity, polymorphism, encapsulation, type-safe conversions, and parameter covariance. Eiffel's most important contribution to software engineering is design by contract (DbC), in which assertions, preconditions, postconditions, and class invariants are employed to help ensure program correctness without sacrificing efficiency.
Eiffel's design is based on object-oriented programming theory, with only minor influence of other paradigms or concern for support of legacy code. Eiffel formally supports abstract data types. Under Eiffel's design, a software text should be able to reproduce its design documentation from the text itself, using a formalized implementation of the "Abstract Data Type". See wikipedia for more information.
Standards
The Eiffel language definition is an international standard ISO/IEC DIS 25436. The latter is identical to the version of ECMA International: Standard ECMA-367, Eiffel: Analysis, Design and Programming Language.
Key characteristics
- 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 similar to ALGOL/Pascal but separator-free, insofar as semicolons are optional, with operator syntax available for routines.
- Case insensitivity.
- Built-in support for concurrency using SCOOP (Simple Concurrent Object-Oriented Programming) model.
Resources
- Programming environments and tools:
- Contemporary: EiffelStudio, Gobo.
- Former: Liberty Eiffel, SmartEiffel, Visual Eiffel, tecomp.
- Community: Eiffel.org.