Реферат: Язык АДА

/>

Ада АвгустаБайрон

(Род. 10декабря1815 года )

Даже гражданебывшего СССРуже знают, что10 декабря — Деньправ человека, учреждённыйООН в честьпринятия в 1948году Всеобщейдекларацииправ человека(в советскиевремена самосуществованиеэтой декларациизамалчивалось).Общеизвестнотакже, что с1901 года именно10 декабря вручаютсяежегодныеНобелевскиепремии в памятьоб их учредителеАльфреде Нобеле, умершем в этотдень в 1896 году.Но есть и ещёодно, менееизвестное, определениедля этой даты, имеющее, однако, самое прямоеотношение кроду занятиймногих нашихчитателей, — 10декабря названоДнём программистав честь родившейсятакже в этотдень первойпредставительницыэтой не слишкомдревней профессииАды АвгустыЛавлейс, единственнойдочери прославленногоанглийскогопоэта ДжорджаГордона Байронаи его супругиАннабеллыМилбэнк.


Даже гражданебывшего СССРуже знают, что10 декабря — Деньправ человека, учреждённыйООН в честьпринятия в 1948году Всеобщейдекларацииправ человека(в советскиевремена самосуществованиеэтой декларациизамалчивалось).Общеизвестнотакже, что с1901 года именно10 декабря вручаютсяежегодныеНобелевскиепремии в памятьоб их учредителеАльфреде Нобеле, умершем в этотдень в 1896 году.Порывшись вкалендарях, энциклопедиях, справочниках, а также попутешествовавпо Интернету, можно обнаружить, что 10 декабря1799 года Францияперешла наметрическуюсистему мер(в чём за нейдо сих пор никакне могут последоватьСоединённыеШтаты Америки), в 1828 году былоснован Санкт-Петербургскийтехнологическийинститут, чтов этот деньродились русскийпоэт НиколайНекрасов, американскаяпоэтесса ЭмилиДиккинсон иукраинскаяписательницаМарко Вовчок, французскиеписатель ЭженСю и композиторЦезарь Франк, британскийфельдмаршалХаролд Александер, получившийтитул «Тунисский», и советский«государственныйдеятель» недобройпамяти АндрейВышинский, лауреат Нобелевскойпремии по литературешведско-немецкаяпоэтесса НеллиЗакс, клоунКарандаш, хоккейныйтренер АнатолийТарасов, дирижёрЮрий Темирканов, литературоведи философ СергейАверинцев имногие другие.Но есть и ещёодно, менееизвестное, определениедля этой даты, имеющее, однако, самое прямоеотношение кроду занятий

многихнаших читателей,- 10 декабря названоДнём программистав честь родившейсятакже в этотдень первойпредставительницыэтой не слишкомдревней профессииАды АвгустыЛавлейс, единственнойдочери прославленногоанглийскогопоэта ДжорджаГордона Байронаи его супругиАннабеллыМилбэнк.

АдаАвгуста Байронродилась 10 декабря1815 года; родителиеё расстались, когда девочкебыло два месяца, и больше своегоотца она невидела. Байронпосвятил дочеринесколькотрогательныхстрок в «ПаломничествеЧайльд Гарольда», но при этом вписьме к своейкузине заранеебеспокоился:«Надеюсь, чтоБог наградитеё чем угодно, но только непоэтическимдаром...» Ещёменее намеренабыла способствоватьразвитию удочери литературныхнаклонностеймать, которуюв свете заувлечённостьточными наукамипрозвали «принцессойпараллелограммов».Ада получилапрекрасноеобразование, в том числе ив области математики.К 1834 году относитсяеё первое знакомствос выдающимсяматематикоми изобретателемЧарльзом Бэбиджем(1791-1871), создателемпервой цифровойвычислительноймашины с программнымуправлением, названной им«аналитической».

МашинаБэбиджа былазадумана какчисто механическоеустройствос возможнымприводом отпарового двигателя, но содержаларяд фундаментальныхидей, характерныхдля современныхкомпьютеров.В ней предусматриваласьработа с адресамии кодами команд, данные вводилисьс помощью перфокарт.Основы программированиятакже былизаложены Бэбиджем.Несмотря напочти сорокалетнийтруд своегосоздателя, машина так ине была достроена, опережая нетолько потребности, но и техническиевозможностисвоего времени.Многие из идейБэбиджа простоне могли бытьреализованына базе механическихустройств иоказалисьвостребованытолько спустястолетие, сразработкойпервых электронныхвычислительныхмашин. Понятно, что современникиотносилиськ работам Бэбиджакак к, по крайнеймере, экстравагантномучудачеству.Супруга известногоанглийскогоматематикатого времениде Моргана, подруководствомкоторого АдаАвгуста изучаламатематику, так описывалаих первый визитк Бэбиджу: «Покачасть гостейв изумленииглядела на этоудивительноеустройствос таким чувством, с каким, говорят, дикари первыйраз видят зеркальцеили слышатвыстрел изружья, миссБайрон, совсемещё юная, смоглапонять работумашины и оценилабольшое достоинствоизобретения».Бэбидж нашёлв Аде не толькоблагодарнуюслушательницу, но и верногопомощника. Онискренне привязалсяк девушке, бывшейпочти ровесницейего рано умершейдочери.

В1835 г. Ада Байронвышла замужза Уильяма, восемнадцатоголорда Кинга, ставшего впоследствиипервым графомЛавлейс. (В некоторыхрусских публикацияхс титулом семействаЛавлейс связываетсяслово ловелас; это ошибка: Ловелас — имягероя популярногов начале прошлоговека романаРичардсона«КлариссаГарло», ставшеенарицательнымдля обозначенияволокиты, соблазнителя).Муж не имелничего противнаучных занятийсупруги и дажепоощрял её вних. Правда, высоко ценяеё умственныеспособности, он сокрушался:«Каким отличнымгенералом тымогла бы стать!»Появление детейна время отвлеклоАду от занятийматематикой, но в начале1841 г. она пишетБэбиджу: «Янадеюсь, чтомоя головаможет оказатьсяполезной Вамв реализацииВаших целейи планов в теченииближайшихтрёх-четырёх, а может быть, и более лет».

Попросьбе Бэбиджа, Ада заняласьпереводомочерка итальянскоговоенного инженераЛуи ФредерикоМенабреа (вбудущем профессорамеханики Туринскогоуниверситета, одного из лидеровборьбы за объединениеИталии, с 1867 г. — её премьер-министраи министраиностранныхдел). Менабреав 1840 г., слушая вТурине лекцииБэбиджа, подробнозаписал их, ив своём очеркевпервые далполное описаниеаналитическоймашины Бэбиджаи его идейпрограммированиявычислений.Он писал: «Сампроцесс вычисленияосуществляетсяс помощьюалгебраическихформул, записанныхна перфорированныхкартах, аналогичныхтем, что используютсяв ткацких станкахЖаккара. Всяумственнаяработа сводитсяк написаниюформул, пригодныхдля вычислений, производимыхмашиной, и некихпростых указаний, в какой последовательностиэти вычислениядолжны производиться».

Леди Лавлейсне просто перевелаочерк Менабреа, но и снабдилаего обширнымикомментариями, которые в суммепочти втроепревысили объёморигинальноготекста. Всекомментарии, их общая структураи содержаниеподробно обсуждалисьи согласовывалисьс Бэбиджем.Известный своейнетерпимостьюк чужому мнению, Бэбидж, тем неменее, был ввосторге оторигинальныхпроработок

своейученицы: «Чембольше я читаюВаши примечания, тем более поражаюсьВашей интуиции…Мне не хочетсярасставатьсяс Вашим превосходнымфилософскимрассмотрениеммоей аналитическоймашины...»



