Стандарты языков программирования это + видео обзор

Содержание
  1. Язык программирования. Общие принципы построения и использования языков программирования.
  2. Стандарты языков программирования.
  3. Лямбда-исчисление. Аппликация, абстракция, редукция, преобразование.
  4. Стандарты языков программирования
  5. курсовая.doc
  6. Типы данных
  7. Современные цифровые компьютеры обычно являются двоичными, данные хранят в двоичном (бинарном) коде (хотя возможны реализации и в других системах счисления). Эти данные, как правило, отражают информацию из реального мира (имена, банковские счета, измерения и др.), представляющую высокоуровневые концепции. Особая система, по которой данные организуются в программе, — это система типов языка программирования; разработка и изучение систем типов известна под названием теория типов. Языки могут быть классифицированы как системы со статической типизацией и языки с динамической типизацией. Статически-типизированные языки могут быть в дальнейшем подразделены на языки с обязательной декларацией, где каждая переменная и объявление функции имеет обязательное объявление типа, и языки с выводимыми типами. Иногда динамически-типизированные языки называются латентной типизацией.
  8. Структуры данных. Системы типов в языках высокого уровня позволяют определять сложные, составные типы, так называемые структуры данных. Как правило, структурные типы данных образуются как декартово произведение базовых (атомарных) типов и ранее определённых составных типов. Основные структуры данных (списки, очереди, хеш-таблицы, двоичные деревья и пары) часто представлены особыми синтаксическими конструкциями в языках высокого уровня. Такие данные структурируются автоматически.
  9. Семантика языков программирования
  10. Существует несколько подходов к определению семантики языков программирования. Наиболее широко распространены разновидности следующих трёх: операционного, денотационного (математического) и деривационного (аксиоматического). При описании семантики в рамках операционного подхода обычно исполнение конструкций языка программирования интерпретируется с помощью некоторой воображаемой (абстрактной) ЭВМ.
  11. Парадигма программирования
  12. Язык программирования строится в соответствии с той или иной базовой моделью вычислений и парадигмой программирования. Несмотря на то, что большинство языков ориентировано на императивную модель вычислений, задаваемую фон-неймановской архитектурой ЭВМ, существуют и другие подходы. Можно упомянуть языки со стековой вычислительной моделью (Forth, Factor, Postscript и др.), а также функциональное (Лисп, Haskell, ML и др.) и логическое программирование (Пролог) и язык Рефал, основанный на модели вычислений, введённой советским математиком А. А. Марковым-младшим.
  13. Используемые символы
  14. Развитие языков программирования
  15. Парадигмы программирования
  16. Стандартизация языков программирования
  17. Среда проектирования
  18. Эволюция современных языков программирования
  19. Сопоставительный анализ
  20. Цикл с параметром
  21. Структура типа «запись»
  22. Синтаксис и семантика
  23. Стандарты языков программирования
  24. Содержание семантического и синтаксического стандартов языка
  25. Компиляторы с общей семантической базой
  26. Язык будущего
  27. «Область пересечения», цикл с параметром
  28. «Область объединения», директива define в Си
  29. «Область объединения», тип «множество» в Паскале
  30. Набор конструкций языка программирования будущего
  31. Структурный редактор
  32. Программа — не текст, а набор конструкций
  33. Преимущества структурного редактора
  34. Псевдотекст
  35. Перспективы семантического подхода
  36. Компилятор «Странник Модула-Си-Паскаль»
  37. Видео

Язык программирования. Общие принципы построения и использования языков программирования.

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

Язы́к программи́рования — формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением.

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

Основной принцип: Чем выше уровень абстракции, тем больше деталей скрыто от программиста. Но в то же время снижается детализация реализация.

Стандарты языков программирования.

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

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

Стандарты языков программирования: 1. Частный стандарт Определяется командой разработчиков ЯП и имеет авторские права.

Лямбда-исчисление. Аппликация, абстракция, редукция, преобразование.

Это простейший из семейства прототипных языков программирования, чистое λ-исчисление, термы которого, называемые также объектами (обами), или λ-термами, построены исключительно из переменных применением аппликации и абстракции. Изначально наличия каких-либо констант не предполагается.

Лямбда-исчисление: В основе лежит 2 операции: Аппликация: Означает применение или вызов функции по отношению к заданному значению Стандарты языков программирования это)

где Стандарты языков программирования это— алгоритм, вычисления по заданному входному значению Стандарты языков программирования это

