Файл: Классификация языков программирования. Критерии выбора среды и языка разработки программ Легкость написания программы.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 25.04.2023

Просмотров: 162

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Введение

Целью данной работы является сравнение четырех языков: Ada, C, C++ и Java. А также поиск достоинств и недостатков каждого из них, сфер наиболее разумного применения.

Общие сведения о языках

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

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

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

Благодаря близости по скорости выполнения программ, написанных на Си, к языку ассемблера, этот язык получил широкое применение при создании системного программного обеспечения и прикладное программное обеспечение для решения широко круга задач. Язык программирования Си оказал существенное влияние на развитие индустрии программного обеспечения, а его синтаксис стал основой для таких языков программирования как C++, C# и Java.


C++ : компилируемый статически типизированный язык программирования общего назначения. Поддерживая разные парадигмы программирования, сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования. Название «C++» происходит от языка C, в котором унарный оператор ++ обозначает инкремент переменной.

Являясь одним из самых популярных языков программирования, C++ широко используется для разработки программного обеспечения. Область его применения включает операционные системы, прикладные программы, драйверы устройств, приложения для встраиваемых систем, высокопроизводительные серверы, а также развлекательные приложения, например, видео игры. Существует несколько реализаций языка, как бесплатных, так и коммерческих. Их производят GNU Project, Microsoft, Intel и Embarcadero (Borland). C++ оказал огромное влияние на другие языки программирования, в первую очередь на C# и Java.

При создании C++ стремились сохранить совместимость с языком C. Большинство программ на C будут исправно работать и с компилятором C++. C++ имеет синтаксис, основанный на синтаксисе C.

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

Работы по разработке были начаты в 1975 году после того как в Министерстве Обороны США был разработан список требований к языку, который был широко распространен. Однако, ни один из существовавших на тот момент времени языков программирования не соответствовал выдвинутым требованиям. В итоге, в 1977 году Министерство Обороны США выдвигает предложение создать новый язык.

Из большого числа предложений было отобрано четыре, для последующего пересмотра и доработки. Позже, для дальнейшего уточнения, из них отобрали два, и в финале выбрали проект представленный компанией Cii-Honeywell Bull. Этому языку и было дано имя Ада, в честь Августы Ады Байрон, графини Лавлейс, дочери английского поэта лорда Байрона. Она была сотрудницей Чарльза Беббиджа, изобретателя аналитической машины, и написала для этой машины программу вычисления чисел Бернулли - Августа Ада по праву считается первым в мире программистом. Разработкой данного проекта руководил Jean Ichbiah.


В 1983 году язык становится стандартом ANSI/MIL-STD-1815A-1983, а затем и международным стандартом ISO 8652:1987. Язык описывается в справочном руководстве по языку (Language Reference Manual), часто называемом LRM. Ссылки на это справочное руководство часто встречаются в книгах, посвященных языку программирования Ада, а также во многих сообщениях об ошибках компилятора.

Язык претерпел пересмотр при введении нового ISO стандарта в начале 1995 года (ISO/IEC 8652:1995).

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

Java — объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Приложения Java обычно транслируется в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине (JVM) вне зависимости от компьютерной архитектуры.

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

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

  • применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде,
  • широкое использование платформенно-ориентированного кода (машинный-код) в стандартных библиотеках,
  • аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).

По данным сайта shootout.alioth.debian.org, для семи разных задач время выполнения на Java составляет в среднем в полтора-два раза больше, чем для C/C++, в некоторых случаях Java быстрее, а в отдельных случаях в 7 раз медленнее. С другой стороны, для большинства из них потребление памяти Java-машиной было в 10-30 раз больше, чем программой на C/C++. Также примечательно исследование, проведённое компанией Google, согласно которому отмечается существенно более низкая производительность и бо́льшее потребление памяти в тестовых примерах на Java в сравнении с аналогичными программами на C++.


Сравнение языков

Парадигмы

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

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

Именно они отражают принципы Фон Неймана

  • Понятия переменной, являющейся аналогом ячейки оперативной памяти
  • Операторов ввода\вывода информации в ячейки
  • Операторов присваивания, отражающих пересылки информации между ячейками
  • Команд управления(усл. переход, циклы)

Объектно-ориентированный язык -Объектно-ориентированный язык позволяет использовать три парадигмы ООП: наследование, инкапсуляцию и полиморфизм.

Функциональный язык - Функциональное программирование - это парадигма программирования, в которой выполнение программы представляет собой вычисление некоторого выражения, описывающего применение функций (в математическом понимании) ко входным данным. В отличие от традиционного подхода к программированию (императивное программирование), где выполнение программы рассматривается как последовательная смена состояний в памяти компьютера (т.е. изменение значений переменных), в функциональном программировании нет понятия переменной и присваивания, функция не имеет явного внутреннего состояния, а оперирует только над входными данными. Из-за этого отсутствуют побочные эффекты, программа становится более простой в отладке.

Рефлексивный язык - означает наличие процесса, во время которого программа может отслеживать и модифицировать собственную структуру и поведение во время выполнения.


Обобщённое программирование — парадигма программирования, заключающаяся в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание.

Логическая - Программа представляет собой описание фактов и правил вывода в некотором логическом исчислении. Желаемый результат, который часто записывается как вопрос, получается системой в результате попытки применения описанных правил — путем логического вывода. Интересными особенностями являются отсутствие детерминированности в общем случае, внутренняя склонность к распараллеливанию.

Декларативная - противоположность императивному. Декларативный язык описывает не столько решение задачи, сколько саму задачу («ЧТО» нужно получить), а каким образом получить решение, уже должен определять компьютер.

Распределенная - Язык, содержащий специальные конструкции для поддержки распараллеливания программы на несколько компьютеров.

Ada

C

C++

Java

Императивный

+

+

+

+

Объектно-ориентированный

+

-

+

+

Функциональный

-

-

+

-

Рефлексивный

-

-

-

-

Обобщенное программирование

+

-

+

+

Логическая

-

-

-

-

Декларативная

-

-

-

-

Распределенная

+

+

+

+

Исторические критерии

1 Мобильность.

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