КнигаМенабреа скомментариями, подписаннымиинициаламиA. A. L. (Ada Augusta Lovelace), вышлав свет в августе1843 года. Отдаваядолжное обоимавторам, Бэбиджписал: «Совокупностьэтих работ(Менабреа иЛавлейс) представляетдля тех, ктоспособен следоватьходу их рассуждений, нагляднуюдемонстрациютого, что практическилюбые операцииматематическогоанализа могутбыть выполненыс помощью машины».При этом Бэбиджтак до концаи не примирилсяс концепциейАды, которуювпоследствииТьюринг именовалшестым постулатомпротивниковидеи мыслящеймашины: «Аналитическаямашина не претендуетна то, чтобысоздаватьчто-то действительноновое. Машинаможет выполнятьлишь то, что мыумеем ей предписать».

ВкомментарияхЛавлейс былиприведены трипервые в миревычислительныепрограммы, составленныеею для машиныБэббиджа. Самаяпростая из нихи наиболееподробно описанная- программарешения системыдвух линейныхалгебраическихуравнений сдвумя неизвестными.При разбореэтой программыбыло впервыевведено понятиерабочих ячеек(рабочих переменных)и использованаидея последовательногоизменения ихсодержания.От этой идеиостаётся одиншаг до оператораприсвоения- одной из основополагающихопераций всехязыков программирования, включая машинные.Вторая программабыла составленадля вычислениязначенийтригонометрическойфункции смногократнымповторениемзаданнойпоследовательностивычислительныхопераций; дляэтой процедурыЛавлейс ввелапонятие цикла- одной из фундаментальныхконструкцийструктурногопрограммирования.В третьей программе, предназначеннойдля вычислениячисел Бернулли, были уже использованырекуррентныевложенныециклы. В своихкомментарияхЛавлейс высказалатакже великолепнуюдогадку о том, что вычислительныеоперации могутвыполнятьсяне только счислами, но ис другими объектами, без чего вычислительныемашины так быи осталисьвсего лишьмощными быстродействующимикалькуляторами.

Послезавершенияработы надпереводом икомментариямиАда предложилаБэбиджу, чтоона будетконсультироватьлиц, заинтересованныхв использованиивычислительныхмашин, дабыБэбидж не отвлекалсяот основнойработы по доведениюсвоей аналитическоймашины. Но времядля вычислительныхмашин ещё непришло, толпыпользователейне спешилиполучить консультациюу леди Лавлейс, более того — в1842 г. правительствоБритании отказалоБэбиджу в финансовойподдержке егоразработок.Бэбидж былготов на всё, чтобы раздобытьнеобходимыеденьги. В частности, вместе с супругамиЛавлейс онувлёкся идеейсоздания «подлиннонаучной, математической»системы ставокна бегах, котораядавала бы верныйвыигрыш. Каки следовалоожидать, «система»не сработалаи принесла нетолько разочарование, но и большиефинансовыепотери. Самымстойким еёприверженцемоказаласьграфиня Лавлейс- она продолжалаупорно играть, часто дажевтайне от мужаи Бэбиджа, пытаясьусовершенствоватьсистему. Наэтом она потерялапочти все своиличные средства.К тому же, в начале50-х годов еёздоровье неожиданнои резко ухудшилось, и в 1852 г. Ада Лавлейсскончаласьв возрасте 37лет, как и еёотец, и былапохороненарядом с ним вфамильномсклепе Байронов.

ИмяАды Лавлейсвоскресло изнебытия в середине1930-х годов в связис работамианглийскогоматематикаАлана Тьюринга, введшего понятиелогическойалгоритмическойструктуры, получившейназвание машиныТьюринга, атакже последующимсозданиемпервых электронныхвычислительныхмашин.

Кконцу 1970-х годовисследования, проведенныев министерствеобороны США, выявили отсутствиеязыка программированиявысокого уровня, который быподдерживалвсе основныеэтапы созданияпрограммногообеспечения.Применениеже различныхязыков программированияв разных приложенияхприводило кнесовместимостиразрабатываемыхпрограмм, дублированиюразработоки другим нежелательнымявлениям, включаярост стоимостипрограммногообеспечения, многократнопревышающейстоимость самойвычислительнойтехники. Выходиз кризисавиделся в разработкеединых языкапрограммирования, среды его поддержкии методологииприменения.Все три составляющиеэтого проектаразрабатывалисьочень тщательнос привлечениемнаиболееквалифицированныхспециалистовразных стран.В мае 1979 г. победителемв конкурсеразработкиязыков былпризнан языкАда, названныйв честь АдыАвгусты Лавлейс, и предложенныйгруппой подруководствомфранцуза ЖанаИшбиа. Прототипомэтого языкаявился языкпрограммирования, названный вчесть БлезаПаскаля, которыйеще в возрастедевятнадцатилет, в 1624 г., разработалпроект «Паскалины»или, по-другому,«Паскалеваколеса» — первоймеханическойвычислительноймашины. С появлениеми широкимраспространениемперсональныхкомпьютеровязык Ада вомногом утратилсвою значимость, однако до сихпор используетсякак язык высокогоуровня дляразработкипрограмм, работающихв реальноммасштабе времени.

Любопытно, что в честь АдыЛавлейс названыв Америке такжедва небольшихгорода — в штатахАлабама и Оклахома.В Оклахомесуществуети колледж еёимени. Вродебы — немного, но, вместе стем, есть люди, искренне полагающие, что на сегодняшнийдень слава(или, по крайнеймере, популярность)Ады Лавлейсзатмила славуеё знаменитогоотца, и что еёвклад в мировуюцивилизацию, по крайнеймере, соизмеримс вкладом великогопоэта.

Ada- универсальныйязык программирования, включающийв себя средствадля созданияпараллельныхпрограмм. Официальныйязык программированияминистерстваобороны США.Существуетмножествокомпиляторовдля самых разныхплатформ. Текущаяверсия: Ada-95

Вделе разработкиновых языковпрограммированиямного спор- ныхмоментов, примеромкоторых можетслужить ADA — новейшеесредствопрограммирования, разработанноеМинистерствомобороны СШАи отличающеесячерезвычайнобольшимивозможностями.Язык програмированияADA, как известно, был разработанс целью заменыустаревшихи все менееиспользуемыхязыков, такихкак COBOL и FORTRAN. Трудностизаключаютсяв том, что циклзамены одногоязыка программированиядругим охватываетпериод времениот 20 до 30 лет и неначинаетсядо тех пор, покамы не убедимсяна деле, чтоныне существующиеязыки большене отвечаютнашим требовани-ям. Мы можемускорить этотпроцесс, начавнемедленнуюзамену устаревшихязыков языкомADA. При этом, когдамы придем квыводу, что ADAуже устарел, замена на неготолько толькоуспеет завершиться.У нового поколенияразработчиковязыков программированияпоявиласьтенденцияназыватьразработанныеими языки именамиреальных людей, а не прибегатьк обычным акронимам.Так язык PASCAL получилнаименованиев честь первогосоздателясчетных машин, а язык ADA названв честь первогопрограммиста.ADA
ЯзыкADA назван в честьАвгусты АдыБайрон (Augusta Ada Byron), использовалсяпрактическиисключительноМинистерствомобороны и другимиправительственнымиорганами США.Эксперты относилиADA к посредственнымязыкам, посколькуон сложен дляизучения(правительствоне всегдаруководствовалосьлогикой). Данныйязык был принятстандартомв правительственныхорганах СШАи был утверждёнМинистерствомобороны в 1979году.
Разновидности:Atree ADA, Janus ADA, Meridian ADA.

Вделе разработкиновых языковпрограммированиямного спор-

ных моментов, примером которых можетслужить ADA — новейшее

средствопрограммирования, разработанное Министерствомобороны

США и отличающеесячерезвычайнобольшимивозможностями. Язык

програмирования ADA, как известно, был разработан с целью

замены устаревших и все менееиспользуемыхязыков, такихкак

COBOL иFORTRAN.


Трудности заключаются в том, что циклзамены одногоязыка

программированиядругим охватываетпериод времени от 20 до 30

лет и не начинается до тех пор, покамы не убедимсяна деле,

чтоныне существующиеязыки большене отвечаютнашим требовани-

ям. Мы можем ускоритьэтот процесс, начав немедленнуюзамену

устаревших языков языком ADA. При этом, когдамы придем к

выводу, что ADA уже устарел, замена на неготолько только

успеетзавершиться.


У нового поколения разработчиков языков программирования

