Файл: Современные языки программирования (Краткая история языков программирования).pdf

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

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

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

Добавлен: 30.03.2023

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

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

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

ВВЕДЕНИЕ

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

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

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

В ходе данной работы использовался ряд русскоязычных и англоязычных источников. К последним относится, прежде всего, «Encyclopedia of Computer Science and Technology», предоставляющая в форме кратких энциклопедических статей информацию обо всех основных объектах, изучаемых современным программированием, а также справки о компьютерных языках и истории их развития. Данное издание, дополненное и исправленное, выпущено в 2009 году, и на сегодняшний день остается одним из наиболее цитируемых источником энциклопедических справок по теме компьютерных технологий. Одним из критериев надежности «Энциклопедии» Хендерсона являются обширные списки дополнительной литературы, указанные к каждой статье, в т.ч. научные монографии, публикации в прессе, и др.

Одним из основных источников для написания данной работы было 5-е издание «Основные концепции языков программирования», автор – профессор Р. Себеста (Университет Колорадо-Спрингс). Это многократно переиздаваемый бестселлер тематики изучения компьютерных языков, отличайющийся глубоким аналитическим подходом автора к истории и развитию языков программирования; несмотря на то, что используемый в данной работе перевод «Основных концепций» основан не на последнем на сегодняшний день издании (существует уже 9-е издание), в книге приведен анализ всех основных парадигм программирования, сопровождаемый убедительным инструментарием.


Информация, почерпнутая в работе Р. Себесты, была проанализирована с помощью ряда учебной литературы – учебника «Теория и практика языков программирования» С.А. Орлова, рекомендованного Санкт-Петербургским институтом информатики и автоматизации Российской Академии Наук (опубликован в 2014 году); книги американских специалистов Т. Пратта и М. Зелковица «Языки программирования: разработка и реализация» (использован опубликованный в 2002 году русскоязычный перевод 4-го издания книги), а также публикация 1980 года классического труда Д. Баррона, представляющий интересный для изучения взгляд на развитие языков программирования и их основных концепций, происходившее в 70-х годах 20 века. Представляется, что равнение идей, излагаемых Барроном, с современным подходом к осмыслению основных векторов развития программирования способствует более глубокому исследованию языков программирования. Учебник С.А. Орлова предоставляет особенный интерес в части кратких описаний того или иного языка: автор сопровождает свой анализ критическими выводами о слабых сторонах определенных языков и отмечает преемственность концепций там, где это возможно. Наконец, работа Пратта и Зелковиц отличается подачей материала о программировании через призму математических моделей.

Исследование тематики современных языков программирования было бы невозможным без рассмотрения проблемы популярности отдельно взятых языков и попытки проанализировать современные тренды развития. В этой части работы в качестве источников были использованы наиболее частнотно цитируемые рейтинги и интернет-ресурсы, пользующиеся авторитетом у профессионального сообщества – PYPL, RedMonk, StackOverflow, TIOBE. Их надежность связана с открытостью самих рейтингов, прозрачностью используемых ими принципов и, в большинстве случаев, массивов данных. В завершение работы, для иллюстрации некоторых доводов использована также англоязычная статья о наиболее перспективных для изучения в 2019 году языков, опубликованная на интернет-портале, посвященного программированию Coding Infinite. Она позволяет рассмотреть сферу практического применения языков программистами, и прагматические факторы распространенности тех или иных языков, по понятным причинам не освещаемые в научной или учебной литературе. Несмотря на некоторую неформальность подачи данных, данная статья сопровождена строгой ссылочной частью, основывается на рейтингах, уже отобранных как заслуживающие внимания для данной работы, и не противоречит ранее представленным выводам.


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

1.1 Краткая история языков программирования

Язык программирования – это знаковая система для планирования поведения программ; с практической точки зрения он представляет собой средство общение между человеком в роли пользователя и компьютером в роли исполнителя. [2, с. 24-26][1] Д. Баррон, определяя программирование как «искусство получения ответов от машины», пояснял роль языка следующим образом: он несет в себе систему понятий, на основе которых мы можем задавать вопросы и нотаций, позволяющих определить путь решения задачи. [1, с. 9-11][2]. Каждый язык программирования имеет определенные лексические, синтаксические и семантические правила, определяющие внешний вид программы и действия, которые выполнит исполнитель под ее управлением. В современном мире в роли исполнителя обычно выступает компьютер, однако история языков программирования берет начало до появления современных ЭВМ, в 19 веке, с появлением первых устройств, управляемых наборами инструкций. Примером прото-языка программирования может служить алгоритм вычисления чисел Бернулли на аналитической машине, опубликованный Чарльзом Бэббиджем и Адой Лавлейс в 1843 году. [6, с. 35][3]

С появлением в 40-х 20 века первых электронно-вычислительных машин, возникает машинный код – команды, которые может воспринимать электронное устройство, т.е. последовательность 1 и 0, сформированная перепадом напряжения. Машинный код был машинно-зависим, неудобен для программирования, сложен для контроля, громоздок, имел высокий фактор ошибки программиста, т.к. каждая операция должна была сопровождаться инструкцией по обработке данных, выраженной двоичным кодом, а также адресом самих обрабатываемых данных. [6, с. 29][4] Все это являлось предпосылками для поиска решения по автоматизации формирования машинного кода. В 1950 году для записи программ начали применять язык ассемблера – тип языков программирования, предложения которых по своей структуре в основном подобны командам и обрабатываемым данным конкретного машинного языка. Язык ассемблера позволил представить машинный код в более удобной для человека форме: для обозначения команд и объектов, над которыми эти команды выполняются, вместо двоичных кодов использовались буквы или сокращенные слова, которые отражали суть команды. Перевод из символьного языка в исполнимый машинный код производился программой, называемой ассемблером.


Если первым поколением языков программирования считать машинные коды, то язык ассемблера можно рассматривать как второе поколение языков программирования. Недостатки языка ассемблера, сложность разработки на нем больших программных комплексов, а также отсутствие некоего единого языка низкого уровня привели к появлению в середине 50-х годов 20 века языков, не привязанных к определенному типу ЭВМ — языков программирования высокого уровня. В системной области, однако, языки ассемблера продолжили широко применяться, в целях повышения эффективности выполняемых программ, вплоть до 70-х годов, когда развитие среды UNIX, разработанной на языке Си, доказала эффективность языков высокого уровня и в этой области. [3, c. 23][5]

Первые языки высокого уровня можно отнести к третьему поколению языков программирования. Хронологически первым из известных высокоуровневых языков является Планкалкюль (нем. Plankalkül — исчисление планов). Он был создан немецким инженером Конрадом Цюзе в 1943-1945 году для программирования компьютера Z4, однако был пригоден для работы с другими похожими вычислительными машинами. В силу исторических причин, создатель не имел возможность полноценно продолжать свою работу, и язык Планкалкюль становится известен лишь в 1972 году. Более ранняя публикация работ Цюзе существенно повлияла бы на ход истории языков программирования. [6, c. 562][6] [4, c. 60][7]

Первым из языков высокого уровня, получившим практическое применение и дальнейшее развитие, стал Фортран (англ. FORmula TRANslator - переводчик формул), созданный в 1954-1957 году в корпорации IBM: предназначенный для научных и инженерных вычислений. В 1958 году разработана первая версия языка Алгол (англ. ALGOrithmic Language – алгоритмический язык) – Algol 58, унаследовавшего многие черты Фортрана. Позднее Алгол был доработан (Algol 60) и полностью переработан в Алгол 68, отличавшийся сложностью синтексиса и не достигший популярности предыдущих версия). Алгол был первым языком, разработанным интернациональной командой; некоторые из разработчиков были знакомы с языком Планкалкюль – из него заимствовали форму оператора присваивания. [4, c. 76][8] Именно в языке Алгол появилось представление о программе не как о свободной последовательности команд, а как о блочной структуре, состоящей из четко описанных и отделенных друг от друга частей. В Алголе появилась возможность организации рекурсивных процедур. Если в США был более популярен Фортран, то Алгол приобрел широкое распространение в Европе и СССР, как в качестве универсального языка описания алгоритмов в научных публикациях, так и в качестве средства практического программирования. Р. Себеста отмечает, что популярности Фортрана способствовала неосведомленность пользователей, а именно- недостаточное знание рядом программистов и менеджеров общих концепций программирования: «они не приняли во внимание выгод блочной структуры, рекурсии и великолепно организованных управляющих операторов, поэтому они и не увидели преимуществ языка» Алгол 60. [4, c. 26][9]


В 1959 году был разработан Кобол (англ. COmmon Business Oriented Language – общий бизнес-ориентированный язык). Его главной особенностью был приближенность синтаксиса к английскому языку, разработчики ставили перед собой задачу: высказывание должно напоминать утвердительное предложение английского языка, а не математическое уравнение, как в Фортране. Также, в отличие от Фортрана, где зарезервированные слова отсутствовали, а задача распознавания ложилась на компилятор, в Кобол было зарезервировано более 300 слов. [1, c. 13][10] Благодаря легкости чтения, а также средствам работы со структурами данных и файлами, Кобол на два десятилетия занял нишу наиболее распространенного языка в применении к бизнесу. Однако, как отмечает Хендерсон, Кобол останется в стороне от основной линии развития языков программирования, которая прошла от Алгола к Паскаль, С и другим блочно-структурированным языкам. [6, c. 91][11]

Наконец, в 1960 году для работ по искусственному интеллекту был разработан язык Лисп (англ. LISt Processing language – язык обработки списков). Он создавался как язык функционального программирования, отличался простым синтаксисом и был первым из сохранившихся в использовании языков, где использовалось автоматическое управление памятью и сборка мусора. Лисп пережил десятилетия активного использования, в течение которых он вобрал в себя много свойств императивных языков и получил развитие в диалектах-потомках, таких, как Common Lisp (CL) и Scheme, сохранивших, тем не менее, основные концепции функционального программирования. [4, стр.73][12]

Основной чертой высокоуровневых языков стала абстракция, то есть введение смысловых конструкций, кратко описывающих такие структуры данных и операции над ними, описания которых на машинном коде (или другом низкоуровневом языке программирования) очень длинны и сложны для понимания. Принципы, заложенные такими языками, как Фортран, Кобол и Лисп, получили дальнейшее развитие в период 60х-70х годов 20 века, когда были разработаны основные парадигмы программирования. [3, с. 43-47][13] В 1968-1969 году разработан язык Паскаль. К его разработке привели исследования задачи организации и структурирования программного кода. Создатель языка, Никлаус Вирт, изначально возглавлял комитет, работавший над усовершенствованием Алгола. Язык Паскаль стал модернизированной и расширенной версией Алгола, предоставляя работать с различными типами данных, не поддерживавшихся Алголом, а также задавать новые типы данных посредством комбинирования встроенных типов. [6, c. 362][14] Паскаль получил широкое распространение, отчасти обусловленное инновационной технологией компилятора, позволявшего применять язык на широком спектре вычислительных устройств. которую два десятилетия спустя используют разработчики языка Java.