Абстракция: Строит функции по заданным выражением Стандарты языков программирования это

Редукция: Поскольку выражение Стандарты языков программирования этообозначает функцию, ставящую в соответствие каждому Стандарты языков программирования этозначение Стандарты языков программирования это, то для вычисления выражения

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

Стандарты языков программирования это.

Источник

Стандарты языков программирования

Автор работы: Пользователь скрыл имя, 05 Февраля 2013 в 18:50, курсовая работа

Краткое описание

Цель : проанализировать стандарты языков программирования.
Задачи: 1) Рассмотреть классификацию языков программирования.
2) Рассмотреть развитие языков программирование.
3) Изучить стандарты языков программирования.

Содержание работы

Введение
Язык программирования.
Стандартизация языков программирования.
Развитие языков программирования.
2. Стандарт на языки программирования PLC: IEC 1131-3 (МЭК 1131-3)
2.1 История и общая информация стандарта PLC: IEC 1131-3 (МЭК 1131-3).
2.2 Разработка стандарта PLC: IEC 1131-3 (МЭК 1131-3).
2.3 Польза и важность стандарта PLC: IEC 1131-3 (МЭК 1131-3).
3.3 Будущее стандарта PLC: IEC 1131-3 (МЭК 1131-3).
3. Стандарты языков программирования
3.1 ГОСТ 22558-89 Язык программирования Кобол.
3.2 ГОСТ 23057-78 Язык программирования. Базисный Фортран.
3.3 ГОСТ 27787-88 Язык программирования Бейсик.
3.4 ГОСТ 27831-88 Язык программирования АДА.
3.5 ГОСТ 28140-89 Системы обработки информации. Язык программирования Паскаль.

курсовая.doc

Федеральное агентство по образованию

ГОУ ВПО «Шадринский государственный педагогический институт»

Кафедра прикладной информатики

Курсовая работа по информатике на тему:

«Стандарты языков программирования».

Выполнил: студент 4 курса факультета информатики Феденёв Андрей Викторович.

Проверил: Пирогов Владислав Юрьевич.

2. Стандарт на языки программирования PLC: IEC 1131-3 (МЭК 1131-3)

2.1 История и общая информация стандарта PLC: IEC 1131-3 (МЭК 1131-3).

2.2 Разработка стандарта PLC: IEC 1131-3 (МЭК 1131-3).

2.3 Польза и важность стандарта PLC: IEC 1131-3 (МЭК 1131-3).

3.3 Будущее стандарта PLC: IEC 1131-3 (МЭК 1131-3).

3. Стандарты языков программирования

3.1 ГОСТ 22558-89 Язык программирования Кобол.

3.2 ГОСТ 23057-78 Язык программирования. Базисный Фортран.

3.3 ГОСТ 27787-88 Язык программирования Бейсик.

3.4 ГОСТ 27831-88 Язык программирования АДА.

3.5 ГОСТ 28140-89 Системы обработки информации. Язык программирования Паскаль.

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

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

Цель : проанализировать стандарты языков программирования.

Задачи: 1) Рассмотреть классификацию языков программирования.

2) Рассмотреть развитие языков программирование.

3) Изучить стандарты языков программирования.

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

Типы данных

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

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

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

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

Деривационная семантика описывает последствия выполнения конструкций языка с помощью языка логики и задания пред- и постусловий. Денотационная семантика оперирует понятиями, типичными для математики — множества, соответствия, а также суждения, утверждения и др.

Парадигма программирования

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

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

Используемые символы

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

Расширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других — арабскими, а третьих — китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения (Delphi 2006, C#, Java) поддерживают Unicode.

1.3 Развитие языков программирования.

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

В принципе, язык Ассемблер является машинным языком. И программист реализующий какую-либо задачу на языках высокого уровня, с помощью Ассемблера может определить осмыслено ли решение данной задачи, с точки зрения использования ЭВМ. Умение разобраться в распечатке языка ассемблера, дает возможность облегчить поиск ошибок в программах, т.к. некоторые языки являются компиляторами.

Одним из первых и наиболее удачных компиляторов стал язык Фортран, разработанный фирмой IBM. Профессор Дж. Букс и группа американских специалистов в области программирования в 1954 году опубликовало первое сообщение о языке. Дословно, название языка FORmulae TRANslation –преобразование формул. Программа на Фортране записывается в последовательности предложений или операторов (описание некоего преобразования информации), и оформляется по определенным стандартам. Эти стандарты накладывают ограничения, в частности, на форму записи и расположения частей оператора в строке бланка для записи операторов. Программа, записанная на Фортране, представляет собой один или несколько сегментов (подпрограмм) из операторов. Сегмент, управляющий работой всей программы в целом, называется основной программой.

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

Модификация языка Фортран, появившиеся в 1958 году, получила название Фортран II и содержала понятие подпрограммы и общих переменных для обеспечения связи между сегментами. К 1962 году относится появление языка, известного под именем Фортран IV и ставшего наиболее употребительным в настоящее время. К этому же времени относится и начало деятельности комиссии при Американской Ассоциации Стандартов (ASA), которая выработала к 1966 году два стандарта – языки Фортран и базисный (основной) Фортран (Basic FORTRAN). Эти языки приблизительно соответствуют модификациям IV и II, однако базисный Фортран является подмножеством Фортрана, в то время, как Фортран II таковым для Фортрана IV не является. Язык Фортран до сих пор продолжает развиваться и совершенствоваться, оказывая влияние на создание и развитие других языков. Например, Фортран заложен в основу Basic – диалогового языка, очень популярного для решения небольших задач, превосходного языка для обучения навыкам использования алгоритмических языков в практике программирования. Разработан этот язык – Beginner’s All –purpose Symbolic Instruction Code – группой сотрудников Вычислительного центра Дартмутского колледжа, штат Нью-Хэмпшир.

Этот язык был разработанный у нас в России (СССР), в 1966г. ИПМ АН СССР. Он прост и удобен для описания манипуляций над произвольными текстовыми объектами. Рефал широко применяется при разработке трансляторов с алгоритмических языков как универсальных и проблемно – ориентированных, так и автокодов. Кроме использования в задачах трансляции, Рефал имеет такие важные сферы применения, как машинное выполнение громоздких аналитических выкладок в теоретической физике и прикладной математике; проектирование «умных» информационных систем, осуществляющих нетривиальную логическую обработку информации; машинное доказательство теорем; моделирование целенаправленного поведения; разработка диалоговых обучающих систем; исследования в области искусственного интеллекта и т.п. Программирование на Рефале имеет специфику, связанную, прежде всего, с тем, что Рефал является языком функционального типа в отличие от обычных операторных языков типа Алгол, Фортран и т.д.. Если программа на операторных языках – ни что иное, как совокупность приказов-операторов, то программа на Рефале представляет собой по существу описание связей и отношений между определенными понятиями.

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

Источник

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

Парадигмы программирования

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

Код программы на языке системы правил может быть записан следующим образом:

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

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

Концепция языка программирования неотрывно связана с его реализацией. Для того чтобы компиляция одной и той же программы различными компиляторами всегда давала одинаковый результат, разрабатываются стандарты языков программирования. Существует ряд организаций, целенаправленно занимающихся вопросами стандартизации. Это Американский национальный институт стандартов ANSI (American National Standards Institute), Институт инженеров по электротехнике и электронике IEEE (Institute of Electrical and Electronic Engineers ), Организация международных стандартов ISO ( International Organization for Standardization ).

Как правило, при создании языка выпускается частный стандарт, определяемый разработчиками языка. Если язык получает широкое распространение, то со временем появляются различные версии компиляторов, которые не точно следуют частному стандарту. В большинстве случаев идет расширение зафиксированных первоначально возможностей языка. Для приведения наиболее популярных реализаций языка в соответствие друг с другом разрабатывается согласительный стандарт. Очень важным фактором стандартизации языка программирования является своевременность появления стандарта – до широкого распространения языка и создания множества несовместимых реализаций. В процессе развития языка могут появляться новые стандарты, отражающие современные нововведения. Так, язык FORTRAN первоначально был стандартизирован в 1966 году. В результате был издан стандарт FORTRAN 66. Далее этот стандарт несколько раз пересматривался (в 1977 году был выпущен FORTRAN 77, затем появился и FORTRAN 90).

Среда проектирования

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

Интегрированная среда проектирования VisualStudio. NET позволяет создавать и компилировать приложения на языках C++, C#, Visual Basic и VisualJ. Для разработки приложений на языке С++ предназначается также среда CBuilder.

Для проектирования приложений на языке Object Pascal используется интегрированная среда проектирования Delphi.

Наиболее удобной средой разработки программ на языке Java является интегрированная среда проектирования JBuilder.

Источник

Эволюция современных языков программирования

Большинство алгоритмических языков программирования, таких как Си и Паскаль, были созданы на рубеже 60 и 70-х годов. Иными словами, их возраст (за исключением Java) перевалил за третий десяток, что для компьютерной индустрии срок немалый. Они старше Internet, Windows да и собственно ПК не менее чем на десятилетие. Стоит отметить, что новые языки не переставали регулярно появляться, однако ни один из них не задержался в практике программирования, хотя приносимые ими идеи становились достоянием известных языков (как это произошло с объектно-ориентированным программированием).

Другой важной особенностью языкотворчества можно считать прекращение попыток создания «универсального» языка программирования, призванного объединить в себе все последние достижения в области разработки языков (можно вспомнить Алгол, PL/1 или Аду). Крупные «языковые» проекты безвозвратно ушли в прошлое вместе с порожденными ими языками.

Наконец, появление ПК и ОС с графическим интерфейсом (прежде всего Mac OS и Windows) привело к переносу внимания разработчиков ПО из сферы языков программирования в другие области средств разработки, такие как визуальное или объектно-ориентированное программирование, сетевые протоколы или модели баз данных. Сегодня программист использует в качестве инструмента не столько язык, сколько конкретную среду программирования (например, Delphi), а какой язык является базовым, не так уж важно.

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

Сопоставительный анализ

Цикл с параметром

В качестве первого примера воспользуемся оператором цикла с параметром (for). Это наиболее часто используемый составной (т.е. содержащий другие операторы) оператор в любом языке. Он всегда содержит следующие компоненты:

Кроме того, цикл с параметром может содержать признак увеличения/уменьшения счетчика цикла (Паскаль) или способ модификации счетчика (Си и Java). Реализация на Паскале:

Реализация на Си и Java:

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

Структура типа «запись»

Реализация на Паскале:

Реализация на Java:

Java не содержит механизма для записи вариантных частей, а в Си нужно для каждой вариантной части придумывать собственное имя и тип. В то же время в Паскале требуется обязательно указать поле-переключатель или хотя бы тип этого поля (как в примере). Ни один из вариантов не представляется идеальным, однако наиболее универсальной можно считать реализацию на Паскале.

Синтаксис и семантика

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

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

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

Интересно отследить те немногие различия, которые есть в семантике современных языков программирования. Однако существуют и обратные примеры, когда средства, присутствующие только в одном языке программирования, полезны на практике. Например, в Си отсутствуют средства экспорта—импорта модулей (за исключением директивы #include), имеющиеся в современных реализациях Паскаля, Модуле и Аде. С другой стороны, Си содержит удобные механизмы создания строковых констант, отсутствующие в Паскале и родственных ему языках.

Стандарты языков программирования

Сравнивая между собой конструкции современных языков программирования и выделив их общую составляющую, можно описать (не создать, а именно описать уже существующий de facto!) «универсальный» язык программирования (правда, только на семантическом уровне).

Существующая ныне система стандартизации языков программирования не способствует выполнению этой задачи. Главная проблема состоит в том, что при описании стандарта семантическая составляющая не отделена от синтаксиса и лексики. Кроме того, при модернизации стандартов комитеты ISO/ANSI предпочитают скорее добавлять в язык новые возможности, чем исключать редко используемые, что приводит к неоправданному синтаксическому расширению языков.

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

Второе — разработать единые правила описания семантики языка программирования (подобно тому, как с помощью БНФ описываются синтаксис и лексика языка). Можно предположить, что описание семантики конструкции языка должно содержать перечень ее обязательных компонент и описание действий. Порядок следования компонент и их внешний вид должны быть оставлены за пределами семантического описания. Ниже приведены примеры описания конструкций с разделением их семантической и синтаксической составляющих.

Семантическое описание оператора while. ЦиклСПредусловием должен содержать следующие обязательные компоненты:

УсловиеПродолженияЦикла представляет собой выражение логического (булевого) типа.

ТелоЦикла — оператор или список операторов языка программирования.

УсловиеПродолженияЦикла вычисляется всякий раз перед началом цикла. Если его значение «истина», то выполняются операторы, входящие в ТелоЦикла. В противном случае управление передается оператору, следующему за оператором ЦиклСПредусловием.

В семантическом описании ничего не говорится о том, как выглядит оператор, каков порядок следования его компонент. Внешний вид оператора содержится в синтаксическом стандарте конкретного языка программирования.

Синтаксическое описание оператора while. ЦиклСПредусловием выглядит следующим образом в разных языках программирования:

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

ТипУказатель должен содержать следующие обязательные компоненты:

ИмяТипа представляет собой идентификатор.

БазовыйТип — имя встроенного или ранее описанного типа языка программирования.

ТипУказатель — это адрес конструкции БазовыйТип. Его размер фиксирован и зависит от платформы программирования (для Win32 он составляет 4 байта).

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

Синтаксическое описание типа «указатель». Синтаксические стандарты типа ТипУказатель есть в различных языках программирования (в Java указатели формально отсутствуют, но на самом деле все типы данных являются указателями).

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

Содержание семантического и синтаксического стандартов языка

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

Для синтаксического описания достаточно привести формальное определение конструкции, например, в виде БНФ. Следует отметить, что со времен Алгола полное синтаксическое описание языка всегда присутствует в его стандарте. Раньше оно было вспомогательным средством, облегчающим работу разработчиков компиляторов, сейчас же это описание должно, во-первых, стать частью стандарта языка и, во-вторых, тесно интегрироваться с семантическим описанием.

Компиляторы с общей семантической базой

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

Общая семантика позволит пользоваться единым семантическим анализатором и единым генератором исполняемого кода для всех используемых языков. Синтаксический анализатор также можно сделать универсальным с помощью формул БНФ. Лексика же всех современных языков почти идентична (например, правила записи числовых и строковых констант в таких разных языках, как Си и Паскаль, совпадают практически полностью).

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

Наконец, описание единой семантики современных языков программирования есть не что иное, как описание «универсального» (или, если угодно, «идеального») языка программирования, на создание которого потрачено столько сил, времени и средств в прошлом. Достаточно вспомнить работы IBM по созданию PL/1 или последний по времени проект министерства обороны США по созданию языка Ада. Непомерные амбиции потерпели фиаско, а искомый «универсальный» язык тем временем образовался сам по себе без каких-либо организационных усилий и финансовых вложений.

Язык будущего

Стандарты языков программирования это
Рис. 1. Области пересечения и объединения языков программирования

Хотя современные языки программирования похожи друг на друга, идентичность их далеко не полная. Каждый содержит конструкции, присущие только ему. Если мы попытаемся начертить схему пересечения семантики языков программирования, то можем получить изображение, приведенное на рис. 1. На нем видно, что существует общая семантическая зона, в которую входят конструкции, принадлежащие всем языкам программирования (или большинству из них). Таким образом, семантику каждого языка программирования можно условно поделить на «область пересечения» (конструкции общие для всех языков) и «область объединения» (конструкции специфические для данного языка). Поэтому создание входного языка для многоязычного компилятора можно произвести двумя различными способами:

1. Использовать только общие конструкции (область пересечения), отбросив все «особенные» конструкции языков, как не необходимые. Это приведет к усечению всех языков программирования.

2. Использовать все имеющиеся в языках конструкции (область объединения). В этом случае каждый из языков должен быть дополнен конструкциями, имеющимися в других языках программирования. Этот подход чреват чрезмерным расширением семантической базы.

Разумеется, ни один из этих подходов не должен применяться «в чистом виде», но более правильным представляется первый вариант, поскольку в «области пересечения» содержится исторически наработанный необходимый минимум семантических конструкций. Приведем несколько примеров из «области пересечения» и «области объединения» языков.

«Область пересечения», цикл с параметром

Цикл с параметром присутствует в любом языке программирования. Исторически это наиболее «старый» из операторов цикла — он существовал уже в ранних версиях Фортрана. Несмотря на огромное количество вариантов, он до сих пор сохранил свои основные черты. В нем имеется переменная-параметр (как правило, целого типа; в Паскале, Модуле 2 и современных версиях Си допустимо также использовать переменную скалярного типа), которая пробегает значения от начального до конечного с шагом 1 или более.

В языках, созданных под влиянием Паскаля (Модула 2, Ада), параметр цикла может изменяться только с шагом 1. В Си-подобных языках семантика цикла с параметром допускает не только любой шаг переменной, но и вообще любой оператор, произвольно изменяющий значение параметра. Кроме того, условие окончания цикла в Си может быть любым логическим выражением (а не только достижением переменной порогового значения). Иными словами, цикл с параметром в Си может вообще не содержать параметра (в этом случае он становится аналогом цикла while). Ниже приведены примеры одного и того же цикла:

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

«Область объединения», директива define в Си

Директива define присуща только языку Си. Она перекочевала из макроассемблера и задает макроподстановку, присваивая идентификатору некоторый текст (фрагмент программы). Это очень мощный инструмент (в сфере языков программирования мощность — не всегда положительное качество), используемый для нескольких различных целей. Упомяну следующие области использования define:

Директива define — безусловный анахронизм. Неслучайно в современных вариантах Си (Си++ и Java) ее область действия стараются ограничить, вводя дополнительные конструкции (директиву const и скалярные типы).

«Область объединения», тип «множество» в Паскале

Тип «множество» присутствует во всех языках Вирта — Паскале, Модуле и Обероне. В эту конструкцию можно добавлять элементы (целочисленные переменные) или удалять их, а также проверять наличие в ней любого элемента. Несмотря на очевидную полезность этой конструкции в определенных ситуациях, необходимым компонентом языка тип «множество» все же не является (он отсутствует не только во всех клонах Си, но и в Аде, созданном под сильным влиянием Паскаля).

Набор конструкций языка программирования будущего

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

Несомненно, ряд конструкций из «области объединения» также будет востребован в будущем, однако конкретный их перечень сможет определить только практика.

Структурный редактор

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

При создании первых языков программирования считалось, что недалек тот день, когда само это понятие исчезнет и программист сможет создавать программы на естественном (например, английском) языке. Некоторые разработчики пытались предвосхитить это событие, сделав свой язык максимально похожим на человеческий. Например, в Коболе оператор присваивания выглядит (в русской транскрипции) так:

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

Программа — не текст, а набор конструкций

С точки зрения компьютера программа вовсе не является текстом. Это набор операторов, описаний типов, процедур и т. д. Ошибки компиляции — не что иное, как результат непонимания друг друга компилятором и программистом: компилятор просит программиста объяснить, что тот имел в виду. Текст — не оптимальный способ представления программ: он неоднозначен и позволяет каждую конструкцию записывать разными способами.

Стандарты языков программирования это
Рис. 2. Цикл с параметром в структурном редакторе

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

Преимущества структурного редактора

Переход к структурному редактору даст много преимуществ. Полностью (или почти полностью) исчезнут ошибки компиляции; ее скорость возрастет в несколько раз. Более того, станет возможна online-компиляция программы: код оператора создается прямо в момент его ввода, а создание исполняемого файла будет компоновкой уже откомпилированных частей.

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

Псевдотекст

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

Разумеется, должны быть доступны и основные операции работы с текстом (главным образом, работа с блоками).

Перспективы семантического подхода

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

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

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

Содержание «универсального» языка программирования по основным разделам

ОператорыПрисваивания; вызова процедуры; условия (if) и выбора (case, switch); циклы с параметром (for), с предусловием (while), с постусловием (repeat или do-while)
Типы данныхЛогический тип (boolean); массив; структура (запись); скалярный; указатель; строка символов (необходим строгий контроль типов)
Механизм процедурКласс параметров var (в Си++ и Java); вызов функции как процедуры; Inline-процедуры; рекурсия прямая и косвенная
Механизмы раздельной компиляцииЕдиницы компиляции; наличие раздела описания модуля; директива импорта модуля; ограничения видимости идентификаторов; произвольная структура модулей
Объектно-ориентированное программированиеИнкапсуляция; наследование; конструкторы и деструкторы

Компилятор «Странник Модула-Си-Паскаль»

Первый многоязычный компилятор, поддерживающий три языка программирования с общей семантической базой.

Создает программы в среде Win32 (Windows-95-98-ME-NT-2000).

Источник

Видео

Зачем так много языков программирования?Скачать

Зачем так много языков программирования?

Сравнение языков программирования: C, C++, C#, Java, Python, Swift, JavaScript, PHP, Ruby, KotlinСкачать

Сравнение языков программирования: C, C++, C#, Java, Python, Swift, JavaScript, PHP, Ruby, Kotlin

История развития языков программированияСкачать

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

Языки программированияСкачать

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

История языков программированияСкачать

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

Типы языков программированияСкачать

Типы языков программирования

История языков программированияСкачать

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

Классификация языков программированияСкачать

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

История появления и развития программирования и ЭВМСкачать

История появления и развития программирования и ЭВМ

Классификация языков программирования по поколениям и уровням. Что такое машинный код и ассемблерСкачать

Классификация языков программирования по поколениям и уровням. Что такое машинный код и ассемблер
Поделиться или сохранить к себе:
Добавить комментарий

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