Файл: Обзор языков программирования высокого уровня.pdf

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

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

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

Добавлен: 01.04.2023

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

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

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

Введение

XXI век — век информационных технологий.

Информационные технологии лежат в основе большинства устройств и предметов, которые окружают людей.

Информационные технологии обобщают методы и процессы по сбору, хранению и обработки информации.

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

Электронно-вычислительные машины (далее ЭВМ) плотно вошли в жизнь людей и являются её неотъемлемой частью, а информация стала основным товаром.

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

Согласно международному стандарту ISO/IEC 2382:2015, термин «Информационная система» имеет следующее определение:

«information processing system, together with associated organizational resources such as human, technical, and financial resources, that provides and distributes information»

---

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

Мобильный телефон (смартфон) — еще один пример информационной системы, которая умещается на ладони.

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

Тема данной курсовой работы «Обзор языков программирования высокого уровня» и актуальность данной темы обусловлена важностью правильного выбора языка программирования высокого уровня для решения тех или иных задач.
Целью данной курсовой работы является определение разницы между языками программирования низкого и высокого уровня и раскрытие способов выполнения программ, написанных на языках программирования высокого уровня, их достоинствах и недостатках.

Для достижения цели были поставлены следующие задачи:

- изучить учебную, научную и справочную информацию по языкам программирования низкого и высокого уровня;


- выявить отличительные черты между языками программирования низкого и высокого уровня;

- проанализировать статистические данные рынка труда, о вакансиях на должность программиста и выявить несколько самых популярных языков программирования высокого уровня;

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

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

2. Основные особенности языков программирования высокого и низкого уровней.

2.1 . Машинный код и язык ассемблера

Главной частью ЭВМ является центральное процессорное устройство (далее ЦПУ) которое выполняет машинный код, который, в свою очередь, представляет из себя систему команд (набор кодов операций). Таким образом программы, написанные на машинном коде, представляют из себя двоичный код.

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

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

2.2. Высокоуровневый язык программирования

Чем сильнее ЭВМ входило в жизнь людей, тем сложнее становились программы, область применения которых стали выходить из стен научных центров и лабораторий. ЭВМ появились в организациях разной сферы деятельности, а так же стали доступны большинству людей, благодаря уменьшению размеров и у многих людей дома появилось персональная электронно-вычислительная машина (далее ПЭВМ).
Возник спрос на программы разной направленности, а, так как языки программирования низкого уровня зависят от архитектуры ЦПУ, появилась потребность в языках программирования высокого уровня, которые не имели бы такую зависимость, и программы можно было бы легко переносить между устройствами. В языках программирования высокого уровня перекладывали зависимость от архитектуры ЦПУ на специальные программы — трансляторы, преобразующие код языка программирования высокого уровня в машинный код. Поэтому для каждой архитектуры ЦПУ были разработаны уникальные программы-трансляторы, под каждый язык программирования высокого уровня — это обеспечило независимость алгоритмов, написанных программистами от архитектуры ЦПУ.


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

Таким образом высокоуровневые языки программирования были призваны не только облегчить решение сложных задач, но и позволить выполнять программы на ЦПУ с разными архитектурами (разным набором кодов операций). Использование различных программ трансляторов и/или интерпретаторов обеспечивает связь программ, написанных на языке программирования высокого уровня на разных устройствах и оборудовании.

3. Сравнительный анализ языков программирования низкого и высокого уровня

Низкоуровневый язык программирования — язык программирования, близкий к программированию непосредственно в машинных кодах.
Как правило, использует особенности конкретного семейства процессоров.

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

Код написанный на языке программирования высокого уровня, так или иначе, необходимо транслировать в машинный код через программы трансляторы и/или интерпретаторы, которые в свою очередь имеют зависимость от архитектуры ЦПУ. Также следует отметить, что языки программирования высокого уровня в некоторых случаях (например, интерактивные программы) имеют зависимость от операционной системы (далее ОС), в среде которой они запускаются, так как им необходимо обращаться к системным вызовам ОС, которые сильно отличаются в разных ОС (например, Windows API[1] от компании Microsoft и ОС поддерживающих стандарт POSIX[2]).

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


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

Для примера рассмотрим следующий код программы, на языке программирования высокого уровня Си для микроконтроллера фирмы Atmel, семейства AVR:

unsigned short int a;

void main() { DDRB = 255; PORTB = 0;

while (1) { if (PINB == 255) { PORTB = 0; }

else { PORTB++; }

for (a = 0; a < 10000; a++) {} // далее может быть другой код } }

В первой строке кода объявлена переменная «a» с типом «unsigned short int» (безнаковое короткое целое число) которая имеет размер два байта и может принимать значение в диапазоне от 0 до 65535 — эта переменная будет использоваться далее в программе для создания задержки в выполнении.

В начале функции «main» происходит инициализация аппаратных портов ввода-вывода микроконтроллера. Далее, внутри бесконечного цикла «while» расположен код программы, который изменяет значение на контактах порта микроконтроллера, по следующему алгоритму: если на всех портах обнаруживается потенциал единицы, то обнулить контакты, иначе увеличить значение в регистре-защёлке порта «B».

Цикл «for», без выполняемого кода в теле, предназначен для формирования задержки выполнения, что бы изменения потенциалов порт «B» можно было бы зафиксировать, допустим светодиодом. При трансляции программы в машинный код, оптимизатор удалит цикл «for», так как посчитает его бесполезным, и зафиксировать изменение потенциалов на порту «B» светодиодом будет невозможно.

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


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

Большое количество программных библиотек и фреймворков[3] значительно ускоряют разработку программ, а среды разработки программ (IDE[4]), со встроенными системами отладки и тестирования кода позволяют уменьшить время на поиск ошибок в коде и внесение изменений в алгоритмы программы.
Языки программирования низкого уровня, в контексте скорости разработки программ, их поддержки и изменения алгоритмов, не так эффективны.

Тоже самое можно сказать и относительно людских ресурсов – стоимость программистов высокоуровневых языков является более низкой.

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

Следует отметить и тот факт, что языки программирования высокого уровня привнесли в мир разработки программ множество парадигм программирования (подходов, приёмов, стилей), например, объектно-ориентированное программирование которое породило множество паттернов (шаблонов кода; лучших практик) для решения тех или иных задач, которые решает программист.

4. Анализ востребованности современных высокоуровневых языков программирования