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

Современные языки программирования (ИСТОРИЯ И ОСНОВНЫЕ ПОНЯТИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ)

Содержание:

ВВЕДЕНИЕ

Языки программирования структура искусственных не естественных языков, созданная впервые ещё в XIX веке основной целью которых является создание программ и управление процессами.

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

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

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

Задачи курсовой работы:

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

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

Глава 1. ИСТОРИЯ И ОСНОВНЫЕ ПОНЯТИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

1.1. История создания и развитие языков программирования

Первые языки программирования возникали ещё
до появления современных электронных вычислительных машин: уже в XIX веке были изобретены устройства, которые можно с долей условности назвать программируемыми — к примеру, музыкальная шкатулка и позднее механическое пианино посредством металлического цилиндра и Жаккардовый ткацкий станок созданный в 1804 году, работавший посредством перфокарт. Для управления ими использовались наборы инструкций, которые в рамках современной классификации можно считать прототипами предметно-ориентированных языков программирования. Значимым можно считать «язык», на котором леди Ада Августа графиня Лавлейс в 1842 году написала программу для вычисления чисел Бернулли для Аналитической машины Чарльза Бэббиджа, ставшей бы, в случае реализации, первым компьютером в мире, хотя
и механическим с паровым двигателем.

В 1930 — 1940 годах А. Чёрч, А.М. Тьюринг, А.А. Марков разработали математические абстракции - для формализации алгоритмов.

В 1940-е годы, появились электрические цифровые компьютеры и был разработан язык, который можно считать первым высокоуровневым языком программирования для Электронной Вычислительной Машины — «Plankalkül», созданный немецким инженером К. Цузе в период с 1943 по 1945 годы.

Программисты ЭВМ начала 1950-х годов, в особенности таких, как UNIVAC и IBM 701, при создании программ пользовались непосредственно машинным кодом, запись программы на котором состояла из единиц и нулей
и который принято считать языком программирования первого поколения
(при этом разные машины разных производителей использовали различные коды, что требовало переписывать программу при переходе на другую ЭВМ).

Первым практически реализованным языком стал в 1949 году так называемый «Краткий код», в котором операции и переменные кодировались двухсимвольными сочетаниями. Он был разработан в компании Eckert–Mauchly Computer Corporation, выпускавшей UNIVAC-и, созданной одним
из сотрудников Тьюринга, Джоном Мокли. Мокли поручил своим сотрудникам разработать транслятор математических формул. Однако для 1940-х годов эта цель была слишком амбициозна. Краткий код был реализован с помощью интерпретатора.

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

С середины 50-х годов стали появляться языки третьего поколения Фортран, Лисп и Кобол. Они ещё более абстрактны и универсальны, за что были прозваны языками высокого уровня. Однако они не зависимы от конкретной аппаратной платформы. В конце 50-х годов появился Алгол, он так же послужил для ряда разработок в данной сфере.

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

В период 1960-1970 годов были разработаны основные парадигмы языков программирования, которые используются и в наше время, хотя это все было улучшение старых идей и концептов.

Язык APL разработан в 1964 году, оказал влияние на функциональное программирование и стал первым языком, поддерживающим обработку массивов.

Язык ПЛ-1 он же NPL был разработан в 1964 году, объединял лучшие черты Фортран и Кобол.

Язык Snobol разработанный в 1962 году и совершенствовавшийся в 60-х годах был ориентирован на обработку текстов, ввел в число базовых операций сопоставление с образцом.

Язык Simula-67 разработанный в 1967 году включал поддержку объектно-ориентированного программирования.

Язык Smalltalk разработанный в 1969 году, был уже всецело объектно-ориентированным.

С 1969 по 1973 годы был разработан язык программирования C, ставший основой для таких современных языков как С++ и Java.

В 1972 году был создан язык Пролог наиболее известный язык логического программирования.

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

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

В 1980 годах большое распространение получил язык С++ он объединил в себе черты объектно-ориентированного и системного программирования

В это время важным направлением становятся графические языки программирования, в которых процесс написания текста заменяется рисованием.

Они обеспечивают наглядность и лучшие восприятие информации человеком.

В 1990 годах связи с ростом интернета большое распространение получают языки позволяющие создавать веб-страницы также возрастает и важность виртуализации.

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

1.2. Основные понятия и классификация.

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

На сегодняшний день все программы создаются с помощью языков программирования

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

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

Синтаксис — это система правил, определяющих допустимые конструкции языка программирования из букв алфавита.

Семантика — это смысловое значение слов. Формализует значение за счет построения математических моделей.

Семантика имеет множество подходов такие как операционная семантика, аксиоматическая семантика, денотационная семантика, интерпретационная семантика, трансляционная семантика, трансформационная семантика,

Операционная семантика от англ. operational semantics используется
для синтаксических понятий языка. В ней функция рассматривается как текст с правильно построенным определением для дальнейшего применения к аргументу.

Денотационная семантика от англ. denotational semantics выражениям
в программе ставит в соответствие настоящие математические объекты, то есть, выражения обозначают их величины. Важнейшие, результаты построения денотационных семантик получены в работах Д. Скотта и К. Страчей в конце 1960-х — начале 1970-х. Скотт первым построил модель λ-исчисления, основанную на представлении о полном частично упорядоченном множестве. Для этого им были использованы функции, непрерывные на таком множестве.[1]

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

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

Трансформационная семантика — описание операционной семантики конструкций языка в терминах этого же языка. Трансформационная семантика является основой метапрограммирования.

Формальная грамматика или просто грамматика в теории формальных языков — способ описания формального языка, то есть выделения некоторого подмножества из множества всех слов некоторого конечного алфавита. Различают порождающие и распознающие (или аналитические) грамматики — первые задают правила, с помощью которых можно построить любое слово языка, а вторые позволяют по данному слову определить, входит ли оно в язык или нет.

Контекстно — свободной грамматикой от англ. Context — free grammar так называется грамматика, у которой в левых частях всех правил стоят только одиночные нетерминалы.

Контекстно — зависимая грамматика англ. Context — sensitive grammar менее общий вид формальной грамматики, у которой левые и правые части всех продукций могут быть окружены терминальными и нетерминальными символами.

ANTLR (Расшифровка от англ. ANother Tool for Language Recognition — «ещё одно средство распознавания языков») — генератор нисходящих анализаторов для формальных языков.

ANTLR преобразует контекстно-свободную грамматику в виде РБНФ
в программу на C++, Java, C#, JavaScript, Go, Swift, Python. Используется
для разработки компиляторов, интерпретаторов и трансляторов.

Yacc (Расшифровка от англ. Yet Another Compiler Compiler — «ещё один компилятор компиляторов») — Yacc генерирует парсер на основе аналитической грамматики, описанной в нотации BNF (форма Бэкуса-Наура) или контекстно-свободной грамматики. На выходе yacc выдаётся код парсера на языке программирования Си.

Абстрактное синтаксическое дерево - в информатике конечное помеченное ориентированное дерево, в котором внутренние вершины сопоставлены с операторами языка программирования, а листья - с соответствующими операндами. Таким образом, листья являются пустыми операторами и представляют только переменные и константы. [2]

