<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sib">
	<id>https://sibwiki.org/index.php?action=history&amp;feed=atom&amp;title=Eiffel</id>
	<title>Eiffel - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://sibwiki.org/index.php?action=history&amp;feed=atom&amp;title=Eiffel"/>
	<link rel="alternate" type="text/html" href="https://sibwiki.org/index.php?title=Eiffel&amp;action=history"/>
	<updated>2026-05-31T12:24:59Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://sibwiki.org/index.php?title=Eiffel&amp;diff=85953&amp;oldid=prev</id>
		<title>Yaroslav: Bot: Automated import of articles</title>
		<link rel="alternate" type="text/html" href="https://sibwiki.org/index.php?title=Eiffel&amp;diff=85953&amp;oldid=prev"/>
		<updated>2026-05-30T21:59:43Z</updated>

		<summary type="html">&lt;p&gt;Bot: Automated import of articles&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторонка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{YouTube|JfeER0PU3_E|width=300|height=250}}&lt;br /&gt;
&lt;br /&gt;
== Общие сведения ==&lt;br /&gt;
Eiffel (Эйфель) — это строго типизированный объектно-ориентированный язык программирования, разработанный в середине 1980-х годов Бертраном Мейером. Появление инструмента пришлось на период максимального роста интереса к объектно-ориентированной парадигме в индустрии разработки программного обеспечения. Фундаментальной архитектурной и идеологической особенностью языка является встроенная на уровне синтаксиса поддержка методологии «проектирования по контракту» (Design by Contract).&lt;br /&gt;
&lt;br /&gt;
== История создания ==&lt;br /&gt;
Язык был назван в честь выдающегося французского инженера Гюстава Эйфеля. Выбор названия концептуально отражает главную идею создателя языка: подобно тому, как Эйфелева башня была быстро и надежно собрана из небольшого числа стандартизированных деталей, язык Эйфель призван обеспечить быстрое и экономически эффективное конструирование крупных и надежных программных комплексов на основе небольшого количества независимых программных модулей.&lt;br /&gt;
&lt;br /&gt;
В отличие от гибридных языков того времени, которые надстраивали объектные концепции над уже существующими процедурными парадигмами (как это было реализовано в C++ или Object Pascal), Эйфель проектировался изначально как исключительно объектно-ориентированный инструмент с идеальным, логически выверенным дизайном.&lt;br /&gt;
&lt;br /&gt;
Однако на ранних этапах развития язык получил относительно слабое распространение. Это было обусловлено коммерческой политикой: первые компиляторы распространялись за высокую стоимость. Разработчикам приходилось вкладывать значительные средства не только в приобретение самого инструмента, но и в дополнительное обучение концепциям контрактного программирования, в то время как практические преимущества новой методологии были для многих инженеров неочевидны. Бесплатные версии компиляторов и трансляторов стали появляться значительно позже.&lt;br /&gt;
&lt;br /&gt;
== Парадигмы и архитектурные особенности ==&lt;br /&gt;
Эйфель является полностью объектно-ориентированным языком со статической (статистической в первоначальном контексте математической проверки) типизацией и абсолютной типобезопасностью. Важной концептуальной чертой является то, что абсолютно все типы данных в языке, включая базовые (например, целочисленные типы — Integer), реализованы как полноценные классы.&lt;br /&gt;
&lt;br /&gt;
Язык поддерживает полный спектр возможностей классического объектно-ориентированного программирования, включая множественное наследование, переопределение операций, а также обобщенное программирование во всех его видах. &lt;br /&gt;
&lt;br /&gt;
В архитектуру встроено автоматическое управление памятью: в языке полностью отсутствует понятие деструктора. Объект автоматически уничтожается встроенным сборщиком мусора, когда на него не остается ни одной активной ссылки в исполняемой программе.&lt;br /&gt;
&lt;br /&gt;
Дополнительно язык поддерживает механизм «агентов» — специализированных объектов, которые инкапсулируют внутри себя вычисления (разовые процедуры) для их совместного использования и децентрализованной инициализации.&lt;br /&gt;
&lt;br /&gt;
== Проектирование по контракту ==&lt;br /&gt;
Главной методологической особенностью языка является глубокая интеграция концепции «контрактного программирования». Данная концепция заимствует терминологию из гражданского права и обязывает проектировщика формально и точно специфицировать поведение программных модулей, функций и объектов.&lt;br /&gt;
&lt;br /&gt;
Контракт в языке Эйфель включает три основных элемента:&lt;br /&gt;
&lt;br /&gt;
Предусловия (preconditions) — строгие обязательства, которые должны быть гарантированно выполнены до начала вызова метода.&lt;br /&gt;
Постусловия (postconditions) — конкретные свойства, результаты и состояния, которые гарантированно должны присутствовать в системе после завершения выполнения метода.&lt;br /&gt;
Инварианты (invariants) — обязательства и фундаментальные свойства объекта, которые должны непрерывно соблюдаться объектом-поставщиком при получении и обработке любого сообщения.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис и правила оформления кода ==&lt;br /&gt;
Синтаксис языка визуально напоминает язык Алгол и родственные ему Паскаль или Си, что делает его интуитивно понятным для большинства разработчиков. Однако создатель языка ввел строгие, беспрецедентные правила оформления программного кода, призванные максимизировать его академическую читабельность.&lt;br /&gt;
&lt;br /&gt;
В классическом Эйфеле действуют следующие стилистические нормы:&lt;br /&gt;
Служебные (ключевые) слова набираются исключительно жирным шрифтом.&lt;br /&gt;
Идентификаторы выделяются курсивом.&lt;br /&gt;
Все имена классов пишутся исключительно прописными (большими) буквами, переменные — строчными (маленькими), а константы начинаются с заглавной буквы.&lt;br /&gt;
Категорически запрещено использование аббревиатур, венгерской или польской нотаций. Имена переменных должны быть полными и семантически значимыми, чтобы исключить любое непонимание их назначения со стороны стороннего разработчика.&lt;br /&gt;
В начале описания каждого класса в обязательном порядке указывается его автор.&lt;br /&gt;
После заголовка каждой процедуры обязательно документируется результат ее действия.&lt;br /&gt;
&lt;br /&gt;
Точка с запятой может использоваться для завершения любой синтаксической конструкции, однако в Эйфеле ее использование не является строго обязательным.&lt;br /&gt;
&lt;br /&gt;
В языке реализована политика жесткого синтаксического минимализма в отношении управляющих конструкций. Существует только одна конструкция цикла (на базе условия until), в которой строго и однозначно определены блоки начальной инициализации, условия выхода и тела цикла. Альтернативные виды циклов сознательно исключены для предотвращения запутывания логики.&lt;br /&gt;
&lt;br /&gt;
== Примеры программного кода ==&lt;br /&gt;
Для Эйфеля характерна прозрачная структура описания модулей. Пример концептуальной структуры простейшей программы (вывод приветствия) демонстрирует лаконичность языка:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class HELLO&lt;br /&gt;
create&lt;br /&gt;
    make&lt;br /&gt;