появилась тенденция называть разработанныеими языки именами

реальных людей, а неприбегать кобычным акронимам. Так язык

PASCAL получил наименование в честь первогосоздателясчетных

машин, а язык ADA названв честь первого программиста. Решив

назвать свой новый язык в честь какого-либо человека, мы

выбрали Чарльза Баббиджа, который умер в бедности, пытаясь

закончить создание первой ЭВМ. Новый язык, таким образом,

назван в честь первого разработчикасистем, и егоразработка

проводится, подобно разработкамсамого Баббиджа, без опреде-

ленной финансовой поддержки, что, естественно, несколько

тормозитработу.


Язык BABBAGE основан на элементах языков, которыебыли

открытыпосле того, как было завершено создание языкаADA.

К.А.Р.Хоор в своей лекции, за которую Ассоциацияпо вычисли-

тельной технике в 1980году присудила ему премиюТьюринга,

говорило двух путяхразработктпрограммногообеспечения. Один

путь заключается в том, чтобы сделать программунастолько

простой, что становится полностьюочевидно отсутствиекаких-

либо недостатков. А другой путьсостоит в том, чтобы сделать

программу настолько сложной, что это исключало бы всякую

возможностькаких-либопогрешностей.Разработчикиязыка BABBAGE

выбралитретий путь, т.е. создатьязык, которыйсодержит только

явныенедостатки.Программы наBABBAGE отличаются такой низкой

надежностью, что процедуры профилактического контроля можно

начинать до того, какинтеграциявсей системыбудет завершена.

Это служит гарантией постоянного роста спросана продукцию

разработчиковна рынке сбытав области обработкиданных.


--PAGE_BREAK--

Как и в языке PASCAL в языке ADA используетсяпринцип

«строгойпечати» с целью избежать появления ошибок, которые

могут быть результатом смешения различных типов данных.

Разработчики языка BABBAGE выступили в защиту принципа

«надежнойпечати» с тем, чтобы избежатьошибок, появляющихсяв

результате неправильного написания словв программепользова-

теля. В последующих версиях языкаBABBAGE станет возможным

применение «печати послепому методу», что позволитудовлетво-

ритьдавно назревшиетребованияпользователей.


Спорнымвопросом, правильностьрешения которогообсуждается

многимиразработчикамиязыков программирования, является метод

передачи параметров в подфункции. Некоторые разработчики

выступают в защиту «вызова по имени», другие предпочитают

«вызовпо значению».В языке BABBAGE используетсяновый метод-

«вызовпо телефону». Этот метод оказался особенноэффективным

при передачи параметров в процессе дистанционнойобработки

данных.


В основу языкаADA положена идеяпортативности.В процессе

разработки языка BABBAGE разработчиками учитывается прежде

всегопортативностьаппаратуры.В конце концов, какая пользаот

ЭВМ, если заказчик не может постоянноиметь машинупод рукой

илипрграммноеобеспечениеоказываетсянепереносимым.


Известно, что разработка языка программированияпроходит

успешно, если она находит финансовую поддержку состороны

правительства.Разработка языка COBOL, например, финансирова-

ласьправительством, а языка ADA — Министерствомобороны. После

долгих переговоров Министерство Здравоохранения согласилась

оказатьфинансовуюподдержкуразработчикамязыка BABBAGE.


В языке ADA долгоне допускалосьиспользованияподъязыков.

Воснову языкаBABBAGE, для увеличения его гибкостиположена

возможность расширения языка. Каждый пользователь может и

должен сам определить размер своей версии языкапрограммы.

Спорный вопрос о размере BABBAGE отпадает, так как каждый

пользователь сам определяетразмер языкав соответствиис его

требованиями.BABBAGE, таким образом, является идеальнымязыком

для генерации версии компилятора в каждом отдельномслучае.

Ниже приведены примеры, которые могут дать некоторое

представлениео языке BABBAGE.


В структурных языках программирования запрещаласьзамена

операторов передачи управления GOTO и многоходовыхусловных

переходов более простой структурой IF-THEN-ELSE. В языке

BABBAGE имеется нескольконовых операторовусловногоперехода,

которыевыполняют роль конечных термовв структурепрограммы

пользователя:


WHAT IF(что если)

используется в языках программирования; переход выполня-

етсяперед проверкойконтролируемогоусловия;


OR ELSE(иначе)

наличиеварианта, как, например, вфразе «Прибавитьэти

двачисла, OR ELSE (илииначе)»;


WHY NOT?(почему нет?)

выполняеткод которыйследует в безразличнокаком порядке;


WHO ELSE?(кто еще?)

используетсядля опроса вовремя операцийввода/вывода;


ELSEWHERE(где-то в другомместе)

используется для того, чтобы указать, что программа

пользователянаходитсягде-то в другомместе, тогда как

онполагает, чтоона здесь;


GOINGGOING GONE (иду иду ушел)

используетсядля записинеструктурныхпрограмм; выполняет

произвольныйпереход к другойчасти программыпользовате-

ля; выполняетработу 10-тиоператоровGOTO.


В течении многихлет в языкахиспользовалисьоператоры FOR

(втечении), DO UNTIL (выполнять дотех пор, пока), DO WHILE

(выполнятьв то время, как)и др. для обозначенияцикла (LOOP).

Исследуяэто направление, разработчикиязыка BABBAGE предлогают

нижеуказанныеоператоры, обозначающиецикл программы:


DON'N DOWHILE NOT (не выполнятьнесмотря на)

этотцикл не выполняется, если контролируемоеусловие не

являетсяложным (илиесли это полденьв Пятницу);


DIDN'T DO(не выполнялось)

цикл выполняется один раз и прекращает дальнейшее

выполнениекаких-либоциклов;


CAN'T DO(невозможноделать)

выполнениецикла не можетпродолжаться;


WON'T DO(отказ выполнять)

центральный процессор приостанавливает выполнениепро-

граммы, так как обнаруживаетпогрешностив коде выполня-

емого цикла программы; выполнениепрограммы можетбыть

возобновлено, если на пульте будет набрано «May I?»

(«Можномне?»);


WIGHT DO(можно не выполнять)

зависит от того какоерешение будетпринято центральным

процессором; выполнение, если CPU находитсяв рабочем

состоянии; прекращениевыполнения, если CPU в состоянии

останова, или если CPU всостоянииостанова поошибке;


DO ONTOOTHERS (во всем, какхотите, чтобы поступали свами,

такпоступайтеи вы с другими)

используется при записиосновного цикласистем, работа-

ющихв режиме разделениявремени, с целью использования

вэтих системахединого способареализациивзаимоотноше-

ниймежду отдельнымипользователями;


DO BACH(изобразитьБаха)

используется для записи временных циклов длямузыки,

генерируемойс помощью ЭВМ(определениенужного ритма).


В каждом структурном языке, отвечающем самым последним

требованиям, имеется операторCASE для реализациимногоходового

ветвления.Так в языкеALGOL имеется опреторCASE с индексацией,

а вязыке PASCAL операторс идентификацией. Т.е. в этих языках

выборне очень велик. В языке BABBAGE, напротив, имеется целый

рядоператоровэтого класса:


JUST INCASE (на всякмйслучай)

предназначен для обработкизапасных поясненийи вводимых

в последнюю минуту сведений; разрешает пользователю

выполнять умножение на ноль с цельюисправления, если

случайно выпонено деление на ноль; разрешаетсятакже

выполнение обратного (восстанавливающего) действия и

послеслучайноговыполненитяумножения;


BRIFF CASE(случай краткойзаписи)

предназначендля обеспечениякраткостипрограммы;


OPEN ANDSHUT CASE (случай «открытьи закрыть»)

прииспользованииэтого оператораникакогодоказательства

правильностине требуется;


IN ANYCASE (в любом случае)

этотоператор всегдаозначает рабочеесостояние;


HOPELESSCASE (безнадежныйслучай)

этотоператор всегдаозначает нерабочеесостояние;


BASKETCASE (безвыходноесостояние)

оператордействительноозначает безвыходноесостояние.


Сотрудники, входящие в группу разработки языка BABBAGE,

