Ајфел је ИСО-стандаризован, објектно-оријентисан програмски језик дизајниран од стране Бетранда Мајера (заговорник објектне-оријентације и аутор Конструкције објектно-оријентисаног софтвера) и Ајфел софтвер. Дизајн језика је најближе повезан са методом Ајфел програмирања. Оба су базирана на скупу принципа, укључујући дизајн по уговору, одвајањем команде упита, принцип јединственог-приступа, принцип једноставног-избора, отворено-затворени принцип, и опција-операнд раздвајања.

Многи концепти првобитно представљени преко Ајфела касније су дошли до Јаве, С#, и осталих језикаFormal Specification Languages: Eiffel, Denotational Semantics, Vienna Development Method, Abstract Machine Notation, Petri Net, General Books, 2010. Нове идеје дизајна језика, посебно кроз Екма/ИСО стандарзациони процес, настављају да буду инкорпорисани у Ајфел језик.

Карактеристике Кључне карактеристике Ејфел језика укључују: Објектно-оријентисана структура програма у којој класа служи као класичан члан декомпозиције . Дизајн по уговору чврсто интегрисан са осталим језичким конструкцијама Аутоматско управљање меморијом, обично се спроводи колекција отпадака. Наслеђивање, укључујући вишеструко наслеђивање, преименовање, редефинисање, "изаберите", неусаглашено наследство, и други механизми намењених за сигурно наследство . Ограничено и неограничено генеричко програмирање Јединствени тип система који управља вредностима и референтном семантиком у којима су све врсте, укључујући основне врсте, као што су цели бројеви, су класе на бази. Статично куцање Безбедност празнине, или статичка заштита од позива на нулте референце, кроз механизам приложених-типова. Агенти, или објекти који обухватају израчунавања, блиско повезани са затварањем и ламбда израчунавањем. Када рутине, или рутину процењују само једном, за дељење објекта и децентрализоване иницијализације. Кључна реч-заснована на синтакси у АЛГОЛ / Паскал традицији, али слобнодног-раздвакача, утолико што зарез је необавезан, са синтаксом оператера доступним за рутине. Случај неосетљивости Једноставно Истовремено Објектно-оријентисано програмирање (SCOOP) олакшава стварање више, истовремено активних извршења возила на нивоу апстракције изнад специфичних детаља ових возила (нпр више нити без конкретног управљања мутексом).

Циљеви дизајна Ајфел наглашава декларативне наредбе преко процедурног кода и покушава да елиминише потребу за књиговодством упутстава.

Ајфел избегава трик кодове или технике кодова намењене за оптимизацију савета компилатора. Циљ није само да се код учини читљивијим, али такође да дозволи програмерима да се концетришу на важне аспекте програма да се заглаве у детаљима имплементације. Ајфелова једноставност је намењена да промовише једноставне, прошириве, поново користиве и поуздане одговоре рачунарских проблема. Компилатори за рачунарске проблеме написани у Ајфелу пружају изванредне технике оптимизације, као што је аутоматско облагање, који ослобађа програмера од дела оптимизације терета.

Позадина Ајфел је оригинално развијен преко Ајфел софтвера, компанија основана од стране Бертранда Мајера. Софтвер објектно-оријентисане конструкције садржи детаљан третман концепата и теорије о објектној технологији која је довела до Ајфеловом дизајна.

Циљ дизајна иза Ајфеловог језика, библиотека, и метода програмирања је да омогући програмерима да направе поузданане, поново користиве модуле софтвера. Ајфел подржава више наследства, генеричко програмирање, полиморфизам, енкапсулацију, и параметарску покривеност. Ајфелова најважнија донација софтверском инжењерству је дизајн по уговору (ДбЦ), у коме потврде, предуслови, постуслови и варијанте класи су направљене да осигурају тачност програма без жртвовања ефикасности.

Ајфелов дизајн је базиран на теорији објектно-оријентисаног програмирања, са само већим утицајем других парадигми или забринутости за подршку застарелог кода. Ајфел формално подржава апстрактне типове података. Под Ајфеловим дизајном, текст је требало да буде у могућности да производи свој дизајн документације из текста, користећи формализовану имплементацију "Апстрактни тип података".  

