Основные Концепции Языков Программирования

Содерж.: Вводные замечания; Обзор основных языков программирования; Описание синтаксиса и семантики; Имена, связывание, проверка типов и области видимости; Типы данных; выражения и операторы присваивания; Структуры управления на уровне операторов; Подпрограммы; Реализация. Книга, ставшая бестселлером в США, посвящена всестороннему обсуждению основных концепций языков программирования. Автор описывает фундаментальные понятия программирования на примере вопросов разработки различных языковых конструкций, подвергая критическому анализу их.

Стандартизация языков программирования Язык программирования может быть представлен в виде набора спецификаций, определяющих его синтаксис и семантику. Для многих широко распространённых языков программирования созданы международные стандарты. Специальные организации проводят регулярное обновление и публикацию спецификаций и формальных определений соответствующего языка. В рамках таких комитетов продолжается разработка и модернизация языков программирования и решаются вопросы о расширении или поддержке уже существующих и новых языковых конструкций. Типы данных Современные цифровые компьютеры обычно являются двоичными и данные хранят в двоичном (бинарном) коде (хотя возможны реализации и в других системах счисления). Эти данные как правило отражают информацию из реального мира (имена, банковские счета, измерения и др.), представляющую высокоуровневые концепции. Особая система, по которой данные организуются в программе, - это система типов языка программирования; разработка и изучение систем типов известна под названием теория типов.

Языки могут быть классифицированы как системы со статической типизацией и языки с динамической типизацией. Статически-типизированные языки могут быть в дальнейшем подразделены на языки с обязательной декларацией, где каждая переменная и объявление функции имеет обязательное объявление типа, и языки с выводимыми типами. Иногда динамически-типизированные языки называются латентно-типизированными. Структуры данных Системы типов в языках высокого уровня позволяют определять сложные, составные типы, так называемые структуры данных. Как правило, структурные типы данных образуются как декартово произведение базовых (атомарных) типов и ранее определённых составных типов. Основные структуры данных (списки, очереди, хеш-таблицы, двоичные деревья и пары) часто представлены особыми синтаксическими конструкциями в языках высокого уровня.

  • Составной оператор. Составной оператор – последовательность некоторых операторов.
  • Основные концепции языков программирования, механизмы типизации данных. Описание языков.

Такие данные структурируются автоматически. Семантика языков программирования Существует несколько подходов к определению семантики языков программирования.

Наиболее широко распространены разновидности следующих трёх: операционного, денотационного (математического) и деривационного (аксиоматического). При описании семантики в рамках операционного подхода обычно исполнение конструкций языка программирования интерпретируется с помощью некоторой воображаемой (абстрактной) ЭВМ. Деривационная семантика описывает последствия выполнения конструкций языка с помощью языка логики и задания пред- и постусловий. Денотационная семантика оперирует понятиями, типичными для математики - множества, соответствия, а также суждения, утверждения и др. Язык программирования строится в соответствии с той или иной базовой моделью вычислений и парадигмой программирования. Несмотря на то, что большинство языков ориентировано на императивную модель вычислений, задаваемую фоннеймановской архитектурой ЭВМ, существуют и другие подходы. Можно упомянуть языки со стековой вычислительной моделью (Forth, Factor, Postscript и др.), а также функциональное (Лисп, Haskell, ML и др.) и логическое программирование (Пролог) и язык Рефал, основанный на модели вычислений, введённой советским математиком А.А.

В настоящее время также активно развиваются проблемно-ориентированные, декларативные и визуальные языки программирования. Компилируемые и интерпретируемые языки Языки программирования могут быть разделены на компилируемые и интерпретируемые. Программа на компилируемом языке при помощи специальной программы компилятора преобразуется (компилируется) в набор инструкций для данного типа процессора (машинный код) и далее записывается в исполнимый модуль, который может быть запущен на выполнение как отдельная программа. Другими словами, компилятор переводит исходный текст программы с языка программирования высокого уровня в двоичные коды инструкций процессора. Если программа написана на интерпретируемом языке, то интерпретатор непосредственно выполняет (интерпретирует) исходный текст без предварительного перевода. При этом программа остаётся на исходном языке и не может быть запущена без интерпретатора. Можно сказать, что процессор компьютера - это интерпретатор машинного кода.