постоянно работают надновыми особенностямиязыка, что будет

способствоватьбеспрерывномуросту уровняэффективностиданного

языкапри его использованиязаказчиками.Например, разработчики

языкаBABBAGE в настоящеевремя занятыработой надоператором

ALMOSTEQUAL SIGN («почти содинаковымзнаком»), используемым

длясравнения двухчисел с плавающейзапятой. В работенад этим

новымнюансом ужеудалось преодолетьзначительныетрудности.


Ни один язык, неважно каким он является, не может быть

использован сам по себе. И для языка BABBAGE совершенно

необходимадетальноразхработаннаяоперационнаясистема. После

несколькихпопыток использоватьсуществующиесистемы сотрудники

группырешили написатьсобственную «виртуальную» операционную

систему. Любому известна операционная системя виртуальной

памяти. Но сотрудники группы по разработке языка BABBAGE

сделалипопытку найтинесколько иноерешение, зайдяподальше.

Новаяоперационнаясистема носитназвание операционной системы

виртуальноговремени (VTOS). В товремя как системывиртуальной

памяти обеспечивают виртуальные свойства памяти ЭВМ, VTOS

выполняетту же функциюпо отношениюко временипроцессора.


Врезультате ЭВМ можетодновременноработать снеограничен-

нымколичествомзаданий. Подобно системе виртуальнойпамяти,

которая физическм хранит часть данных в ЗУна дисках, VTOS

должнатакже применятьнекоторыеухищрения длядостижениясвоей

цели.Хотя пользовательуверен, что всеего заданиявыполняются

в текущий моментвремени, некоторыеиз этих заданийв действи-

тельностибудут выполнятьсяна следующейнеделе.


Как можно видеть, язык BABBAGE все ещенаходится встадии

разработки. Группа сотрудников по разработке языка BABBAGE

нуждается в предложениях специалистовпо новым средствамдля

этого нового мощного языка программирования. Автор статьи,

являясь одним из сотрудниковгруппы разработки, обращаетсяко

всем, кто работает в области обработкиданных с помощьюЭВМ,

с просьбой оказатьподдержкугруппе в разработкенового языка

программирования (будут приняты все предложенияот всех лиц,

желающихпринять участиев работе группы).


Краткоевведение в языкАда

Eric DeArment, Team Ada
ejd@efn.org

Возможно, у вас уже возниквопрос: «Зачемзнать и использоватьАду?». В ответна этот вопросЯ могу привестикак минимумтри хорошихпричины:

Это просто! Я запомнил программу типа «Hello World» за несколько минут.

Это мощно! Ада была разработана таким способом, чтобы обеспечить все запросы программиста и пригодна для решения практически любых задач.

Она может быть использована как шлюз в более трудный язык Си; даже учитывая то, что синтаксис Ады очень различается с Си, эти два языка в действительности сходны во многих своих идеях.

ПредысторияАды

Вдалеком 1957, ученыйДжон Бэкас(John Backus) работавшийв то время вIBM разработалновый языкпрограммирования, с целью облегчитьрешение математическихи научных проблемдля инженеров, ученых и математиков.Этот язык называныйFORTRAN, что являетсясокращениемслов FORmula TRANslation (трансляцияформул), имели имеет огромныйуспех; даже внастоящеевремя, спустяcорок лет, онвсе так же активноиспользуетсяв разработкепрограмм ипродолжаетразвиватся.

Подругую же сторонуАтлантики, вЕвропе, несколькоученых, которыезнали о существованииФортрана сформироваликомитет длясоздания собственногоязыка способногозаменить его.Спустя всеголишь месяц, в1958 году, былазавершенаразработканового языкапрограммированияизвестноготеперь подименем ALGOL, чтоявляется сокращениемот слов ALGOrithmic Language(язык алгоритмов).Вслед за этимон был оченьбыстро стандартизован.

Таккак существуеттрадиция называтьстандарт языкапо году в которыйон был создан, то и создателиАлгола решилиот нее не отходитьназвав егоАлгол 58. Впоследствиилюди со всейЕвропы продолжилиработу надАлголом, и спустядва года появилсяновый улучшенныйвариант — Алгол60.

Алгол60 съиграл оченьважную рольв истории несколькихязыков используемыхв настоящеевремя, в числокоторых входитАда. Из Алгола60 впоследствиивышли три семействаязыков:

SIMULA, созданный учеными из университета города Осло в Норвегии.

CPL, созданного Кеном Томпсоном (Ken Thompson) из AT&T Bell Laboratories как инструмента для написания ОС MULTICS, которая стала предшественницей Unix. CPL также является непосредственным предком С.

Последним, что вовсе не значит худшим, был Паскаль, написаный Никлаусом Виртом (Niklaus Wirth) из Швейцарского Федерального Института Технологий в Цюрихе с целью обучения студентов в колледже. Из которого в последствии мы и получили Аду.

Итак, теперь мы знаемдостаточноо предшественникахАды, потомуприступим кнепосредственнойистории созданияэтого прекрасногоязыка.

Конкурс

В60е-70е годы МинистерствоОбороны США(the United States Department of Defense) использовалодля своих нуждболее чем 2000различныхязыков программирования(в основном длясистем повышеннойнадежности).По большейчасти это былиязыки разработаныедля выполнениякакого-то конкретногозадания. В результатеМинистерствомОбороны быласформированаРабочая Группапо Языкам ВысокогоУровня (High-Order LanguageWorking Group (HOLWG)), целью которойбыло найтирешение создавшемусяв то время, такназваемому,«кризису программногообеспечения»

ЧленыРабочей Группыпостановили, что для выходаиз создавшейсяситуации необходимосоздание языкапрограммирования, с помощью которогоможно будетсделать практическивсе, будь тосистемноепрограммирование, искусственныйинтеллект, и, что наиболееважно, системыработающиев реальномвремени и встроенныесистемы. Системыреальноговремени этопрограммыиспользуемыедля таких вещейкак управлениесветофорамина дорогах, самонаводящихсяракет, и сканнеровштрих-кодов.Встроеннымиже называютсясистемы такиекак маленькиекомпьютерывстраеваемыев большинствосовременныхмашин, самолеты, и даже магнитофоны.

Вместотого чтобысоздавать новыйязык самим, было решенопровести конкурс.Было образованонесколькокоманд, каждойиз них был присвоенсвой цвет. Послучайномустечениюобстоятельстввсе командысоздали своиязык использовавПаскаль в качествеосновы. В результатепобедила зеленаякоманда — фирмаХанейвелл-Балл(Honeywell-Bull) из Франции.Познее, языкбыл назван«Ада» в честьледи Ады АвгустыЛавлейс (Lady Ada AugustaLovelace), дочери известногопоэта Байронаи ассистенткиматематикаЧарльза Байбиджа(Charles Babbage), которыйизобрел АналитическуюМашину. ЛедиАду принятосчитать первымпрограммистом.

В1979, МО США создалопервый черновойвариант документациипо Аде, затемязык был стандартизованв 1983 году. Сейчасэтот стандартпринято называть«Ада83», первоначальноон находилсяпод полнымконтролем состороны МО США, и ни кто не могсоздать компиляторс языка безавторизациионого со стороныМинистерстваОбороны.

Однаковсе изменилосьв 1987 году, когдаМО США предоставилоАду в публичноераспоряжение, и на язык былсоздан стандартМеждународногоИнститута поСтандартизации(International Standards Organization (ISO)). К 1990 годупоявилось более200 проверенныхна соответсвиестандартукомпиляторовс этого языка, еще познее в1995 году появилсяновый стандартназваемыйАда95. Ада в редакции95го года сталаполностьюобъектно-ориетированымязыком, а такжеоснащена оченьудобными средствамивзаимодействияс кодом написанымна Си, Фортране, Коболе и прочихязыках.

Где взятьАду?

Скореевсего вы думаете, что компилятордля такогомощного какАда языка стоиточень и оченьдорого, однаковы заблуждаетесь, вы наверноеудивитесь, ноодин из наиболеемощных и популярныхкомпиляторовс Ады95, GNAT (Gnu/New york University AdaTranslator) не будет стоитьвам ни копейки(за исключениемтехническойподдержки, нотолько в томслучае есливы захотитеее иметь).