Классификация

Не существует чёткой классификации языков, однако их делят по основным признакам

По уровню воспринимаемости языка их делят на языки низкого и высокого уровня. [6]

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

Языки высокого уровня ближе к человеческому языку это языки C, C++, java, JavaScript, Go, Паскаль, РНР, и другие

По способам реализации языка их делят на языки компилируемые, интерпретируемые и встраиваемые языки.

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

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

Встраиваемые языки к ним относят языки, состоящие из синтаксического и семантического подмножества других языков.

По парадигмам языков программирования к ним относятся такие парадигмы как императивные, декларативная, конкатенативная, векторная и метапрограммирования.

Императивная парадигма программирования.

Эта парадигма программирования, в которой характерно написание исходного кода программы в исходном коде записываются команды инструкции выполняются последовательно данные предыдущих инструкций могут читаться из памяти последующими инструкциями. Данные, полученные
в ходе инструкций, записываются в память.

Императивная парадигма похожа на приказы отсюда название императивная от англ. Imperative — Приказ повелительного наклонения.

Эта парадигма предполагает под собой последовательность команд, которые должен выполнить компьютер.

Декларативная парадигма программирования.

Эта парадигма является полной противоположностью императивной парадигмы. В ней задается спецификация решения задачи, то есть описывается проблема и какой ожидается результат. Название данной парадигмы идет
от англ. Declare Объявление.

Конкатенативная парадигма программирования

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

Векторная парадигма программирования также известная как многомерный язык.

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

Парадигма метапрограммирования

Эта парадигма основана на создании программ что порождают другие программы как результат своей работы, к примеру на стадии компиляции исходного кода или во время выполнения. [2],[3]

Глава 2. РАСПРОСТРАНЁННЫЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ

2.1. C#

С# Разработан группой инженеров из корпорации Microsoft
в 1998 - 2001. Под руководством Андерса Хейлсберга и Скотта Вильтаумота
как язык разработки приложений для Microsoft .NET Framework. В дальнейшем был стандартизирован.

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

C# разрабатывался как язык программирования прикладного уровня для Common Language Runtime далее используется аббревиатура CLR. C# зависит от CLR и его возможностей. Это касается системы типов C# которая отражает Base Class Library платформы .NET Framework. Присутствие или отсутствие тех или иных выразительных особенностей языка диктуется тем, может ли конкретная языковая особенность быть транслирована в соответствующие конструкции CLR. Так, с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует ожидать и в дальнейшем, однако, эта закономерность была нарушена с выходом C# 3.0, представляющего собой расширения языка, не опирающиеся на расширения платформы .NET.

Название Си шарп идет от буквенной музыкальной нотации
где латинской C соответствует нота до, а знак диез означает повышение звука
на полутон. Это аналогично С++ где ++ означал инкремент переменной. Название также продолжает игру с цепочкой С, С++, С++++ соответственно С# так как знак шарп напоминает 4-ре знака +.

C# постоянно улучшался и развивался на данный момент достиг версии 8.0

C# является объектно-ориентированным языком, но поддерживает также
и компонентно-ориентированное программирование. Разработка современных приложений все больше тяготеет к созданию программных компонентов в форме автономных и самоописательных пакетов, реализующих отдельные функциональные возможности. Важная особенность таких компонентов — это модель программирования на основе свойств, методов и событий. Каждый компонент имеет атрибуты, предоставляющие декларативные сведения о компоненте, а также встроенные элементы документации. C# предоставляет языковые конструкции, непосредственно поддерживающие такую концепцию работы. Благодаря этому C# отлично подходит для создания и применения программных компонентов. [9]

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

В C# существует единая система типов. Все типы C#, включая типы-примитивы, такие как int и double, наследуют от одного корневого типа object. Таким образом, все типы используют общий набор операций, и значения любого типа можно хранить, передавать и обрабатывать схожим образом. Кроме того, C# поддерживает пользовательские ссылочные типы и типы значений, позволяя как динамически выделять память для объектов, так и хранить упрощенные структуры в стеке.

Чтобы обеспечить совместимость программ и библиотек C# при дальнейшем развитии, при разработке C# много внимания было уделено управлению версиями. Многие языки программирования обходят вниманием этот вопрос, и в результате программы на этих языках ломаются чаще, чем хотелось бы, при выходе новых версий зависимых библиотек. Вопросы управления версиями существенно повлияли на такие аспекты разработки C#, как раздельные модификаторы virtual и override, правила разрешения перегрузки методов и поддержка явного объявления членов интерфейса.

Версии C#

C# 1.0

C# версии 1.0, выпущенный вместе с Visual Studio .NET 2002, станет очевидно его сходство с Java. В число поставленных перед ECMA задач проектирования входило создание "простого и современного объектно-ориентированного языка общего назначения". В то время схожесть с Java означала достижение этих ранних целей проектирования.

По современным меркам C# версии 1.0 не предоставлял практически никаких возможностей. Программисту пришлось бы писать довольно подробный код. C# версии 1.0 был достойной альтернативой Java на платформе Windows.

Основные возможности C# 1.0 включали следующие компоненты: классы, структуры, интерфейсы, события, свойства, делегаты, выражения, операторы, атрибуты.

C# 1.2

Версия C# 1.2 входит в состав Visual Studio .NET 2003. Он содержит ряд небольших улучшений языка. Наиболее значительным изменением является то, что начиная с этой версии код, создаваемый в цикле foreach, вызывает Dispose
в IEnumerator, если IEnumerator реализует IDisposable.

C# 2.0

Рассмотрим некоторые основные возможности языка C# 2.0, выпущенного в 2005 году вместе с Visual Studio 2005:

Универсальные шаблоны

Разделяемые типы

Анонимные методы

Типы значений, допускающие значение NULL

Итераторы

Ковариантность и контравариантность

Другие возможности C# 2.0 расширяли существующие возможности:

Отдельный доступ к методу получения и методу задания

Преобразования групп методов (делегаты)

Статические классы

Выведение делегата

Хотя сначала C# и был универсальным объектно-ориентированным языком, в C# версии 2.0 все кардинально изменилось. Нащупав опору под ногами, команда разработки уделила внимание решению серьезных проблем, с которыми сталкивались разработчики.

Благодаря универсальным шаблонам легче получать типы и методы, которые могут работать с произвольным типом, при этом обеспечивая безопасность типа. В результате, например, наличие List<T> позволяет использовать List<string> или List<int> и совершать типобезопасные операции с этими строками или целыми числами, выполняя итерацию по ним. Использовать универсальные шаблоны удобнее, чем создавать ListInt, производный
от ArrayList, или выполнять приведение из Object для каждой операции.

В C# версии 2.0 появились итераторы, которые позволяют изучать все элементы в List (или других перечислимых типов) с помощью цикла foreach. Наличие итераторов в качестве первоклассного компонента в языке значительно улучшило удобочитаемость языка и способность воспринимать код.

