This page is about language compatibility for SmartEiffel. You can find here the most important differences between SmartEiffel and other similar languages.
Unique peculiarities of SmartEiffel
SmartEiffel has some features not implemented by any other implementation:
- Case sensitivity: "abc", "Abc" and "ABC" are different identifiers
- Compiler-enforced casing rules: Class names must be all-uppercase; camelCase is not allowed.
- ANY is the root of the inheritance tree, but not of the conformance tree.
- Conformance rules related to expanded types.
- Non-conforming inheritance. See Conforming and non-conforming inheritance
- The notation for non-conforming inheritance is "insert <Type_Class>".
- New operators for run-time type checking. See Dynamic type testing
- Removed the danger of automatic boxing (object allocation on assignment of expanded types to reference entities)
- Lots of additional tools in the library. See The SmartEiffel general purpose library
- Contravariant rule for agent arguments.
Differences between ETL2 and SmartEiffel
SmartEiffel was at some time based on ETL2; as all the members of the Eiffel language family, it has grown and improved on that, adding several features (some of them also implemented by other compilers)
Differences between SmartEiffel and ECMA Eiffel
The ECMA Eiffel specification does not describe any current implementation at the time of writing this (november 2005). Despite being an standard it describes several features that fork away from what has been always called "Eiffel". The following aspects of ECMA Eiffel will not be implemented in SmartEiffel:
- Conversions (implemented in ISE Eiffel)
- Feature aliases (implemented in ISE Eiffel)
- Bracket indexing (implemented in ISE Eiffel)
- No-variant agent arguments.
On the other hand, the following features were taken from the ECMA specification process:
- Non-conforming inheritance (although the notation is different)