Имплементације и окружења АјфелСтудио је интегрисано развојно окружење доступно преко отвореног кода или комерцијалне лиценце. Омогућује објектно оријентисано окружење за софтверско инжењерство. АјфелЕнвижн је додатак за Мајкрософт Вижуал Студио који дозвољава корисницима да уређују, састављају и дебагују Ајфелове пројекте из Мајскрософтовог Вижуал Студиа ИДЕ. Пет осталих отворених кодова имплементација су доступни: "Ајфелов Компилатор" тецомп, Гобо Ајфел, ПаметниАјфел—ГНУ имплементација, базирана на старијим верзијама језика—, СлободниАјфел—базиран на компилатору ПаметногАјфела— и Визујелни Ајфел.

Неколико осталих програмских језика уграђују елементе први пут представљене у Ајфелу. Sather, на пример, је оригинално базиран на Ајфелу али се скоро раширио, и сада укључује неколико карактеристика функционалног програмирања. Интерактивни-учитељски језик Блуе, претходник од БлуеЈ, је такође базиран на Ајфелу. Епл алатка медиа укључује Епл медиа језик базиран на Ајфелу.

Спецификације и стандарди Дефиниција Ајфел језика је интернационални стандард ИСО-а. Стандард је развио ЕЦМА Интернационал, који је први дозволио стандард 21. јуна 2005 као Стандард ЕЦМА-367, Ајфел: Анализа, Дизајн и Програмски Језик. Јуна 2006., ЕЦМА и ИСО су усвојили другу верзију. Новембра 2006., ИСО је први пут објавио ту верзију. Стандард може бити нађен и бесплатно коришчен на ЕЦМА сајту.ECMA International: Standard ECMA-367 —Eiffel: Analysis, Design and Programming Language 2nd edition (June 2006); available online at www.ecma-international.org/publications/standards/Ecma-367.htm ИСО верзијаInternational Organisation for Standardisation: Standard ISO/IEC DIS 25436, available online at  је идентична у сваком смислу осим у форматирању.

Ајфел софтвер, "Ајфел Компилатор" текомп и развојник Ајфелове-библиотеке  Гобо је починио имплементовање стандарда; Ајфел софтвер АјфелСтудио 6.1 и "Ајфел Компилатор" текомп је имплементовао неке нове механизме —тачније, дворедни агенти, додељивачи команди, носач нотација, неусаглашено наследство и прикачене типове. ПаметниАјфел теам се склонио од овог стандарда како би креирао своју верзију језика, за коју верују да је близа оригиналном стилу Ајфела. Објекти алата нису откривени иако будуће верзије Ајфел компилатора ће бити са стандардом. СлободниАјфел имплементује дијалекат негде између ПаметногАјфела језика и стандарда. 

Стандард наводи следеће, претходник спецификације Ајфеловог-језика: Бертранд Мајер: Ајфел: Језик, Прентис Хол, друго издање, 1992 (прво издање: 1991) Бертранд Мајер: Стандарди Ајфел (поновна верзија претходног уноса), одлазећи, 1997–данас, на Бертранд Мајеровој ETL3 страници , i Бертранд Мајер: Конструкција објектно-оријентисаног софтвера, Прентис Хол: прва едиција, 1988; друга едиција, 1997.

Тренутна верзија стандарда из јуна 2006. садржи неке недоследности (нпр. коваријантне редефиниције). ЕЦМА комитет није још прогрласио било коју временску линију и дирекцију како решити те недоследности. 

Синтакса и семантика

Укупна структура Ајфелов "систем" или "програм" је колекција класа. Изнад ниво класа, Ајфел дефинише кластер, који је суштински група класа, и могуће подкластер (угњежђени кластери). Кластери нису језичка синтаксна конструкција, већ стандардна организациона конвеција. Типично Ајфел програм ће бити организован са сваком класом у различитим фајловима, и сваки кластер у директоријум садржећи фајлове класе. У овој организацију, подкластери су поддиректоријуми. На пример, под стандардним организационим и конвецијама футрола,  x.e може бити име фајла који дефинише класу под именом X.

