Файл: Современные языки программирования (История возникновения и развития).pdf
Добавлен: 29.06.2023
Просмотров: 48
Скачиваний: 3
СОДЕРЖАНИЕ
Введение………………………………………………………………….. 3
Глава 1. Языки программирования……………………….. …………… 4
1.1. История возникновения и развития……………………………….. 4
1.2. Общие сведения……………………………………………………… 6
Глава 2. Обзор современных языков программирования…………… 19
2.1 Fortran (Фортран)……………………………………………………. 19
2.2 Basic (Бейсик)………………………………………………………… 20
2.3 «С»……………………………………………………………………. 22
2.4 С++……………………………………………………………………. 23
2.5 Java……………………………………………………………………. 24
2.6 С#...................................................................................................... 26
2.7 Pascal………………………………………………………………….. 26
2.8 LISP (Лисп)…………………………………………………………… 28
2.9 Prolog…………………………………………………………………. 29
2.10 Python……………………………………………………………….. 32
Заключение……………………………………………………………….. 34
Список использованной литературы…………………………………… 35
ВВЕДЕНИЕ
Развитие аппаратных компьютерных средств было основной задачей первых трех десятилетий компьютерной эры в связи с высокой стоимостью хранения и обработки данных. Увеличение производительности компьютера при значительном снижении стоимости привели успехи в микроэлектронике в 80-е годы. Таким образом, существовавшие ранее практически все ограничения на аппаратную часть оказались снятыми и оставшаяся часть ограничений приходится на программное обеспечение.
В настоящее время развития вычислительной техники существует огромное количество программ выполняющих разнообразные функции. Обычному пользователю совсем неважно, на каком языке программирования написана та или иная программа. Программисту же надо свой выбор учитывая многообразие существующих языков. Именно в связи с большим их количеством от специалиста требуется знать их отличия, преимущества и недостатки, понимать и грамотно использовать языки программирования как основной инструмент создания программного обеспечения.
Языки программирования отличается своим синтаксисом, операторами, а также областью применения, что и определяет выбор каждого из них. Кроме того, существующие языки продолжают изменяться в соответствии с развитием аппаратного обеспечения и операционных систем.
Объектом исследования послужили языки программирования и история их развития.
Целью курсовой работы является изучение классификации языков программирования, их развития и областей использования.
Задачи и цели курсовой работы:
- Посмотреть историю появления и развития языков программирования.
- Рассмотреть общие сведения, уровни языков программирования, их различия.
- Сделать обзор современных языков программирования.
Глава 1. Языки программирования
Язык программирования – это средство общения между человеком (пользователем) и компьютером (исполнителем).
1.1. История возникновения и развития
С древнейших времен люди пытались создать устройства, облегчающие и ускоряющие процессы вычислений. Создание компьютерной техники было положено в механических вычислительных машинах. В то же время начали разрабатываться принципы программирования. Исторически первой программой считается программа, написанная в 1843 г. Адой Лавлейс для машины Чарльза Бэббиджа[1].
Большой вклад в развитие информационных технологий внес английский математик Джордж Буль когда опубликовал монографию «Исследование законов мышления, на которых основаны математические теории логики и вероятностей», тем самым стал создателем «Булевой алгебры»[2]. На основе этой алгебры была построена теория релейно-контактных схем и конструирования сложных дискретных автоматов. Алгебра, являясь инструментом разработки и анализа сложных схем, а также инструментом оптимизации логических элементов, оказала влияние на развитие вычислительной техники.
Дальнейшее развитие вычислительных машин привело к замене механических частей электронными компонентами.
В результате создания программно-управляемых машин, появилась новая область прикладной математики – программирование. Как профессия и область науки, программирование возникло в 1950-х годах.
На начальной стадии развития ЭВМ человеку было необходимо составлять программы на языке, понятном компьютеру, в виде нулей и единиц. Это связано с физическими принципами работы электронных устройств ЭВМ. Каждая команда состояла из кода операций и адресов операндов, выраженных в виде различных сочетаний единиц и нулей. Такое представление команд называлось машинным кодом.
Как показала практика, машинный код оказался очень неудобным, т.к. необходимо было знать структуру ЭВМ и была велика вероятность сделать ошибку в последовательности нулей и единиц. Также для написания даже небольшой программы необходимо было ввести огромное количество кода, что требовало от программиста много времени, труда и внимания.
Сложности использования машинного кода привели к созданию мнемонического языка программирования, в котором цифровой код операции заменили мнемоническим кодом. Такой язык программирования назвали «ассемблер». Ассемблер упростил написание кода, но при этом потребовалось создать транслятор, который переводил бы мнемокод в машинный, понятный ЭВМ. Кроме того, различные типы процессоров имеют разные наборы команд, а значит и мнемокод код для каждого процессора должен быть свой.
В конце 1940-х гг. Дж. Фон Нейман, Г. Гольдстайн и А. В. Беркс разработали логические схемы вычислительных машин. Особый вклад в эту работу внес Джон фон Нейман – американский математик, принимавший участие в создании ЭНИАК (первый электронный компьютер общего назначения).
Следующим этапом развития программирования стало создание языка высокого уровня, который позволяет освободить программиста от учета технических особенностей архитектуры ЭВМ. Программы, написанные с использованием языка высокого уровня легче контролировать, изменять, они более понятны для других программистов. Такая эволюция в области программирования позволила создавать программы, которые можно переносить с одной архитектурой процессора на другую с минимальными изменениями.
С момента создания программируемых машин было создано несколько тысяч различных языков программирования, и каждый год их количество растет. Некоторые из них используются большинством программистов, часть из них известна только разработчикам и узкому кругу специалистов. А какие-то так и остаются известны только своим создателям.
Профессиональные программисты имеют в своем запасе знание нескольких языков, каждый из которых используется в зависимости от поставленной задачи.
1.2. Общие сведения.
Языки программирования — это формальные искусственные языки. Как и естественные языки, они имеют алфавит, словарный запас, грамматику и синтаксис, а также семантику.
Алфавит — разрешенный к использованию набор символов, с помощью которого могут быть образованы слова и величины данного языка.
Словарный состав или лексика языка - это совокупность употребляемых в нем слов, т.е. правильных слов данного языка.
Грамматика - это конечная система правил, определяющих язык.
Грамматика определяет способы построения изменения и сочетания слов.
Синтаксис — система правил, определяющих допустимые конструкции языка программирования из букв алфавита.
Семантика - система правил однозначного толкования каждой языковой конструкции, позволяющих производить процесс обработки данных.
С того момента, когда программы перестали создавать с использованием машинных кодов, появилась потребность перевода команд языков программирования в понятный технике код. Эту функцию стали выполнять программы, называемые трансляторами.
Транслятор (англ. translator - переводчик) - это программа-переводчик. Она преобразует программу, написанную на одном из языков программирования, в бинарный файл программы, состоящей из машинных команд, либо непосредственно выполняет действия программы.
Существуют следующие виды трансляторов:
- компиляторы;
- интерпретаторы;
- эмуляторы.
Компилятор - это транслятор текста на машинный язык, который считывает исходный текст целиком, оценивает текст в соответствии с синтаксической конструкцией языка и переводит на машинный язык. Таким образом данный вид транслятора создает бинарный (исполняемый, библиотечный, объектный) файл, который исполняется системой без участия компилятора.
Интерпретаторы, в отличие от компиляторов, не создают исполняемый файл, а выполняют команды написанные на языке программирования построчно, что снижает скорость выполнения программы, но позволяет остановить выполнение и, к примеру, посмотреть значения переменных. Это свойство транслятора облегчает изменение, исправление и отладку программы.
Эмулятор - функционирующее в некоторой целевой операционной системе и аппаратной платформе программное и/или аппаратное средство, предназначенное для исполнения программ, изготовленных в другой операционной системе или работающих на отличном от целевого аппаратном обеспечении, но позволяющее осуществлять те же самые операции в целевой среде, что и в имитируемой системе. К эмулирующим языкам относятся такие системы, как Java, .Net, в которых на этапе создания программы производится ее компиляция в специальный байт-код и получение бинарного файла, пригодного для исполнения в любой операционной и аппаратной среде, а исполнение полученного байт-кода производится на целевой машине с помощью простого и быстрого интерпретатора (виртуальной машины).
Трансляторы, в общем случае, содержат несколько блоков.
Лексический блок выполняет лексический анализ, когда последовательность входных символов на исходном языке преобразуется в последовательность лексем. Лексема - Минимальная единица языка, имеющая значение: идентификатор, буквенная константа, знак операции, разделители.
Синтаксический блок выполняет синтаксический анализ с целью получения из цепочки лексем цепочки атомов. Атом – элементарная операция; последовательность атомов отражает порядок выполнения операций.
Семантический блок обрабатывает полученные синтаксическим блоком конструкции с целью установления их семантики (привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д.).
Далее происходит преобразование цепочки атомов в цепочки команд машинного языка, генератором кода. Генератор кода является машинно-зависимым блоком транслятора.
Еще один блок, не являющийся обязательным – блок оптимизации. Он применяет различные методы преобразования кода для улучшения его характеристик и повышения эффективности. Оптимизация может быть на разных этапах и уровнях, например, над конечным машинным кодом или промежуточным кодом.
Трансляторы, как представители программного обеспечения являются переводчиками языка понятного человеку на язык понятный процессорной технике, в связи с чем они не должны содержать ошибок, которые могут привести к ошибкам в создаваемых программах и, соответственно, неправильной работе как программ, так и оборудования.
Программирование нацелено на обслуживание пользователя. Это значит, программы должны быть дружественными по отношению к пользователю.
Программы должны быть:
- надежными (содержать как можно меньше ошибок);
- устойчивыми (сохранять работоспособность в неблагоприятных условиях эксплуатации, ошибок пользователя, перегрузок, ограниченности ресурсов, сбоев/отказов аппаратуры, ограниченности ресурсов);
- заботливыми (уметь объяснять ошибки пользователя и свои действия).
Несмотря на то, что аппаратура современного компьютера очень сложна, считается что сложность программного обеспечения на порядок сложнее. Известнейший авторитет, американский ученый в области теории вычислительных систем Фредерик Брукс, утверждает: «Сложность программного обеспечения является существенным, а не второстепенным свойством»[3].
Учитывая многообразие создаваемых языков программирования, можно выделить несколько причин, по которым немногие языки становятся популярными и широко используются. [4]
- Ясность, простота и единообразие языка. Язык программирования должен стать помощником программиста задолго до начала кодирования. Он должен предоставить ясный, простой и единообразный набор понятий, которые могут быть использованы в качестве базисных элементов при разработке алгоритмов. Синтаксис языка влияет на удобство и простоту написания и тестирования программы, а в дальнейшем способствует ее пониманию и модификации. Хороший язык характеризуется тем, что конструкции, обозначающие различные понятия должны и выглядеть совершенно по-разному, то есть семантические отличия должны отражаться в синтаксисе.
- Ортогональность, т.е. осмысленность любых возможных комбинаций любых языковых конструкций. Ортогональность облегчает изучение языка и написание программы, т.к. язык имеет мало исключений и случаев, когда требуется запоминание. Но ортогональность имеет и значительное отрицательное свойство – программа не будет выдавать ошибки при компиляции, когда содержит комбинацию возможностей, которые логически не согласованы или неэффективны при выполнении.
- Удобство верификации программы. Основным требованием является надежность программы, написанной на том или ином языке. Правильность выполнения программой своих функций проверяется разными методами, такими как чтение текста и исправление ошибок, выполнение с тестовыми исходными данными и сравнением полученных выходных результатов с соответствии со спецификацией и т.д.
- Естественность для приложений. Является одной из важнейших причин распространения того или иного языка программирования. Язык, соответствующий определенному классу приложений, может значительно облегчить создание отдельных программ в конкретной области.
- Поддержка абстракций. В идеале, язык должен определять структуры данных, типы данных и операции и поддерживать их как самостоятельные абстракции. Важной задачей программиста является разработка конкретных абстракций для решения задачи и их последующая реализация с использованием базовых возможностей реального языка программирования. В этом случае программист сможет использовать их в других частях программы, зная только их абстрактные свойства и не вникая в их фактическую реализацию.
- Среда программирования. Наличие подходящей среды программирования может сделать технически слабый язык более легким в применении, нежели сильный язык при незначительной внешней поддержке. Специализированные текстовые редакторы и тестирующие пакеты, которые отражают специфику языка и работы с ним, могут сильно ускорить написание и тестирование программ.
- Переносимость программ. Одним из важнейших критериев для многих программных проектов является переносимость разработанных программ с компьютера, на котором они были написаны, на другие компьютерные системы. Удобным средством создания переносимых программ являются широкодоступные языки, определение которых не зависит от возможностей различных машин.
- Стоимость использования является существенным компонентом оценки языка программирования и складывается из нескольких составляющих: