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

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

Содержание:

Введение

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

Язык программирования, это запись алгоритмов и их обработка, которые понимает ЭВМ. В более абстрактном виде, язык программирования является средством создания объектов.

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

Глава 1. История создания

1.1 Понятие языков программирования

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

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

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

1.2 Этапы развития языков программирования

Первые языки программирования появились еще до создания современных ЭВМ.

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

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

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

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

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

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

С середины 1950-х начали появляться языки третьего поколения, такие как Фортран, Лисп и Кобол. Языки программирования этого типа более абстрактны (их ещё называют «языками высокого уровня») и универсальны, не имеют жёсткой зависимости от конкретной аппаратной платформы и используемых на ней машинных команд. Программа на языке высокого уровня может исполняться (по крайней мере, в теории, на практике обычно имеются ряд специфических версий или диалектов реализации языка) на любой ЭВМ, на которой для этого языка имеется транслятор (инструмент, переводящий программу на язык машины, после чего она может быть выполнена процессором).

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

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

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

Язык ПЛ/1 (NPL) был разработан в 1960-х годах как объединение лучших черт Фортрана и Кобола.

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

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

5) В период с 1969 по 1973 годы велась разработка языка Си, популярного и по сей день и ставшего основой для множества последующих языков, например, столь популярных, как С++ и Java.

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

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

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

Кроме того, в 1960—1970-х годах активно велись споры о необходимости поддержки структурного программирования в тех или иных языках]. В частности, голландский специалист Э. Дейкстра выступал в печати с предложениями о полном отказе от использования инструкций GOTO во всех высокоуровневых языках. Развивались также приёмы, направленные на сокращение объёма программ и повышение продуктивности работы программиста и пользователя.

В 1980-е годы наступил период, который можно условно назвать временем консолидации. Язык С++ объединил в себе черты объектно-ориентированного и системного программирования, правительство США стандартизировало язык Ада, производный от Паскаля и предназначенный для использования в бортовых системах управления военными объектами, в Японии и других странах мира осуществлялись значительные инвестиции в изучение перспектив так называемых языков пятого поколения, которые включали бы в себя конструкции логического программирования. Сообщество функциональных языков приняло в качестве стандарта ML и Лисп. В целом этот период характеризовался скорее опорой на заложенный в предыдущем десятилетии фундамент, нежели разработкой новых парадигм.

Важной тенденцией, которая наблюдалась в разработке языков программирования для крупномасштабных систем, было сосредоточение на применении модулей — объёмных единиц организации кода. Хотя некоторые языки, такие, как ПЛ/1, уже поддерживали соответствующую функциональность, модульная система нашла своё отражение и применение также и в языках Модула-2, Оберон, Ада и ML. Часто модульные системы объединялись с конструкциями обобщённого программирования.

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

В 1990-х годах в связи с активным развитием Интернета распространение получили языки, позволяющие создавать сценарии для веб-страниц — главным образом Perl, развившийся из скриптового инструмента для Unix-систем, и Java. Возрастала также и популярность технологий виртуализации. Эти изменения, однако, также не представляли собой фундаментальных новаций, являясь скорее совершенствованием уже существовавших парадигм и языков (в последнем случае — главным образом семейства Си).

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

Глава 2. Языки программирования

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

Языки программирования делятся на “Процедурные” и “Непроцедурные”.

В “Процедурные” входят языки “Низкого уровня(Машинно-зависимые)”,

такие как Assembler и “Высокого уровня(Машинно-независимые)”,

Fortran, Basic, Pascal и C(Машинно-ориентированный).

В “Непроцедурные” входят языки “Объектно-ориентированные”, такие как C++, Visual Basic, Delphi, Java и “Декларативные”, туда входят “Логические”, Prolog и “Функциональны”, Lisp.

Процедурные – процедурные языки являются языками высокого уровня, в которых используется метод разбиения программ на отдельные связанные между собой модули – подпрограммы (процедуры и функции). Компоненты языка состоят из последовательности операторов, которые используют библиотечные процедуры и функции. Первым процедурным языком был Fortran, затем появился Cobol, Algol, Pascal, C, Ada.

