Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Обзор языков программирования высокого уровня

Содержание:

Введение

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. Анализ востребованности современных высокоуровневых языков программирования

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

Для критерия отбора были взяты данные аналитической службы, популярной в России компании «HeadHunter», интернет-ресурс которой предоставляет возможность поиска работы и сотрудников, путём размещения резюме и вакансий.

По данным аналитической службы компании «HeadHunter», на 24 апреля 2019 года, самыми востребованными ИТ-специалистами, исходя из названий вакансий опубликованных на интернет-ресурсе, являются:

  1. Фронтенд-разработчик
  2. PHP-разработчик
  3. Java-разработчик
  4. Системный администратор
  5. Тестировщик
  6. 1С-программист
  7. .NET разработчик
  8. С++-разработчик
  9. iOS-разработчик
  10. Android-разработчик
  11. Python-разработчик
  12. DevOps-инженер
  13. JavaScript-разработчик
  14. Data scientist
  15. Фулстек-разработчик

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

Специализация

Используемые в работе языки программирования

1

Фронтенд-разработчик

JavaScript

2

PHP-разработчик

PHP

3

Java-разработчик

Java

4

С++-разработчик

С++

5

Системный администратор

Python

6

Data scientist

Python

7

Тестировщик

Используют готовые инструменты

8

1С-программист

Специфичный язык

9

.NET разработчик

C#

10

Android-разработчиков

Java, Kotlin

11

iOS-разработчик

Swift

12

DevOps-инженер

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

13

Фулстек-разработчик

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

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

  • JavaScript
  • C++
  • Java
  • C#
  • PHP

5. Обзор высококуровневых языков программирования

5.1. JavaScript

JavaScript – интерпретируемый, мультипарадигменный язык программирования высокого уровня. Поддерживает императивный, функциональны и объектно-ориентированные стили. Является реализацией стандарта ECMA-262 (ECMAScript[5]).

Основные архитектурные черты:

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

История языка программирования JavaScript начинается с 1990-х годов, с основателя компании Netscape Communication Марка Андриссена, который считал, что в будущем интернет должен стать более динамичным (анимация веб страниц, взаимодействие с пользователем и другие виды интерактивности). Интернет нуждался в лёгком языке программирования, который можно встраивать непосредственно в HTML разметку страницы, способным работать с DOM (Document Object Model) и быть лёгким в освоении для большинства людей далёких от программирования. На основании этого видения появился язык программирования Mocha, который, в последствии, и стал называться JavaScript.

Первый прототип Mocha был интегрирован в браузер Netscape Communication в мае 1995 года и через некоторое время был переименован в LiveScript, так как по мнению маркетологов того времени слово «live» было очень привлекательно. В декабре 1995 года язык программирования был вновь переименован в JavaScript и представлялся публике как скриптовый язык программирования для выполнения небольших задач в браузере.

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

5.2. C++

C++ — компилируемый, статически типизированный язык программирования общего назначения.

Поддерживает такие парадигмы программирования как:

- процедурное программирование,

- объектно-ориентированное программирование,

- обобщённое программирование,

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

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

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

Язык программирования С++ был создан в начале 1980-х годов, его создатель сотрудник фирмы Bell Laboratories — Бьёрн Страуструп. Он придумал ряд усовершенствований к языку программирования C, для собственных нужд. То есть изначально не планировалось создания языка программирования С++. Ранние версии языка С++, известные под именем «Cи с классами», начали появляться с 1980 года. Язык C, будучи базовым языком системы UNIX, на которой работали компьютеры фирмы Bell, является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы с классами и объектами, тем самым зародил предпосылки нового, основанного на синтаксисе С, языка программирования. Синтаксис C++ был основан на синтаксисе C, так как Бьёрн Страуструп стремился сохранить совместимость с языком C.
В 1983 году произошло переименование языка «Си с классами» в «язык программирования С++».

5.3. Java

Java – строго типизированный объектно-ориентированный язык программирования. Для выполнения программы написанной на языке программирования Java, код программы транслируется в специальный байт-код, который выполняется в среде виртуальной машины Java (JVM) — программы обрабатывающей байт-код и передающей инструкции в CPU, как интерпретатор.

История языка начинается с 1991 года, когда группа инженеров компании Sun занялась разработкой языка программирования для бытовых устройств. Изначально язык программирования назывался «Oak», но из-за того, что язык программирования с таким именем уже существовал, был переименован в «Java», в честь марки кофе.

Способ выполнения программного кода на языке Java через JVM имеет свои достоинства и недостатки.
К основным достоинствам относят возможность выполнения байт-кода Java на любом устройстве, для которого существует JVM и гибкую систему безопасности, в рамках которой исполнение программы контролируется JVM.
К недостаткам JVM в основном относят снижение производительности и большое потребление оперативной памяти (оперативное запоминающее устройство — ОЗУ).

Для семи разных задач время выполнения на Java составляет в среднем в полтора-два раза больше, чем для C/C++, в некоторых случаях Java быстрее, а в отдельных случаях в 7 раз медленнее. С другой стороны, для большинства из них потребление памяти JVM было в 10—30 раз больше, чем программой на C/C++.

Также примечательно исследование, проведённое компанией Google, согласно которому отмечается существенно более низкая производительность и большее потребление памяти в тестовых примерах на Java в сравнении с аналогичными программами на C++

5.4. C#

C# — объектно-ориентированный язык программирования, имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, исключения.

Разработан в 1998—2001 годах группой инженеров компании Microsoft под руководством Андерса Хейлсберга (создатель языков программирования Турбо Паскаль и Дельфи) и Скотта Вильтаумота как язык разработки приложений для платформы Microsoft .NET Framework. Впоследствии был стандартизирован как ECMA-334[6] и ISO/IEC 23270.

