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

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

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

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

Добавлен: 29.03.2023

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

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

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

ВВЕДЕНИЕ

Языки программирования структура искусственных не естественных языков, созданная впервые ещё в 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, Паскаль, РНР, и другие

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

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

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