Основные Концепции Языков Программирования

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

Так, для любого традиционно компилируемого языка, как, например, Паскаль, можно написать интерпретатор. Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макросов).

Для любого интерпретируемого языка можно создать компилятор - например, язык Лисп, изначально интерпретируемый, может компилироваться без каких бы то ни было ограничений. Создаваемый во время исполнения программы код может так же динамически компилироваться во время исполнения. Интерпретируемые языки обладают некоторыми специфическими дополнительными возможностями (см.

Выше), кроме того, программы на них можно запускать сразу же после изменения, что облегчает разработку. Программа на интерпретируемом языке может быть зачастую запущена на разных типах машин и операционных систем без дополнительных усилий. Однако интерпретируемые программы выполняются заметно медленнее, чем компилируемые, кроме того, они не могут выполняться без дополнительной программы-интерпретатора. Современные языки программирования рассчитаны на использование ASCII, то есть доступность всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF). Ранние языки, возникшие в эпоху 6-битных символов, использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + -.

/., $ ': Заметным исключением является язык APL, в котором используется очень много специальных символов. Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах.

В СССР существовали языки, где все ключевые слова писались русскими буквами, но большую популярность подобные языки не завоевали (исключение составляет. Встроенный язык программирования 1С: Предприятие). Расширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других - арабскими, а третьих - китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения (Delphi 2006, C#, Java) поддерживают Unicode. Процедурные языки программирования Процедурное (императивное) программирование является отражением архитектуры традиционных ЭВМ, которая была предложенафон Нейманом в 1940-х годах. Теоретической моделью процедурного программирования служит алгоритмическая система под названием Машина Тьюринга.

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

Используя процедурный язык, программист определяет языковые конструкции для выполнения последовательности алгоритмических шагов Виды современных языков программирования Язык программирования C Си (англ. C) — компилируемый статически типизированный язык программирования общего назначения. Поддерживает разные парадигмы программирования, но, в сравнении с его предшественником — языком Си, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования. Название «Си» происходит от Си, в котором унарный оператор обозначает инкремент переменной.В 1990-х годах язык стал одним из наиболее широко применяемых языков программирования общего назначения. При создании Си стремились сохранить совместимость с языком Си.

Основные

Большинство программ на Си будут исправно работать и с компилятором Си. Си имеет синтаксис, основанный на синтаксисе Си.

Себеста основные концепции языков программирования

Языки программирования существуют уже более полувека, однако, развитие информационных технологий постоянно требует совершенствования средств управления, среди которых умение составлять программы, играет далеко не последнюю роль. Себеста, Основные концепции языков программирования. «Вильямс», Москва, Санкт-Петербург, Киев, 2001 г., 672. Владение основными концепциями языка программирования — непременный атрибут профессионального уровня специалиста. Определенную помощь в этом может оказать книга Роберта Себесты, посвященная рассмотрению принципиальных вопросов развития наиболее известных языков программирования. Немаловажным ее достоинством является исторический контекст — от «алгоритмического языка программирования» Конрада Цузе до современных языков. Пятое издание книги, выпущенное Addison Wesley и переведенное на русский язык издательским домом «Вильямс», значительно отличается от предыдущих.

Роберт У. Себеста. Основные Концепции Языков Программирования Pdf

Бросается в глаза отсутствие специальной главы об объектно-ориентированных языках. Вместо нее появилась глава о языковой поддержке объектно-ориентированного программирования. Как утверждает автор, такой взгляд обозначает начало следующей стадии развития императивных языков. Кроме того, в книге уделено внимание Java и функциональным языкам, например вместо запатентованного языка Miranda, их концепция представлена с помощью общедоступного языка Haskell. Изменения коснулись и других глав: расширен раздел, посвященный аксиоматической и денотационной семантике, удалены некоторые материалы по Модула-2, в частности, о сопрограммах и поддержке абстрактных типов данных в обмен на включение в книгу многочисленных текущих изменений в развивающихся языках. Автор рассматривает свою книгу, прежде всего, как учебное пособие и дает рекомендации преподавателю по использованию ее материала для построения различных курсов, но, разумеется, она может быть рекомендована и для самостоятельного изучения. Однако для отечественного читателя данное издание обладает одним недостатком — объяснимым, но от этого не менее прискорбным отсутствием ссылок на русскоязычные публикации.

Роберт У. Себеста. Основные Концепции Языков Программирования

Чтобы у читателя не складывалось впечатление об истории языков, как о написанной во времена железного занавеса, редактору следовало бы озаботиться о соответствующих дополнениях, по крайней мере, к списку литературы. Книга состоит из пятнадцати глав, включающих материалы по собственно языкам, их общим свойствам, отношению к данным и видам обработки. В двух первых обсуждаются общие представления о языках программирования, побудительные мотивы для изучения концепций языков и областей применения программирования от научных приложений до специализированных. Предлагается четыре критерия оценки языков: читабельность, легкость создания программ, надежность и стоимость. Естественно для концепции языков важны их категории, компромиссы при разработке, методы реализации (компиляция, чистая интерпретация и смешанная система), а также среда программирования. Обзор основных языков можно рассматривать как часть книги, имеющую самостоятельный интерес.

Себеста Основные Концепции Языков Программирования Pdf

В ней описаны алгоритмический язык Plankalkul и множество других, дающих убедительную информацию для понимания концепции. Следующим шагом в постижении концепции является знакомство с описанием синтаксиса и семантики языков — здесь имеются материалы по синтаксису и формальным методам его описания, а также по синтаксическому анализу. Не обойдено вниманием использование в языках атрибутивной грамматики и динамической семантики. Дальнейший материал книги связан с семантическими понятиями: имена, связывание, проверка типов и области видимости, а также типы данных.

Рассматриваются семантические правила в виде выражений и операторов присваивания, описывается структура управления, реализуемая в языках программирования. Как реагируют языки на возникновение подпрограмм и их реализацию, описываемую с помощью общей семантики вызовов, возвратов и других способов, показано в двух главах, а материал отдельной главы целиком посвящен появлению абстрактных типов данных от истоков до современности. Следующий шаг в понимании концепции языков автор усматривает в поддержке объектно-ориентированного программирования и в соответствующей главе прослеживает ее во многих языках от Smalltalk до Eiffel. Развитие многопроцессорных архитектур не могло не потребовать адекватной реакции со стороны языков программирования: поддержка параллельности и синхронизации процессов с помощью семафоров, мониторов, передачи сообщений, потоков, управления на уровне операторов и др. Иллюстрации к изложению даются с использованием возможностей Ada 95, Java и High-Performance FORTRAN. К концептуальным понятиям в книге отнесены возможности языков по обработке исключительных ситуаций. В качестве иллюстрации выбраны реализации обработки исключительных ситуаций, принятые в языках PL/1, Ada, C и Java.

Завершают книгу главы о функциональных языках и языках логического программирования, где представлены LISP, Scheme, COMMON LISP, ML и Haskell, а также Prolog. В книге помещен также большой список литературы и предметный указатель, а также резюме в конце каждой главы и упражнения. Но, к сожалению, для многих читателей работа с приложениями и упражнениями возможна только по получении электронного учебника (правда, на ftp-сервере по адресу имеется набор диапозитивов к лекциям из первых 13 глав книги). Поделитесь материалом с коллегами и друзьями.