Языки программирования низкого уровня - к языкам низкого уровня относится: программирование в машинных кодах; ассемблер; макроассемблер. Языки низкого уровня ориентировались на определенный тип процессора и учитывали его особенности, поэтому для того, чтобы перенести программу, написанную на ассемблере, на другую аппаратную платформу её нужно было почти полностью переписать. Различия присутствовали также и в синтаксисе программ под разные компиляторы. Языками низкого уровня пользуются преимущественно для написания небольших системных программ, драйверов устройств, модулей стыков с нестандартным оборудованием, программирования специализированных микропроцессоров, когда немаловажным является компактность, быстродействие и возможность прямого доступа к аппаратным ресурсам.
Языки программирования высокого уровня - в языках высокого уровня особенности конкретных компьютерных архитектур не учитываются, поэтому написанные программы легко могут быть перенесены на другой компьютер. Зачастую достаточным является компиляция программы под определенную архитектурную и операционную систему. Разработка программ на языках высокого уровня значительно проще и ошибок намного меньше. К тому же время разработки программы значительно уменьшается, что является особенно важным фактором при работе над сложными программными проектами. Недостаток некоторых языков высокого уровня состоит в большом размере программ по сравнению с программами на языках низкого уровня. В то же время текст программ на языке высокого уровня гораздо меньше, но в байтах код, написанный на ассемблере, будет более компактным. Поэтому языки высокого уровня преимущественно используют для создания программного обеспечения для компьютеров и вычислительных устройств с большим объемом памяти. Языки же низкого уровня используются для написания программ к устройств, для которых критичным является размер программы. Языки высокого уровня делятся на универсальные и проблемно-ориентированные. Наиболее распространенные универсальные языки C#, C++, Basic, Pascal (Delphi) используются для разработки Windows-приложений. Большой вклад в программирование на начальных этапах внесли языки Fortran, Cobol, Algol, C и др. Языки программирования для разработки Интернет-приложений скорее относятся к универсальным языкам. К ним относятся современные версии C#, Basic, J#.

Объектно-ориентированные языки – Объектно-ориентированные языки стали дальнейшим уровнем развития процедурных языков, основной концепцией которых есть совокупность программных объектов. Написание программы на языке представляется в виде последовательности создания экземпляров объектов и использование их методов. К ним относятся из первых языков Simula и SmallTalk, далее C++, Java.

Декларативные языки программирования – В декларативном программировании задается спецификация решения задачи, то есть дается описание того, что представляет собой проблема и какой ожидается результат. Программы, созданные с помощью декларативного языка, не содержат переменные и операторы присваивания. К декларативным языкам можно отнести SQL и HTML. К подвидам декларативного программирования относится функциональное и логическое программирование.

Функциональные языки программирования – Функциональные языки являются языками искусственного интеллекта. Программа, написанная на функциональном языке, состоит из последовательности функций и выражений, которые необходимо вычислить. Основной структурой данных является связный список. Функциональное программирование принципиально отличается от процедурного. Основными функциональными языками являются Lisp, Miranda, Haskel.

Логические языки программирования – Языки, ориентированные на решение задач без описания алгоритмов, языки искусственного интеллекта. Представителем логического программирования является Prolog, которым написано большинство экспертных систем.

Языки сценариев (скрипты)- Языки относятся к объектно-ориентированным языкам, используются для написания программ, которые исполняются в определенной программной среде. Тексты программ, написанные на языке сценариев, можно включать в тело Html-документа. Первыми скриптами были Perl и Python, которые изначально были разработаны для операционной системы Unix, а уже в дальнейшем появились версии языков для операционных систем Windows и Macintosh. Для написания программ на языке сценариев необходимо знание процедур и функций системных библиотек.

Языки, ориентированные на данные - Языки ориентированы на работу с одним определенным типом данных. Например, APL работает с матрицами и векторами, Snobol обрабатывает строки, SETL выполняет операции над множествами. Особое развитие получили языки для работы с базами данных: 3GL, PL/SQL, FoxPro.

Безопасные и небезопасные - В общем и целом, язык называется безопасным, если программы на нём, которые могут быть приняты компилятором как правильно построенные, в динамике никогда не выйдут за рамки допустимого поведения. Это не значит, что такие программы не содержат ошибок вообще. Термин «хорошее поведение программы» (англ. well behavior) означает, что даже если программа содержит некий баг (в частности, логическую ошибку), она тем не менее не способна нарушить целостность данных и обрушиться. Хотя термины неформальны, безопасность некоторых языков (например, Standard ML) математически доказуема. Безопасность других (например, Ada) была обеспечена ad hoc-образом, без обеспечения концептуальной целостности, что может обернуться катастрофами, если положиться на них в ответственных задачах .

Языки C и его потомок C++ являются небезопасными. В программах на них обширно встречаются ситуации ослабления типизации (приведение типов) и прямого её нарушения (каламбур типизации), так что ошибки доступа к памяти являются в них статистической нормой (но крах программы наступает далеко не сразу, что затрудняет поиск места ошибки в коде). Самые мощные системы статического анализа для них способны обнаруживать не более 70 — 80 % ошибок, но их использование обходится очень дорого в денежном смысле. Достоверно же гарантировать безотказность программ на этих языках невозможно, не прибегая к формальной верификации, что не только ещё дороже, но и требует специальных знаний. У Си есть и безопасные потомки, такие как Cyclone или Rust. Язык Forth не претендует на звание «безопасного», но, тем не менее, на практике существование программ, способных повредить данные, почти исключено, так как содержащая потенциально опасную ошибку программа аварийно завершается на первом же тестовом запуске, принуждая к коррекции исходного кода. В сообществе Erlang принят подход «let it crash» , также нацеленный на раннее выявление ошибок.

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

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

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

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

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

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

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

Однако интерпретируемые программы выполняются заметно медленнее, чем компилируемые, кроме того, они не могут выполняться без дополнительной программы-интерпретатора. Примеры компилированных языков: assembler, C++, Pascal Примеры интерпритируемых языков: PHP, JavaScript, Python Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми.

2.2 Современные языки программирования

Swift -  открытый мультипарадигмальный компилируемый язык программирования общего назначения. Создан компанией Apple в первую очередь для разработчиков iOS и macOS. Swift работает с фреймворками Cocoa и Cocoa Touch и совместим с основной кодовой базой Apple, написанной на Objective-C. Swift задумывался как более лёгкий для чтения и устойчивый к ошибкам программиста язык, нежели предшествовавший ему Objective-C. Программы на Swift компилируются при помощи LLVM, входящей в интегрированную среду разработки Xcode 6 и выше. Swift может использовать рантайм Objective-C, что делает возможным использование обоих языков (а также С) в рамках одной программы.

Swift заимствовал довольно многое из Objective-C, однако он определяется не указателями, а типами переменных, которые обрабатывает компилятор. По аналогичному принципу работают многие скриптовые языки. В то же время, он предоставляет разработчикам многие функции, которые прежде были доступны в C++ и Java, такие как определяемые наименования, так называемые обобщения и перегрузка операторов.

Часть функций языка выполняется быстрее по сравнению с другими подобными языками. Например, сортировка комплексных объектов выполняется в 3,9 раз быстрее, чем в Python, и почти в 1,5 раза быстрее, чем в Objective-C.

Код, написанный на Swift, может работать вместе с кодом, написанным на языках программирования C и Objective-C в рамках одного и того же проекта.

GO – представляет компилируемый статический типизированный язык программирования от компании Google. Язык GO предназначен для создания различного рода приложений, но прежде всего это веб-сервисы и клиент-серверные приложения. Хотя также язык обладает возможностями по работе с графикой, низкоуровневыми возможностями и т.д..