feature&lt;br /&gt;
    make&lt;br /&gt;
        do&lt;br /&gt;
            -- Исполняемый код программы&lt;br /&gt;
        end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В данном примере объявляется класс HELLO, а в разделе create задается его базовый конструктор make. Раздел feature (свойства и методы класса) содержит непосредственно тело конструктора, обособленное ключевыми словами do и end.&lt;br /&gt;
&lt;br /&gt;
Пример работы с более сложными структурами (комплексными числами) иллюстрирует объявление типизированных свойств:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class COMPLEX&lt;br /&gt;
feature&lt;br /&gt;
    r, i: REAL&lt;br /&gt;
feature&lt;br /&gt;
    make (r_val, i_val: REAL)&lt;br /&gt;
        do&lt;br /&gt;
            r := r_val&lt;br /&gt;
            i := i_val&lt;br /&gt;
        end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменные в классе объявляются с указанием типа через двоеточие, что визуально идентично синтаксису Паскаля. Однако типы REAL или COMPLEX в данном случае выступают полноценными объектами. В языке также предусмотрена мощная возможность переопределения стандартных математических операций (например, символа сложения) для пользовательских классов, что позволяет инженерам создавать собственные алгебраические типы данных.&lt;br /&gt;
&lt;br /&gt;
== Экосистема и компиляторы ==&lt;br /&gt;
Исторически большинство компиляторов языка Эйфель представляли собой кросс-трансляторы, генерирующие на выходе исходный код на языке Си. Эйфель выступал в роли высокоуровневого скрипта, который затем компилировался стандартными Си-компиляторами (как для платформ DOS, так и для Windows) под целевую аппаратную архитектуру.&lt;br /&gt;
&lt;br /&gt;
В процессе эволюции программной экосистемы появились автономные компиляторы, генерирующие непосредственно машинный код (например, среда Visual Eiffel, поддерживающая инструменты визуального программирования пользовательских интерфейсов). &lt;br /&gt;
&lt;br /&gt;
Для интеграции с платформой Microsoft .NET была создана мощная среда Eiffel Studio, которая компилирует исходный текст во внутренний промежуточный язык Microsoft (CIL — Common Intermediate Language). Кроме того, существуют независимые трансляторы (в частности, проект SmartEiffel), позволяющие переводить код, написанный на Эйфеле, в байт-код виртуальной машины Java, что обеспечивает языку максимальную кроссплатформенность в современной корпоративной разработке.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
[[Swift]]&lt;br /&gt;
[[Lua]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Языки программирования]]&lt;br /&gt;
[[Category:Объектно-ориентированное программирование]]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=JfeER0PU3_E Смотреть видео]&lt;/div&gt;</summary>
		<author><name>Yaroslav</name></author>
	</entry>
</feed>