GNATможно скачатьс FTP-сервераНью-ЙоркскогоУниверситетаftp://cs.nyu.eduиз каталога/pub/gnat.В нем содержатсяразличныеверсии GNAT'а дляразличных ОСнапример Unix, включая SunOS/Solaris,Linux, NetBSD, SGI IRIX, IBM's AIX, DEC's Digital Unix.

Также там существуютверсии GNAT'a дляWinNT, Win95, MacOS, и даже версиядля DOS называемая«EZ2Load».

Учебник

Итак, Я думаю пораприступатьк настоящемуобучению. Конечноэто не законченыйучебник, этопросто краткоевведение, котороепокажет вамбазовую структурупрограммы наязыке Ада идаст вам несколькоготовых к компиляциипримеров.

СперваЯ хочу чтобычитатель узналчто же такоеАда. Так же каки ее предшествинникПаскаль и еекузен Си, Адаэто структурыйязык. Другимисловами, программана Аде этоорганизованнаяпоследовательностьразличныхсекций, в товремя как внеструктурныхязыках такихкак Бейсик, выможете писатьчто угодно игде угодно.

Также, Аде присущасвоя собственнаятерминология, и Я далее будуиспользоватьнесколько такихслов, со значениемкоторых вывозможно незнакомы:

пакет (package), файл искодного кода программы в котором хранится определенный набор связанных по смыслу команд, которые делают например такие вещи как печать текста, математические вычисления, и т.д. Они в чем-то похожи на заголовки в языке Си, но не являются прямой аналогией.
(прим перев: они ближе к модулям в Турбо Паскале (хотя точнее на оборот, они слизаны с Ады)

переменная (variable), это именованая область памяти в которой может хранится некоторое значение, например число, символ, или слово.

предложение или инструкция (statement), команда для выполнения специфического действия.

Всепрограммы наАде имеют следующуюбазовую структуру:

withИмя_Пакета; useИмя_Пакета;


procedureИмя_Процедуры


Переменная: Некоторый_Тип_Значений;


    продолжение
--PAGE_BREAK--

begin


Предложение_1;

Предложение_2;


endИмя_Процедуры;

Имя_Процедурычасто являетсяи именем программы.
(примперев: В отличиеот Паскалездесь нет выделенногоблока begin — end, программойможет считатсялюбая процедурабиблиотечногоуровня (т.е. невложеная вдругую процедуру/функцию)без параметров).

Местогде написаноПеременная: Некоторый_Тип_Значенийявляется объявлениемпеременной.Возможно выспросите, а чтозначит «Некоторый_Тип_Значений»? Это означаеткакого типазначения могутхранится впеременной.Другими словами, если вы хотитеиметь переменнуюдля целых чиселвам необходимонаписать Variable: Integer;. Есливам нужны числас пляавающейзапятой, тоVariable: Float; и т.д.

Точкис запятойиспользуютсядля завершенияобъявленияпеременнойили в болееобщем случаелюбого предложенияпрограммы, позволяя вамразместитьна одной строкеболее одногообъявленияпеременнойили предложения.
(примперев: в Паскалеони разделяютпредложения, в результатеимеется несколькоисключенийиз правил! А врезультатевыбранногоподхода в Адеих размещениепроизводитсяна более интуитивномуровне).

Инструкцияbeginначинаетпоследовательностьнастоящихкоманд программы.

Предложение_1; и Предложение_1; на самом делени чего не значатв Аде; в реальнойпрограмме наих месте будутнастоящиекоманды, которыеи будут выполнятьнеобходимыенам действия.

ПредлоджениеendИмя_Процедуры; завершаетпоследовательностькоманд программы.Теперь Я могусказать вам, что эта маленькая«демо» програмкабыла нужна, чтобы простопоказать вамструктурупрограммы, нотеперь мы можемпосмотретьи на настоящуюрабочую программу.По традициией будет, можносказать, классическая;-) программавыводящая«Hello World», котораяобычно и используетсяпри первомзнакомствес новым языком.

withAda.Text_IO; useAda.Text_IO;


procedureHello_World is


— А переменныенам здесь ненужны :)


begin


Put(«Hello world!»);


endHello_World;

Пакет«Text_IO» содержитмножествофункций дляоперацийввода/вывода;
ониспользуетсяпрограммамикоторым необходимвывод и получениетекста.
(примперев: как и вСи по множествупричин здесьнет «встроенных»операций дляввода/вывода, но есть стандартныйпакет такихопераций).
Также Я должензаметить зачем нужно писать«Ada.» перед «Text_IO».Поскольку Адаможет взаимодествоватьсо множествомязыков — напримервы можете связатьсо своей программойпроцедуры наСи или Коболе-- и может случитсятак что у васбудет множествобиблиотек ссотнями пакетов, поэтому необходимоуказыватьоткуда ихбрать.
(примперев: в Адеможно организоватьнабор пакетовв определеннуюиерархическуюструктуру совзаимнымисвязями междукодом в них. Вданном случаетText_IO это дочернийпакет от пакетаAda).

Процедура(и программав данном случае)называется«Hello_World.» Предложения«with» и «use» позволяютиспользоватькоманды из нихв нашей программе.Если вы хотитезапустить этупрограмму, выможете сохранитьее под именемhello_world.ada.Замечание: есливы используетеGNAT вы должнысохранить еекак hello_world.adb.

Посколькуэта программане делает ничегокроме печатинесколькихслов на экране, нам не потребовалосьобъявлять никаких переменных, поэтому местов котором этообычно делаетсяосталось пустым.Обратите также вниманиена двойнойпрочерк (--) перед«А переменныенам здесь ненужны :)». Этипрочерки говоряткомпилятору, что эта строкакомментарий.Комментарийэто строкатекста программыкоторую компиляторпроигнорирует.Поэтому есливы хотите добавитьстроку «А переменныенам здесь ненужны :)» в программуи затем запуститьее, вы обязаныдобавить передней двойнойпрочерк, иначекомпиляторподумает, чтовы хотелииспользовать«А переменныенам здесь ненужны :)» какописание переменной, естесственноничего не поймети выдаст вамсообщение обошибке. ПредложениеPut(«Hello world!»); служитсобственнодля печатитекста на экране.

Дажеесли вам кажется, что использованиескобок усложняетдело, они всеравно нужны.Вы неможетепросто взятьи написать «Put»Hello world!";"!

Также заметте, чтомноги именаначинаютсяс заглавныхбукв Notice also that many of the names beginwith capital letters («Text_IO» например).Это-го не требуетсяделать в обязательномпорядке, но всеже желательноделать так дляудобства чтенияваших исходников.

Следующаяпрограмманесколькосложнее предыдущей.Она спрашиваету пользователяего/ее имя изатем печатаетего на экраненаряду с другимтекстом:

withAda.Text_IO; useAda.Text_IO;


procedureGet_Name is


Name: String (1..80);

Length: Integer;


begin


Put(«Введите вашеимя> „);

Get_Line(Name, Length);

New_Line;

Put(“Привет „);

Put(Name (1..Length));

Put(“, Я думаю вампонравитьсяизучать Аду!»);


endGet_Name;

Какэто все работает? Мы уже знаем, что такое Text_IO, а предложениеprocedureGet_Name isговорит самоза себя

ПеременнаяNameсодержит имявведенноепользователем, а тип String(1..80) говориткомпиляторуо том, что Nameэто строковаяпеременнаяс длинной до80 символов. Втораяпеременная,Length, это целое числоиспользуемоедля хранениядействительнойдлинны строкивведеннойпользователем.

Атеперь об остальном: когда программавыполняется, она печатает«Введите вашеимя> », а затемждет его вводаот пользователя.после того какон введет имяи нажмет Enter программапропускаетстроку (New_Line;)и печатает«Привет [имяпользователя], Я думаю вампонравитьсяизучать Аду!».

Визуальноепрограммированиена Аде?

