Eiffel (язык программирования)
Eiffel, объектный язык программирования, представлен Б. Мейером в 1986 г., назван в честь французского инженера Г. Эйфеля. В Eiffel впервые был реализован метод контрактного программирования. Распространяется компанией Eiffel Software. В январе 2023 г. компания выпустила стабильный релиз системы и среды программирования EiffelStudio 22.12.
Выбор названия обусловлен следующими особенностями проектирования и возведения Эйфелевой башни:
башня была быстро возведена (за два года) из стандартизованных элементов без превышения заложенного бюджета;
будучи задумана как временная постройка в 1887 г., продолжает использоваться и в 2023 г., в другую технологическую эпоху.
Таким образом создатели языка Eiffel и среды программирования EiffelStudio позиционировали свои продукты как инструменты для быстрого и бюджетного создания крупных программных систем для долговременного применения, пользуясь сравнительно небольшим набором средств языка (включая библиотеки).
Существуют дистрибутивы (версии для установки) среды EiffelStudio на разные платформы (операционные системы Windows, Linux для разных компьютерных архитектур). В реализациях языка от Eiffel Software исходный код сначала транслируется (преобразуется) в эквивалентный промежуточный программный код (на языке C), а потом промежуточный код компилируется в двоичный код исполняемой программы. Трансляция Eiffel в промежуточный код позволяет добиться независимости от платформы.
Контрактное программирование
Для повышения надёжности (корректности и отказоустойчивости) программирования в языке Eiffel предложен механизм контрактного программирования. Название явно указывает на аналогию с взаимодействием по контракту, которое подобно контрактным отношениям в бизнесе: клиент (англ. client), запросив что-то у исполнителя (англ. supplier), должен гарантировать предусловия, а исполнитель – гарантировать выполнение постусловия. Например, объект-клиент должен передать делимое число и ненулевой делитель, а объект-исполнитель – вернуть клиенту результат деления делимого на делитель: полуформально клиентскую часть (предусловие) можно записать как «передаваемые делимое и делитель являются числами, причём делитель отличен от нуля», а исполнительскую часть (постусловие) – как «произведение возвращаемого частного и переданного делителя равно переданному делимому». Контрактное программирование выросло из формальной верификации, формальной спецификации и логики Флойда – Хоара, оно позволяет «бесшовно» (т. е. прямо в коде) документировать (самодокументируемость) и специфицировать программу, подготовить её для тестирования и формальной верификации.
Основные области применения и популярность языка
Контрактное программирование позволяет использовать Eiffel при разработке критического программного обеспечения: критического по миссии (например, в аэрокосмической отрасли), по безопасности (например, в здравоохранении), по информационной защите (например, в банковско-финансовой сфере).
Среди клиентов Eiffel Software такие компании, как Boeing и Dell EMC. Поскольку Eiffel Software занимается только развитием и продажей непосредственно языка и инструментов программирования на нём, популярность этого языка среди широких кругов программистов остаётся довольно низкой. Однако есть определённый опыт использования языка в образовании как за рубежом (Швейцарская высшая техническая школа Цюриха), так и в России (Университет Иннополис).
Другие важные особенности и характеристики языка
Eiffel основан на классах (а не на объектах-прототипах, как например JavaScript). Это означает, что объекты в Eiffel являются индивидуальными «значениями», представителями класса как типа данных. (В языках, основанных на прототипах, объекты строятся по образцу других объектов, например «декорируют» их.)
Синтаксис Eiffel использует традицию Algol и Pascal для присваивания («:=»), для многих ключевых слов и использует «;» как необязательный разделитель (между операторами в одной строке), но не как обязательную часть каждого оператора (как, например, в Java). Особенностью языка является нечувствительность к регистру клавиатуры при наборе программы (хотя есть рекомендации стиля) и унифицированный подход к полям и методам классов: язык не делает синтаксических различий между ними.
В Eiffel все типы (включая базовые – целые числа и др.) являются классами, а классы являются основной единицей декомпозиции каждой программы (например, вместо функций). Язык допускает множественное наследование производного класса от двух или более классов: если какое-либо поле или метод (англ. feature) определены в нескольких базовых классах, то из какого класса наследуется данная feature, уточняется программистом.
Язык Eiffel имеет статическую типизацию (во время компиляции программы) и поэтому является типобезопасным (не возникает коллизии определения типа и семантики значений во время исполнения программы). Так как в Eiffel нет адресной арифметики (т. е. возможности вычислять адреса в статической и динамической памяти), то осуществляется автоматическая сборка мусора (и управление памятью во время исполнения программы). При этом система типов Eiffel позволяет использовать как значащие типы данных, так и ссылочные типы данных (со статической защитой от вызовов по пустой ссылке).