Файл: Курсовая работа тема курсовой.docx

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

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

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

Добавлен: 10.11.2023

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

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

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



МИНОБРНАУКИ РОССИИ
Федеральное государственное бюджетное образовательное учреждениевысшего образования

«МИРЭА Российский технологический университет» РТУ МИРЭА
Институт искусственного интеллекта

Базовая кафедра №252 информационной безопасности


КУРСОВАЯ РАБОТА

Тема курсовой работы: «Сравнительный анализ языков Ada, C и C++»


Студент группы ККСО-06-21

Блинов М.Ю.









(подпись)

Руководитель курсовой работы

Профессор







Лукинова О. В.



(подпись)


Работа представлена к защите


«»2022 г.




Допущен к защите

«»2022 г.





Москва 2022
Содержание
Критерии и цель сравнения …………………………………………………….3

Описание критериев сравнения …………………………………..……………3

Скорость работы языка …………………………………………………………6

Пример сравнения скорости работы языков С и Аda ………………………...7

Количество памяти, занимаемой языком ………………...……………………8

Кросс-платформенность языка ………………………………………………....9

Безопасность языка ...…………………………………………………………..10

Простота языка ………………………………………………………………....11

Список источников …………………………………………………………….13


Критерии


1) скорость работы

2) количество занимаемой памяти

3) кросс-платформенность

4) классы и структуры данных

5) безопасность

6) простота
Цель: сравнение языков программирование проводиться по нескольким причинам, таким как: выбор самого подходящего языка для определенной задачи, нахождение языка, который способен обработать большое количество данных за короткий промежуток времени, а так же нужда в том чтобы язык программирования не допускал утечек памяти и уязвимостей.

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

Быстродействие - является одним из основных критериев качества программы, которое достигается в том числе и за счет выбранного языка программирования. Например, некоторые языки программирования используют внутренние средства, позволяющие добиться ускорения работы программы (например отключение синхронизации потоков ввода и вывода в С++).

Количество занимаемой памяти - не менее важный критерий качества программы.Данное требование появляется, когда программа разрабатывается для встраиваемых систем, мобильных платформ, микроконтроллеров и так далее. В данных случаях, чем меньше памяти расходует программа на данном языке – тем лучше. К таким языкам, опять же, относятся ассемблер, С/С++, Objective-C и другие.

Кроссплатформенность – возможность работы программы на различных платформах, в различных ОС с минимальными изменениями.На чистом С++ написать кроссплатформенную программу довольно трудно, у кода возникает обширная избыточность, теряется достоинство в скорости выполнения. Облегчают задачу кроссплатформенные библиотеки, например, Qt, которые позволяют добиться принципа «один код на все платформы», однако на каждую платформу нужно программу собирать отдельно (при этом разными компиляторами).

Классы и структуры данных - структуры данных и классов позволяют удобно описать, объекты из реальной жизни, а также производить операции с данными этих объектов.

Безопасность - это важный критерий языка программирования.Ошибка буфера (CWE-119) - наиболее распространенная уязвимость безопасности в языке C, аналогичная профилю уязвимости C ++. CWE большинства языков программирования относится к Web и Web-сервисам. Ошибки буфера и другие связанные CWE вряд ли появятся в языках управления. Язык С считается самым небезопасным языком программирования, так как в нем довольно легко ошибится в работе с памятью и это является главной проблемой безопасности этого языка.



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







Скорость работы


Количество занимаемой памяти


Кросс-платформенность



Безопасность



Простота


Общая

оценка

Ada

2

3

3

3

3

14

C

3

1

2

1

2

9

C++

2

2

3

2

2

11


Скорость работы

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

Скорость C или C ++ сильно зависит от созданного кода в целом. Хорошо написанный код на C ++ может работать лучше или так же, как хорошо написанный код на C.
Например, более надёжное программирование, вероятно, будет быстрее на C ++, чем на C. Поэтому специалисты не утверждают, что один язык быстрее, чем другой. В случае производительности C по сравнению с C ++ часто утверждается, что C ++ соответствует C.
C ++ действительно предлагает множество функций, которые могут привести к снижению производительности, но использовать их необязательно. Даже если вы это сделаете, разница в скорости благодаря современным компиляторам, вероятно, будет недостаточно значительной.





Пример сравнения скорости работы языков С и Аda

binary-trees

source


mem


gz


cpu

C gcc #2

168,384

809

4.32

C gcc #3

134,068

836

4.71

Ada 2012 GNAT #4

203,012

2107

10.20

Ada 2012 GNAT

266,008

888

21.99

C gcc

263,664

654

22.16

C gcc #5

351,304

908

32.02

Ada 2012 GNAT #3

528,532

1266

34.15



Количество памяти, занимаемой языком

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

Наконец, компилятор или программа во время исполнения решает, как передавать данные в функцию или из неё. И хотя направление передачи каждого параметра указывать нужно (‘in‘, ‘out‘, или ‘in out‘), но итоговое решение о том, передаются ли данные через регистры, кучу или по ссылке, принимает компилятор или программа во время выполнения, но не программист. Это предотвращает проблемы с переполнением стека.


На этапе работы можно проверить ошибки типа неверного доступа к памяти, переполнения буфера, выхода за установленные пределы, ошибки ±1, доступа к массиву. Затем их можно безопасно обработать, вместо того, чтобы ронять всё приложение.

Все данные в языке Си имеют свой тип. Переменные определенных типов занимают в памяти какое-то место, разное в зависимости от типа. В С нет четкого закрепления количества памяти за определенными типами. Это отдано на реализацию конкретного компилятора под конкретную платформу. Например, переменная типа int в одном компиляторе может занимать в памяти 16 бит, в другом — 32 бита, в третьем — 8 бит. Все определяет конкретный компилятор. Правда, все стремятся к универсализации, и в основном в большинстве компиляторов тип int, например, занимает 2 байта, а тип char — один.

Кросс-платформенность

Язык Ada способен работать на всех ОС без изменений, а вот языки С и С++ нужно будет подвергать некоторым изменениям, чтобы они работали корректно на всех платформах.

Различные версии UNIX и Windows имеют некоторую форму совместимости друг с другом. Это позволяет двоичному файлу, созданному для одной версии ОС, работать на других версиях ОС.
В UNIX выбор вашей машины сборки определяет совместимость. Наименьшей версией ОС, которую вы хотите поддерживать, должна быть ваша сборочная машина, и она будет создавать двоичные файлы, совместимые с последующими второстепенными версиями, до тех пор, пока они не внесут критические изменения (не рекомендуется использовать библиотеку).
В Windows и Mac OS X вы выбираете SDK, который позволяет вам ориентироваться на набор ОС с теми же проблемами, что и при критических изменениях.В Linux каждая ревизия ядра ABI несовместима с любой другой, и модули ядра необходимо перекомпилировать для каждой ревизии ядра.

Безопасность

У Ada – простой, понятный, легко читаемый синтаксис, который существенно снижает риск ситуаций, когда случайная опечатка приводит к тому, что код не становится формально неправильным, но существенно меняется его семантика.

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