Возможноу вас возниквопрос «А естьли к Аде графическаясреда разработкипрограмм (IDE)?».Да, такие есть, одна из них, под названиемObjectAda, поставляетсякомпаниейAonix, www.aonix.com(Прим. перев: Данный продуктпостроен в духеIDE от Microsoft для Visual С++)

ObjectAdaсуществуетв двух вариантахкак для MS Windows, таки для X-Windows (X-Windowsэто стандартнаяоконная графическаясистема ОСUnix.)

Однакоучтите, что этокоммерческийпродукт, правдаон доступендля свободногоскачиванияв облегченномварианте ивесит около60~70Mb.


Ada-- это доведенныйдо логическогозавершения( на данном этаперазвития _науки_программирования) Pascal. Ada — универсальныйязык программированияи мощнейшеесредство дляsoftware engineering. В равнойстепени пригоднадля написания«зубочисток»из 50 строк наодин-два прогонаи для огромныхособо надежныхсистем реальноговремени. Жесткоопределенастандартомязыка. В языквстроены средствапараллельногопрограммирования, поддержкаразноязыковыхмодулей, обработкаисключительныйситуаций. Разговорыо ее чрезмернойсложности — бред, вызванныйтем, что онаопередила своевремя лет этак6..10. Мощный инструментне может бытьпростым — «Дублиу нас простые»( (с) «Понедельник...», Стругацкие), но и слишкомуж сложной яее назвать немогу. Ada'е присущистрогость, логичность, ортогональность, симметричность.Она по-хорошемуконсервативна, несмотря нато, что в неебыли введеныреволюционныеконцепции, непонятые и непринятые серымиfortran-кодераминачала '80-ых годов, чем и объясняетсяее сравнительномалое распространение.Первый стандартвышел в '83, в '95 вышелвторой стандарт, расширившийи симметризовавшийязык. Для Ada'ыхарактерноочень жесткоеследованиестандарту, чтоделает программына ней сравнительнолегко переносимымис платформына платформу.!) Аналогии: Ada — это Парфенонсреди языковпрограммирования, она величественна, изящна, строгаи прекрасна.Если считать, что Pascal это МиГ-21, то Modula-2 это ( ранниеверсии ) МиГ-29и ( нынешнеесостояние )МиГ-33, а Ada'83 — Су-27, иAda'95 — Су-37, и, продолжаяаналогию, C — F-104,C++ — F-117 ( much noise about nothing |) ). > Q 2: А чемAda95 отличаетсяот Ada83? Насколькоя понял, > Q 2: в Ada95есть ООП? Вотеще отличия:- иерархическиебиблиотеки(child units); — пассивныемониторы наряду(protected records) с активными(tasks); — дополнительныесредства управленияпаралеллизмом(асинхроннаяпередача управления);- стандартныебиблиотекидля важнейшихобластей (системноепрограммирование, системы реальноговремени, распределенныесистемы, информационныесистемы, численныерассчеты); — «мелочевка»типа ссылокна подпрограммыи возможностьсвязыватьсообщение свозбуждаемымисключением;> Q 3: Насколькоя понял, в Ada95 естьООП? А как оно> Q 3: реализуется? Подлинное тамООП (как нафункциональных> Q 3: языках) илипаскале-сиподобное?«Паскале-си-подобное», хотя по формена первый взглядсильно отличается.


Основнойдокумент поAda'е — «Language Reference Manual», обычноназываемыйпросто «Стандарт»или «RM95» ( «RM 95», ато и просто«RM» ), некоторыепо старинкеговорят «LRM», ноэто — общепринятоесокращениедля стандартаАды-83. Изложено, как и положеностандарту, суховато, нострого, с примерамии ссылками насмежные вопросы.В отличие отпары-тройкидругих «стандартов», которые мнепривелосьпосмотреть, это, действительно, Стандарт, а нерассужденияна тему об очереднойверсии компилятораи не учебникпрограммированияна базе данногоязыка, но, междутем, он вполнепригоден длячтения. Второйдокумент — «Ada95 Rationale» ( обычно — «Rationale» ). Это изложениеи _обоснование_базовых_проектных__решений_языка (ответына вопросы «апочему сделаноименно так?»)и демонстрацияэтих решенийв деле. Соответственно, более вольное, чем Стандарт, кое в чем менееполное, а коев чем болееппространное.С развернутымипримерами, пояснениями, аналогиямии прочей весьмаполезной«белетристикой».Читается какхороший детектив.Литературныедостоинства( без тени иронии) этого документаотмечены нетолько мной.Я бы настоятельнорекомедовалэту книгу вкачестве именно_учебника_ дляподготовленногои _мотивированного_читателя ( такомучитателю нетрезона тратитьвремя на традиционныеуниверситетскиеучебники ), аRM использоватькак справочник.

Язык Ада –двадцать летспустя

СергейРыбин, ВасилийФофанов

ЕслиспроситьотечественногоИТ-специалиста:«Что такоеАда?», большинстволишь удивленнопожмет плечами, а кто-то дажескажет, что этомертвый язык, когда-то придуманныйПентагоном, а ныне практическине используемый.На самом жеделе Ада и сегодня– вполне благополучныйи активно применяемыйв различныхобластях языкпрограммирования.Правда, большинствороссийскихпрограммистовзнают о неммало.

Наверное, каждый, комуприходилосьпользоватьсячетырнадцатойлинией парижскогометрополитена, удивлялся, впервые увидевпоезд, в которомнет кабинымашиниста.Движение поездовна этой линииполностьюуправляетсяАда-программой.

Несмотряни на что, вотдельныхобластях техникиРоссия все еще«впереди планетывсей». И однаиз них – конструированиеи производствосамолетов-амфибий.Всемирно признаннымлидером в этойобласти являетсяТАНТК им. Г. М.Бериева. Недавноэто предприятиеприобрелосредства разработкибортовогопрограммногообеспеченияна базе языкаАда для использованияпри модернизациисвоей последнеймодели Бе-200.

Междутем, большинствоотечественныхИТ-специалистовв лучшем случаеничего не знаюто языке Ада, вхудшем же –имеют совершенноневерноепредставлениеоб Аде как оязыке-монстре, некогда придуманномПентагономдля разработкивоенных систем, а ныне окончательнозабытом.

Немногоистории

Официальнымднем рожденияязыка программированияАда можно считать17 февраля 1983 года– дату утверждениястандартаANSI/MIL-STD-1815-A–1983.

Техническиеи административныемеры, предпринятыеМинобороныкак часть проектапо созданиюи внедрениюАды, полностьюпредотвратилипоявление ираспространениедиалектовязыка. С 1983 годаи по настоящеевремя всеиндустриальныереализацииподдерживаютдействующийстандарт Ады.Когда же речьзаходит оподмножествахАды, то этиподмножестваопределяютсяне реализацией, а стандартамиразработкиконкретногокласса систем.

В1987 году стандартANSI без единогоизменения былутвержден вкачестве стандартаISO (ISO/IEC 8652), а когда вначале 90-х годовназрела необходимостьпересмотрастандарта, работа по пересмотрутакже былапроведена подуправлениеми на средстваМинистерстваобороны США.Стартовал новыймеждународныйпроект, которыйзавершилсяутверждениемв конце 1994-го ипубликациейв начале 1995 годановой версиистандартаISO/IEC 8652. Именно этотдокумент ислужит сегодняопределениемязыка программированияАда.

ВСССР в начале80-х годов былаобразованаРабочая группапо языку программированияАда при Государственномкомитете понауке и технике.Тщательнособираласьи анализироваласьвся открытаяинформацияо проекте, аусилиями специальныхслужб добываласьи закрытаяинформация.Были организованыпроекты пореализацииАды для практическивсех использовавшихсятогда архитектурЭВМ, и некоторыеиз них оказалисьвесьма успешными.Распад СССРположил конецэтой деятельности.Сегодня Адаиспользуетсяв России и СНГотдельнымиэнтузиастами.

Что такоеАда