Язык программирования C# многое позаимствовал от языка программирования Java и многие его называют «очищенной версией Java».
Несмотря на существенные различия между компонентно-объектной моделью COM (основного стандарта Microsoft для компонентного проектирования и реализации программного обеспечения) и моделью Java, языки программирования имеют довольно много общего.
Единая среда выполнения программ основана на использовании промежуточного языка IL (Intermediate Language — промежуточный язык), исполняющего почти ту же роль, что и байт-код JVM. Используемые в рамках технологии .NET компиляторы с различных языков транслируют программы в IL-код. Так же, как и байт-код Java, IL-код представляет собой команды гипотетической стековой вычислительной машины. Но есть и разница в устройстве и использовании IL.
Во-первых, в отличие от JVM, IL не привязан к одному языку программирования. В составе, предварительных версий Microsoft.NET имеются компиляторы языков Си++, Си#, Visual Basic. Независимые разработчики могут добавлять другие языки, создавая свои компиляторы в IL-код.
Во-вторых, IL предназначен не для программной интерпретации, а для последующей компиляции в машинный код. Это позволяет достичь существенно большего быстродействия программ. Содержащие IL-код файлы несут достаточно информации для работы оптимизирующего компилятора.

5.5. PHP

PHP – интерпретируемый язык программирования общего назначения. Основная сфера применения — веб-приложения. В настоящее время является одним из лидеров среди языков программирования, применяющихся для создания веб-приложений.

Язык программирования PHP и его интерпретатор Zend Engine разрабатывается группой энтузиастов как проект с открытым исходным кодом. Проект распространяется под собственной лицензией.

История языка программирования PHP начинается в 1994 году, когда программисту Расмусу Лердофу понадобилось сделать набор из скриптов языка программирования Perl счетчик просмотров его резюме, опубликованного в Интернете. Расмус Лердоф назвал своё творение Personal Home Page (PHP).
Когда производительности языка программирования Perl перестало хватать Расмус Лердоф написал интерпретатор PHP на языке программирования С.
Спусти три года была разработана вторая версия интерпретатора языка программирования PHP, а летом 1998 года вышла третья версия интерпретатора PHP, переработанная программистами Энди Гутмансом и Зеевом Сураски и именно она определила современный облик языка программирования PHP.
Начиная с пятой версии язык программирования PHP обладает полной поддержкой объектно-ориентированного программирования.

В настоящее время язык программирования PHP используется миллионами разработчиками и поддерживается большинством хостинг-провайдерами, а к крупнейшим проектам на языке программирования PHP относятся такие интернет сайты как Facebook, Vkontakte, Wikipedia и др.

6. Заключение

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

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

Непрерывная оптимизация работы трансляторов, интерпретаторов и виртуальных машин (например JVM) совместно с большим сообществом программистов позволяет повысить производительность и стабильность программ.

Список используемой литературы:

    1. Хорстманн, Кей С. Java. Библиотека профессионала, том 1. Основы. 10-е изд.: Пер. с англ. — М . ООО "И.Д. Вильямс", 2016. — 864 с
    2. Станислав Гарматюк. Современные десктопные процессоры архитектуры x86: общие принципы работы (x86 CPU FAQ 1.0). iXBT.com (9 февраля 2006)
    3. Виктор Корнеев. Эволюция микропроцессорных архитектур (16.04.2000)
    4. Денис Юричев. Reverse Engineering для начинающих. Понимание языка ассемблера ((9 ноября 2019 г)
    5. ИТ: обзор рынка вакансий и топ-15 специальностей https://hh.ru/article/24562
    6. Джозеф Албахари, Бен Албахари C# 6.0. Справочник. Полное описание языка, 2016. – 1040 с
    7. Бен КлеменсЯзык С в XXI веке, 2015. – 1040 с
    8. ГОСТ 33707-2016 (ISO/IEC 2382:2015) Информационные технологии (ИТ)

  1. API (программный интерфейс приложения, интерфейс прикладного программирования (application programming interface)) — описание способов (набор классов, процедур, функций, структур или констант), которыми одна компьютерная программа может взаимодействовать с другой программой.

  2. POSIX - Portable Operating System Interface  — переносимый интерфейс операционных систем) — набор стандартов, описывающих интерфейсы между  операционной системой и прикладной программой (системный API), библиотеку языка C и набор приложений и их интерфейсов. Стандарт создан для обеспечения совместимости различных UNIX-подобных операционных систем и переносимости прикладных программ на уровне исходного кода, но может быть использован и для не-Unix систем.

  3. Фре́ймворк (иногда фреймво́рк; англицизм, неологизм от framework — остов, каркас, структура) — программная платформа, определяющая структуру программной системы; программное обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта.

  4. Интегрированная среда разработки (англ. Integrated Development Environment) — система программных средств, используемая программистами для разработки программного обеспечения.

  5. ECMAScript — это встраиваемый расширяемый не имеющий средств ввода-вывода язык программирования, используемый в качестве основы для построения других скриптовых языков. Стандартизирован международной организацией ECMA в спецификации ECMA-262. Расширения языка: JavaScript, JScript и ActionScript

  6. Стандарт ECMA языка C# (Standard ECMA-334 C# Language Specification). В отличие от стандартов ISO/IEC, в названии ECMA-стандартов не указывается год их утверждения; вместо этого к номеру стандарта добавляется его редакция. В настоящее время последней редакцией стандарта является 4-ая, принятая в июне 2006 года и соответствующая ISO/IEC 23270:2006