Класа садржи карактеристике, који су слични "рутинама", "члановима", "атрибутима" или "методама" у објектно-оријентисаним програмским језицима. Класа такође дефинише њене инваријанте, и садржи друге особине, као што су "белешке" секција за документацију и метаподатке. Ајфелови стандарди типа података, као што су  INTEGER, STRING иARRAY, су сви сами од себе класе.

Сваки систем мора имате класу означену као "корен", са једном од његових креација процедура означених као "корен процедуре". Извршење система се састоји од стварања инстанце корена класе и извршење корена процедуре. Обично, радећи то ствара нове објекте, позива нове карактеристике, и тако даље. 

Ајфел има пет класичних инструкција извршења: додела, креирање објекта, позив рутине, услов и понављање. Ајфелове стуктуре контроле су стриктне у спровођењу структурног програмирања: сваки блок има тачно један улаз и тачно један излаз.

Одређивање оквира За разлику од многих објкетно-оријентисаних језика, али као Smalltalk, Ајфел не дозвољава било коју доделу унутар поља објекта, осим унутар карактеристика објекта, који је практична апликација принципа скривања информација или апстракција података, захтевајући формална сучеља за мутацију података. Да би ставио у језик других објектно-оријентисаних програмских језика, сва Ајфелова поља су "приватна", и "постављачи" треба да модификују вредности. Поента све овога је да "постављачи" могу, и обично раде, имплементовање инваријанти за које Ајфел даје синтаксу.

Док Ајфел не дозвољава директан пристум карактеристикама класе од стране клијента класе, оно дозвољава дефиницију "команде додељивања", као што је: some_attribute: SOME_TYPE assign set_some_attribute

set_some_attribute (v: VALUE_TYPE) -- Set value of some_attribute to `v'. do some_attribute := v end Док благи наклон на укупну заједницу програмера да дозволе да нешто изгледа лепо као директни приступ (нпр. разбијање принципа сакривања информација), пракса је опасна пошто она крива или замрачује реалност "постављача" који се користи. У пракси, боље је читати директан позив постављача пре него подразумевање директно приступа карактеристици као some_attribute што је у примеру кода изнад.

За разлику од других језика, имати појмове "јавно", "приватно" и тако даље, Ајфел користи технологију извоза за прецизнију контролу одређивања поља између клиента и достављача класа. Штавише, да би се извозила логика која је коришћена може бити проверена статично преко компилатора, који дозвољава ранију детекцију одређивања поља прекршаја позива приликом компилирања пре него извршна верзија. На пример, (доле), "{NONE}" је слично "приватном" у другим језицима. Примењена област на овај начин на "групу карактеристика" (нпр. све испод кључне речи "карактеристика" или до следеће карактеристике групе кључних речи или до краја класа) може бити измењен у потомку класа користећи кључну реч  "извоз".feature {NONE} -- Иницијализација default_create -- Иницијализује нову `нулту' инстанцу децимале. do make_zero endАлтернативно, недостатак {x} извоз декларације подразумева {ANY}и сличан је области "јавно" других језика.feature -- КонстантеКоначно, одређивање области може бити селективно и прецизно контролисано при свакој класи у Ајфеловом пројектном универзуму, као што је:feature {DECIMAL, DCM_MA_DECIMAL_PARSER, DCM_MA_DECIMAL_HANDLER} -- ПриступОвде, компилатор ће да дозволи само класе наведене између витичастих заграда да би се приступило карактеристикама унутар групе карактеристика (нпр. DECIMAL, DCM_MA_DECIMAL_PARSER, DCM_MA_DECIMAL_HANDLER).

"Hello, world!" Изглед и осећај програмског језика се често преноси користећи "Hello, world!" програм. Такав програм писан у Ајфелу може бити:class HELLO_WORLD create make feature make do print ("Hello, world!%N") end endОвај програм садржи класу HELLO_WORLD. Конструктор (направи рутину) за класу, назван make, призива  print рутину системске библиотеке да напише"Hello, world!" поруку за излаз.

Дизајн по уговору