Работа над языком GO началась в 2007 в недрах компании Google. Одним из авторов является Кен Томпсон, который, к слову, является и одим из автором языка C. 10 ноября 2009 года язык был анонсирован, а в марте 2012 года вышла версия 1.0. При этом язык продолжает развиваться.

GO является кроссплатформенным, он позволяет создавать программы под различные операционные системы(Windows, Mac OS, Linus, FreeBSD). Код обладает переносимостью: программы, написанные для одной из этих операционных систем, могут быть легко с перекомпилцией перенесен на другую ОС.

Основные особенности языка GO:

Компилируемый – компилятор транслирует программу на GO в машинный код, понятный для определенной платформы

Статический типизированный

Присутствует сборщик мусора, который автоматически очищает память

Поддержка работы с сетевыми протоколами

Поддержка многопоточности и параллельного программирования

В настоящее время Go находит широкое применение в различных сферах. В частности, среди известных проектов, которые применяют GO, это: Google, Netflix, Uber, Twitch и т.д.

Kotlin -  это статически типизированный язык программирования, работающий поверх JVM и разрабатываемый компанией JetBrains. Компилируется в JavaScript, а также на другие платформы через инфраструктуру LLVM.

Авторы ставили целью создать язык более лаконичный и типобезопасный, чем Java, и более простой, чем Scala. Следствием упрощения по сравнению со Scala стали также более быстрая компиляция и лучшая поддержка языка в IDE[4]. Позиционируется разработчиками как объектно-ориентированный язык промышленного уровня, а также как язык, который сможет заменить Java. При этом язык полностью совместим с Java, что позволяет разработчикам постепенно перейти с Java на Kotlin. В частности, в Android язык встраивается с помощью Gradle, что позволяет для существующего Android-приложения внедрять новые функции на Kotlin без переписывания приложения целиком. Синтаксис языка похож на Pascal, TypeScript, Haxe, PL/SQL, F#, Go и Scala, C++, Java, C#, Rust и D. При объявлении переменных и параметров типы данных указываются после названия (разделитель — двоеточие). Точка с запятой как разделитель операторов так же необязательна, как в Scala и Groovy; в большинстве случаев перевода строки достаточно, чтобы компилятор понял, что выражение закончилось. Кроме объектно-ориентированного подхода, Kotlin также поддерживает процедурный стиль с использованием функций. Как и в языках C/C++/D, точка входа в программу — функция "main", принимающая массив параметров командной строки. Программы на Kotlin также поддерживают Perl- и Unix/Linux shell-стиль. Kotlin также поддерживает вывод типов.

PHP –Это широко используемый язык сценариев общего назначения с открытым исходным кодом. Язык программирования, специально разработанный для написания web-приложений (скриптов, сценариев), использующихся на web-сервере. Синтаксис языка во многом основывается на синтакте C, Java и Perl.

Он очень похож на C и на Perl, поэтому для профессионального программиста не составит труда его изучить. С другой стороны, язык PHP проще, чем C, и его может освоить web-мастер, не знающий пока других языков программирования.
Огромным плюсом PHP, в отличие от, например, JavaScript, является то, что PHP-скрипты выполняются на стороне сервера. PHP не зависит от скорости компьютера пользователя или его браузера, он полностью работает на сервере. Пользователь даже может не знать, получает ли он обычный HTML- файл или результат выполнения скрипта.

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

Но и изображения разных файлов –JPEG, GIF, PNG, файлы PDF и FLASH.

PHP способен формировать данные в любом текстовом формате, включая

XHTML и XML.
PHP-кроссплатформенная технология. Дистрибутив PHP доступен для большинства операционных систем, включая Linus, многие модификации Unix, Microsoft Windows, Mas OS и многих других. PHP поддерживается на большинстве вебсерверов, таких, как Apache, Microsoft Internet Information Server (IIS), Microsoft Personal Web Server и других.

Для большинства серверов PHP поставляется в 2-х вариантах – в качестве модуля и в качестве CGI препроцессора.
PHP поддерживает работу с ODBC и большое количество баз данных:

