Eiffel is a statically typed, object-oriented programming language designed by Bertrand Meyer and his team at ETH Zurich. It has a design philosophy emphasizes conceptual purity, ease of use, and genericity. Eiffel's compiler produces efficient code; it is also possible to write programs in Eiffel that run on the Java virtual machine. Eiffel's type system distinguishes between references (which point to objects) and values (which are the objects pointed to). This allows for two important properties: first, objects can be passed by reference without having to worry about copying them, and second, it is possible to declare object invariants that must be true at all times, which helps to ensure the correctness of programs. Eiffel also has features that make it well-suited for large-scale software development projects. These include its support for contracts (which allow programmers to specify how modules should interact), its powerful inheritance mechanism, and its support for multiple dispatches (which allows different functions to be invoked based on the type of the arguments).