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

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

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

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

Добавлен: 30.03.2023

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

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

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

Язык JavaScript была создан в компании Netscape Communications как язык для описания сложного поведения веб-страниц. Сначала назывался LiveScript, причиной изменения названия стали маркетинговые соображения. Интерпретируется браузером при отображении веб-страницы. По синтаксису схож с Java и (отдаленно) с C / C ++. Имеет возможность использовать встроенную в браузер объектную функциональность, однако объектно-ориентированным языком не является.

Язык VBScript был создан в корпорации Microsoft во многом как альтернатива JavaScript. Имеет похожую область применения. Синтаксически схож с языком Visual Basic (и является урезанной версией последнего). Так же, как и JavaScript, выполняется браузером при отображении веб-страниц и имеет ту же степень объектно-ориентированности.

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

Объектно-ориентированный язык программирования Python, который тоже интерпретируется. По структуре и области применения близка к Perl, однако менее распространен. Он строже и логичнее. Также реализован для большинства существующих платформ.

Объектно-ориентированные языки. Объектно-ориентированный подход, который пришел на смену структурному, впервые появился вовсе не в C ++, как считают некоторые. Существует целый ряд чистых объектно-ориентированных языков, без сведений о которых наш обзор был бы неполным. Первой объектно-ориентированным языком был язык Simula (1967). Этот язык был предназначен для моделирования различных объектов и процессов, и объектно-ориентированные черты появились в нем именно для описания свойств модельных объектов.

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

Существует язык с очень удачной реализацией объектно-ориентированности, не являсь надстройкой над другим языком - Eiffel (1986). Будучи чистым языком объектно-ориентированного программирования, он, кроме того, повышает надежность программы путем использования "контрольных утверждений".


Создание UML (Unified Modeling Language - унифицированного языка моделирования) началось в 1994 году. В это время Грэйди Буч (Grady Booch) и Джеймс Рамбо (James Rambaugh) начали объединять несколько методов объектно-ориентированного моделирования в фирме Rational Software. И уже в 1995 году была представлена ​​спецификация метода, названного Unified Method. Первая версия UML была принята консорциумом OMG (Object Management Group) в январе 1997 года. Утвержденная же в сентябре версия UML 1.1 была принята на вооружение основными компаниями - производителями программного обеспечения, такими, как Microsoft, IBM, Hewlett-Packard и производителями CASE-средств, которые реализовали поддержку UML в своих программных продуктах (Paradigm Plus, Microsoft Visual Modeler for Visual Basic, Delphi и др.)

Языки параллельного программирования. Большинство компьютерных архитектур и языков программирования ориентированы на последовательное выполнение операторов программы. В настоящее время, однако, существуют программно-аппаратные комплексы, позволяющие организовать параллельное выполнение различных частей одного и того же вычислительного процесса. Для программирования таких систем необходима специальная поддержка со стороны средств программирования, в частности, языков программирования. Некоторые языки общего назначения содержат в себе элементы поддержки параллелизма, однако же программирование чисто параллельных систем требует специальных приемов. Одними из таких языков являются Occam, Linda.

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