MySQL, MSQL, Oracle, PostgreSQL, SQLite и др.

Язык программирования PHP, особенно в связи с популярнейшей базой данных MySQL – оптимальный вариант для создания интернет-сайтов

Различной сложности.

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

доминирование в области языков web-программирования.

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

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

Эталонной реализацией Python является интерпретатор CPython, поддерживающий большинство активно используемых платформ[9]. Он распространяется под свободной лицензией Python Software Foundation License, позволяющей использовать его без ограничений в любых приложениях, включая проприетарные[10]. Есть реализации интерпретаторов для JVM (с возможностью компиляции), MSIL (с возможностью компиляции), LLVM и других. Проект PyPy предлагает реализацию Python с использованием JIT-компиляции, которая значительно увеличивает скорость выполнения Python-программ.
Python — активно развивающийся язык программирования, новые версии (с добавлением/изменением языковых свойств) выходят примерно раз в два с половиной года. Вследствие этого и некоторых других причин на Python отсутствуют стандарт ANSI, ISO или другие официальные стандарты, их роль выполняет CPython.
Rust -  мультипарадигмальный компилируемый язык программирования общего назначения, спонсируемый Mozilla Research, сочетающий парадигмыфункционального и процедурного программирования с объектной системой, основанной на типажах, и с управлением памятью через понятие «владения» (систему аффинных типов, позволяющую обходиться без сборки мусора). Объектно-ориентированное программирование как таковое языком не поддерживается, но язык позволяет реализовать большинство понятий ООП при помощи других абстракций.

Ключевые особенности языка: безопасность, скорость и параллелизм. Rust пригоден для системного программирования, в частности, он рассматривается как перспективный язык для разработки ядер операционных систем. Rust сопоставим по скорости и возможностям с C++, однако даёт большую безопасность при работе с памятью, что обеспечивается механизмами ограничения. Rust также направлен на достижение «абстракции с нулевой стоимостью».

После нескольких лет активной разработки первая стабильная версия (1.0) вышла 15 мая 2015 года, после чего новые версии выходят раз в 6 недель. Для версий языка, вышедших после 1.0, заявлена обратная совместимость.

Плюсы и минусы языка программирования:

Плюсы:

1) Безопасная работа с памятью

2) Высокое быстродействие

3) Алгебраический тип данных

4) Предсказуемость компиляции

Минусы:

1) Некоторая избыточность кода

2) Высокая интенсивность развития языка и, как следствие, отсутствие хорошей актуальной литературы для изучения

3) Необходимость чётко и однозначно прописывать параметры для компиляции

Язык Rust превращается в полнее рабой язык, проще и функциональнее C++, но уступающий по “красивости” многим другим языкам программирования. Фактически же главное отличие Rust от конкурентов и предшественников – именно скорость и безопасность.

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

C# - простой, современный объектно-ориентированный и типобезопасный язык программирования. C# относится к широко известному семейству языков C, и покажется хорошо знакомым любому, кто работал с C, C++, Java или JavaScript.

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

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

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

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

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

C# разрабатывался как язык программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#, которая отражает BCL. Присутствие или отсутствие тех или иных выразительных особенностей языка диктуется тем, может ли конкретная языковая особенность быть транслирована в соответствующие конструкции CLR. Так, с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует ожидать и в дальнейшем (однако, эта закономерность была нарушена с выходом C# 3.0, представляющего собой расширения языка, не опирающиеся на расширения платформы .NET). CLR предоставляет C#, как и всем другим .NET-ориентированным языкам, многие возможности, которых лишены «классические» языки программирования. Например, сборка мусора не реализована в самом C#, а производится CLR для программ, написанных на C# точно так же, как это делается для программ на VB.NET, J#. 

С++ - компилируемый строго типизированный язык программирования общего назначения. Поддерживает разные парадигмы программирования: процедурную, обобщённую, функциональную; наибольшее внимание уделено поддержке объектно-ориентированного программирования.

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

C++ широко используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (игр). Существует множество реализаций языка C++, как бесплатных, так и коммерческих и для различных платформ. Например, на платформе x86 это GCC, Visual C++, Intel C++ Compiler, Embarcadero (Borland) C++ Builder и другие. C++ оказал огромное влияние на другие языки программирования, в первую очередь на Java и C#.

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

Нововведениями C++ в сравнении с C являются:

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

2) поддержка обобщённого программирования через шаблоны функций и классов; стандартная библиотека C++ состоит из стандартной библиотеки C (с некоторыми модификациями) и библиотеки шаблонов (Standard Template Library, STL), которая предоставляет обширный набор обобщенных контейнеров и алгоритмов;

3) Дополнительные типы данных

4) Обработка исключений

5) Виртуальные функции

6) Пространство имен

7) Встраиваемые (inline) функции

8) Перезагрузка (overloading) операторов

9) Перегрузка имен функций

10) Ссылки и операторы управления свободно распределяемой памятью.

Java -  объектно-ориентированный язык программирования, разрабатываемый компанией Sun Microsystems с 1991 года и официально выпущенный 23 мая 1995 года. Изначально новый язык программирования назывался Oak (James Gosling) и разрабатывался для бытовой электроники, но впоследствии был переименован в Java и стал использоваться для написания апплетов, приложений и серверного программного обеспечения.

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

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

Язык Java потребовался для создания интерактивных продуктов для сети Internet. Фактически, большинство архитектурных решений, принятых при создании Java, было продиктовано желанием предоставить синтаксис, сходный с C и C++. В Java используются практически идентичные соглашения для объявления переменных, передачи параметров, операторов и для управления потоком выполнением кода. В Java добавлены все хорошие черты C++.

Три ключевых элемента объединились в технологии языка Java:

Java предоставляет для широкого использования свои апплеты (applets) — небольшие, надежные, динамичные, не зависящие от платформы активные сетевые приложения, встраиваемые в страницы Web. Апплеты Java могут настраиваться и распространяться потребителям с такой же легкостью, как любые документы HTML.

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

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

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

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

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

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

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

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

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

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

JavaScript – мультипарадигменный язык программирования.

Поддерживает объектно-ориентированный, императивный и функциональный стили.

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

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

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

Название «JavaScript» является зарегистрированным товарным знаком компании Oracle Corporation.

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

Несмотря на схожий с Си синтаксис, JavaScript по сравнению с языком Си имеет коренные отличия:

1) Объекты с возможностью интроспекции

2) Функции как объекты первого класса

3) Автоматическое приведение типов

4) Автоматическая сборка мусора

5) Анонимные функции

В языке отсутствуют такие полезные вещи, как:

1) стандартная библиотека: в частности, отсутствует интерфейс программирования приложений по работе с файловой системой, управлению потоками ввода-вывода, базовых типов для бинарных данных

2) стандартные интерфейсы к веб-серверам и базам данных

3) система управления пакетами, которая бы отслеживала зависимости и автоматически устанавливала их

JavaScript и Java

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

Из важных различий можно отметить:

1) Java реализует ООП подход, основанный на классах, JavaScript — на прототипах

2) Java имеет статическую типизацию, JavaScript — динамическую типизацию

3) Java загружается из скомпилированного байт-кода; JavaScript интерпретируется напрямую из файла (но часто с незаметной JIT-компиляцией)

Заключение

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


 

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

1) Роберт У. Себеста “Основные концепции языков программирования”

2) http://yaguo.ru :8080/task00/task424_classifi.htm

3) https://ru.bmstu.wiki /%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F

4) https://spravochnick.ru /programmirovanie/yazyki_programmirovaniya/klassifikaciya_yazykov_programmirovaniya/

5) https://ru.wikipedia.org /wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F

6) https://metanit.com /go/tutorial/1.1.php

7) https://proglib.io /p/10-languages-2018/

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

9) http://progopedia.ru

10) https://habr.com/post/225841/