С# 3.0

C# версии 3.0 был выпущен в конце 2007 года вместе с Visual Studio 2008, однако существенно набор возможностей языка пополнится только в .NET Framework версии 3.5.

Основные возможности в этой версии:

Автоматически реализуемые свойства

Анонимные типы

Выражения запросов

Лямбда-выражения

Деревья выражений

Методы расширения

Неявно типизированные локальные переменные

Разделяемые методы

Инициализаторы объектов и коллекций

Все возможности образуют единый и стратегически значимый набор. Принято считать, что уникальным преимуществом C# было выражение запроса, которое называется LINQ.

Можно отметить деревья выражений, лямбда-выражения и анонимные типы как основу для создания LINQ. В языке C# 3.0 была представлена революционная концепция. Версия C# 3.0 начала закладывать фундамент для превращения C# в гибридный объектно-ориентированный/функциональный язык.

В стиле SQL можно создавать декларативные запросы для выполнения операций с коллекциями. Вместо создания цикла for для вычисления среднего значения из списка целых чисел достаточно использовать list.Average(). Сочетание выражений запросов и методов расширения позволяет сделать работу со списком целых чисел гораздо интеллектуальнее.

C# 4.0

Разработчикам версии C# 4.0, выпущенной вместе с Visual Studio 2010, пришлось приложить серьезные усилия, чтобы не отставать от новаторской версии 3.0. С появлением версии 3.0 язык C# смог выйти из тени Java и занять доминирующее положение.

Следующая версия представила ряд интересных функций:

Динамическая привязка

Именованные/дополнительные аргументы

Универсальная ковариантность и контравариантность

Внедренные типы взаимодействия

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

Значимым событием стало появление ключевого слова dynamic в C# версии 4.0 появилась возможность переопределять компилятор при типизации во время компиляции. Используя это ключевое слово, можно создавать конструкции, характерные для языков с динамической типизацией, таких как JavaScript. Можно создать dynamic x = "a string" и добавить туда шестерку, отложив решение о дальнейших действиях во времени выполнения.

C# 5.0

Версия C# 5.0, выпущенная вместе с Visual Studio 2012, была крайне целенаправленной. Практически все нововведения в этой версии касались другой инновационной концепции: модели async и await для асинхронного программирования. Ниже приведен список основных функций:

Асинхронные члены

Информационные атрибуты вызывающего объекта

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

С появлением async и await функций в 2012 г. C# удалось снова взять лидерство, первоклассным образом внедрив асинхронность в язык.

C# 6.0

Версии 3.0 и 5.0 добавили в объектно-ориентированный язык C# несколько впечатляющих возможностей. Версия 6.0, выпущенная вместе с Visual Studio 2015, отступает от подхода, ориентированного на реализацию уникальных возможностей. Здесь предоставляются менее масштабные функции, с которыми программирование на C# становится гораздо эффективнее:

Статические импорты

Фильтры исключений

Инициализаторы автосвойств

Элементы, воплощающие выражение

Null-распространитель

Интерполяция строк

Оператор nameof

Инициализаторы индекса

Выражение Await в блоках Catch и Finally

Значения по умолчанию для свойств метода получения.

В этой версии C# избавился от стандартного текста, чтобы сделать код более сжатым и удобочитаемым. Эта версия привлекает сторонников простого
и понятного кода.

Новшество, связанное с этой версией, не является функцией языка в обычном понимании. Состоялся выпуск компилятора Roslyn в виде службы. Компилятор C# написан на C#, и можно использовать его
при программировании.

C# 7.0

Эта версия была выпущена вместе с Visual Studio 2017. В этой версии получили развитие некоторые функции из версии C# 6.0, однако компилятор
в виде службы отсутствует. Ниже приведены некоторые из новых функций:

Переменные Out

Кортежи и деконструкция

Сопоставление шаблонов

Локальные функции

Расширенные элементы, воплощающие выражение

Локальные переменные и возвращаемые значения Ref

Операции удаления

Двоичные литералы и цифровые разделители

Выражения throw

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

Сфера применения C# продолжает расширяться. Теперь .NET Core подходит для любой операционной системы и движется в направлении облачных технологий и портативности. Разработчики активно занимаются этими новыми возможностями с добавлением новых функций.

С# 8.0

В C# 8.0 добавлены следующие функции и улучшения языка C#:

Члены только для чтения

Методы интерфейса по умолчанию

Улучшения сопоставления шаблонов:

Объявления using.

Статические локальные функции.

Удаляемые ссылочные структуры.

Ссылочные типы, допускающие значение NULL

Асинхронные потоки.

Индексы и диапазоны.

Присваивание объединения со значением NULL

Неуправляемые сконструированные типы

Выражение stackalloc во вложенных выражениях

Улучшение интерполированных строк verbatim

C# 8.0 поддерживается в .NET Core 3.x и .NET Standard 2.1.

В C# 8.0 добавлены и изменены многие функции, а также улучшены старые что повышает количество возможностей языка. Данное обновление совершенно новое и требуется время для анализа его работы. [16]

2.2 Java

Java — строго типизированный объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems, в дальнейшем приобретенный компанией Oracle. Разработка ведется сообществом, организованным через Java Communiti Process. Язык и основные реализующие его технологии распространяются по лицензии GPL. Права на торговую марку принадлежат корпорации Oracle.

Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой компьютерной архитектуре с помощью виртуальной Java - машины. Дата официального выпуска — 23 мая 1995 года.
На 2019 год Java — один из самых популярных языков программирования.

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

В результате работы проекта мир увидел принципиально новое устройство, которое опередило своё время более чем на 10 лет. Устройство получило название Star7, но из-за большой стоимости в 50 долларов не смогло произвести переворот в мире технологии и постепенно забылось.

Star7 не пользовался популярностью в отличие от языка программирования Java и его окружения. Следующим этапом жизни языка стала разработка интерактивного телевидения. В 1994 году стало очевидным, что интерактивное телевидение было ошибкой.

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

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

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

Часто к недостаткам концепции виртуальной машины относят снижение производительности. Ряд усовершенствований несколько увеличил скорость выполнения программ на Java:

Применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде,

Обширное использование платформенно-ориентированного кода
(native-код) в стандартных библиотеках,

Аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами архитектуры ARM).

По данным сайта shootout.alioth.debian.org, для семи разных задач время выполнения на Java составляет в среднем в полтора-два раза больше, чем для C/C++, в некоторых случаях Java быстрее, а в отдельных случаях в 7 раз медленнее. С другой стороны, для большинства из них потребление памяти Java-машиной было в 10—30 раз больше, чем программой на C/C++. Также примечательно исследование, проведённое компанией Google, согласно которому отмечается существенно более низкая производительность и большее потребление памяти в тестовых примерах на Java в сравнении с аналогичными программами на C++.

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

Версии Java

JDK 1.0

Разработка Java началась в 1990 году, первая официальная версия — Java 1.0, — была выпущена только 21 января 1996 года.

JDK 1.1

Вторая версия была выпущена 19 февраля 1997 года.

Библиотека Accessibility.

Java 2D.

Поддержка технологии drag-and-drop.

Полная поддержка Unicode, включая поддержку ввода на японском, китайском и корейском языках.

Поддержка воспроизведения аудиофайлов нескольких популярных форматов.

Полная поддержка технологии CORBA.

JIT-компилятор, улучшенная производительность.

Усовершенствования инструментальных средств JDK, в том числе поддержка профилирования Java-программ.

J2SE 1.2

Дата выпуска 8 декабря 1998 года. Кодовое имя Playground. В данном случае встречается путаница. Выпускались книги, например, Beginning Java 2 by Ivor Horton (Mar 1999), фактически по J2SE 1.2 (бывшее название — Java 2). Вместе с тем по сей день такие книги публикуются, например: Х. М. Дейтел, П. Дж. Дейтел, С. И. Сантри. Технологии программирования на Java 2. Распределённые приложения (2011).

Когда Java 2 был исторически заменен следующими релизами, подобные названия книг дезориентируют в понимании, о какой же версии Java они написаны на самом деле. Язык J2SE 1.2 принято считать
за Java 2, а авторы книг за Java 2 принимают JDK 7, это приводит к полной путанице.

J2SE 1.3

Дата выпуска 8 мая 2000 года. Кодовое имя Kestrel.

J2SE 1.4

Дата выпуска 6 февраля 2002 года. Кодовое имя Merlin.

J2SE 5.0

Спецификация Java 5.0 была выпущена 30 сентября 2004 года, кодовое имя Tiger. C этой версии изменена официальная индексация, вместо Java 1.5 правильно Java 5.0. Внутренняя индексация Sun осталась
прежней — 1.x. Минорные изменения теперь включаются без изменения индексации, для этого используется слово «Update» или буква «u», например, Java Development Kit 5.0 Update 22. В обновления могут входить как исправления ошибок, так и небольшие добавления в API, JVM.

В данной версии разработчики внесли в язык целый ряд принципиальных дополнений:

1. Перечислимые типы. Ранее отсутствовавшие в Java типы оформлены по аналогии с C++, но при этом имеют ряд дополнительных возможностей.

2. Перечислимый тип является полноценным классом Java, то есть может иметь конструктор, поля, методы, в том числе скрытые и абстрактные.

3. Перечисление может реализовывать интерфейсы.

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

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

Средства обобщённого программирования английское обозначение generics — механизм, аналогичный средствам языков Ada и Eiffel позже также появились и в C#, принципиально отличаются от шаблонов C++, дающий возможность создавать классы и методы с полями и параметрами произвольного объектного типа. С использованием данного механизма реализованы новые версии коллекций стандартной библиотеки Java.

Методы с неопределённым числом параметров.

Autoboxing/Unboxing — автоматическое преобразование между скалярными типами Java и соответствующими типами-обёртками, например, между int — Integer. Наличие такой возможности сокращает код, поскольку исключает необходимость выполнения явных преобразований типов в очевидных случаях.

Разрешён импорт статических полей и методов.

В язык введён цикл по коллекции объектов итератор, англ. foreach.

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

Java SE 6

Релиз версии состоялся 11 декабря 2006 года, кодовое имя Mustang. Изменена официальная индексация — вместо ожидаемой 6.0 версия значится
как 6. Минорные изменения, как и в Java 5.0, вносятся в обычные обновления версии, например, Java Standard Edition Development Kit 6 Update 27. Внесены следующие изменения:

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

Добавлена поддержка японского императорского календаря наряду с уже существующими григорианским и буддийским календарями.

Доступны классы-потоки для чтения и передачи сжатых данных, с возможностью передачи их по сети. Сняты ограничения на количество файлов в архиве ранее 64 Кб, длину названия файла ранее 256 символов и количество одновременно открытых файлов ранее 2000 шт.

Организована система управления кэшем и добавлена поддержка параметра «no-cache» в HTTP-запросе.

JConsole, графический мониторинг JVM, стала официально поддерживаемой утилитой.

Java HTTP Server, позволяет создать полноценный HTTP-сервер, с минимально необходимыми функциональными свойствами.

Повысилась скорость вычислений на 70 %, скорость операций ввода-вывода возросла в два раза.

Swing — улучшена работоспособность OpenGL и DirectX; обработка текста на LCD; добавлен GifWriter, для работы с файлами формата GIF.

Исправлено большое количество ошибок.

Java SE 7

Релиз версии состоялся 28 июля 2011 года, кодовое имя Dolphin. В финальную версию Java Standard Edition 7 не были включены все ранее запланированные изменения. Согласно плану развития план «Б», включение нововведений будет разбито на две части: Java Standard Edition 7 без лямбда-исчисления, проекта Jigsaw, и части улучшений проекта Coin и Java Standard Edition 8, намеченный на конец 2012 года.

В новой версии, получившей название Java Standard Edition 7, помимо исправления большого количества ошибок, было представлено несколько новшеств. Так, например, в качестве эталонной реализации Java Standard Edition 7 использован не проприетарный пакет JDK, а его открытая реализация OpenJDK, а сам релиз новой версии платформы готовился при тесном сотрудничестве инженеров Oracle с участниками мировой экосистемы Java, комитетом JCP расшифровывается как Java Community Process
и сообществом OpenJDK. Все поставляемые Oracle бинарные файлы эталонной реализации Java Standard Edition 7 собраны на основе кодовой базы OpenJDK, сама эталонная реализация полностью открыта под лицензией GPLv2
с исключениями GNU ClassPath, разрешающими динамическое связывание с проприетарными продуктами. К другим нововведениям относится интеграция набора небольших языковых улучшений Java, развиваемых в рамках проекта Coin, добавлена поддержка языков программирования с динамической типизацией, таких, как Ruby, Python и JavaScript, поддержка загрузки классов по URL, обновлённый XML-стек, включающий JAXP 1.4, JAXB 2.2a и JAX-WS 2.2 и другие.

За 5 дней до выхода релиза Java Standard Edition 7 было обнаружено несколько серьёзных ошибок в горячей оптимизации циклов, которая включена по умолчанию и приводит виртуальную машину Java к краху. Специалисты Oracle найденные ошибки за столь короткий срок исправить не могли, но пообещали, что они будут исправлены во втором обновлении Java 7 Update 2 и частично в первом.

Поддержка динамически-типизированных языков InvokeDynamic — расширение JVM (семантики байт-кода), языка Java для поддержки динамически-типизированных языков.

Строгая проверка class-файлов — class-файлы версии 51 Java Standard Edition 7 или более поздней версии должны быть проверены typechecking-верификатором; JVM не должна переключаться на старый верификатор.

Изменение синтаксиса языка Java Project Coin — частичные изменения в языке Java, предназначенные для упрощения общих задач программирования:

Использование класса String в блоке switch.

Закрытие используемых ресурсов в блоке try «try-with-resources» — работает при использовании интерфейса AutoClosable.

Объединённая обработка исключений в блоке catch «multi - catch
exceptions» — перечисление обрабатываемых исключений в catch.

