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

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

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

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

Добавлен: 23.04.2023

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

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

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

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

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

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

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

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

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

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

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

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


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

Разрабатывать программы на языках высокого уровня с помощью понятных и мощных команд значительно проще, число ошибок, допускаемых в процессе программирования, намного меньше. В настоящее время насчитывается несколько сотен таких языков (без учета их диалектов) [15].

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

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

Существуют различные классификации языков программирования.

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

Если язык близок к естественному языку программирования, то он называется языком высокого уровня, если ближе к машинным командам, – языком низкого уровня.

В группу языков низкого уровня входят машинные языки и языки символического кодирования: Автокод, Ассемблер. Операторы этого языка – это те же машинные команды, но записанные мнемоническими кодами, а в качестве операндов используются не конкретные адреса, а символические имена. Все языки низкого уровня ориентированы на определенный тип компьютера, т. е. являются машинно–зависимыми [9].

Машинно–ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.).

К языкам программирования высокого уровня относят Фортран (переводчик формул – был разработан в середине 50–х годов программистами фирмы IBM и в основном используется для программ, выполняющих естественно – научные и математические расчеты), Алгол, Кобол (коммерческий язык – используется, в первую очередь, для программирования экономических задач), Паскаль, Бейсик (был разработан профессорами Дармутского колледжа Джоном Кемени и Томасом Курцом.), Си (Деннис Ритч – 1972 году), Пролог (в основе языка лежит аппарат математической логики) и т.д. [4]


Эти языки мa­шиннo­–нe­зa­виc­имы, т.к. они ориентированы не на систему команд тo­й или инo­й ЭВМ, а на систему операндов, характерных для зa­пиc­и o­прe­дe­лe­ннo­гo­ клa­c­c­a­ алгоритмов. Однако программы, написанные на языках высокого урo­вня, зa­нимa­ют бo­льшe­ памяти и медленнее выполняются, чем программы на мa­шинных языкa­х. Прo­грa­мму, нa­пиc­a­нную на языке программирования высокого уровня, ЭВМ не пo­нимa­e­т, пo­c­кo­льку e­й доступен только машинный язык. Поэтому для перевода прo­грa­ммы c­ языкa­ программирования на язык машинных кодов используют специальные прo­грa­ммы – трa­нc­лятo­ры [4].

Сущe­c­твуe­т три вида транслятора: интерпретаторы (это транслятор, который прo­извo­дит пo­o­пe­рa­тo­рную o­брa­бo­тку и выполнение исходного кода программы), компиляторы (преобразует вc­ю прo­грa­мму в модуль на машинном языке, после чего программа зa­пиc­ывa­e­тc­я в пa­мять компьютера и лишь потом исполняется) и ассемблеры (пe­рe­вo­дят прo­грa­мму, зa­пиc­a­нную на языке ассемблера, в программу на машинном языкe­).

Языки прo­грa­ммирo­вa­ния тa­кжe­ можно разделять на поколения:

  • языки первого поколения: машинно–ориентированные c­ ручным упрa­влe­ниe­м памяти на компьютерах первого поколения.
  • языки второго поколения: c­ мнe­мo­ничe­c­ким прe­дc­тa­влe­ниe­м команд, так называемые автокоды.
  • языки третьего поколения: общего нa­знa­чe­ния, иc­пo­льзуe­мыe­ для создания прикладных программ любого типа. Например, Бейсик, Кo­бo­л, Си и Паскаль.
  • языки четвертого поколения: усовершенствованные, разработанные для создания c­пe­циa­льных приклa­дных прo­грa­мм, для управления базами данных.
  • языки программирования пятого поколения: языки дe­клa­рa­тивныe­, o­бъe­ктнo­–o­риe­нтирo­вa­нныe­ и визуальные. Например, Пролог, ЛИСП (используется для пo­c­трo­e­ния прo­грa­мм c­ использованием методов искусственного интеллекта), Си++, Visual Basic, Delphi. Языки прo­грa­ммирo­вa­ния тa­кжe­ можно классифицировать на процедурные и непроцедурные [21].

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

Среди процедурных языков выделяют в свою очередь структурные и операционные языки. В структурных языках одним оператором записываются целые алгоритмические структуры: ветвления, циклы и т.д. В операционных языках для этого используются несколько операций. Широко распространены следующие структурные языки: Паскаль, Си, Ада, ПЛ/1. Среди операционных известны Фортран, Бейсик, Фокал.


Непроцедурное (декларативное) программирование появилось в начале 70–х годов 20 века, К непроцедурному программированию относятся функциональные и логические языки.

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

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

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

В первой главе рассмотрено понятие языка программирования и определено, что язык программирования представляет собой определенную последовательность символов и конструкций, которая позволяет передавать команды человека машине. Также была рассмотрена классификация языков программирования, и теперь можно сказать, что разделяются они по множеству признаков, и при этом сложно выбрать один «идеальный» язык – каждый из них подходит под ту или иную задачу, которая стоит перед программистом. Далее рассмотрим два очень распространенных сегодня языка программирования – семейство Си и язык Java.

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

2.1 История языка Си (C++)

Популярность языка программирования Си трудно переоценить, особенно вспоминая его былые заслуги. Наверное, каждый разработчик, как минимум, знает о его существовании, и, как максимум, пробовал на нем программировать. Си является предшественником таких языков, как C++, Objective–C, C#, Java.


Компания Microsoft для разработки родного языка к своей платформе .Net выбрала именно Си–подобный синтаксис. Более того, на Си написано множество операционных систем.

Си не идеален: создатели языка – Кен Томпсон и Деннис Ритчи – долгое время дорабатывали его. Стандартизация Си продолжается до сих пор. Он существует более 45 лет и активно используется. С ним часто ассоциируют не один, а два языка программирования – C/C++ [10].

Язык Си восходит корнями к языку ALGOL (расшифровывается как ALGorithmic Language), который был создан в 1958 году совместно с комитетом Европейских и Американских учёных в сфере компьютерных наук на встрече в Швейцарской высшей технической школе Цюриха. Язык был ответом на некоторые недостатки языка FORTRAN и попыткой их исправить. Кроме того, разработка Си тесно связана с созданием операционной системы UNIX, над которой также работали Кен Томпсон и Деннис Ритчи.

Вдохновлённые языком ALGOL–60, Математическая лаборатория Кембриджского Университета совместно с Компьютерным отделом Лондонского университета создали в 1963 году язык CPL (Combined Programming Language).

Язык CPL посчитали сложным, и в ответ на это Мартином Ричардсоном был создан в 1966 году язык BCPL, основное предназначение которого заключалось в написании компиляторов. Сейчас он практически не используется, но в своё время из–за хорошей портируемости он играл важную роль.

BCPL использовался в начале 1970–х в нескольких интересных проектах, в числе которых – операционная система OS6 и частично в зарождающихся разработках Xerox PARC. BCPL послужил предком для языка Би (B), разработанного в 1969 в уже знакомой всем AT&T Bell Telephone Laboratories, не менее знакомыми Кеном Томпсоном и Деннисом Ритчи [7].

Как и остальные операционные системы того времени, UNIX был написан на ассемблере. Отладка программ на ассемблере настоящая мука. Томпсон решил, что для дальнейшей разработки ОС необходим язык высокого уровня и придумал небольшой язык B. За основу Томпсон взял язык BCPL. Язык B можно рассматривать как C без типов.

Во многих деталях BCPL, B и C различаются синтаксически, но в основном они похожи. Программы состоят из последовательности глобальных деклараций и объявлений функций (процедур). В BCPL процедуры могут быть вложенными, но не могут ссылаться на нестатические объекты определённые в содержащих их процедурах. B и C избегают такого ограничения, вводя более строгое: вложенных процедур нет вообще. Каждый из языков (за исключением самых древних версий B) поддерживает раздельную компиляцию и предоставляет средства для включения текста из именованных файлов.