В 1972 году Керниганом и Ритчи был создан
язык программирования C. Он создавался
как язык для разработки операционной
системы UNIX. C часто называют «переносимым
ассемблером», имея в виду то, что он позволяет
работать с данными практически так же
эффективно, как на ассемблере, предоставляя
при этом структурированные управляющие
конструкции и абстракции высокого уровня
(структуры и массивы). Именно с этим связана
его огромная популярность и поныне. И
именно это является его ахиллесовой пятой.
Компилятор C очень слабо контролирует
типы, поэтому очень легко написать внешне
совершенно правильную, но логически ошибочную
программу.
В 1986 году Бьярн Страуструп создал
первую версию языка C++, добавив в
язык C объектно-ориентированные черты,
взятые из Simula, и исправив некоторые ошибки
и неудачные решения языка. C++ продолжает
совершенствоваться и в настоящее время,
так в 1998 году вышла новая (третья) версия
стандарта, содержащая в себе некоторые
довольно существенные изменения. Язык
стал основой для разработки современных
больших и сложных проектов. У него имеются,
однако же, и слабые стороны, вытекающие
из требований эффективности.
В 1995 году в корпорации Sun Microsystems Кеном
Арнольдом и Джеймсом Гослингом был создан
язык Java. Он наследовал синтаксис C и C++
и был избавлен от некоторых неприятных
черт последнего. Отличительной особенностью
языка является компиляция в код некоей
абстрактной машины, для которой затем
пишется эмулятор (Java Virtual Machine) для реальных
систем. Кроме того, в Java нет указателей
и множественного наследования, что сильно
повышает надежность программирования.
- JavaScript. Язык был создан в компании Netscape Communications в качестве языка для описания сложного поведения веб-страниц. Первоначально назывался LiveScript, причиной смены названия получили маркетинговые соображения. Интерпретируется браузером во время отображения веб-страницы. По синтаксису схож с Java и (отдаленно) с C/C++. Имеет возможность использовать встроенную в браузер объектную функциональность, однако подлинно объектно-ориентированным языком не является.
- VBScript. Язык был создан в корпорации Microsoft во многом в качестве альтернативы JavaScript. Имеет схожую область применения. Синтаксически схож с языком Visual Basic (и является усеченной версией последнего). Так же, как и JacaScript, исполняется браузером при отображении веб-страниц и имеет ту же степень объектно- ориентированности.
- Perl. Язык создавался в помощь системному администратору операционной системы Unix для обработки различного рода текстов и выделения нужной информации. Развился до мощного средства работы с текстами. Является интерпретируемым языком и реализован практически на всех существующих платформах. Применяется при обработке текстов, а также для динамической генерации веб-страниц на веб-серверах.
- Python. Интерпретируемый объектно-ориентированный язык программирования. По структуре и области применения близок к Perl, однако менее распространен и более строг и логичен. Имеются реализации для большинства существующих платформ.
- Объектно-ориентированные языки. (см билет №33)
- Языки параллельного программирования.
- Язык Occam. Язык Оccam был создан в 1982 году и предназначен для программирования транспьютеров — многопроцессорных систем распределенной обработки данных. Он описывает взаимодействие параллельных процессов в виде каналов — способов передачи информации от одного процесса к другому. Возможность программирования в масштабе реального времени на базе нейронных сетей. Недостатки: 1)большие вычислительные мощности 2) очень много памяти
- Linda. В 1985 году была предложена модель параллельных вычислений Linda. Основной ее задачей является организация взаимодействия между параллельно выполняющимися процессами. Linda — это модель параллельных вычислений, она может быть добавлена в любой язык программирования. Язык программирования для суперкомпьютера.
- Неимперативные языки. Все языки, о которых шла речь ранее, имеют одно общее свойство: они императивны. Это означает, что программы на них, в конечном итоге, представляют собой пошаговое описание решения той или иной задачи. Можно попытаться описывать лишь постановку проблемы, а решать задачу поручить компилятору. Существует два основных подхода, развивающие эту идею: функциональное и логическое программирование.
- Функциональные языки.
Основная идея, лежащая в основе
функционального программирования,
— это представление программы
в виде математических функций (т.е.
функций, значение которых определяется
лишь их аргументами, а не контекстом
выполнения). Оператор присваивания в
таких языках не используется. Существуют
языки с ленивой и с энергичной
семантикой. Различие заключается, грубо
говоря, в том, что в языках с
энергичной семантикой вычисления производятся
в том же месте, где они описаны,
а в случае ленивой семантики
вычисление производится только тогда,
когда оно действительно необходимо.
Первые языки имеют более эффективную
реализацию, в то время как вторые
— лучшую семантику.
Из языков с энергичной семантикой
упомянем ML и два его современных
диалекта — Standard ML (SML) и CaML. Последний
имеет объектно-ориентированного потомка
— Objective CaML (O’CaML).
Среди
языков с ленивой семантикой наиболее
распространены два: Haskell и его более простой
диалект Clean.
- Языки логического программирования. Программы на языках логического программирования выражены как формулы математической логики, а компилятор пытается получить следствия из них. Родоначальником большинства языков логического программирования является язык Prolog (1971). У него есть ряд потомков — Parlog (1983, ориентирован на параллельные вычисления), Delta Prolog и др. Логическое программирование, как и функциональное, — это отдельная область программирования.
32. В
чем состоит процесс компиляции?
Компилятор – программа переводящая текст программы
на языке высокого уровня в эквивалентную
программу на машинном языке.
Процесс компиляции:
Сначала выполняется проверка текста
программы на отсутствие ошибок, а
потом — генерируется исполняемая
программа (ехе-файл).
Процесс компиляции состоит из следующих
этапов:
- Лексический анализ. На этом этапе последовательность символов исходного файла преобразуется в последовательность лексем.
- Синтаксический (грамматический) анализ. Последовательность лексем преобразуется в дерево разбора.
- Семантический анализ. Дерево разбора обрабатывается с целью установления его семантики (смысла) — например, привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д. Результат обычно называется «промежуточным представлением/кодом», и может быть дополненным деревом разбора, новым деревом, абстрактным набором команд или чем-то ещё, удобным для дальнейшей обработки.
- Оптимизация. Выполняется удаление излишних конструкций и упрощение кода с сохранением его смысла. Оптимизация может быть на разных уровнях и этапах — например, над промежуточным кодом или над конечным машинным кодом.
- Генерация кода. Из промежуточного представления порождается код на целевом языке.
33.
Назовите языки программирования,
являющиеся представителями объектно-ориентированными?
Объектно-ориентированный язык программирования — язык, построенный на принципах объектно-ориентированного
программирования.
В современных ОО языках используются
методы:
- Наследование. Создание нового класса объектов путём добавления новых элементов (методов). В данный момент ОО языки позволяют выполнять множественное наследование, то есть объединять в одном классе возможности нескольких других классов.
- Инкапсуляция. Сокрытие деталей реализации, которое позволяет вносить изменения в части программы безболезненно для других её частей, что существенно упрощает сопровождение и модификацию ПО.
- Полиморфизм. При полиморфизме некоторые части (методы) родительского класса заменяются новыми, реализующими специфические для данного потомка действия. Таким образом, интерфейс классов остаётся прежним, а реализация методов с одинаковым названием и набором параметров различается. С полиморфизмом тесно связано позднее связывание.
Объектно-ориентированные
языки:
- Simula
Первым объектно-ориентрованным языком
был язык Simula (1967). Этот язык был предназначен
для моделирования различных объектов
и процессов, и объектно-ориентированные
черты появились в нем именно для описания
свойств модельных объектов.
- Smalltalk
Популярность объектно-ориентированному
программированию принес язык Smalltalk, созданный
в 1972 году. Язык предназначался для проектирования
сложных графических интерфейсов и был
первым по-настоящему объектно-ориентированным
языком. В нем классы и объекты — это единственные
конструкции программирования. Большим
недостатком Smalltalk являются большие требования
к памяти и низкая производительность
полученных программ. Это связано с не
очень удачной реализацией объектно-ориентированных
особенностей. Популярность языков C++
и Ada 95 связана именно с тем, что объектно-
ориентированность реализована без существенного
снижения производительности.
- Eiffel
Существует язык с очень
хорошей реализацией объектно- ориентированности,
не являющийся надстройкой ни над каким
другим языком. Это язык Eiffel (1986). Являясь
чистым языком объектно-ориентированного
программирования, он, кроме того, повышает
надежность программы путем использования
«контрольных утверждений».