Файл: Общие сведения стандартов языков программирования и история их развития.pdf
Добавлен: 15.05.2023
Просмотров: 235
Скачиваний: 6
СОДЕРЖАНИЕ
Глава 1. Общие сведения стандартов языков программирования и история их развития
1.1.Общие сведения стандартов языков программирования
1.2.История развития языков программирования
Глава 2. Современные языки программирования. Сходства и отличия стандартов
2.1. Обзор современных языков программирования
2.2. Анализ сходства и отличия стандартов языков программирования
Структура типа «запись»
Следующий пример взят из раздела описания структур данных - это описание типа «запись» (структура в Си и Java). Подобная структура всегда содержит следующие компоненты:
- список полей с указанием имени поля и его типа
- список вариантных частей (union в Си)
Реализация на Паскале:
record
field1:integer;
field2:array[0..30]of char;
case byte of
1:(b0,b1:byte);
2:(i0:integer);
end
Реализация на Си:
struct {
int field1;
char field2[31];
union {
byte b0b1[2];
int i0;
} u;
}
Реализация на Java:
class {
int field1;
char[] field2;
int i0;
}
Java не содержит механизма для записи вариантных частей, а в Си нужно для каждой вариантной части придумывать собственное имя и тип. В то же время в Паскале требуется обязательно указать поле-переключатель или хотя бы тип этого поля (как в примере). Ни один из вариантов не представляется идеальным, однако наиболее универсальной можно считать реализацию на Паскале.
Синтаксис и семантика
Как видно из приведенных примеров, родственные конструкции разных языков программирования различаются главным образом «внешним видом»: набором ключевых слов или порядком следования компонентов. Содержимое практически полностью идентично. Небольшие различия, как правило, не имеют существенного значения и чаще всего являются «атавизмами» (как, например, возможность задания отличного от единицы модификатора счетчика цикла).
Следовательно, конструкции современных языков имеют общее содержание (семантику), но различный порядок следования компонент (синтаксис) и разные ключевые слова (лексику). Таким образом, различные языки предоставляют программисту одинаковые возможности (при различном внешнем виде программ).
Если сравнить между собой родственные конструкции разных языков программирования с точки зрения семантики, то можно выделить «главные» компоненты конструкций, которые присутствуют во всех основных языках. Эти «общие» компоненты и есть та основа любого современного языка, которая прошла проверку временем и практикой.
Интересно отследить те немногие различия, которые есть в семантике современных языков программирования. Однако существуют и обратные примеры, когда средства, присутствующие только в одном языке программирования, полезны на практике. Например, в Си отсутствуют средства экспорта—импорта модулей (за исключением директивы #include), имеющиеся в современных реализациях Паскаля, Модуле и Аде. С другой стороны, Си содержит удобные механизмы создания строковых констант, отсутствующие в Паскале и родственных ему языках.
Сравнивая между собой конструкции современных языков программирования и выделив их общую составляющую, можно описать (не создать, а именно описать уже существующий de facto!) «универсальный» язык программирования (правда, только на семантическом уровне).
Существующая ныне система стандартизации языков программирования не способствует выполнению этой задачи. Главная проблема состоит в том, что при описании стандарта семантическая составляющая не отделена от синтаксиса и лексики. Кроме того, при модернизации стандартов комитеты ISO/ANSI предпочитают скорее добавлять в язык новые возможности, чем исключать редко используемые, что приводит к неоправданному синтаксическому расширению языков.
Семантическое описание оператора while. ЦиклСПредусловием должен содержать следующие обязательные компоненты:
- УсловиеПродолженияЦикла
- ТелоЦикла
УсловиеПродолженияЦикла представляет собой выражение логического (булевого) типа.
ТелоЦикла — оператор или список операторов языка программирования.
УсловиеПродолженияЦикла вычисляется всякий раз перед началом цикла. Если его значение «истина», то выполняются операторы, входящие в ТелоЦикла. В противном случае управление передается оператору, следующему за оператором ЦиклСПредусловием.
В семантическом описании ничего не говорится о том, как выглядит оператор, каков порядок следования его компонент. Внешний вид оператора содержится в синтаксическом стандарте конкретного языка программирования.
Синтаксическое описание оператора while. ЦиклСПредусловием выглядит следующим образом в разных языках программирования:
ЦиклСПредусловиемPASCAL::=
?while? УсловиеПродолженияЦикла ?do?
ТелоЦикла
ЦиклСПредусловиемC::=
?while? ?(? УсловиеПродолженияЦикла ?)?
ТелоЦикла
ЦиклСПредусловиемMODULA::=
?while? УсловиеПродолженияЦикла ?do?
ТелоЦикла ?end?
Семантическое описание типа «указатель». Подобная конструкция содержится в любом современном языке программирования (кроме Java, где указатели используются неявно).
ТипУказатель должен содержать следующие обязательные компоненты:
- ИмяТипа
- БазовыйТип
ИмяТипа представляет собой идентификатор.
БазовыйТип — имя встроенного или ранее описанного типа языка программирования.
ТипУказатель — это адрес конструкции БазовыйТип. Его размер фиксирован и зависит от платформы программирования (для Win32 он составляет 4 байта).
Принципы построения семантического стандарта не зависят от того, какую конструкцию он описывает — оператор языка или тип данных.
Синтаксическое описание типа «указатель». Синтаксические стандарты типа ТипУказатель есть в различных языках программирования (в Java указатели формально отсутствуют, но на самом деле все типы данных являются указателями).
ТипУказательPASCAL::=
ИмяТипа ?=? ?^? БазовыйТип
ТипУказательC::=
?typedef? ИмяТипа ?*? БазовыйТип
ТипУказательMODULA2::=
ИмяТипа ?=? ?pointer? ?to? БазовыйТип
Синтаксические описания этой конструкции в разных языках похожи друг на друга. Везде новому имени типа (идентификатору) ставится в соответствие имя другого типа (базового).
Содержание семантического и синтаксического стандартов языка
На основании приведенного выше можно в общих чертах описать способы задания семантического и синтаксического стандартов любого языка программирования. Семантическое описание любой конструкции языка (оператора, типа данных, процедуры и т. д.) должно содержать не менее трех обязательных частей:
- Список компонент, из которых состоит конструкция (в ТипУказатель это компоненты ИмяТипа и БазовыйТип)
- Описание каждой компоненты
- Описание конструкции в целом
Для синтаксического описания достаточно привести формальное определение конструкции, например, в виде БНФ. Следует отметить, что со времен Алгола полное синтаксическое описание языка всегда присутствует в его стандарте. Раньше оно было вспомогательным средством, облегчающим работу разработчиков компиляторов, сейчас же это описание должно, во-первых, стать частью стандарта языка и, во-вторых, тесно интегрироваться с семантическим описанием.
Компиляторы с общей семантической базой
Описание единой семантической базы современных языков программирования даст уникальную возможность создания «универсального» компилятора, который мог бы работать с любым существующим языком, имеющим общую с другими семантическую базу.
Общая семантика позволит пользоваться единым семантическим анализатором и единым генератором исполняемого кода для всех используемых языков. Синтаксический анализатор также можно сделать универсальным с помощью формул БНФ. Лексика же всех современных языков почти идентична (например, правила записи числовых и строковых констант в таких разных языках, как Си и Паскаль, совпадают практически полностью).
Наличие общей семантической базы сделает перевод с одного языка программирования на другой тривиальным, поскольку изменения будут касаться только внешнего вида программы, а не ее содержания. На базе универсального компилятора может быть создана многоязыковая интегрированная среда разработки программ, в которой в качестве внутреннего представления программ будут использоваться не тексты, а семантические конструкции. В такой среде понятие языка разработки превратится в условность, поскольку переключение с одного языка на другой можно осуществить в любой момент выбором соответствующего пункта меню.
Заключение
Язык программирования - это формальная знаковая система, предназначенная для записи программ (строится в соответствии с той или иной базовой моделью вычислений, т.е. совокупностью стратегий, методов, подходов и понятий, определяющих стиль программирования).
Язык программирования предназначен для написания компьютерных программ, применяемых для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными устройствам. Язык программирования – это способ передачи команд, приказов, четкого руководства к действию. Язык программирования использует специальные конструкции для определения и манипулирования структурами данных и управления процессом вычислений.
Современной тенденцией является появление языков программирования ультра высокого уровня. Такого рода языки характеризуются наличием дополнительных структур и объектов, ориентированных на прикладное использование. Прикладные объекты, в свою очередь, требуют минимальной настройки в виде параметров и моментально готовы к использованию.
При сравнении современных языков программирования, видно их удивительное сходство между собой. Созданные в разное время, с разными целями, по разные стороны Атлантического океана, они в процессе своего практического использования обрастали разными полезными конструкциями и в конечном итоге пришли к почти полному тождеству.
Список литературы
1. Волкова В.Н. Теория информационных процессов и систем. - М.: Юрайт, 2016. - 504 с.
2. Губарев, В.Г. Программное обеспечение и операционные системы ПК: учебник / В.Г. Губарев.- Ростов н/Д.: Феникс, 2012г.-384с.
3. Дорот, В. Л. Толковый словарь современной компьютерной лексики. / В. Л. Дорот , Ф. А. Новиков . - 2-е изд.,перераб.и доп. – СПб. : БХВ-Петербург, 2011г. - 512 с.
4. Информатика. Базовый курс/ Под ред. С.В. Симоновича. - СПб.: Питер, 2015. - 640 с.
5. Информационные технологии в экономике управления / Под ред. В.В. Трофимова. - М.: Юрайт, 2015. - 482 с.
6. Курносов А.П., Кулев С.А., Улезько А.В. и др. Информатика. Под ред. А.П. Курносова.-М.: КолосС, 2010.-272 с.
7. Макарова Н.В. Информатика / под ред. Проф. Н.В. Макаровой. - М.: Финансы и статистика, 2011. - 768 с.
8. Малышев Р.А. Локальные вычислительные сети: Учебное пособие / РГАТА. - Рыбинск, 2012. - 83 с.