Всесовременныеиндустриальныеязыки предоставляютпо сути одини тот же базовыйнабор возможностей, различаясьне тем, что онипозволяютделать, а тем, как именно онипозволяют этоделать. ОднакоАда, по крайнеймере, в двухаспектах расширяетстандартныйдля современныхязыков наборвозможностей.Во-первых, Адапредоставляетвысокоуровневыесредствапрограммированияасинхронныхпроцессов.Во-вторых, являетсяединственнымязыком, которыйбез всякихоговорок можноназвать модульным.

Примертакой простонеобходим длятого, чтобыопровергнутьдостаточнораспространенныймиф о том, чтоАда – большой, сложный и «тяжелый»язык, пригодныйлишь для написаниясверхбольшихи сверхсложныхсистем. На самомже деле, Адаможет применятьсядля разработкинебольших исредних программс тем же успехом, как и современныеклоны Си, Паскаля, Бейсика и Java. Так, классическийпример программы«Hello, World!» выглядитна Аде следующимобразом:


Легковидеть, что кодна Аде похожна код на Паскале, который былвыбран в качествеего прототипа.Первая строкаописывает связьданного компилируемогомодуля с другимимодулями –указывается, что подпрограммаHello_World должнакомпилироватьсясовместно смодулем Ada.Text_IO, который являетсякомпонентомпредопределеннойбиблиотеки.

Следующаяпрограммаопределяетдва асинхронныхпроцесса [1]

:/>


/>


Вразделе локальныхобъявленийпроцедурыTasking_Example описываетсязадача Outputter (строка6, строки с 8 по17 содержат телоэтой задачи).Когда управлениев процессе, соответствующемпроцедуреTasking_Example, доходит достроки 20, передтем, как выполнитьэтот первыйоператор, запускаетсяпроцесс, соответствующийзадаче Outputter, послечего два этихпроцесса живути асинхронновыполняютсянезависимодруг от друга.Выполнениеоператоразадержки (строки14 и 20) состоит вприостановкесоответствующегопроцесса науказанноеколичествосекунд. Такимобразом, процессTasking_Example приостанавливаетсяна 20 секунд, ав это времяпроцесс Outputter начинаетпечатать значенияувеличивающегосяна единицусчетчика, приостанавливаясьна одну секундупосле выводакаждого значения.По истечении20 секунд процессTasking_Example устанавливаетфлаг Finished в положение«истина», врезультатезавершаетсяцикл в процессеOutputter. СпецификацияпеременнойFinished как атомарногообъекта данных(строка 4) делаетневозможнымодновременноечтение и изменениезначения этойпеременной.

Далеепредставленшаблон функции, позволяющейпокомпонентноскладыватьдва одномерныхмассива. Этотшаблон можетбыть настроенна произвольныйтип, являющийсяодномерныммассивом, длякомпонентовкоторого определеныоперации присваиванияи сложения(«сложение»не обязано бытьарифметическимсложением).

/>

Строки1-6 содержатобъявлениенастраиваемойфункции, а строки8-20 – ее тело.Содержательно, параметромнастройкиявляется произвольныйодномерныйрегулярныйтип с неуточненныминдекснымдиапазоном(строка 4), прокоторого известнотолько, что типкомпонентау него произвольный, однако длякомпонентовопределенаоперация присваивания(строка 2), типиндекса –произвольныйдискретный(строка 4). Посколькунам предстоитпокомпонентноскладыватьдва массива, надо знать, чтотакое операциясложения длятипа компонентов.Так как этопроизвольныйтип, мы вынужденыпередаватьсложение длятипа компонентакак формальныйпараметр настройки(строка 5).

Втеле функциимы первым деломпроверяем, совпадают лидлины операндов(строка 12), иначепокомпонентноесложение неимеет смысла.Совпадениедлин операндовне гарантируетсовпадениеиндексныхдиапазонов, поэтому в циклепо индексномудиапазонупервого аргумента(строка 15) намнеобходимокаждый развычислятьиндекс соответствующегокомпонентавторого аргумента.Мы лишены возможностисделать этодля типа Index, таккак знаем пронего только, что он дискретен, поэтому переходимот значениядискретноготипа к егопорядковомуномеру (атрибут‘Pos), вычисляемнеобходимыйсдвиг для порядковогономера и возвращаемсяк соответствующемузначению типаIndex (атрибут ‘Val).

Заметим, что параметры(настраиваемой)функции "+" Leftи Right объявленыкак имеющиетип Arr, индексныйдиапазон которогоне уточнен.Однако Left и Right –это формальныепараметры, наместо которыхпри вызове(результатаконкретизации)функции "+" будутподставленыконкретныемассивы с известнымииндекснымидиапазонами.Мы же в телефункции "+"пользуемсяатрибутамимассивов (‘Range,‘First, ‘Length), чтобы изобъекта получитьинформациюо его индексномдиапазоне.

Почему Ада?

Выборязыка дляпрограммногопроекта ранеебыл чисто техническимвопросом. Сегодняэто стало вопросомстратегическойважности, имеющимдалеко идущиепоследствиядля успехапроекта. Перечислимнекоторыепричины, благодарякоторым языкАда был выбрандля реализациипрограммныхпроектов различнымикомпаниями, либо сделанобязательнымдля использованияв рамках тендеров.

Желание повысить надежность разрабатываемой системы, так как программные дефекты могут иметь серьезные последствия для здоровья людей, экономики, экологии и т. п. (Ада обладает встроенными средствами обеспечения надежности).

Желание снизить стоимость разработки и сопровождения системы.

Наличие международных стандартов и наличие компиляторов языка практически для любой платформы.

Преимущества дисциплинированного подхода к разработке программного обеспечения, которые становятся особенно существенными по мере увеличения объема и сложности программного обеспечения.

Ада и Си

Припроведениисравнительныханализов популярныхязыков переломаностолько копий, что сегодняэту тему частоотносят к разряду«религиозныхвойн». Поэтомуограничимсялишь ссылкойна известнуюстатью [2], в которойделается рядкрасноречивыхвыводов.

Разработка программ на языке Ада обходится на 60% дешевле аналогичных программных проектов, реализуемых на Си.

Программа на языке Ада имеет в 9 раз меньше дефектов, чем программа на Си; программа на Си++ имеет еще более низкие, чем программа Си, характеристики.

предпочтительнее Си как для опытных, так и для неопытных программистов, а также для программистов, имеющих как максимальный, так и минимальный рейтинг в своей группе.

Трудоемкость изучения языка Ада не выше трудоемкости изучения Си.

Программы на Аде более надежны, чем программы на Си.

Вкачестве иллюстрацииэтих выводов, приведем примерразработкибортовогопрограммногообеспечениясамолета C-130J всоответствиис требованиямиУровня А стандартаDO-178B [3]. При этомконстатировалоськачество кода, в 10 раз превышающеесреднее дляпрограммногообеспеченияУровня А.Производительностьтруда вырославчетверо относительносопоставимыхпрограммныхпроектов.

Ада и Java

ВMicrosoft были вынужденывключить влицензионныесоглашениядля своихоперационныхсистем следующийпункт(www.microsoft.com/msdownload/ieplatform/ie/license.txt):«Замечаниеотносительноподдержки языкаJava… ТехнологияJava не являетсяустойчивойк сбоям и непредназначена…для использованияв рамках управляющихсистем реальноговремени..., в которыхсбой языка Javaможет повлечьза собой смерть, увечье, илитяжелый уронинфраструктуреили окружающейсреде. КомпанияSun Microsystems, Inc. обязалакомпанию Microsoftразместитьданное предупреждение».

Укажемтакже на статьи[4] и [5], демонстрирующиепреимуществаязыка Ада надJava.

«Адские»мифы

Довольночасто с Адойсвязывают наборустойчивыхзаблуждений, препятствующихкак распространениюязыка, так иосознанномувыбору Ады вкачестве языкареализациипроекта.

Ада– мертвый язык, на нем сейчасникто не программирует.В действительности, Ада увереннозанимает нишубольших встроенныхсистем с повышеннымитребованиямик надежности.По сравнениюс «коробочными»продуктамидля Windows, такиесистемы не такзаметны, посколькулибо существуютв одном экземпляре(какой смыслтиражироватьпрограмму, управляющуюдвижениемпоездов метро), или распространяютсякак часть системы, в которую онивстроены (бортовоепрограммноеобеспечение).

