Файл: Обзор языков программирования высокого уровня ( Классификация языков ).pdf
Добавлен: 04.04.2023
Просмотров: 105
Скачиваний: 1
СОДЕРЖАНИЕ
Глава 1. Теоретические основы языков программирования
1.1. Понятие о языках программирования
1.2. Анализ объектно-ориентированных языков программирования
Глава 2. Анализ языков программирования высокого уровня
2.1 Классификация языков программирования
2.2. Сравнительный анализ языков программирования
Глава 3. Подходы к эффективности использования памяти в языках программирования высокого уровня
Автоматическая память – это специальный регион памяти, резервируемый при запуске программы до вызова функции main из свободной оперативной памяти и используемый в дальнейшем для размещения локальных объектов т.е. объектов, определяемых в теле функций и получаемых функциями через параметры в момент вызова.
Автоматическую память часто называют стеком[19]. Как структура данных, стек работает по принципу–LIFO (Last In First Out), то есть первым извлекается элемент, пришедший последним. Автоматическая память имеет ряд недостатков, которые с успехом решает динамическая память. Динамическая память используется, вопервых, при нехватке единоразово выделенной автоматической или статической памяти, во-вторых, если модель LIFO не соответствует требовани ям программы. Динамическая память – это оперативная память компьютера, предоставляемая программе при ее работе, ее также называют кучей (heap). Динамическое размещение данных означает использование динамической памяти при работе программы[20].
При необходимости программа может запросить у ОС дополнительную память через аллокатор или напрямую через системный вызов. Все языки высокого уровня программирования как основную используют динамическую память, а в статической памяти или на стеке держат указатели на динамические объекты. Размер динамической памяти зависит от ОС, процессора, аппаратной архитектуры, максимального размера ОЗУ. Динамическая память имеет две явные проблемы.
Первая заключается в том, что любое выделение или освобождение памяти в ОС является системным вызовом, замедляющим работу программы. В языке C++ используются умные указатели и RAII. Управление динамической памятью является важнейшей стороной программирования на C++. Работая с динамической памятью, разработчик вплотную сталкивается с указателями, понимание природы которых позволяет избежать огромного количества ошибок. Как написал Джоэл Спольски в своей книге: «Указатели и рекурсия требуют определённых способностей к рассуждению и абстрактному мышлению, а главное – умения рассматривать проблему на нескольких уровнях абстракции одновременно. Поэтому способность разобраться в указателях и рекурсии непосредственно связана с перспективой стать выдающимся программистом»[21].
О нетривиальных подходах к управлению памятью, написании собственных диспетчеров памяти для нестандартного размещения объектов конкретных классов, а также об умных, мудрых, гениальных, ведущих и невидимых указателях можно почитать в книге Джеффа Элджера «C++: библиотека программиста»[22], содержание которой более точно отражает английский вариант названия «C++ for Real Programmers».
Подводя итог, можно сказать, что использование динамической памяти имеет неоспоримые преимущества по отношению к автоматической и статической памяти. Но умение управлять памятью становиться неотъемлемым навыком программиста. У каждого способа управления динамической памятью есть свои плюсы и минусы. Как правило, приходится искать компромисс между производительностью, простотой в использовании, простотой в реализации и совместимостью с многопоточностью.
Продемонстрируем использование вышеизложенного материала на примере реализации обработки множеств. Множества – понятие, часто используемое в математике, так и во многих предметных областях. Использование возможностей управления памятью дает преимущество в плане увеличения мощности обрабатываемого множества.
Пример использования памяти C++. Над множествами можно производить основные математические операции, такие как пересечение, объединение , разность, и симметрическая разность. Каждый из алгоритмов будет проиллюстрирован отдельно. Множества представлены в виде односвязных список, то есть в виде структуры данных, представляющей собой последовательность элементов, в которых хранится значение и указатель на следующий элемент списка[23].
Односвязные списки обладают преимуществом–вставка и удаление узлов легко осуществляется в любом месте списка.
Функция add добавляет элемент в множество, функция getSize возвращает номер последнего элемента, функция getValue возвращает значение элемента по указанному номеру, функция deleteList удаляет список.
Функция intersection: возвращает множество, полученное операцией пересечения двух указанных множеств.
List *intersection(List *headA, List *headB, List *headC)
{int a = 0, b = 0;
for (int i = 1; i <= getSize(headA); i++)
{ a = getValue(headA, i);
for (int j = 1; j <= getSize(headB); j++)
{ b = getValue(headB, j);
if (a == b) {
headC = add(headC, a);}}}
return headC;}
Функция Join: возвращает множество, полученное операцией объединения двух указанных множеств.
List *Join(List *headA, List *headB, List *headM)
{if (getSize(headA) > getSize(headB))
headM = headB;
else headM = headA;
int a = 0, d = 0;
bool multi=true;
for (int i = 1; i <= getSize(headA); i++)
{a = getValue(headA, i);
for (int j = 1; j <= getSize(headM); j++)
{d = getValue(headM, j);
if (a != d) multi = true;
else { multi = false;
break;}}
if (multi) headM = add(headM,a);}
return headM;}
Функция difference: возвращает множество, полученное операцией разности двух указанных множеств.
List *difference(List *headA, List *headB, List *headD)
{ int a = 0, d = 0;
bool multi = true;
for (int i = 1; i <= getSize(headA); i++)
{ a = getValue(headA, i);
for (int j = 1; j <= getSize(headB); j++)
{ d = getValue(headB, j);
if (a == d) {
multi = false; break; }
else multi = true;}
if (multi) headD = add(headD, a);}
return headD;}
Функция sumDifference: возвращает множество, полученное операцией симметрической разности двух указанных множеств.
List *sumDifference(List *headA, List *headB, List *headS)
{ List *temp_A = NULL;
List *temp_B = NULL;
temp_A = difference(headA, headB, temp_A);
temp_B = difference(headB, headA, temp_B);
headS = Join(temp_A, temp_B, headS);
return headS;}
Анализируя работу со множествами посредством односвязных списков, нельзя не признать удобство и универсальность данных алгоритмов. За счет использования указателей и динамической памяти можно наблюдать экономию памяти и заметное увеличение быстродействия программы. Алгоритмы, изложенные выше, лишь малая область применения динамической памяти и указателей, которые позволяют повысить эффективность программы.
Заключение
Язык программирования – это особый язык программистов для разработки программного обеспечения или это другие наборы инструкций и алгоритмов. В нынешнем веке очень много языков программирования, но по-настоящему популярны и широко востребованы только некоторые из них.
Создание языков программирования высокого уровня являлось необходимым шагом. Данные языки программирования должны были быть более совершенными, и напоминать естественные языки программирования и позволять не работать с машинными командами напрямую. Языки программирования высокого уровня призваны для того, чтобы описывать алгоритмы. Также они носят название алгоритмические языки. Их преимущество заключается в большей наглядности и независимости от конкретного компьютера.
Мы рассмотрели классификации языков программирования: по уровню, по абстракции, по поколениям, по функциональному признаку.
Также мы рассмотрели объектно-ориентированные языки программирования. Практически все объектно-ориентированные языки программирования являются развивающимися, их стандарты регулярно обновляются. Вследствие этого развития во входных языках компиляторов различных систем программирования происходят неизбежные различия. Каждый язык имеет свои достоинства и недостатки, а отсюда и различные области эффективного применения. Это объясняет необходимость в изучении и освоении нескольких различных языков программирования.
На выбор языка влияет достаточно большое количество разнообразных факторов, к основных из них можно отнести среду разработки, цели, задачи, которые ставятся перед разработчиком, а также личные предпочтения и уровень владения языком. Поэтому целесообразно сделать вывод, что все рассмотренные выше языки являются достаточно востребованными и широко используются при разработке различных программных продуктов.
Список литературы
Александреску, А. Язык программирования D / А. Александреску. - СПб.: Символ-плюс, 2014. - 544 c.
История развития языков программирования. – http://softcreate.narod.ru.дата доступа (14.05.2019)
Классификация языков программирования [Электронный ресурс]. URL:http://bourabai.ru/alg/classification.htm дата доступа (14.08.2018)
Костарев А.Н. Размещение объектов в оперативной памяти. Понятие указателя / RSDN Magazine. – 2010. – №2. – С. 25 - 32.
Коэльё Л. П., Ричерт В. Построение систем машинного обучения на языке Python. — Перевод с английского. — М.: ДМК Пресс, 2015.
Маккинли У. Python и анализ данных. — Перевод с английского. — М.: ДМК Пресс, 2015. — 482 с.
Объектно-ориентированные языки программирования [Электронный ресурс] // Vuzlit.ru: архив студенческих работ. – Режим доступа: https://vuzlit.ru/1021735/smalltalk.
ООП. Объектно-ориентированные языки программирования [Электронный ресурс] // Bourabai Research: официальный вебсайт частного Боровского исследовательского учреждения по внедрению новых технологий. – Режим доступа: http://bourabai.ru/ alg/oop11.htm.
Особенности объектно-ориентированных языков программирования [Электронный ресурс] // Kopilkaurokov.ru: сайт для учителей. – Режим доступа: https://kopilkaurokov.ru/informatika/prochee/ osobiennosti_obiektno_oriientirovannykh_iazykov_ proghrammirovaniia.
Пять поколений языков программирования [Электронный ресурс]. URL: http://life-prog.ru/view_zam2.php?id=194&cat=5&page=11 дата доступа (14.05.2019)
Спольски Дж. Джоэл И снова о программировании; пер. с англ. — СПб.: СимволПлюс, 2009. — 320 с.
Сравнение языков программирования. Википедия. URL: https://ru.wikipedia.org/ wiki/Сравнение_языков_программирования (дата обращения: 14.05.2019).
Элджер Дж. С++: библиотека программиста; пер. с англ. — СПб.: Питер, 2000. — 320 с.
Язык программирования C# [Электронный ресурс] // Bourabai Research: официальный веб-сайт частного Боровского исследовательского учреждения по внедрению новых технологий. – Режим доступа: http://bourabai.ru/alg/c-sharp.htm.
Язык программирования. Эволюция языков программирования [Электронный ресурс]. URL:http://wiki.mvtom.ru/index.php/Язык_программирования дата доступа (14.05.2019)
Языки программирования и их классификация [Электронный ресурс]. URL:http://www.maksakov-sa.ru/ProgrProd/YazProgr/index.html дата доступа (14.05.2019)
INTUIT, [Электронный ресурс]. Режим доступа : https: // www.intuit.ru / studies / courses / 627 / 483 / lecture / 10960
TIOBE Index for November 2018. URL: https://www.tiobe.com/tiobe-index/ (дата обращения: 15.05.2019).
-
Александреску, А. Язык программирования D / А. Александреску. - СПб.: Символ-плюс, 2014. - 544 c. ↑
-
История развития языков программирования. – http://softcreate.narod.ru.дата доступа (14.05.2019) ↑
-
История развития языков программирования. – http://softcreate.narod.ru.дата доступа (14.05.2019) ↑
-
Коэльё Л. П., Ричерт В. Построение систем машинного обучения на языке Python. — Перевод с английского. — М.: ДМК Пресс, 2015. ↑
-
Маккинли У. Python и анализ данных. — Перевод с английского. — М.: ДМК Пресс, 2015. — 482 с. ↑
-
ООП. Объектно-ориентированные языки программирования [Электронный ресурс] // Bourabai Research: официальный вебсайт частного Боровского исследовательского учреждения по внедрению новых технологий. – Режим доступа: http://bourabai.ru/ alg/oop11.htm. ↑
-
Объектно-ориентированные языки программирования [Электронный ресурс] // Vuzlit.ru: архив студенческих работ. – Режим доступа: https://vuzlit.ru/1021735/smalltalk. ↑
-
Особенности объектно-ориентированных языков программирования [Электронный ресурс] // Kopilkaurokov.ru: сайт для учителей. – Режим доступа: https://kopilkaurokov.ru/informatika/prochee/ osobiennosti_obiektno_oriientirovannykh_iazykov_ proghrammirovaniia. ↑
-
Особенности объектно-ориентированных языков программирования [Электронный ресурс] // Kopilkaurokov.ru: сайт для учителей. – Режим доступа: https://kopilkaurokov.ru/informatika/prochee/ osobiennosti_obiektno_oriientirovannykh_iazykov_ proghrammirovaniia. ↑
-
Особенности объектно-ориентированных языков программирования [Электронный ресурс] // Kopilkaurokov.ru: сайт для учителей. – Режим доступа: https://kopilkaurokov.ru/informatika/prochee/ osobiennosti_obiektno_oriientirovannykh_iazykov_ proghrammirovaniia. ↑
-
Язык программирования C# [Электронный ресурс] // Bourabai Research: официальный веб-сайт частного Боровского исследовательского учреждения по внедрению новых технологий. – Режим доступа: http://bourabai.ru/alg/c-sharp.htm. ↑
-
Классификация языков программирования [Электронный ресурс]. URL:http://bourabai.ru/alg/classification.htm дата доступа (14.08.2018) ↑
-
Языки программирования и их классификация [Электронный ресурс]. URL:http://www.maksakov-sa.ru/ProgrProd/YazProgr/index.html дата доступа (14.05.2019) ↑
-
Пять поколений языков программирования [Электронный ресурс]. URL: http://life-prog.ru/view_zam2.php?id=194&cat=5&page=11 дата доступа (14.05.2019) ↑
-
Пять поколений языков программирования [Электронный ресурс]. URL: http://life-prog.ru/view_zam2.php?id=194&cat=5&page=11 дата доступа (14.05.2019) ↑
-
Язык программирования. Эволюция языков программирования [Электронный ресурс]. URL:http://wiki.mvtom.ru/index.php/Язык_программирования дата доступа (14.08.2018) ↑
-
TIOBE Index for November 2018. URL: https://www.tiobe.com/tiobe-index/ (дата обращения: 15.05.2019). ↑
-
Сравнение языков программирования. Википедия. URL: https://ru.wikipedia.org/ wiki/Сравнение_языков_программирования (дата обращения: 14.05.2019). ↑
-
Костарев А.Н. Размещение объектов в оперативной памяти. Понятие указателя / RSDN Magazine. – 2010. – №2. – С. 25 - 32. ↑
-
INTUIT, [Электронный ресурс]. Режим доступа : https: // www.intuit.ru / studies / courses / 627 / 483 / lecture / 10960 ↑
-
Спольски Дж. Джоэл И снова о программировании; пер. с англ. — СПб.: СимволПлюс, 2009. — 320 с. ↑
-
Элджер Дж. С++: библиотека программиста; пер. с англ. — СПб.: Питер, 2000. — 320 с. ↑
-
INTUIT, [Электронный ресурс]. Режим доступа : https: // www.intuit.ru / studies / courses / 627 / 483 / lecture / 10960 3 ↑