Функциональные языки. Основная идея, лежащая в основе функционального программирования, - это представление программы в виде математических функций (то есть функций, значение которых определяется только их аргументами, а не контекстом выполнения). Оператор присваивания в таких языках не используется (или, как минимум, его использование не поощряется). Императивные возможности, как правило, есть, но их применение обставлено серьезными ограничениями. Существуют языки с пассивной и с активной семантикой. Отличие заключается, грубо говоря, в том, что в языках с активной семантикой вычисления производятся в том же месте, где они описаны, а в случае пассивной семантики вычисление производится только тогда, когда оно действительно необходимо. Первые языки имеют эффективную реализацию, тогда как вторые - лучшую семантику. Из языков с активной семантикой вспомним ML и два его современных диалекта - Standard ML (SML) и CAML. Последний имеет объектно-ориентированного потомка - Objective CAML (O'CaML). Среди языков с пассивной семантикой наиболее распространены два: Haskell и его более простой диалект Clean.


Языки логического программирования. Программы на языках логического программирования выражены как формулы математической логики, а компилятор пытается получить следствия из них. Родоначальником большинства языков логического программирования является язык Prolog (1971). У него есть ряд потомков - Parlog (1983, ориентированный на параллельные вычисления), Delta Prolog и др.

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

За первое полугодие 2019 года доля JavaScript и Java почти одинакова. С другой стороны, в рейтинг вновь вошел Erlang, что «исчез с радара» в 2017-м - в этом году более 20 разработчиков указали этот язык как основной. Среди относительно новых языков - Apex.

Если смотреть на динамику последних лет, то Kotlin, учитывая свой взрывной рост, вытеснит Java в разработке под Android. Также продолжает расти TypeScript.

JavaScript-экосистема постепенно перенимает первенство в JVM. Доля C # остается почти неизменной.

Прогнозируемо растет использование Python.

Изменения в языках программирования:

  • Увеличилась доля проектов на C ++ и C - это можно связать с последующим распространением интернета вещей.
  • Начала сокращаться доля Go проектов.
  • Начала снижаться доля Swift (статистически незначительно) - отсюда мы можем сделать вывод, что возможно, разработка на iOS сокращается в целом. Является ли это флуктуацией в рамках погрешности или долговременной тенденцией станет ясно позднее.

Доля Scala осталась примерно такой же (незначительно увеличилась).

Еще можно заметить «ренессанс» использования Groovy и Erlang - видно, что языки, на которых есть некое критическое количество проектов, могут существовать десятилетиями.

По сравнению с последними годами можно отметить рост интереса к Rust, а также понижение заинтересованности в Scala. Если посмотреть на список новых фич Java 10 и Java 11, то можно понять, что в Java вводят аналоги Scala-конструкций.

Посмотрим на «индекс предпочтения» - относительное количество пользователей языка программирования, которые выберут этот же язык для следующего проекта:

Как мы видим, высокий уровень предпочтения в Swift (это подтверждает гипотезу об уменьшении объема iOS разработки), далее - Go и Kotlin. Следующая ступень - тоже Scala и C #. Достаточно неожиданное появление Erlang. Еще следует отметить, что несмотря на взрывной рост, индекс предпочтения TypeScript и JavaScript не самый высокий. Это означает, что в принципе возможно появление следующей языка в экосистеме фронтенда.


Большая часть респондентов (64%) точно планирует изучить какой-то новый язык программирования следующего года. Посмотрим на рейтинг самых интересных языков для изучения в динамике за 3 года:

Python уже третий год является самым популярным для изучения, далее - JavaScript и Go. Еще мы видим резкий всплеск интереса к Dart: Google позиционирует его как язык, оптимизированную для разработки клиентов на Android и Web.

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

Дополнительные языки

Здесь особых новостей нет: как и раньше, JavaScript является основным дополнительным языком. Единственное - Python как второй язык начали использовать чаще, чем Shell.

Язык

доля рынка

изменения

Основная

Дополнительная

свои проекты

индекс предпочтения

1

Java

17.82

-2.8

1497

1161

1672

0.71

2

JavaScript

17.68

1485

4396

2748

0.64

3

C #

13.97

1173

712

1367

0.80

4

PHP

11.94

-1,1

1003

831

1159

0.61

5

Python

10.88

+1.1

914

1507

1490

0.73

6

C ++

6.53

+1.6

549

761

866

0.63

7

TypeScript

2.9

0.9

245

1326

708

0.67

8

Swift

2.89

243

176

301

0.91

9

Ruby

2.87

241

193

235

0.67

10

Kotlin

2.38

+1.45

200

302

352

0.88

11

Go

1.82

153

380

443

0.90

12

C

1.56

131

472

320

0.36

13

Scala

1.55

130

152

154

0.815

13

1C

0.9

76

55

61

0.34

14

Pascal / Delphi

54

159

168

0.35

15

T-SQL

53

898

216

0.26

16

PL-SQL

42

490

73

0.19

17

Objective-C

-0.4

34

286

101

0.11

18

Groovy

27

103

45

0.11

19

Erlang

23

3

19

0.7

20

Apex

22

2

11

0.45

21

R

20

135

69

0.3

22

Perl

14

78

33

0.21

23

Clojure

10

16

34

0.7

24

Rust

8

66

116

0.75

25

ActionScript

8

1

25

0.12


Изменения доли рынка указаны только в тех случаях, когда они являются статистически значимыми (то есть с вероятностью 95% невозможно получить такую ​​разницу внутри одной гауссовой популяции).

3. Классификация языков программирования

3.1. Процедурные языки

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

Функциональная парадигма программирования [5] является менее традиционной, и в тоже время более древней, поскольку получила развитие из вычислений по алгебраическим формулам. Функциональная программа состоит из набора взаимосвязанных и, как правило, рекурсивных функций. Каждая функция определяется выражением, которое задает правило вычисления её значения в зависимости от значений ее аргументов. Выполнение функциональной программы заключается в последовательном вычислении значений функциональных вызовов.

В еще менее традиционной и необычной логической парадигме программа рассматривается как множество логических формул: аксиом (фактов и правил), описывающих свойства некоторых объектов, и теоремы, которую необходимо доказать [2]. В свою очередь, выполнение программы – это доказательство теоремы, в ходе которого строится объект с описанными свойствами.

Основные различия указанных парадигм касаются не только концепции программы, но и роли переменной. В отличие от императивных программ, в функциональных и логических программах отсутствует явное присваивание значений переменным и, как следствие, побочные эффекты. Переменные в таких программах подобны переменным в математике: они являются обозначением функциональных аргументов или объектов, конструируемых в процессе доказательства. Еще одна яркая особенность функциональной и логической парадигм – использование рекурсии вместо циклов.

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