Ада– язык, предназначенныйисключительнодля военныхприменений.Ада действительнобыла разработанапри участииМинистерстваобороны США, однако отсутствуюткакие-либотехнические, административныеили иные причины, препятствующиеиспользованиюАды для разработкигражданскихсистем. Количество«гражданских»проектов, основанныхна этом языке, сегодня сопоставимос количеством«военных»проектов.

Ада– слишком большойи сложный язык, для того чтобыиспользоватьего в небольшомпроекте. Объеми сложностьвсех современныхиндустриальныхязыков практическиодинаковы, ичтобы убедитьсяв этом, достаточнопросто сравнитьобъем их описаний.Этот миф восходитк началу 80-х годов, когда Адусопоставлялис Паскалем, Фортраном 77или Бейсиком.

Программистов, знающих Аду, мало, изучениеязыка с нулятребует чрезмерныхусилий и времени.На самом жеделе, настоящуютрудностьпредставляетотысканиеспециалистов, понимающихспецификувстроенныхсистем и способныхсоздаватькачественныепрограммы дляних. Так, например, компания BAE, одиниз активныхпользователейязыка Ада, нетребует откандидатовзнания этогоязыка; вместоэтого ищутсялюди, знакомыесо встроеннымисистемами ипроцессамисоздания программногообеспеченияиндустриальногокачества. Посленайма такихлюдей требуетсявсего две неделидля обученияих языку Ада.

Нашличный опытпоказывает, что программистам, знакомым с тойили иной разновидностьюПаскаля, требуетсявсего несколькодней, чтобыначать разрабатыватьнесложныепрограммы наАде.

СуществующиеАда-технологиинеэффективны; и трансляторы, и порождаемыйими код, отличаютсянизкой производительностью.Этот миф такжевосходит кпервой половине80-х годов, когдапоявилисьпервые реализацииАды, фактическивсего лишьдоказывавшие«теорему существованияАда-транслятора, соответствующегостандарту».Достаточнопровести ряднесложныхэкспериментов, запрограммировавнекоторуюмодельнуюзадачку на Аде, Паскале и Си/Си++, и сравнив (присопоставимыхпараметрахкомпиляторов)затем скоростькомпиляции, объем порождаемогокода и скоростьего выполнения, чтобы убедиться, что какой-либоспецифическойнеэффективности, свойственнойАде, просто несуществует.Можно такжеотметить, чтосистема программированияGNAT при объемеисходных текстовболее 40 Мбайт, на 90% реализованана Аде, и построениеее из исходныхтекстов (в егоходе она триждысама себякомпилирует)на современномПК занимаетне более получаса.

СуществующиереализацииАды крайнедороги. Этоверно, однакоследует иметьв виду, чтосуществуетпублично доступнаяверсия системыпрограммированияGNAT, которая бесплатнои на совершеннозаконных основанияхможет бытьвзята из программногорепозиторияНью-йоркскогоуниверситета(ftp://cs.nyu.edu/pub/gnat)вместе с исходнымитекстами

Бесплатныйсыр и как избежатьмышеловки

GNAT(GNu Ada Translator) – многоплатформнаяреализацияязыка Ада, существующаяпрактическина всех современныхиндустриальныхплатформахи поддерживающаягенерацию кодадля популярныхвстроенныхархитектур.GNAT (www.gnat.com)полностьюреализуетстандарт Ады, включая тебиблиотеки, которые стандартомклассифицируютсякак необязательные.Помимо собственноАда-транслятора,GNAT включаетинструментарий, в котором следуетотметить развитуюинтегрированнуюсреду разработчикаи многоязыковыйграфическийотладчик, позволяющий, в том числе, исследоватьповедениепрограмм сасинхроннымипроцессами.Транслятори сопутствующиеинструментыможно использоватькак по отдельности, вызывая их изкоманднойстроки, так ив рамках интегрированнойграфическойсреды разработкиАда-программ.Все компонентыGNAT, включая средуразработки, имеют один итот же интерфейсна всех платформах.Помимо полнойреализацииописываемыхстандартомсредств GNAT предлагаетбогатый набордопускаемыхстандартомрасширений.GNAT – реализацияАды в многоязыковойсистеме программированияgcc, состоящейиз наборакомпиляторовпереднего планадля различныхвходных языковпри общем генераторекода, что существенноупрощает разработкупрограмм, содержащихкомпоненты, реализованныена различныхязыках программирования.

GNATс самого началаразрабатывалсяи распространялсяпод лицензиейGPL. Увы, с GPL такжесвязана массамифов. Так, многиесчитают, чтопрограммы подGPL разрабатываютсянеорганизованнымигруппами энтузиастов, распространяютсяабсолютнобесплатно; врезультатеи надежность, и функциональностьтаких программоставляютжелать лучшего, не позволяютиспользоватьих в сколько-нибудьсерьезныхпроектах. Вслучае с GNAT этодалеко не так.Для того чтобыубедиться вэтом, достаточнопросмотретьсписок компаний, заключившихс его разработчикамиконтракты натехническуюподдержку:Boeing, British Aerospace, Lockheed, Ericsson, SAAB, Avionics идр.

Свободноепредоставлениедемонстрационныхверсий – обычнаяпрактика многихразработчиковпрограммногообеспечения.GNAT отличаетсятем, что находящаясяв свободномдоступе публичнаяверсия являетсяабсолютнополной версиейтехнологии, без каких-либоюридическихили техническихограниченийна ее использование.Ряд серьезныхпроектов былуспешно реализованименно на базепубличныхверсий GNAT. Программноеобеспечениеспускаемогоаппарата Beagle 2европейскойавтоматическойстанции Mars Exdivss, направляющейсяв данный моментк Марсу(www.beagle2.com/index.htm), автоматизированнаястанция документальнойсвязи Министерстваобороны РФ(www.ada-ru.org/prj_doc.html).Единственнымнедостаткомпубличныхверсий являетсято, что разработчикне предоставляетдля них техническойподдержки.

Заключение

Подводяитог, можносказать, чтоязык Ада предоставляетразработчикамидеальноесочетаниецельности, последовательности, надежностии эффективности.Язык поддерживаетсозидательноетворчествои новаторство, обеспечиваяв то же времядисциплинуи индустриальныйуровень разработкипрограммногообеспечения, необходимыедля реализациипрограммныхсистем большойважности.

Полезныеисточники

Практическився информацияпо языку Адаи Ада-технологиям, доступная вСети, можетбыть найдена, если в качествестартовой точкипоиска использоватьодин из трехсайтов: www.adahome.com,www.adaic.org,www.acm.org/sigada.Недавно силамиэнтузиастовязыка Ада былсоздан русскоязычныйсайт www.ada-ru.org.Аннотированнуюбиблиографиюкниг по языкуАда, изданныхна русскомязыке, можнонайти на сайтеfaqs.org.ru/progr/other_l/adafaq2.htm.

Литература

Benjamin Brosgol, Introduction to Ada 95. www.embedded.com/story/OEG20021211S0034

Stephen Zeigler, Comparing Development Costs of C and Ada. www.adaic.com/whyada/ada-vs-c/cada_art.html

P. Amey, Correctness by Construction: Better Can Also be Cheaper. CROSSTALK: Journal of Defense Software Engineering, March, 2002.

Ada 95 Benefits, www.act-europe.fr/texts/papers/ada95-benefits-on-the-jvm.pdf

A Comparison of the Concurrency and Real-Time Features of Ada 95 and Java, www.act-europe.fr/texts/papers/ada-java-concurrency-comp.pdf

СергейРыбин (rybin@gnat.com)– старший научныйсотрудник НИВЦМГУ, ВасилийФофанов(fofanov@act-europe.fr)– инженер-разработчикACT Europe.

Статьяопубликованав журнал «Открытыесистемы», #10, 2003 г.Постоянныйадрес статьи:www.osp.ru/os/2003/10/063.htm.Перепечатываетсяс разрешения


еще рефераты
Еще работы по информатике