Автор: Пользователь скрыл имя, 22 Января 2015 в 00:03, реферат
Краткое описание
Никлаус Вирт - это имя в России известно многим. Три с лишним десятилетия назад профессор Вирт создал в далекой Швейцарии язык программирования Паскаль. Казалось бы, одного этого было достаточно, чтобы навечно вписать его имя в летопись компьютерных наук. Но в жизни нередко бывает так, что признание и известность получают далеко не самые лучшие и не самые совершенные творения. Вот и в случае с Паскалем мы видим лишь вершину айсберга, а большая часть творчества Вирта до сих пор для многих остается неизвестной
Оглавление
Введение……………………………………………………………………..1 Никлаус Вирт…………………………………………………………….....4 Языки программирования…………………………………………………9 Вывод……………………………………………………………………….20 Список литературы………………………………………………………….21
Никлаус Вирт - это имя в России
известно многим. Три с лишним десятилетия
назад профессор Вирт создал в далекой
Швейцарии язык программирования Паскаль.
Казалось бы, одного этого было достаточно,
чтобы навечно вписать его имя в летопись
компьютерных наук. Но в жизни нередко
бывает так, что признание и известность
получают далеко не самые лучшие и не самые
совершенные творения. Вот и в случае с
Паскалем мы видим лишь вершину айсберга,
а большая часть творчества Вирта до сих
пор для многих остается неизвестной.
Никлаус Вирт родился 15 февраля 1934 г. в
небольшом городке Винтертуре, в предместье
Цюриха. С детских лет Вирт увлекался техником,
особенно авиамоделированием. Он буквально
грезил небом. Но для запуска ракет нужно
было получать топливо, и потому он занялся химией. Юный Вирт оборудовал
в подвале школы "секретную" лабораторию.
Ничто не могло его остановить: однажды
сделанная им модель отклонилась от заданной
траектории и угодила под ноги директору школы. Однако Вирт все равно
продолжал упорно идти к намеченной цели.
Спустя несколько десятилетий Никлаусу
Вирту, как и Кену Томпсону, автору UNIX, довелось
полетать на МИГе с военного аэродрома
в Кубинке, что находится под Москвой.
Сбылась его заветная мечта. Лучше всего
мотивацию профессионального творчества
Вирта раскрыл его коллега по Стэнфордскому
университету (США), профессор Дональд
Кнут: "Вирт всегда хотел создавать
аэропланы, и ему нужен был самый лучший
инструментарий. Вот почему он проектировал
много компьютерных языков и микрокомпьютеров."
От строительства моделей Никлаус довольно
быстро перешел к разработке их дистанционного
управления. В разработке языков он навсегда
отказался от абстрактно-научного подхода
в пользу математически инженерного. По
его словам, лучше сначала реализовать
язык и лишь потом следует о нем писать.
Он продолжал строить свою школу, уделяя
немало времени организационной деятельности.
На пенсию профессор Вирт ушел 1 апреля
1999 г. по достижении 65-летнего возраста.
Никлаус Вирт (Швейцария, Швейцарский
Федеральный технологический институт).
Из речи при вручении премии Тьюринга
(Сан-Франциско, США, октябрь 1984 г.): «Мы
живем в сложном мире и стараемся решать
сложные по своей сути проблемы, которые
зачастую для своего решения требуют сложных
устройств. Однако это не значит, что мы
не должны найти элегантные решения, убеждающие
своей ясностью и эффективностью. Простые
элегантные решения более эффективны,
но найти их труднее, чем сложные, и для
этого требуется больше времени».
Самым известным достижением профессора
Вирта считается язык Паскаль (1970). Безусловно,
многие об этом языке слышали и знают его.
Паскаль сыграл огромную роль в области
формирования мировоззрения нескольких
поколений программистов. Главное его
достоинство в простоте и элегантности:
он построен на четких принципах структурного
программирования, сформулированных Эдсгером
Дейкстрой, на красивой математической
базе, заложенной Энтони Хоаром, и на блестящем
архитектурном воплощении идей Algol-W, реализованных
Никлаусом Виртом. С технологической точки
зрения, Паскаль был интересен не только
тем, что его компилятор, созданный в ETH,
стал одной из первых реализаций языков
высокого уровня на самом себе, примерно
на два года опередив компилятор Си. В
ходе работ над ним в 1973 г. была придумана
абстрактная Pascal-машина (P-машина), исполняющая
специальный P-код. Чтобы решить проблему
переноса компилятора Паскаля на разные
платформы, Вирт решил воспользоваться
испытанными временем методами интерпретации.
Из наиболее известных решений, предшествовавших
P-коду, можно назвать реализацию языка
Snobol-4 (Р. Грисуолд, 1967), где в качестве кода
абстрактной машины использовался язык
SIL (System Implementation Language).
Язык Паскаль многими воспринимался прежде
всего как язык для преподавания компьютерных
наук. Но сам Вирт не согласен с таким заведомым
сужением его потенциала (1984): "Утверждалось,
что Паскаль был разработан в качестве
языка для обучения. Хотя это утверждение
справедливо, но его использование при
обучении не являлось единственной целью.
На самом деле я не верю в успешность применения
во время обучения таких инструментов
и методик, которые нельзя использовать
при решении каких-то практических задач.
По сегодняшним меркам Паскаль обладал
явными недостатками при программировании
больших систем, но 15 лет назад он представлял
собой разумный компромисс между тем,
что было желательно, и тем, что было эффективно".
Компьютерная индустрия отставала от
работ Вирта как минимум на 5–7 лет. В том
же 1979 г. (когда появился первый компилятор
Modula-2 на компьютере PDP-11 в среде RT-11) намного
уступавший Lilith легендарный компьютер
Apple II только-только обрел компилятор Apple
Pascal, ориентированный на UCSD-реализацию
Паскаля. До появления первого скромного
Turbo Pascal Андерса Хейльсберга оставалось
целых четыре года! Что касается компьютера
Lilith, то он стал первым компьютером в Европе,
который полноценно использовал возможности
лазерной печати. Впоследствии Вирт с
грустью говорил о том, что с проектом
Lilith швейцарская промышленность упустила
свой уникальный шанс. Подлинной жемчужиной
творчества Вирта стал проект Oberon (1988).
Созданная почти два десятилетия назад
система Oberon (Oberon System, http://www.oberon.ethz.ch/) играет в наши дни приблизительно ту
же роль, что в начале 1980-х годов игралипроекты Alto и Xerox Star знаменитого
центра Xerox PARC, откуда взяли начало современные
персональные компьютеры и текстовые
редакторы. Для таких корпораций, как Microsoft,
IBM и Sun Microsystems, проект Oberon стал источником
плодотворных идей, среди которых можно
выделить документоориентированный интерфейс,
браузеры, промышленные языки разработки
ПО (Java и C#), машинно-независимый мобильный
код (JVM и .NET CLR), аплеты, компонентное ПО,
динамическую компиляцию (JIT, AOC, DAC), смарт-теги,
веб-службы и др.
Сейчас это кажется невероятным, но чтобы
перекомпилировать операционную систему
Oberon и компилятор Oberon, требовалось в общей
сложности всего 15 секунд! И это на оборудовании
начала 1990-х годов.
Мир промышленного программирования полон
избыточной сложности. Мы живем в эпоху
торжества безумной технологической гонки
и надуманной сложности. Всю свою жизнь
Никлаус Вирт посвятил борьбе с этими
пагубными явлениями, но его не слышат
или не хотят слышать. "Крайнюю степень
ума, – писал Блез Паскаль, – обвиняют
в безумии точно так же, как полное отсутствие
ума. Хороша только посредственность".
Большую роль в популяризации в нашей
стране языков и систем Никлауса Вирта
сыграли работы группы профессора И. Поттосина
из ИСИ СО РАН. Игорь Васильевич являлся
научным руководителем Дмитрия Кузнецова, одного из
разработчиков архитектуры <Кроноса>
(первый отечественный 32-разрядный компьютер),
и именно он подал идею повторить эксперимент
Никлауса Вирта - реализовать процессор
с архитектурой, ориентированной на языки
высокого уровня. За большой вклад в информатику доктор Никлаус Вирт получил
многочисленные награды и почести. Американский
Совет Магистров присвоил ему звание член-корреспондента;
Компьютерное Общество Института Инженеров по электронике и радиотехнике
— звание компьютерного пионера; он получил
приз IBM европейской науки и техники; стал
членом Швейцарской Академии Инженерии и иностранным партнером Американской
Академии Инженерии, а также получил
орден "Pur le merte" и премию Тьюринга.
Вирт получил почетные докторские степени
от многих университетов: университет
Лавапь, Квебек (Канада), университет Калифорнии, Беркли, университет
Йорк (Англия), университет Лине Иоганна
Кеплера (Австрия), университет Новосибирска
(Россия), Открытый университет Англии,
университет Пре-тории (Южная Африка).
2.Никлаус Вирт
Никлаус Вирт — учёный, специалист
в области информатики, один из известнейших
теоретиков разработки языков программирования,
профессор компьютерных наук , Лауреат
премии Тьюринга 1984 года. Ведущий разработчик
языков Паскаль и Модула-2, Оберон (если
вы такие знаете).Родился 15 февраля 1934
года в Винтертуре, в предместье Цюриха
(Швейцария). Родители — Уолтер и Хедвиг
Вирт. Отец Никлауса был школьным учителем. В их доме была хорошая библиотека,
где Вирт находил немало интересных книг
про железные дороги, турбины и телеграф. Небольшой
городок Винтертур имеет многовековую
историю и славится своими машиностроением:
там выпускаются локомотивы и дизельные
двигатели. В детстве Вирт увлекался авиамоделизмом
и постройкой ракет, увлечение электроникой
началось с разработки устройств дистанционного
управления для моделей. В 1954 году поступил
на факультет электроники Швейцарского
федерального технологического института
в Цюрихе, где за четыре года получил степень
бакалавра по электротехнике. Продолжил
обучение в Лавальском университете в
Квебеке,который находится в Канаде.А
уже в 1960 году получил степень магистра.
Затем был приглашён в университет Калифорнии в Беркли (США), где в 1963 году,
под руководством профессора Хаски, защитил
диссертацию, темой которой стал язык
программирования Euler — расширение Алгола.
Диссертация Вирта была замечена сообществом
разработчиков языков программирования,
и в том же 1963 году он был приглашён в Комитет
по стандартизации Алгола IFIP, который
разрабатывал новый стандарт языка Алгол,
впоследствии ставший Алголом-68 (был и
такой язык). Вместе с Чарльзом Хоаром
Вирт отстаивал в комитете линию на разработку
умеренно модифицированной версии Алгола,
свободной от недостатков исходного языка
и дополненной минимумом действительно
необходимых средств. В 1967 году вернулся
в звании доцента в университет Цюриха,
в 1968 году получил в ETH звание профессора
компьютерных наук. В течение 31 года работал
в ETH. Много занимался организационной
деятельностью, совершенствуя систему
обучения своего университета. В 1970-м Вирт
выступил разработчиком языка программирования
Паскаль, в 1975-м - разрабатывал язык Модула,
а в конце 1970-х Никлаус Вирт принял участие
в конкурсе министерства обороны США,
став одним из разработчиков нового языка
для программирования встроенных систем,
ставшего известным как язык Ада. Его проект,впрочем,
принят не был, как и в случае с языком
Алгол в 1960-х. В 1980-х Вирт возглавлял
Высшую техническую школу Цюриха (Eidgenössische
Technische Hochschule, ETH), а с 1990-го работал в созданном
при этом же учебном заведении Институте
компьютерных систем. В 1990-х Вирт участвовал
в разработке языка Оберон-2, несколько
расширенной версии Оберона. Весной 1999-го
Никлаус Вирт вышел на пенсию, будучи 65-летним.
К этому моменту он был одним из уважаемых
во всем мире разработчиков, на его счету
– работа над как минимум восемью языками
программирования, был он также разработчиком
технологии структурного программирования.
Известно, что Вирт – обладатель нескольких
очень престижных премий ('Turing Award', 'SIGPLAN
Programming Languages Achievement Award'), а также почетных
степеней нескольких учебных заведений.
'В нашей профессии, точность и совершенство
являются не необязательной роскошью,
а просто необходимостью', - сказал как-то
ученый. Три друга-единомышленника: Хоар,
Дейкстра и Вирт. Романтические 1960-е годы
положили начало дружбе трех патриархов
структурного программирования – голландца
Эдсгера Дейкстры, англичанина Энтони
Хоара и швейцарца Никлауса Вирта. Этих
"нобелевских" лауреатов (премия
Тьюринга, присуждаемая ассоциацией ACM,
вручается раз в жизни и приравнивается
в компьютерных науках к Нобелевской)
сблизили не столько абстракции компьютерных
наук, сколько четкая профессиональная
позиция.
Эдсгер Дейкстра (Нидерланды, Эйндховенский
технологический университет). Из речи
при вручении премии Тьюринга (Бостон,
США, 14 августа 1972 г.): «Когда компьютеров
еще не было, то программирование не составляло
никакой проблемы. Когда у нас появилось
несколько маломощных компьютеров, то
программирование стало проблемой средней
сложности. Теперь же, когда мы располагаем
гигантскими компьютерами, то и программирование
превращается в гигантскую проблему.»
Энтони Хоар (Великобритания, Оксфордский
университет). Из речи при вручении премии
Тьюринга (Нэшвилл, США, 27 октября 1980 г.):
«Почти все в программном обеспечении может быть реализовано, продано
и даже использовано, если проявить достаточную
настойчивость. Но существует одно качество,
которое нельзя купить, – это надежность.
Цена надежности – погоня за крайней простотой.
Это цена, которую очень богатому труднее
всего заплатить.»
Никлаус Вирт (Швейцария, Швейцарский
Федеральный технологический институт).
Из речи при вручении премии Тьюринга
(Сан-Франциско, США, октябрь 1984 г.): «Мы
живем в сложном мире и стараемся решать
сложные по своей сути проблемы, которые
зачастую для своего решения требуют сложных
устройств. Однако это не значит, что мы
не должны найти элегантные решения, убеждающие
своей ясностью и эффективностью. Простые
элегантные решения более эффективны,
но найти их труднее, чем сложные, и для
этого требуется больше времени».
Как известно, введение виртуальной (абстрактной)
машины Java преподносилось ее разработчиками
из Sun Labs едва ли как не фундаментальное
открытие в практике языков программирования.
Один из учеников Вирта, Михаэль Франц,
заметил по этому поводу следующее: "Переносимость
Java основана на наличии виртуальной машины,
позволяющей легко имитировать большое
число архитектур. Идея виртуальной машины
была очень популярна уже более двадцати
лет назад, хотя впоследствии о ней забыли.
Тогда речь шла о Pascal-P – созданной
в ETH реализации Паскаля, которая сыграла
решающую роль в распространении этого
языка. Интересно, что виртуальные машины
для Паскаля и Java весьма схожи по архитектурe."
Идеи P-кода нашли применение не только
в платформах Java и NET, не только в других
языках и машинах баз данных, но и в реализации
аппаратных средств. Например, для непосредственного
исполнения P-кода в Western Digital в 1979 г. был
разработан специальный набор WD9000 PEngine.
В Стэнфордском университете в 1980 г. был
создан экспериментальный процессор POMP.
Появившаяся в 1978 г. коммерческая реализация
Паскаля – UCSD Pascal стала еще более известной,
и многие забыли, где же впервые возникли
P-код и P-машина. Вот что говорит об этом
Вирт: "После того как стало известно
о существовании Паскаля, несколько человек
попросили нас помочь в его реализации
на различных машинах, подчеркивая, что
они намерены использовать его для обучения
и что быстродействие для них не имеет
первостепенного значения. После этого
мы решили создать версию компилятора,
которая генерировала бы код для машины
нашей собственной конструкции. Позднее
этот код стал известен как P-код... Pascal-
P оказался исключительно удачным языком
для распространения среди большого числа
пользователей. И если бы у нас хватило
мудрости предвидеть масштабы такого
развития событий, то мы приложили бы больше
усилий и тщательности при разработке
и документировании P-кода". Да,
этот язык был далеко не идеальный. В свое
время Брайан Керниган, известный популяризатор
языка Си, соавтор классического руководства
по Си (K&R), написал критическую статью
"Почему Паскаль не является моим любимым
языком программирования". Если с ней
внимательно ознакомиться, то можно решить,
что Никлаус Вирт сделал из нее правильные
выводы и в языке Modula-2 (1980) под воздействием
статьи устранил многие изъяны канонического
Паскаля. Однако следует иметь в виду одно
немаловажное обстоятельство. Наделавшая
шума работа Кернигана была написана 2
апреля 1981 г., т.е. через два года после
реализации группой Вирта в ETH первого
компилятора Modula-2 и через год после выпуска
аппаратной реализации Modula-2 – персонального
компьютера Lilith. В апреле 1993 г. на Конференции
ACM по истории языков программирования
Вирт в ответ на вопрос одного из своих
коллег поставил языку Modula-2 оценку "6
баллов" (наивысшая оценка в школах
Швейцарии).
Язык Modula-2 был не только компактной и эффективной
альтернативой языку Ada, он намного опережал
те реализации идей модульного программирования,
которые лишь спустя годы и в гораздо менее
продуманном виде нашли свое отражение
в Turbo Pascal и Delphi. Знаменитая операционная
система OS/400 для IBM AS/400 была реализована
на Modula-2. Центр системных исследований
корпорации Digital (DEC Systems Research Center) взял
этот язык в качестве основы реализации
своих внутренних проектов, создав впоследствии
язык Modula-3. Михаэль Франц в феврале 1994
г. защитил в ETH диссертацию, которая называлась
"Динамическая кодогенерация – ключ
к переносимому программному обеспечению".
В ней были четко обозначены проблемы
виртуальных машин и предложен крайне
простой и довольно необычный подход к
достижению переносимости. В диссертации
Франца не только подробно разбирался
принцип формирования и хранения промежуточного
представления, но и делался вывод о том,
что для подобного класса языков он остается
практически неизменным. Другими словами,
для языка Java этот принцип вполне подходил.
Кстати, понятие applet тоже фигурировало
в работах Франца. Через год после появления
Java Михаэль Франц к лету 1996 г. подготовил
среду под названием Juice, выполненную в
виде подключаемого модуля для браузеров
Netscape и Microsoft. Модуль состоял из компактного
варианта ОС Oberon и полнофункционального
компилятора Oberon, размер которых (в Oberon-формате)
в общей сложности составляет всего лишь
100 Кбайт. В марте 1994 г. Михаэль Франц сделал
в Sun Labs несколько докладов, и к весне того
же года Билл Джой (вице-президент Sun и
идеолог проекта создания Java) уже имел
на руках всю необходимую информацию,
включая и диссертацию Франца. Джой стал
одним из первых обладателей лицензии
на ETH Oberon. В июне 1994 г. Биллу Джою пришла
в голову (а вот как это произошло, история
стыдливо умалчивает) идея переориентировать
язык Oak Джеймса Гослинга на иные задачи
– создание компактной ОС. В пожарном
порядке был сверстан проект, который
получил название LiveOak. Все это необходимо
учитывать при взгляде на нынешние проблемы
Java. В результате такие критерии, как простота
(наглядность исходных текстов), надежность,
компактность программ и эффективность
исполняемого кода, теперь заменяются
на один главный критерий – скорость реализации
идей. А это неизбежно ведет к резкому
снижению влияния самого языка и возрастанию
роли инструментальной среды, которой
подчас вообще все равно, чем оперировать,
и прежде всего ее возможностей визуализации.
Как точно отмечает Никлаус Вирт, "постоянный
недостаток времени – вот, вероятно, первейшая
причина, приводящая к появлению громоздкого программного обеспечения".
Приоритет времени разработки в общем-то
понятен: человеческие ресурсы нынче стоят
значительно выше, чем аппаратные. Но не
теряем ли мы по дороге то ценное, что вернуть
потом будет крайне тяжело?
Языки программирования,
разработанные Виртом:
(1963) Euler
(1966) Algol-W
(1968) PL360
(1970) Паскаль
(1976) Modula
(1979) Modula-2
(1988) Оберон
Никлаус Вирт в Академгородке.
2 и 3 октября в качестве гостя Института
систем информатики им. А. Ершова Академгородок
посетил знаменитый ученый, автор алгоритмических
языков Паскаль, Модула и Оберон, профессор
Высшей технической школы Цюриха Никлаус
Вирт. С Академгородком у Вирта давние
связи. В 1965 году он познакомился с академиком
Ершовым, который приезжал в США на конгресс
ИФИП (Международная федерация по обработке
информации). Научные контакты складывались
как по линии рабочей группы ИФИП по языку
Алгол, так и по линии использования языка
Паскаль для реализации системы <Бета>.
Свидетельства дружественных отношений
двух ученых хранит архив академика Ершова.
Утром 2 октября Вирт принял участие
в открытии Потоссинской олимпиады в НГУ,
выразив надежду, что созданные им языки
программирования - преемники Паскаля
- займут достойное место в системе IT-образования.
В три часа того же дня Большая физическая
аудитория НГУ была до отказа заполнена
желающими прослушать доклад профессора
Вирта об эволюции языков и программирования,
где в очень доступной логической форме
был дан анализ инноваций в компьютерных
науках за последние 40 лет.
В начале своего выступления он извинился,
что так и не доучил русский язык до того
уровня, чтобы беспрерывно и внятно говорить
на нем целых два часа. Предложение прочесть
доклад на немецком аудитория встретила
смущенным молчанием. <Самой серьезной
ошибкой, сделанной еще в 1957 году, была
ошибка: Y = X>, - отметил профессор. В зале
раздались легкие смешки. Речь шла о том,
что не все могут воспринимать это равенство
как команду присваивания. Кроме вышеупомянутой
ошибки, Вирт отметил и целый ряд других
промахов, усложняющих языки настолько,
что их практическое использование серьезно
затрудняется. В этой связи Вирт объяснил,
что намеренно пришел к использованию
в своих языках нисходящего синтаксиса,
а также выразил удивление о существующей
до сих пор команде виртуальной переадресации,
которая была необходима лишь во времена,
когда память исчислялась кило-, а не мегабайтами.
Отдельной мишенью для критики профессора
служили популярные языки С и С++, к неудобной
и запутанной структуре которых ученый
возвращался неоднократно. Так, например,
язык Java был им назван Обероном, испорченным
синтакисом языка С. В качестве верного
пути Вирт предложил начать активно использовать
Оберон при обучении студентов программированию.
Тот факт, что на С++ пишется сегодня огромное
количество программ, профессор назвал
не основополагающим. Если предприятие
работает на этом языке, то его инженеры-программисты
имеют множество проблем, тогда как учебная
часть в это же время продолжает выпускать
специалистов по С и С++ по причине их востребованности
на предприятиях. В результате явление
образует собой замкнутый круг, который
просто необходимо разорвать, если мы
говорим о развитии языков программирования
в сторону функциональности и простоты.
Профессор не скупился на критику в адрес
языков программирования с переопределяемыми
синтаксическими правилами (макросы языка
С и перегружаемые операторы).
Желающих получить автограф знаменитого
Вирта оказалось немало - профессор подписывал
все предложенные предметы около получаса.
Самые серьезные студенты гордо принесли
с собой книги самого Никлауса Вирта <Алгоритмы
и структуры данных>, <Системное программирование>
и <Модула-2>. Другие ограничились росчерком
гения в зачетке или на студенческом билете.
Пока ученый раздавал автографы, на крыльце
НГУ собралась пара сотен человек, чтобы
запечатлеть торжественный момент истории.
Программу пребывания Никлауса Вирта
в Академгородке завершил <круглый стол> с преподавателями программирования
различных вузов и школ, где были рассмотрены
вопросы, волнующие современных педагогов.
Небрежно поругивая вечно востребованный
С++, участники пришли к единому мнению
о том, что Оберон или Компонентный Паскаль
является общим наиболее удобным делителем
целого ряда современных языков программирования
и вполне может играть роль эсперанто в обучающем
курсе студентов-программистов.
3.Языки программирования
Стандартизация языков
программирования:
Язык программирования может быть представлен
в виде набора спецификаций, определяющих
его синтаксис и семантику. Для многих
широко распространённых языков программирования
созданы международные стандарты. Специальные
организации проводят регулярное обновление
и публикацию спецификаций и формальных
определений соответствующего языка.
В рамках таких комитетов продолжается
разработка и модернизация языков программирования
и решаются вопросы о расширении или поддержке
уже существующих и новых языковых конструкций.
Типы данных: Современные цифровые
компьютеры обычно являются двоичными
и данные хранят в двоичном (бинарном)
коде (хотя возможны реализации и в других
системах счисления). Эти данные как правило
отражают информацию из реального мира
(имена, банковские счета, измерения и
др.), представляющую высокоуровневые
концепции.
Особая система, по которой данные организуются
в программе, — это система типов языка
программирования; разработка и изучение
систем типов известна под названием теория
типов. Языки могут быть классифицированы
как системы со статической типизацией
и языки с динамической типизацией.
Статически-типизированные языки могут
быть в дальнейшем подразделены на языки
с обязательной декларацией, где каждая
переменная и объявление функции имеет
обязательное объявление типа, и языки
с выводимыми типами. Иногда динамически-типизированные
языки называются латентно-типизированными.
Структуры данных:
Системы типов в языках высокого уровня
позволяют определять сложные, составные
типы, так называемые структуры данных.
Как правило, структурные типы данных
образуются как декартово произведение
базовых (атомарных) типов и ранее определённых
составных типов.
Основные структуры данных (списки, очереди,
хеш-таблицы, двоичные деревья и пары)
часто представлены особыми синтаксическими
конструкциями в языках высокого уровня.
Такие данные структурируются автоматически.
Семантика языков программирования:
Существует несколько подходов к определению
семантики языков программирования. Наиболее
широко распространены разновидности
следующих трёх: операционного, денотационного
(математического) и деривационного (аксиоматического).
При описании семантики в рамках операционного
подхода обычно исполнение конструкций
языка программирования интерпретируется
с помощью некоторой воображаемой (абстрактной)
ЭВМ.
Деривационная семантика описывает последствия
выполнения конструкций языка с помощью
языка логики и задания пред- и постусловий.
Денотационная семантика оперирует понятиями,
типичными для математики — множества, соответствия,
а также суждения, утверждения и др.
Язык программирования строится в
соответствии с той или иной базовой моделью
вычислений и парадигмой программирования.
Несмотря на то, что большинство языков
ориентировано на императивную модель
вычислений, задаваемую фоннеймановской
архитектурой ЭВМ, существуют и другие
подходы. Можно упомянуть языки со стековой
вычислительной моделью (Forth, Factor, Postscript
и др.), а также функциональное (Лисп, Haskell,
ML и др.) и логическое программирование
(Пролог) и язык Рефал, основанный на модели
вычислений, введённой советским математиком А.А.
Марковым-младшим. В настоящее время также
активно развиваются проблемно-ориентированные,
декларативные и визуальные языки программирования.
Компилируемые и интерпретируемые
языки:
Языки программирования могут быть разделены
на компилируемые и интерпретируемые.
Программа на компилируемом языке при
помощи специальной программы компилятора
преобразуется (компилируется) в набор
инструкций для данного типа процессора
(машинный код) и далее записывается в
исполнимый модуль, который может быть
запущен на выполнение как отдельная программа.
Другими словами, компилятор переводит
исходный текст программы с языка программирования
высокого уровня в двоичные коды инструкций
процессора. Если программа написана на
интерпретируемом языке, то интерпретатор
непосредственно выполняет (интерпретирует)
исходный текст без предварительного
перевода. При этом программа остаётся
на исходном языке и не может быть запущена
без интерпретатора. Можно сказать, что
процессор компьютера — это интерпретатор
машинного кода. Кратко говоря, компилятор
переводит исходный текст программы на
машинный язык сразу и целиком, создавая
при этом отдельную исполняемую программу,
а интерпретатор выполняет исходный текст
прямо во время исполнения программы.
Разделение на компилируемые и интерпретируемые
языки является несколько условным. Так,
для любого традиционно компилируемого
языка, как, например, Паскаль, можно написать
интерпретатор. Кроме того, большинство
современных «чистых» интерпретаторов
не исполняют конструкции языка непосредственно,
а компилируют их в некоторое высокоуровневое
промежуточное представление (например,
с разыменованием переменных и раскрытием
макросов). Для любого интерпретируемого
языка можно создать компилятор — например,
язык Лисп, изначально интерпретируемый,
может компилироваться без каких бы то
ни было ограничений. Создаваемый во время
исполнения программы код может так же
динамически компилироваться во время
исполнения. Как правило, скомпилированные
программы выполняются быстрее и не требуют
для выполнения дополнительных программ,
так как уже переведены на машинный язык.
Вместе с тем, при каждом изменении текста
программы требуется её перекомпиляция,
что создаёт трудности при разработке.
Кроме того, скомпилированная программа
может выполняться только на том же типе
компьютеров и, как правило, под той же
операционной системой, на которую был
рассчитан компилятор. Чтобы создать исполняемый
файл для машины другого типа, требуется
новая компиляция.
Интерпретируемые языки обладают некоторыми
специфическими дополнительными возможностями
(см. выше), кроме того, программы на них
можно запускать сразу же после изменения,
что облегчает разработку. Программа на
интерпретируемом языке может быть зачастую
запущена на разных типах машин и операционных
систем без дополнительных усилий. Однако
интерпретируемые программы выполняются
заметно медленнее, чем компилируемые,
кроме того, они не могут выполняться без
дополнительной программы-интерпретатора.
Некоторые языки, например, Java и C#, находятся
между компилируемыми и интерпретируемыми.
А именно, программа компилируется не
в машинный язык, а в машинно-независимый
код низкого уровня, байт-код. Далее байт-код
выполняется виртуальной машиной. Для
выполнения байт-кода обычно используется
интерпретация, хотя отдельные его части
для ускорения работы программы могут
быть транслированы в машинный код непосредственно
во время выполнения программы по технологии
компиляции «на лету» (Just-in-time compilation, JIT).
Для Java байт-код исполняется виртуальной
машиной Java (Java Virtual Machine, JVM), для C# — Common
Language Runtime. Подобный подход в некотором
смысле позволяет использовать плюсы
как интерпретаторов, так и компиляторов.
Следует упомянуть также оригинальный
язык Форт(Forth) имеющий и интерпретатор
и компилятор.
Современные языки программирования рассчитаны
на использование ASCII, то есть доступность
всех графических символов ASCII является
необходимым и достаточным условием для
записи любых конструкций языка. Управляющие
символы ASCII используются ограниченно:
допускаются только возврат каретки CR,
перевод строки LF и горизонтальная табуляция
HT (иногда также вертикальная табуляция
VT и переход к следующей странице FF).
Подробнее по этой теме см.: Переносимый
набор символов. Ранние языки, возникшие
в эпоху 6-битных символов, использовали
более ограниченный набор. Например, алфавит
Фортрана включает 49 символов (включая
пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0
1 2 3 4 5 6 7 8 9 = + - * / () . , $ ' : Заметным исключением
является язык APL, в котором используется
очень много специальных символов. Использование
символов за пределами ASCII (например, символов
KOI8-R или символов Юникода) зависит от реализации:
иногда они разрешаются только в комментариях
и символьных/строковых константах, а
иногда и в идентификаторах. В СССР существовали
языки, где все ключевые слова писались
русскими буквами, но большую популярность
подобные языки не завоевали (исключение
составляет. Встроенный язык программирования
1С: Предприятие). Подробнее по этой теме
см.: Русские языки программирования. Расширение
набора используемых символов сдерживается
тем, что многие проекты по разработке программного
обеспечения являются международными. Очень
сложно было бы работать с кодом, где имена
одних переменных записаны русскими буквами,
других — арабскими, а третьих — китайскими
иероглифами. Вместе с тем, для работы
с текстовыми данными языки программирования
нового поколения (Delphi 2006, C#, Java) поддерживают
Unicode.
Процедурные языки программирования:
Процедурное (императивное) программирование
является отражением архитектуры традиционных
ЭВМ, которая была предложенафон Нейманом
в 1940-х годах. Теоретической моделью процедурного
программирования служит алгоритмическая
система под названием Машина Тьюринга.
Программа на процедурном языке программирования
состоит из последовательности операторов
(инструкций), задающих процедуру решения
задачи. Основным является оператор присваивания,
служащий для изменения содержимого областей
памяти. Концепция памяти как хранилища
значений, содержимое которого может обновляться
операторами программы, является фундаментальной
в императивном программировании. Выполнение
программы сводится к последовательному
выполнению операторов с целью преобразования
исходного состояния памяти, то есть значений
исходных данных, в заключительное, то
есть в результаты. Таким образом, с точки
зрения программиста имеются программа
и память, причем первая последовательно
обновляет содержимое последней.
Процедурный язык программирования предоставляет
возможность программисту определять
каждый шаг в процессе решения задачи.
Особенность таких языков программирования
состоит в том, что задачи разбиваются
на шаги и решаются шаг за шагом. Используя
процедурный язык, программист определяет
языковые конструкции для выполнения
последовательности алгоритмических
шагов.
Basic
Бейсик (от BASIC, сокращение от англ. Beginner’s
All-purpose Symbolic Instruction Code — универсальный
код символических инструкций для начинающих;
англ. basic— основной, базовый) — семейство
высокоуровневых языков программирования.
Был разработан в 1963 году профессорами
Дартмутского колледжа Томасом Куртом
(Thomas E. Kurtz) и Джоном Кемени (John G. Kemeny). Язык
предназначался для обучения программированию
и получил широкое распространение в виде
различных диалектов, прежде всего, как
язык для домашних микрокомпьютеров.
Предпосылки: До середины 1960-х компьютеры
(ЭВМ) были слишком дорогими машинами,
использовавшимися в основном для научно-технических
задач, и выполнявшими задачи не в интерактивном
режиме (т.н. пакетная обработка), когда
общение с машиной осуществлялось через
её оператора. Языки программирования
этой поры, как и компьютеры, на которых
они использовались, были разработаны
для работы с ними обученных технических
специалистов и программистов. Поскольку
машины были дорогими, то и машинное время
было дорого — поэтому на первом месте
стояла скорость выполнения программы
(скорость счёта). Однако, в течение 1960-х
цены на компьютеры стали падать так, что
даже небольшие компании могли их себе
позволить; их быстродействие всё увеличивалась
и наступило время, когда стало возможно
организовать более эффективную непосредственную
работу пользователей с компьютерами
в так называемом режиме разделения времени
(time-sharing).
Рождение: Бейсик был придуман в 1963 году
преподавателями Дартмутского Колледжа
Джоном Кемени и Томасом Куртцом, и под
их руководством был реализован командой
студентов колледжа. Со временем, когда
стали появляться другие диалекты, этот
«изначальный» диалект стали называть
Dartmouth BASIC. Бейсик был спроектирован так,
чтобы студенты могли без затруднений
писать программы, используя терминалы
с разделением времени. Он предназначался
для более «простых» пользователей, не
столько заинтересованных в скорости
исполнения программ, сколько просто в
возможности использовать компьютер для
решения своих задач не имея специальной
подготовки. При проектировании языка
использовались следующие восемь принципов:
новый язык должен быть простым в использовании
для начинающих быть языком программирования
общего назначения предоставлять возможность
расширения функциональности, доступную
опытным программистам быть интерактивным
предоставлять ясные сообщения об ошибках
быстро работать на небольших программах
не требовать понимания работы аппаратного
обеспечения защищать пользователя от
операционной системы .Язык был основан
частично на Фортран II и частично на Алгол-60,
с добавлениями, делающими его удобным
для работы в режиме разделения времени
и, позднее, обработки текста и матричной
арифметики. Первоначально Бейсик был
реализован на мейнфрейме GE-265 с поддержкой
множества терминалов. Вопреки распространённому
убеждению, в момент своего появления
это был компилируемый язык.
Взрывной рост : Несмотря на то что язык
уже использовался на нескольких миникомпьютерах,
его настоящее распространение началось
с его появления на микрокомпьютере Altair
8800. Многие языки программирования были
слишком большими чтобы поместиться в
небольшую память, которую пользователи
таких машин могли себе позволить. Для
машин с таким медленным носителем как
бумажная лента (позднее — аудиокассета)
и без подходящего текстового редактора
такой небольшой язык как Бейсик был отличной
находкой. В 1975 году Майкрософт (тогда это
были лишь двое — Билл Гейтс и Пол Аллен,
при участии Монте Давидова) выпустила
Altair BASIC. Затем его версии появились на
другой платформе под лицензией и скоро
в использовании были уже миллионы копий
и вариантов; один из вариантов, Applesoft BASIC,
стал стандартным языком на Apple II. Для операционной
системы CP/M был создан диалект BASIC-80, надолго
определивший развитие языка. В 1979 году
Майкрософт обсуждала с несколькими поставщиками
компьютеров (включая IBM) лицензирование
интерпретатора Бейсик на их машинах.
Одна из версий (ROM BASIC) была включена в
ПЗУ IBM PC — компьютер мог автоматически
загружаться в Бейсик. Так как IBM не придавала
тогда большого значения персональным
компьютерам (основным полем её деятельности
были мейнфреймы), то, вопреки своим принципам,
она разрешила Microsoft продавать интерпретатор
отдельно. Это сделало последнюю пионером
в выпуске ПО нового поколения — не привязанного
к конкретной аппаратуре и поставляемого
отдельно от компьютера. Синтаксис языка
напоминает Fortran, и многие элементы — явные
заимствования из него. Язык задумывался
для обучения, поэтому его конструкции
максимально просты. Как и в других языках
программирования, ключевые слова взяты
из английского языка. Основных типов
данных два: строки и числа. С появлением
версии Visual Basic, а также различных его модификаций
(таких как VBA), в языке появились многие
другие типы данных и дополнения, типичные
для современных языков программирования
(например, такие как объектная модель).
Объявление переменных не требует специальной
секции (в отличие, например, от Паскаля).
Объявление переменной — это первое её
использование. Ранние версии бейсика
(такие как GWBASIC, QBasic) существенно отличаются
от современных диалектов и на сегодня
практически не используются.
Pascal
Паскаль (англ. Pascal) — высокоуровневый
язык программирования общего назначения.
Один из наиболее известных языков программирования,
широко применяется в промышленном программировании,
обучении программированию в высшей школе,
является базой для большого числа других
языков. Был создан Никлаусом Виртом в
1968/9 годах (опубликован в 1970-м) после его
участия в работе комитета разработки
стандарта языка Алгол-68. Паскаль был создан
как язык для обучения процедурному программированию
(хотя, по словам Вирта, язык нельзя считать
только учебным, поскольку язык, непригодный
для написания реальных программ, для
обучения использоваться не должен). Название
языку дано в честь выдающегося французского математика, физика, литератора и философа
Блеза Паскаля. Паскаль был создан Никлаусом
Виртом в 1968/9 годах после его участия в
работе комитета разработки стандарта
языка Алгол-68. Он был опубликован в 1970
году Виртом как небольшой и эффективный
язык, чтобы способствовать хорошему стилю
программирования, использовать структурное
программирование и структурированные
данные. Компилятор Паскаля был написан
на самом Паскале, используя «метод раскрутки»,
когда создается ядро языка, с постепенным
наращиванием новых возможностей. Особенностями
языка являются строгая типизация и наличие
средств структурного (процедурного) программирования.
Паскаль был одним из первых таких языков.
По мнению Н. Вирта, язык должен способствовать
дисциплинированию программирования,
поэтому, наряду со строгой типизацией,
в Паскале сведены к минимуму возможные
синтаксические неоднозначности, а сам
синтаксис автор постарался сделать интуитивно
понятным даже при первом знакомстве с
языком. Тем не менее, первоначально язык
имел ряд ограничений: невозможность передачи
функциям массивов переменной длины, отсутствие
нормальных средств работы с динамической
памятью, ограниченная библиотека ввода-вывода,
отсутствие средств для подключения функций
написанных на других языках, отсутствие
средств раздельной компиляции и т.п. Подробный
разбор недостатков языка Паскаль того
времени был выполнен Брайаном Керниганом
в статье «Почему Паскаль не является
моим любимым языком программирования»
(интересно, что эта статья вышла в начале
1980-х, когда уже существовал язык Модула-2,
потомок Паскаля, избавленный от большинства
его пороков, а также более развитые диалекты
Паскаля). Некоторые недостатки Паскаля
были исправлены в ISO-стандарте 1982 года,
в частности, в языке появились открытые
массивы, давшие возможность использовать
одни и те же процедуры для обработки одномерных
массивов различных размеров. Необходимо
заметить, что многие недостатки языка
не проявляются или даже становятся достоинствами
при обучении программированию. Кроме
того, по сравнению с основным языком программирования
в академической среде 70-х (которым былФортран,
обладавший гораздо более существенными
недостатками), Паскаль представлял собой
значительный шаг вперёд. В начале 1980-х
годов в СССР для обучения школьников
основам информатики и вычислительной техники академик
А.П. Ершов разработал алголо-паскалеподобный
«алгоритмический язык». Наиболее известной
реализацией Паскаля, обеспечившая широкое
распространение и развитие языка является
Turbo Pascal фирмы Borland, выросшая затем в объектный
Паскаль для DOS (начиная с версии 5.5) и Windows
и далее в Delphi, в которой использовались
значительные расширения языка. Диалекты
Паскаля, применяемые в Turbo Pascal для DOS и
Delphi для Windows, из-за отстутствия других
успешных коммерческих реализаций стали
популярны. Объектный Паскаль от Borland и
в отсутствие отраслевой стандартизации
стал сильно отличаться от классического
Паскаля. Язык программирования — формальная
знаковая система, предназначенная для
записи программ, задающих алгоритм в
форме, понятной для исполнителя (например,
компьютера). Язык программирования определяет
набор лексических, синтаксических и семантических
правил, используемых при составлении
компьютерной программы. Он позволяет
программисту точно определить то, на
какие события будет реагировать компьютер,
как будут храниться и передаваться данные,
а также какие именно действия следует
выполнять над этими данными при различных
обстоятельствах. Со времени создания
первых программируемых машин человечество
придумало уже более восьми с половиной
тысяч языков программирования. Каждый
год их число пополняется новыми. Некоторыми
языками умеет пользоваться только небольшое
число их собственных разработчиков, другие
становятся известны миллионам людей.
Профессиональные программисты иногда
применяют в своей работе более десятка
разнообразных языков программирования.
Cи
Си (англ. C) — стандартизированный процедурный
язык программирования, разработанный
в начале 1970-х годов сотрудниками Bell Labs Кеном Томпсоном и Денисом Ритчи как
развитие языка Би. Си был создан для использования
в операционной системе UNIX. С тех пор он
был импортирован на многие другие операционные
системы и стал одним из самых используемых
языков программирования. Си ценят за
его эффективность; он является самым
популярным языком для создания системного программного
обеспечения. Его также часто используют
для создания прикладных программ. Несмотря
на то, что Си не разрабатывался для новичков,
он активно используется для обучения
программированию. В дальнейшем синтаксис
языка Си стал основой для многих других
языков (см.: Си-подобный синтаксис).Для
языка Си характерны лаконичность, современный
набор конструкций управления потоком
выполнения, структур данных и обширный
набор операций. Язык программирования
Си отличается минимализмом. Авторы языка
хотели, чтобы программы на нём легко компилировались
с помощью однопроходного компилятора,
после компиляции каждой элементарной
составляющей программы соответствовало
весьма небольшое число машинных команд,
а использование базовых элементов языка
не задействовало библиотеку времени
выполнения. Однопроходный компилятор
компилирует программу, не возвращаясь
назад, к уже откомпилированному тексту.
Поэтому использованию функции должно
предшествовать её объявление. Код на
Си можно легко писать на низком уровне
абстракции, почти как на ассемблере. Иногда
Си называют «универсальным ассемблером»
или «ассемблером высокого уровня», что
отражает различие языков ассемблера
для разных платформ и единство стандарта
Си, код которого может быть скомпилирован
без изменений практически на любой модели
компьютера. Си часто называют языком
среднего уровня или даже низкого уровня,
учитывая то, как близко он работает к
реальным устройствам. Компиляторы Си
разрабатываются сравнительно легко благодаря
относительно низкому уровню языка и скромному
набору элементов. Поэтому данный язык
доступен на самых различных платформах
(возможно, круг этих платформ шире, чем
у любого другого существующего языка).
К тому же, несмотря на свою низкоуровневую
природу, язык позволяет создавать переносимые
программы и поддерживает программиста
в этом. Программы, соответствующие стандарту
языка, могут компилироваться на самых
различных компьютерах. Си (как и ОС UNIX,
с которой он долгое время был связан)
создавался программистами и для программистов,
круг которых был бы ненамного шире круга
разработчиков языка. Несмотря на это,
область использования языка значительно
шире задач системного программирования.
Си создавался с одной важной целью: сделать
более простым написание больших программ
с минимумом ошибок по правилам процедурного
программирования, не добавляя лишних
накладных расходов на итоговый код программы
компилятором, как это всегда делают языки
очень высокого уровня, такие как Бейсик.
С этой стороны Си имеет следующие важные
особенности: простую языковую базу, из
которой вынесены в библиотеки многие
существенные возможности, вроде математических
функций или функций управления файлами;
ориентацию на процедурное программирование,
обеспечивающую удобство применения структурного
стиля программирования; систему типов,
предохраняющую от бессмысленных операций;
использование препроцессора для, например,
определения макросов и включения файлов
с исходным кодом; непосредственный доступ
к памяти компьютера через использование
указателей; минимальное число ключевых
слов; передачу параметров в функцию по
значению, а не по ссылке (при этом передача
по ссылке выполняется с помощью указателей);
указатели на функции и статические переменные
области действия имён; записи — определяемые
пользователем собирательные типы данных
(структуры), которыми можно манипулировать
как одним целым; Вот некоторые особенности
других языков программирования, которых
не имеет Си: автоматическое управление
памятью; поддержка объектно-ориентированного
программирования (при этом первые версии
C++ генерировали код программы на языке
Си); вложенные функции (существуют компиляторы
языка Си реализующие эту функцию, например
компилятор GNU);полиморфизм функций и операторов;
встроенная поддержка многозадачности
и сети функции высшего порядка карринг.
Несмотря на то, что в Си нет столь многого, а это было важно в
начале, язык был хорошо принят, потому
что он позволял быстро создавать компиляторы
для новых платформ, а также позволял программистам
довольно точно представлять, как выполняются
их программы. Благодаря этому программы,
написанные на Си, эффективнее написанных
на многих других языках. Как правило,
лишь оптимизированный вручную код на
ассемблере может работать ещё быстрее,
потому что он даёт полный контроль над
машиной, однако развитие современных
компиляторов вместе с усложнением современных
процессоров быстро сократило этот разрыв.
Одним из последствий высокой эффективности
и переносимости Си стало то, что многие
компиляторы, интерпретаторы и библиотеки
других языков высокого уровня часто выполнены
на языке Си. Объектно-ориентированные
языки программирования. Объектно-ориентированный
язык программирования (ОО-язык) — язык,
построенный на принципах объектно-ориентированного
программирования. В основе концепции
объектно-ориентированного программирования
лежит понятие объекта - некоей субстанции,
которая объединяет в себе поля (данные)
и методы (выполняемые объектом действия).
Например, объект "человек" может
иметь поля "имя", "фамилия" и
иметь методы "есть" и "спать".Соответственно,
мы можем использовать в программе операторы
Человек. Имя: ="Иван" и Человек. Есть(пища).
Си++
Компилируемый статически типизированный
язык программирования общего назначения.
Поддерживает разные парадигмы программирования,
но, в сравнении с его предшественником
— языком Си, — наибольшее внимание уделено
поддержкеобъектно-ориентированного
и обобщённого программирования.[1]
Название «Си++» происходит
от Си, в котором унарный оператор ++ обозначает
инкрементпеременной.
В 1990-х годах язык стал одним
из наиболее широко применяемых языков
программирования общего назначения.
При создании Си++ стремились
сохранить совместимость с языком Си.
Большинство программ на Си будут исправно
работать и с компилятором Си++. Си++ имеет
синтаксис, основанный на синтаксисе Си.
Язык возник в начале 1980-х годов,
когда сотрудник фирмы Bell Laboratories Бьёрн
Страуструп придумал ряд усовершенствований
к языку Си под собственные нужды. До начала
официальной стандартизации язык развивался
в основном силами Страуструпа в ответ
на запросы программистского сообщества.
В 1998 году был ратифицирован международный
стандарт языка Си++: ISO/IEC 14882:1998 «Standard for
the C++ Programming Language»; после принятия технических
исправлений к стандарту в 2003 году — нынешняя
версия этого стандарта — ISO/IEC 14882:2003. Ранние
версии языка, известные под именем «C
с классами», начали появляться с 1980 года.
Идея создания нового языка берёт начало
от опыта программирования Страуструпа
для диссертации. Он обнаружил, что язык
моделирования Симула (Simula) имеет такие
возможности, которые были бы очень полезны
для разработки большого программного
обеспечения, но работает слишком медленно.
В то же время язык BCPL достаточно быстр,
но слишком близок к языкам низкого уровня
и не подходит для разработки большого программного
обеспечения. Страуструп начал работать
в Bell Labs над задачами теории очередей (в
приложении к моделированию телефонных
вызовов). Попытки применения существующих
в то время языков моделирования оказались
неэффективными. Вспоминая опыт своей
диссертации, Страуструп решил дополнить
язык Си (преемник BCPL) возможностями, имеющимися
в языке Симула. Язык Си, будучи базовым
языком системы UNIX, на которой работали
компьютеры Bell, является быстрым, многофункциональным
и переносимым. Страуструп добавил к нему
возможность работы с классами и объектами.
В результате, практические задачи моделирования
оказались доступными для решения как
с точки зрения времени разработки (благодаря
использованию Симула-подобных классов)
так и с точки зрения времени вычислений
(благодаря быстродействию Си). В начале
в Си были добавлены классы (с инкапсуляцией),
производные классы, строгая проверка
типов, inline-функции и аргументы по умолчанию.
Разрабатывая Си с классами (позднее Си++),
Страуструп также написал программу cfront
— транслятор, перерабатывающий исходный
код Си с классами в исходный код простого
Си. Новый язык, неожиданно для автора,
приобрёл большую популярность среди
коллег и вскоре Страуструп уже не мог
лично поддерживать его, отвечая на тысячи
вопросов. В 1983 году произошло переименование
языка из Си с классами в Си++. Кроме того,
в него были добавлены новые возможности,
такие как виртуальные функции, перегрузка
функций и операторов, ссылки, константы,
пользовательский контроль над управлением
свободной памятью, улучшенная проверка
типов и новый стиль комментариев (//). Его
первый коммерческий выпуск состоялся
в октябре 1985 года. В 1985 году вышло также
первое издание «Языка программирования
Си++», обеспечивающее первое описание
этого языка, что было чрезвычайно важно
из-за отсутствия официального стандарта.
В 1989 году состоялся выход Си++ версии 2.0.
Его новые возможности включали множественное
наследование, абстрактные классы, статические
функции-члены, функции-константы и защищённые
члены. В 1990 году вышло «Комментированное
справочное руководство по C++», положенное
впоследствии в основу стандарта. Последние
обновления включали шаблоны, исключения,
пространства имён, новые способы приведения
типов и булевский тип. Стандартная библиотека
Си++ также развивалась вместе с ним. Первым
добавлением к стандартной библиотеке
Си++ стали потоки ввода/вывода, обеспечивающие
средства для замены традиционных функций
Си printf и scanf. Позднее самым значительным
развитием стандартной библиотеки стало
включение в неё Стандартной библиотеки
шаблонов. После многих лет работы совместный
комитет ANSI-ISO стандартизировал Си++ в 1998
году (ISO/IEC 14882:1998 — Язык программирования
Си++). В течение нескольких лет после официального
выхода стандарта комитет обрабатывал
сообщения об ошибках и в итоге выпустил
исправленную версию стандарта Си++ в 2003
году. В настоящее время рабочая группа
МОС (ISO) работает над новой версией стандарта
под кодовым названием C++09 (ранее известный
как C++0X), который должен выйти в 2009 году.
Никто не обладает правами на язык Си++,
он является свободным. Однако сам документ
стандарта языка (за исключением черновиков)
не доступен бесплатно. Название «Си++»
было придумано Риком Масситти (Rick Mascitti)
и впервые было использовано в декабре
1983 года. Ранее, на этапе разработки, новый
язык назывался «Си с классами». Имя, получившееся
в итоге, происходит от оператора Си «++»
(увеличение значения переменной на единицу).
Имя «C+» не было использовано потому, что
является синтаксической ошибкой в Си
и, кроме того, это имя было занято другим
языком. Язык также не назван «D», поскольку
«является расширением Си и не пытается
устранять проблемы путём удаления элементов
Си». Стандарт Си++ на 1998 год состоит из
двух основных частей: ядра языка и стандартной
библиотеки. Стандартная библиотека Си++
вобрала в себя разрабатывавшуюся одновременно
со стандартом библиотеку шаблонов STL.
Сейчас название STL официально не употребляется,
однако в кругах программистов на Си++
это название используется для обозначения
части стандартной библиотеки, содержащей
определения шаблонов контейнеров, итераторов,
алгоритмов и функторов. Стандарт Си++
содержит нормативную ссылку на стандарт
Си от 1990 года и не определяет самостоятельно
те функции стандартной библиотеки, которые
заимствуются из стандартной библиотеки
Си. Кроме того, существует огромное количество
библиотек Си++, не входящих в стандарт.
В программах на Си++ можно использовать
многие библиотеки Си. Стандартизация
определила язык программирования Си++,
однако за этим названием могут скрываться
также неполные, ограниченные, достандартные
варианты языка. В первое время язык развивался
вне формальных рамок, спонтанно, по мере
ставившихся перед ним задач. Развитию
языка сопутствовало развитие кросс-компилятора
cfront. Новшества в языке отражались в изменении
номера версии кросс-компилятора. Эти
номера версий кросс-компилятора распространялись
и на сам язык, но применительно к настоящему
времени речь о версиях языка Си++ не ведут.
JAVA
Java — объектно-ориентированный язык программирования,
разрабатываемый компаниейSun Microsystems. Приложения
Java обычно компилируются в специальный
байт-код, поэтому они могут работать на
любой виртуальной Java-машине (JVM) независимо
откомпьютерной архитектуры. Дата официального
выпуска — 23 мая 1995 года. В отношении произношения
в русском языке, как и в ряде других, образовались
две различные нормы — заимствованная
англоязычная/ˈdʒɑːvə/(«джава») и традиционно-национальная
«ява», соответствующая традиционному
произношению названия острова Ява. Компания
Sun придерживается англоязычного прозношения
во всех странах мира. Иногда в обиходе
используют также жаргонное слово «Жаба»
(например, изображение жабы есть на календариках
группы российский пользователей Java (Java
Users Group). Java — так называют не только сам
язык, но и платформу для создания и исполнения
приложений на основе данного языка. Изначально
язык назывался Oak («дуб») и разрабатывался
Джеймсом Гослингом для программирования
бытовых электронных устройств. Впоследствии
он был переименован в Java и стал
использоваться для написания клиентских
приложений и серверного программного обеспечения. Назван в честь марки кофе
Java, любимого некоторыми программистами,
поэтому на официальной эмблеме языка
изображена чашка с парящим кофе. Программы на Java транслируются
в байт-код, выполняемый виртуальной машиной
Java (JVM) — программой, обрабатывающей байтовый
код и передающей инструкции оборудованию
как интерпретатор, но с тем отличием,
что байтовый код, в отличие от текста,
обрабатывается значительно быстрее.
Достоинство подобного способа выполнения
программ — в полной независимости байт-кода
от операционной системы и оборудования,
что позволяет выполнять Java-приложения
на любом устройстве, для которого существует
соответствующая виртуальная машина.
Другой важной особенностью технологии
Java является гибкая система безопасности
благодаря тому, что исполнение программы
полностью контролируется виртуальной
машиной. Любые операции, которые превышают
установленные полномочия программы (например,
попытка несанкционированного доступа
к данным или соединения с другим компьютером)
вызывают немедленное прерывание. Часто
к недостаткам концепции виртуальной
машины относят то, что исполнение байт-кода
виртуальной машиной может снижать производительность
программ и алгоритмов, реализованных
на языке Java. Данное утверждение было справедливо
для первых версий виртуальной машины
Java, однако в последнее время оно практически
потеряло актуальность. Этому способствовал
ряд усовершенствований: