Автор работы: Пользователь скрыл имя, 08 Декабря 2013 в 17:01, реферат
Язы́к программи́рования — формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических,синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением.
Язы́к программи́рования — формальная
Со времени создания первых программируемых машин человечество придумало более двух с половиной тысяч языков программирования (включая абстрактные и нестандартные языки). Каждый год их число увеличивается. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования.
Язык программирования предназначен для написания компьютерных программ, которые применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными устройствами.
Язык программирования отличается от естественных языков тем, что предназначен для передачи команд и данных от человека к компьютеру, в то время как естественные языки используются для общения людей между собой. Можно обобщить определение «языков программирования» — это способ передачи команд, приказов, чёткого руководства к действию; тогда как человеческие языки служат также для обмена информацией.
Ранние этапы развития
Можно сказать, что первые
языки программирования возникали
еще до появления современных
электронных вычислительных машин:
уже в XIX веке были изобретены устройства,
которые можно с долей условности назвать
программируемыми — к примеру, механические пианино и ткацкие станки. Для управления ими использовались
наборы инструкций, которые в рамках современной
классификации можно назвать предметно-
В это же время, в 1940-е годы,
появились электрические
Программисты ЭВМ начала 1950-х годов, в особенности таких, как UNIVAC и IBM 701, при создании программ пользовались непосредственно машинным языком — то есть писали на языке первого
поколения. Вскоре на смену такому методу
программирования пришло применение языков
второго поколения, также ограниченных
спецификациями конкретных машин, но более простых для запоминания.
Они традиционно известны под наименованием языков ассемблера. Позднее, к концу десятилетия,
языки второго поколения были усовершенствованы:
в них появилась поддержка макрокоманд. Одновременно с этим начали
появляться уже и языки третьего поколения —
такие, как Фортран, Лисп и Кобол. Языки программирования этого
типа более абстрактны и универсальны,
не имея жесткой зависимости от конкретной аппаратной платформы и используемых на ней машинных
команд. Обновленные версии перечисленных
языков до сих пор имеют хождение в разработке
программного обеспечения, и каждый из
них оказал определенное влияние на последующее
развитие языков программирования[5]. Тогда же, в конце 1950-х годов,
появился Алгол, также послуживший основой
для ряда дальнейших разработок в этой
сфере. Необходимо заметить, что на формат
и применение ранних языков программирования
в значительной степени влияли интерфейсные ограничени
Совершенствование[править | пр
В период 1960-х — 1970-х годов были разработаны основные парадигмы языков программирования, используемые в настоящее время, хотя во многих аспектах этот процесс представлял собой лишь улучшение идей и концепций, заложенных еще в первых языках третьего поколения.
Язык APL оказал влияние на функциональное программирование и стал первым языком, поддерживавшим обработку массивов[7].
Язык ПЛ/1 (NPL) был разработан в 1960-х годах как объединение лучших черт Фортрана и Кобола.
Язык Симула, появившийся примерно в это
же время, впервые включал поддержку объектно-
В период с 1969 по 1973 годы велась разработка языка Си, популярного и по сей день.
В 1972 году был создан Пролог — первый язык логического программирования.
В 1978 году в языке ML была реализована расширенная система полиморфной типизации, положившая начало типизированным языкам функционального программирования.
Каждый из этих языков породил по семейству потомков, и большинство современных языков программирования в конечном счете основано на одном из них.
Кроме того, в 1960 — 1970х годах активно велись споры о необходимости поддержки структурного программирования в тех или иных языках[9]. В частности, голландский специалист Э. Дейкстра выступал в печати с предложениями о полном отказе от использования инструкций GOTO во всех высокоуровневых языках. Развивались также приемы, направленные на сокращение объема программ и повышение продуктивности работы программиста и пользователя; в итоге наборы инструкций на языках четвертого поколения уже требовали существенно меньшего количества перфокарт для их записи, нежели аналогичные программы на языках третьего поколения.
Объединение и развитие.
В 1980-е годы наступил период, который можно
условно назвать временем консолидации.
Язык С++ объединил в себе черты объектно-ориентированного
и системного программирования, правительство США стандартизир
Важной тенденцией, которая наблюдалась в разработке языков программирования для крупномасштабных систем, было сосредоточение на применении модулей — объемных единиц организации кода. Хотя некоторые языки, такие, как ПЛ/1, уже поддерживали соответствующую функциональность, модульная система нашла свое отражение и применение также и в языках Модула-2, Оберон,Ада и ML. Часто модульные системы объединялись с конструкциями обобщенного программирования[11].
В 1990-х годах в связи с активным развитием Интернета распростра
В настоящее время развитие языков программирования идет в направлении повышения безопасности и надежности, создания новых форм модульной организации кода и интеграции сбазами данных.
Стандартизация языков программирования[править | пра
Язык программирования может быть представлен в виде набора спецификаций, определяющих его синтаксис и семантику.
Для многих широко распространённых языков программирования созданы международные стандарты. Специальные организации проводят регулярное обновление и публикацию спецификаций и формальных определений соответствующего языка. В рамках таких комитетов продолжается разработка и модернизация языков программирования и решаются вопросы о расширении или поддержке уже существующих и новых языковых конструкций.
Типы данных[править | править исходный текст]
Современные цифровые компьютеры являются двоичными и данные хранят в двоичном (бинарном) коде (хотя возможны реализации и в других системах счисления). Эти данные как правило отражают информацию из реального мира (имена, банковские счета, измерения и др.), представляющую высокоуровневые концепции.
Особая система, по которой данные организуются в программе, — это система типов языка программирования; разработка и изучение систем типов известна под названием теория типов. Языки могут быть классифицированы как системы со статической типизацией и языки с динамической типизацией.
Статически-типизированные
языки могут быть в дальнейшем
подразделены на языки с обязательной
декларацией, где каждая переменная и
объявление функции имеет обязательное
объявление типа, и языки с выводимыми
типами. Иногда динамически-типизированные
языки называются латентно-
Структуры данных.
Системы типов в языках высокого уровня позволяют определять сложные, составные типы, так называемые структуры данных. Как правило, структурные типы данных образуются какдекартово произведение базовых (атомарных) типов и ранее определённых составных типов.
Основные структуры данных
(списки, очереди, хеш-таблицы, двоичные
деревья и пары) часто представлены
особыми синтаксическими
Семантика языков программирования
Существует несколько подходов к определению семантики языков программирования.
Наиболее широко распространены разновидности следующих трёх: операционного, деривационного (аксиоматического) и денотационного (математического).
При описании семантики в рамках операционного подхода обычно исполнение конструкций языка программирования интерпретируется с помощью некоторой воображаемой (абстрактной) ЭВМ.
Деривационная семантика описывает последствия выполнения конструкций языка с помощью языка логики и задания пред- и постусловий.
Денотационная семантика оперирует понятиями, типичными для математики — множества, соответствия, а также суждения, утверждения и др.
Парадигма программирования[править | пра
Язык программирования строится в соответствии с той или иной базовой моделью вычислений и парадигмой программирования.
Несмотря на то, что большинство
языков ориентировано на императивную модель вычислений, задаваемую фон-неймановской
архитектурой ЭВМ, существуют и другие
подходы. Можно упомянуть языки со стековой
вычислительной моделью (Форт, Factor, PostScript и др.), а также функциональное (Лисп, Ha
В настоящее время также
активно развиваются проблемно-
Способы реализации языков[править | править исходный текст]
Языки программирования могут
быть реализованы как компилируемые
Программа на компилируемом
языке при помощи компилятора (
Если программа написана
на интерпретируемом языке, то интерпретатор непосредствен
Разделение на компилируемые и интерпретируемые языки является условным. Так, для любого традиционно компилируемого языка, как, например, Паскаль, можно написать интерпретатор. Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макросов).
Для любого интерпретируемого
языка можно создать
Как правило, скомпилированные программы выполняются быстрее и не требуют для выполнения дополнительных программ, так как уже переведены на машинный язык. Вместе с тем, при каждом изменении текста программы требуется её перекомпиляция, что замедляет процесс разработки. Кроме того, скомпилированная программа может выполняться только на том же типе компьютеров и, как правило, под той же операционной системой, на которую был рассчитан компилятор. Чтобы создать исполняемый файл для машины другого типа, требуется новая компиляция.
Интерпретируемые языки обладают некоторыми специфическими дополнительными возможностями (см. выше), кроме того, программы на них можно запускать сразу же после изменения, что облегчает разработку. Программа на интерпретируемом языке может быть зачастую запущена на разных типах машин и операционных систем без дополнительных усилий.
Однако интерпретируемые программы выполняются заметно медленнее, чем компилируемые, кроме того, они не могут выполняться без программы-интерпретатора.
Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету» (Just-in-time compilation, JIT). Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine, JVM), для C# — Common Language Runtime.