Повторное выбрасывание исключений (rethrowing exceptions) — передача возникшего исключения «вверх» по стеку вызовов.

Подчёркивания в числовых литералах для лучшего восприятия больших чисел.

Изменение вывода типа в Java generic при создании объекта.

Использование двоичных чисел (binary literals) — префикс 0b укажет, что используется двоичное число.

Упрощение вызова методов varargs — уменьшение предупреждений при вызове метода с переменным числом входящих переменных.

Модификация загрузчика классов (class-loader) — избежание тупиковых ситуаций в неиерархической топологии загрузки классов.

Закрытие ресурсов, открытых URLClassLoader.

Обновление коллекций JSR 166.

Поддержка Unicode 6.0.

Отделение языка пользователя и языка пользовательского интерфейса — обновление обработки языков для отделения локали от языка пользовательского интерфейса.

Новые интерфейсы I/O для платформы Java (nio.2).

Использование JDBC 4.1 и Rowset 1.1.

Java SE 8

Релиз версии состоялся 19 марта 2014 года. Кодовое имя Octopus.

Полноценная поддержка лямбда-выражений.

Ключевое слово default в интерфейсах для поддержки функциональности по умолчанию.

Статические методы в интерфейсах.

Ссылки на методы и конструкторы.

Функциональные интерфейсы предикаты, поставщики и т. д.)

Потоки «stream» для работы с коллекциями.

Новый API для работы с датами.

Java SE 9

В связи со сложностями в реализации модульной системы в рамках проекта Jigsaw, релиз версии, первоначально запланированный 22 сентября 2016 года, несколько раз откладывался: сначала дата была перенесена на 23 марта 2017 года, потом — на 27 июля 2017 года, а затем — на 21 сентября 2017 года.

Последняя дата стала официальной датой релиза версии.

Интеграция Jigsaw, в рамках которого разработана модульная система для платформы Java 9 и применена к JDK 9.

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

Временно экспериментальный новый HTTP-клиент с поддержкой HTTP/2 и веб-сокетов; предназначен заменить устаревший класс HttpURLConnection.

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

Поддержка указанных в NIST FIPS 202 алгоритмов хеширования SHA-3, кроме SHAKE128 и SHAKE256. Алгоритмы использования SHA-3 в качестве основы для других криптографических функций не реализованы в силу отсутствия соответствующих стандартов.

Улучшены средства для пометки, устаревшего API. В аннотацию @Deprecated добавлен параметр, позволяющий указывать версию программы, с которой использование отмеченного элемента не рекомендуется, а также — параметр, позволяющий указать, что запланировано удаление элемента в какой-либо из будущих версий.

Поддержка GTK+ 3 на Linux.

Java SE 10

Дата релиза: 20 марта 2018 года.

Вывод типов локальных переменных, помеченных с помощью ключевого слова var.

Создание прозрачного интерфейса сборщика мусора для упрощения разработки новых сборщиков.

Уменьшено время задержек многопоточного сборщика мусора G1 за счёт реализации параллельного полного цикла сборки мусора.

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

Поддержка символов из новых расширений Unicode: cu (тип валюты), fw (первый день недели), rg (двухбуквенные коды стран и регионов), tz (часовой пояс).

HotSpot VM теперь может выделять память массивов для объектов на альтернативных устройствах оперативной памяти, в том числе тех, которые обладают энергонезависимой памятью, как, например, накопители Intel Optane Memory.

Новый экспериментальный JIT-компилятор Graal, предоставляющий возможности Ahead-of-Time компиляции; по умолчанию отключён, работает только на Linux/x64.

Обновление системы нумерации версий Java SE и JDK с целью приближения к схеме управления версиями по времени.

Java SE 11

Дата релиза — 25 сентября 2018 года.

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

Epsilon — новый сборщик мусора, собственно сборкой мусора не занимающийся вообще; при использовании Epsilon превышение предела выделяемой памяти приводит к завершению работы JVM.

Стандартизирован клиент HTTP с поддержкой HTTP/2, введённый в Java 9 как экспериментальный.

Параметры лямбда-функций могут быть неявно типизированы путём вывода типов через ключевое слово var для унификации с синтаксисом локальных переменных, введённым в JDK 10.

Поддержка 10-й версии стандарта Unicode.

Поддержка протокола TLS 1.3.

Экспериментальный масштабируемый сборщик мусора ZGC с низкими задержками. По умолчанию отключён, работает только на Linux/x64. [11,12,13]

2.3 PHP

PHP – это широко используемый язык сценариев общего назначения с открытым исходным кодом.

Говоря проще, PHP это язык программирования, специально разработанный для написания web-приложений (сценариев), исполняющихся на Web-сервере.

Аббревиатура PHP означает Hypertext Preprocessor «Препроцессор Гипертекста». Синтаксис языка берет начало из C, Java и Perl. PHP достаточно прост для изучения. Преимуществом PHP является предоставление web-разработчикам возможности быстрого создания динамически генерируемых web-страниц.

Важным преимуществом языка PHP перед такими языками, как языков Perl и C заключается в возможности создания HTML документов с внедренными командами PHP.

Значительным отличием PHP от какого-либо кода, выполняющегося на стороне клиента, например, JavaScript, является то, что PHP-скрипты выполняются на стороне сервера. Вы даже можете сконфигурировать свой сервер таким образом, чтобы HTML-файлы обрабатывались процессором PHP, так что клиенты даже не смогут узнать, получают ли они обычный HTML-файл или результат выполнения скрипта.

PHP позволяет создавать качественные Web-приложения за очень короткие сроки, получая продукты, легко модифицируемые и поддерживаемые в будущем.

PHP прост для освоения, и вместе с тем способен удовлетворить запросы профессиональных программистов.

Язык PHP постоянно совершенствуется, и ему наверняка обеспечено долгое доминирование в области языков web -программирования, по крайней мере, в ближайшее время.

В 1994 году датский программист Расмус Лердорф разработал на C набор CGI-скриптов для учёта посетителей его онлайн-резюме, обрабатывающий шаблоны HTML-документов. Лердорф назвал набор Personal Home Page Tools «Инструменты для Личной Домашней Страницы». Вскоре функциональности перестало хватать, и Лердорф разработал новый интерпретатор шаблонов PHP/FI, аббревиатура расшифровывается как Personal Home Page / Forms Interpreter — «персональная домашняя страница / интерпретатор форм».

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

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

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

взаимодействие с большим количеством различных систем управления базами данных через дополнительные модули MySQL, MySQLi, SQLite, PostgreSQL, Oracle OCI8, Oracle, Microsoft SQL Server, Sybase, ODBC, mSQL, IBM DB2, Cloudscape и Apache Derby, Informix, Ovrimos SQL, Lotus Notes, DB++, DBM, dBase, DBX, FrontBase, FilePro, Ingres II, SESAM, Firebird / InterBase, Paradox File Access, MaxDB, Интерфейс PDO, Redis;

автоматизированная отправка HTTP-заголовков;

работа с HTTP-авторизацией;

работа с cookies и сессиями;

работа с локальными и удалёнными файлами, сокетами;

обработка файлов, загружаемых на сервер;

работа с XForms.

В настоящее время PHP используется сотнями тысяч разработчиков. Согласно рейтингу корпорации TIOBE, базирующемся на данных поисковых систем, в мае 2016 года PHP находился на 6 месте среди языков программирования.

Входит в LAMP — распространённый набор программного обеспечения для создания и хостинга веб-сайтов Linux, Apache, MySQL, PHP.

Версии PHP

Personal Home Page (PHP Tools) version 1.0

8 июня 1995 года, вышел Personal Home Page (PHP Tools) version 1.0 — первый публичный релиз.

PHP/FI 2.0

В 1997 году после длительного бета-тестирования вышла вторая версия обработчика, написанного на C — PHP/FI 2.0. Её использовали около 1 % приблизительно 50 тысяч всех интернет-доменов мира.

PHP 3.0

Версия PHP 3.0 подверглась значительной переработке, определившей современный облик и стиль языка программирования. В 1997 году два израильских программиста, Энди Гутманс и Зеев Сураски, полностью переписали код интерпретатора. PHP 3.0 был официально выпущен в июне 1998 года.

Одной из сильнейших сторон PHP 3.0 была возможность расширения ядра дополнительными модулями. Впоследствии интерфейс написания расширений привлёк к PHP множество сторонних разработчиков, работающих над своими модулями, что дало PHP возможность работать с огромным количеством баз данных, протоколов, поддерживать большое число API. Большое количество разработчиков привело к быстрому развитию языка и стремительному росту его популярности. С этой версии акроним php расшифровывается как «PHP: hypertext Preprocessor», вместо устаревшего «Personal Home Page».

PHP 4.0

К зиме 1998 года, практически сразу после официального выхода PHP 3.0, Энди Гутманс и Зеев Сураски начали переработку ядра PHP. В задачи входило увеличение производительности сложных приложений и улучшение модульности базиса кода PHP. Новый движок, названный Zend Engine, успешно справлялся с поставленными задачами и впервые был представлен в середине 1999 года. PHP 4.0, основанный на этом движке и принёсший с собой набор дополнительных функций, официально вышел в мае 2000 года. В дополнение к улучшению производительности, PHP 4.0 имел ещё несколько ключевых нововведений, таких как поддержка сессий, буферизация вывода, более безопасные способы обработки, вводимой пользователем информации и несколько новых языковых конструкций.

PHP 5.0

Пятая версия PHP была выпущена разработчиками 13 июля 2004 года. Изменения включают обновление ядра Zend «Zend Engine 2», что существенно увеличило эффективность интерпретатора. Введена поддержка языка разметки XML. Полностью переработаны функции ООП, которые стали во многом схожи с моделью, используемой в Java. В частности, введён деструктор, открытые, закрытые и защищённые члены и методы, окончательные члены и методы, интерфейсы и клонирование объектов. В последующих версиях также были введены пространства имён, замыкания и целый ряд достаточно серьёзных изменений, количественно и качественно сравнимых с теми, которые появились при переходе на PHP 5.0.

PHP 6.0 «PHP 5.4»

Шестая версия PHP разрабатывалась с октября 2006 года. Было сделано множество нововведений, как, например, исключение из ядра регулярных выражений POSIX и «длинных» суперглобальных массивов, удаление директив safe_mode, magic_quotes_gpc и register_globals из конфигурационного файла php.ini. Одним из основных новшеств должна была стать поддержка Юникода. Однако в марте 2010 года разработка PHP6 была признана бесперспективной из-за сложностей с поддержкой Юникода. Исходный код PHP6 перемещён на ветвь, а основной линией разработки стала версия 5.4.

PHP 7

В 2014 году было проведено голосование, по результатам которого следующая версия получила название PHP 7. Выход новой версии планировался в середине октября 2015 года. В марте 2015 года Zend представили инфографику, в которой описаны основные нововведения PHP 7.

3 декабря 2015 года было объявлено о выходе PHP версии 7.0.0.

Новая версия основывается на экспериментальной ветви PHP, которая изначально называлась phpng «PHP Next Generation — следующее поколение», и разрабатывалась с упором на увеличение производительности и уменьшение потребления памяти. В новой версии добавлена возможность указывать тип возвращаемых из функции данных, добавлен контроль передаваемых типов для данных, а также новые операторы. [17]

2.4 JavaScript

JavaScript — мультипарадигменный язык программирования. Поддерживает объектно-ориентированный, императивный и функциональный стили. Является реализацией языка ECMAScript.

JavaScript обычно используется как встраиваемый язык для программного доступа к объектам приложений. Наиболее широкое применение находит
в браузерах как язык сценариев для придания интерактивности веб-страницам.

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

На JavaScript оказали влияние многие языки, при разработке была цель сделать язык похожим на Java, но при этом лёгким для использования непрограммистами. Языком JavaScript не владеет какая-либо компания или организация, что отличает его от ряда языков программирования, используемых в веб-разработке.

JavaScript применяется во многих областях от игровой индустрии до разработки веб приложений [14]

Версии JavaScript

ECMAScript 1

выпущенная в 1997 году

Самая первая версия языка

ECMAScript 2

Выпущен в 1998 году

Внесены не значительные исправления.

ECMAScript 3

Выпущен в 1998 году

Добавлены регулярные выражения.

Добавлен оператор try/catch.

ECMAScript 5

Вышел в 2009 году

Добавлен "строгий режим".

Добавлена поддержка JSON.

Добавлен String.trim().

Добавлен Array.isArray().

Добавлены методы обхода элементов массив.

ECMAScript 5.1

Выпущен в 2011 году

Внесены не значительные исправления.

ECMAScript 2015

Добавлены ключевые слова let и const.

Добавлены значения параметров по умолчанию.

Добавлен Array.find().

Добавлен Array.findIndex().

ECMAScript 2016

Добавлен оператор возведения в степень (**).

Добавлен Array.prototype.includes.

ECMAScript 2017

Добавлен "паддинг" строки (дополнение до нужной длины).

Добавлены новые свойства объекта Object.

Добавлены асинхронные функции.

Добавлены разделяемая память и атомарные операции.

ECMAScript 2018

Добавлены свойства rest / spread.

Добавлены асинхронные итерации.

Добавлен Promise.finally().

Добавления в объект RegExp.

2.5 Python

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

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

Эталонной реализацией Python является интерпретатор CPython, поддерживающий большинство активно используемых платформ. Он распространяется под свободной лицензией Python Software Foundation License, позволяющей использовать его без ограничений в любых приложениях, включая проприетарные. Есть реализация интерпретатора для JVM
с возможностью компиляции, CLR, LLVM, другие независимые реализации. Проект PyPy использует JIT-компиляцию, которая значительно увеличивает скорость выполнения Python-программ.

Python — активно развивающийся язык программирования, новые версии с добавлением/изменением языковых свойств выходят примерно раз в два с половиной года. Язык не подвергался официальной стандартизации, роль стандарта де-факто выполняет CPython, разрабатываемый под контролем автора языка. В настоящий момент Python занимает третье место в рейтинге TIOBE с показателем 8,5 %. Аналитики отмечают, что это самый высокий балл Python за все время его присутствия в рейтинге.

Разработчики языка Python придерживаются определённой философии программирования, называемой «The Zen of Python» «Дзен Пито́на». Её текст выдаётся интерпретатором Python по команде import this (работает один раз за сессию). Автором этой философии считается Тим Петерс.

Текст философии:

Красивое лучше, чем уродливое.

Явное лучше, чем неявное.

Простое лучше, чем сложное.

Сложное лучше, чем запутанное.

Плоское лучше, чем вложенное.

Разреженное лучше, чем плотное.

Читаемость имеет значение.

Особые случаи не настолько особые, чтобы нарушать правила.

При этом практичность важнее безупречности.

Ошибки никогда не должны замалчиваться.

Если не замалчиваются явно.

Встретив двусмысленность, отбрось искушение угадать.

Должен существовать один — и, желательно, только один — очевидный способ сделать это.

Хотя он поначалу может быть и не очевиден, если вы не голландец.

Сейчас лучше, чем никогда.

Хотя никогда зачастую лучше, чем прямо сейчас.

Если реализацию сложно объяснить — идея плоха.

Если реализацию легко объяснить — идея, возможно, хороша.

Пространства имён — отличная вещь! Давайте будем делать их больше!

Python портирован и работает почти на всех известных платформах — от КПК до мейнфреймов. Существуют порты под Microsoft Windows, практически все варианты UNIX включая FreeBSD и Linux, Plan 9, Mac OS и macOS, iPhone OS (iOS) 2.0 и выше, iPadOS, Palm OS, OS/2, Amiga, HaikuOS, AS/400 и даже OS/390, Windows Mobile, Symbian и Android.

По мере устаревания платформы её поддержка в основной ветви языка прекращается. Например, с серии 2.6 прекращена поддержка Windows 95, Windows 98 Windows ME. Однако на этих платформах можно использовать предыдущие версии Python — на данный момент сообщество активно поддерживает версии Python начиная от 2.3 (для них выходят исправления).

При этом, в отличие от многих портируемых систем, для всех основных платформ Python имеет поддержку характерных для данной платформы технологий (например, Microsoft COM/DCOM). Более того, существует специальная версия Python для виртуальной машины Java — Jython, что позволяет интерпретатору выполняться на любой системе, поддерживающей Java, при этом классы Java могут непосредственно использоваться из Python и даже быть написанными на Python. Также несколько проектов обеспечивают интеграцию с платформой Microsoft.NET, основные из которых — IronPython и Python.Net.

Разработка языка Python была начата в конце 1980-х годов сотрудником голландского института CWI Гвидо ван Россумом. Для распределённой ОС Amoeba требовался расширяемый скриптовый язык, и Гвидо начал писать Python на досуге, позаимствовав некоторые наработки для языка ABC Гвидо участвовал в разработке этого языка, ориентированного на обучение программированию. В феврале 1991 года Гвидо опубликовал исходный текст в группе новостей alt.sources. С самого начала Python проектировался как объектно-ориентированный язык.

Наличие дружелюбного, отзывчивого сообщества пользователей считается, наряду с дизайнерской интуицией Гвидо, одним из факторов успеха Python. Развитие языка происходит согласно чётко регламентированному процессу создания, обсуждения, отбора и реализации документов PEP англ. Python Enhancement Proposal — предложений по развитию Python.

3 декабря 2008 года, после длительного тестирования, вышла первая версия Python 3000 или Python 3.0, также используется сокращение Py3k.
В Python 3000 устранены многие недостатки архитектуры с максимально возможным, но не полным сохранением совместимости со старыми версиями Python. На сегодня поддерживаются обе ветви развития Python 3.x и 2.x, но поддержка Python 2.7 заканчивается в 2020 году. [18]

2.6 Go

Go часто также Golang — компилируемый многопоточный язык программирования, разработанный внутри компании Google. Разработка Go началась в сентябре 2007 года, его непосредственным проектированием занимались Роберт Гризмер, Роб Пайк и Кен Томпсон, занимавшиеся до этого проектом разработки операционной системы Inferno. Официально язык был представлен в ноябре 2009 года. На данный момент поддержка официального компилятора, разрабатываемого создателями языка, осуществляется для операционных систем FreeBSD, OpenBSD, Linux, macOS, Windows, DragonFly BSD, Plan 9, Solaris, Android, AIX. Также Go поддерживается набором компиляторов gcc, существует несколько независимых реализаций. Ведётся разработка второй версии языка.

Язык Go разрабатывался как язык программирования для создания высокоэффективных программ, работающих на современных распределённых системах и многоядерных процессорах. Он может рассматриваться как попытка создать замену языкам Си и C++ с учётом изменившихся компьютерных технологий и накопленного опыта разработки крупных систем. По словам Роба Пайка, «Go был разработан для решения реальных проблем, возникающих при разработке программного обеспечения в Google». В качестве основных таких проблем он называет:

медленную сборку программ;

неконтролируемые зависимости;

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

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

дублирование разработок;

высокую стоимость обновлений;

несинхронные обновления при дублировании кода;

сложность разработки инструментария;

проблемы межъязыкового взаимодействия.

Основными требованиями к языку стали:

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

Простая и регулярная грамматика. Минимум ключевых слов, простая, легко разбираемая грамматическая структура, легко читаемый код.

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

Отсутствие неявных преобразований.

Сборка мусора.

Встроенные средства распараллеливания, простые и эффективные.

Поддержка строк, ассоциативных массивов и коммуникационных каналов.

Чёткое разделение интерфейса и реализации.

Эффективная система пакетов с явным указанием зависимостей, обеспечивающая быструю сборку.

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

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

Хотя для Go доступен и интерпретатор, практически в нём нет большой потребности, так как скорость компиляции достаточно высока для обеспечения интерактивной разработки.

Версии Go

С марта 2012 года, когда была представлена версия Go 1, вышли следующие основные версии:

go 1

28 марта 2012 года

Первая официальная версия; зафиксированы библиотеки, внесены изменения в синтаксис.

go 1.1

13 мая 2013 года

Целочисленное деление на нуль стало синтаксической ошибкой, введены method values — замыкания метода с заданным значением-источником, в некоторых случаях стало необязательным использование return; в реализации разрешено выбирать между 32- и 64-разрядным представлением стандартного целочисленного типа, изменения в поддержке Unicode.

go 1.2

1 декабря 2013 года

Любая попытка обратиться по указателю nil гарантированно вызывает панику, введены трёхиндексные срезы. Доработки Unicode.

go 1.3

18 июня 2014 года

Изменена модель распределения памяти; удалена поддержка платформы Windows 2000, добавлены DragonFly BSD, FreeBSD, NetBSD, OpenBSD, Plan 9, Solaris.

go 1.4

10 декабря 2014 года

Разрешена конструкция цикла «for range x { … }» цикл по коллекции без использования переменных, запрещено двойное автоматическое разыменование при вызове метода если x **T — двойной указатель на тип T, то вызов метода для x в виде x.m()— запрещён; в реализацию добавлена поддержка платформ Android, NaCl on ARM, Plan9 on AMD64.

go 1.5

19 августа 2015 года

В записи map-литералов указание типа каждого элемента сделано факультативным, в реализации среда исполнения и компилятор полностью переписаны на Go и ассемблере, более не используется язык Си.

go 1.6

17 февраля 2016 года

изменений в языке нет, среда портирована на платформы Linux on 64-bit MIPS, Android on 32-bit x86 (android/386), изменения в инструментарии.

go 1.7

16 августа 2016 года

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

go 1.8

7 апреля 2017 года

Ускорена работа встроенного сборщика мусора памяти, модуль «http» получил возможность мягкой остановки, добавлена поддержка процессоров с архитектурой MIPS 32-бит. Внесены исправления в ряд пакетов и утилиты.

go 1.9

24 августа 2017 года

Добавлены в язык псевдонимы имён типов, уточнены некоторые моменты использования операций с плавающей точкой, оптимизирован инструментарий, дополнение библиотек, в частности — потоково-безопасный тип map.

go 1.10

16 февраля 2018 года

В язык внесено два уточнения, фактически узаконивших уже существующие реализации, остальные изменения касаются библиотек и инструментария. Выпущено три «трёхзначных» релиза 1.10.1 — 1.10.3, содержащие исправления обнаруженных ошибок.

go 1.11

24 августа 2018 года

Добавлены в качестве экспериментальных поддержка модулей нового механизма версионирования пакетов и управления зависимостями, а также возможность компиляции
в WebAssembly, улучшена поддержка ARM-процессоров, внесены изменения
в инструментарий и библиотеки, в частности добавлен пакет syscall/js; компилятор теперь правильно контролирует использование переменных, объявленных в конструкциях switch с проверкой типа.

go 1.12

25 февраля 2019 года

Исправления в библиотеках и утилитах. Объявлено, что это последний релиз, в котором сохраняется поддержка FreeBSD 10.Х и macOS 10.10. Добавлена поддержка cgo на платформе linux/ppc64. Добавлена поддержка ОС AIX. До августа 2019 в рамках этого релиза вышло девять патч-релизов, исправляющих различные ошибки.

go 1.13

3 сентября 2019 года

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

2.7 D

D — мультипарадигмальный статически типизированный компилируемый язык программирования, созданный Уолтером Брайтом из компании Digital Mars. Начиная с 2006 года соавтором также является Андрей Александреску. D является потомком языка C++, но существенно доработан по сравнению с ним. Также он заимствует ряд концепций из языков программирования Python, Ruby, C#, Java, Eiffel.

D доступен для операционных систем Windows, Linux, Mac OS, FreeBSD. Ведётся работа по портированию на Android.

В предисловии к книге А. Александреску «Язык программирования D», Уолтер Брайт пишет, что начал разработку этого языка в 1999 году. Проект задумывался как реинжиниринг языка C++ с целью избавиться от наиболее существенных недостатков исходного языка и внедрить в него современные архитектурные решения. При создании языка D была сделана попытка соединить производительность компилируемых языков программирования с безопасностью и выразительностью динамических.

Первоначально автор предполагал назвать язык «Mars», но из-за преемственности по отношению к C++ в обсуждениях язык постоянно называли «D», в результате именно это название и закрепилось за проектом.

Стабильная версия компилятора 1.0 вышла 2 января 2007. Вскоре после выхода компилятора, 17 июня 2007 года, автор перевёл версию 1 в режим поддержки и приступил к разработке версии 2.0, которая изначально не гарантировала обратной совместимости. Эта версия последняя на сегодняшний день мажорная версия D, развивается и по сей день. [10]

ЗАКЛЮЧЕНИЕ

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

Язык C# многофункционален и хорошо позволяет справляться со многими задачами, но имеет большую зависимость от CLR и .NET, что ставит его в рамки узкого спектра платформ.

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

Язык PHP ограничивается интернетом он не столь многофункционален, это его плюс и его огромный минус.

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

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

Язык Go новый язык с поддержкой от компании Google активно развивается и особых проблем у него пока что нет.

Язык D сильный, мало признанный язык, развивается и вероятнее всего будет расти в будущем.

CПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1. Гавриков М. М., Иванченко А. Н., Гринченков Д. В. Теоретические основы разработки и реализации языков программирования. — КноРус, 2013.

2. Альфред Ахо, Рави Сети, Джеффри Ульман. Компиляторы: принципы, технологии и инструменты. — Addison-Wesley Publishing Company, Издательский дом «Вильямс», 2003.

3. Роберт У. Себеста. Основные концепции языков программирования /
Пер. с англ. — 5-е изд. — М.: Вильямс,

4. Вольфенгаген В. Э. Конструкции языков программирования. Приёмы описания. — М.: Центр ЮрИнфоР, 2001.

5. Теренс Пратт, Марвин Зелковиц. Языки программирования: разработка и реализация. — 4-е издание. — Питер, 2002.

6. Роберт Гласс. Факты и заблуждения профессионального программирования. — "Символ-Плюс", 2004.

7. Васильев А. Н. Объектно-ориентированное программирование на С++ — СПб.: Наука и Техника, 2016.

8. Джош Локхарт Современный РНР. Новые возможности и передовой опыт / пер. с англ. Рагимов Р. Н - М.: ДМК Пресс, 2016

9. А. Хейлсберг, М. Торгерсен, С. Вилтамут, П. Голд. Язык программирования C#. Классика Computers Science. 4-е издание = C# Programming Language (Covering C# 4.0), 4th Ed. — СПб.: «Питер», 2012.

10. Александреску А. Язык программирования D = The D Programming Language. — Символ-плюс, 2012. — 544 с. — ISBN 978-5-93286-205-6.

11. Герберт Шилдт. Java. Полное руководство, 10-е издание = Java. The Complete Reference, 10th Edition. — М.: «Диалектика», 2018. — 1488 с. — ISBN 978-5-6040043-6-4.

12. Кей С. Хорстманн. Java. Библиотека профессионала, том 1. Основы. 10-е издание = Core Java. Volume I - Fundamentals (Tenth Edition). — М.: «Вильямс», 2017. — 864 с. — ISBN 978-5-8459-2084-3.

13. Кей С. Хорстманн. Java. Библиотека профессионала, том 2. Расширенные средства программирования. 10-е издание = Core Java. Volume II - Advanced Feature (Tenth Edition). — М.: «Вильямс», 2017. — 976 с. — ISBN 978-5-9909445-0-3.

14. https://ru.wikipedia.org/wiki/JavaScript

15. https://golang.org/project/

16. https://docs.microsoft.com/ru-ru/dotnet/csharp/tour-of-csharp/

17. http://www.php.su/php/?php

18. https://www.python.org/doc/

19. https://ru.wikipedia.org/wiki/Язык_программирования