Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Международные и отечественные стандарты языков программирования. Сходство и отличия стандартов (Понятие «язык программирования»)

Содержание:

ВВЕДЕНИЕ

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

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

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

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

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

Объектом исследования послужили языки программирования и история развития языков программирования

Предмет исследования – стандарты языков программирования.

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

Для достижения поставленной цели, решались следующие задачи:

1. Рассмотреть понятие «язык программирования»

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

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

4. Изучить сходства и различия международных и отечественных стандартов языков программирования

ГЛАВА 1. ОБЩАЯ ХАРАТКЕРИСТИКА ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

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

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

Программирование появилось задолго до 50–х годов XX века. Первые идеи высказал ещё Чарльз Бэббидж (1792–1871), которого по праву считают отцом компьютера. Он не знал о транзисторах, микросхемах и мониторах, но достаточно точно описал основные принципы, на которых будут строится все вычислительные машины. Развила идею графиня Ада Лавлейс (1815–1852). Её место в истории до сих вызывает немало споров, но одно абсолютно точно – именно Ада фактически стала первым известным программистом. Благодаря её трудам стало понятно, что путь к эффективному использованию машин – алгоритмы, описанные в коде[3].

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

Со времени создания первых программируемых машин человечество придумало более восьми тысяч языков программирования (включая эзотерические, визуальные и игрушечные) [3]. Каждый год их число увеличивается. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты могут владеть десятком и более разных языков программирования.

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

Как правило, язык программирования определяется не только через спецификации стандарта языка, формально определяющие его синтаксис и семантику [⇨], но и через воплощения (реализации) стандарта–программные средства, обеспечивающих трансляцию или интерпретацию программ на этом языке [⇨]; такие программные средства различаются по производителю, марке и варианту (версии), времени выпуска, полноте воплощения стандарта, дополнительным возможностям; могут иметь определённые ошибки или особенности воплощения, влияющие на практику использования языка или даже на его стандарт.

Создатели языков по–разному толкуют понятие язык программирования. Среди общин мест, признаваемых большинством разработчиков, находятся следующие [1]:

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

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

Исполнение: язык программирования может использовать специальные конструкции для определения и манипулирования структурами данных и управления процессом вычислений [7].

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

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

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

К языкам низкого уровня относятся языки ассемблера (от англ. toassemble – собирать, компоновать). В языке ассемблера используются символьные обозначения команд, которые легко понятны и быстро запоминаются. Вместо последовательности двоичных кодов команд записываются их символьные обозначения, а вместо двоичных адресов данных, используемых при выполнении команды, – символьные имена этих данных, выбранные программистом. Иногда язык ассемблера называют мнемокодом или автокодом.

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

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

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

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

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

Один из первых языков программирования – Фортран (Formula Translation) был создан в середине 50–х годов. Благодаря своей простоте и тому, что на этом языке накоплены большие библиотеки программ Фортран и в наши дни остается одним из самых распространенных. Он используется для инженерных и научных расчетов, для решения задач физики и других наук с развитым математическим аппаратом.

Для решения экономических задач был создан язык программирования – Кобол.

Расширение областей применения ЭВМ влечет за собой создание языков, ориентированных на новые сферы применения: Снобол– алгоритмический язык для обработки текстовой информации, Лисп– алгоритмический язык для обработки символов. Лисп находит широкое применение в исследованиях по созданию искусственного интеллекта [7].

В 1968 г. был объявлен конкурс на лучший язык программирования для обучения студентов. Победителем стал язык Алгол–68, но широкого распространения не получил. Для этого конкурса Никлаус Вирт создал язык Паскаль, достаточно простой, удобный, с наличием мощных средств структурирования данных. Хотя Паскаль был разработан как язык для обучения программированию, он впоследствии получил широкое развитие и в настоящее время считается одним из самых используемых языков. Для обучения младших школьников Самуэлем Пайпертом был разработан язык Лого. Он отличается простотой и богатыми возможностями.

Широкое распространение в школах в качестве обучающего языка получил язык Бейсик, позволяющий взаимодействовать с ЭВМ в режиме непосредственного диалога. Спустя много лет после изобретения Бейсика, он и сегодня самый простой для освоения из десятков языков общецелевого программирования [5].

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

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

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

Basic. Basic или Бейсик называют группу языков программирования высокого уровня. Его создали профессора колледжа Дартмут в 1964 году с целью помощи студентам в создании собственных компьютерных программ. Сейчас детище Томаса Курца и Джона Кемени стало основным языком, на котором пишутся программы для ОС Windows.

C. В далеком 1972 году Дэннис Ритчи придумал язык, который остается популярен и сейчас. Программисты любят его за успешное сочетание в нем элементов как высокого, так и низкого уровней программирования. Кстати, для тех языков программирования, которые используются для написания сайтов, основой является как раз язык Си [9].

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

Python. Разработка этого языка началась в 1980–х годах голландцем Гвидо ван Россумом, но его первая версия была выпущена только в 2008 году. Он отличается постоянным усовершенствованием и активным сообществом пользователей. Python является высокоуровневым языком с большим объемом различных функций. Особенно хорошо он справляется с веб–разработкой, анализом данных и автоматизацией процессов.

PHP. Этот язык лидирует среди тех, что применяются в разработке веб–сайтов и поддерживается практически всеми хостинг–провайдерами. Он применяется, в основном, для разработки веб–сайтов и веб–приложений. Впервые PHP был представлен публике в 1995 году датским программистом Расмусом Лердорфом [13].

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

JavaScript. Хотя JavaScript похож на Java, но все же является отдельным языком. Чаще всего используется в качестве встраиваемого языка: приложения получают доступ к веб–страницам с его помощью. Он более легок в применении и дается даже тем, кто мало знаком с программированием. Доля его использования ежегодно растет.

Go (Golang). В 2007 году компания Google занялась разработкой собственного языка программирования, с помощью которого бы можно было решать реальные проблемы. Созданием языка занимались Роб Пайк и Кен Томпсон, которые уже в 2009 году представили Go. Для компании Google он является заменой популярных языков Си и Си ++. Он не стал прорывом, но зато используется для создания серьезных проектов.

SQL. Этот язык программирования является системой, с помощью которой можно удобно управлять базами данных. Первые разработки были начаты еще в 1970–х годов, но первый вариант SQL был представлен в 1986 году. В современном мире SQL довольно популярен в качестве удобного языка для улучшения, управления и создания баз данных [6].

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

Pascal. Никлаус Вирт создал этот язык в 1969 году, а назвали язык в честь математика Блеза Паскаля. Он является популярным языком программирования и в наши дни. Именно на нем обучают студентов на первом курсе университета и в старшей школе. На его основе построено множество других языков [8].

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

Выводы по первой главе

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

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

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

На данный момент существует около 8 тысяч языков, поэтому невозможно назвать все, их даже сложно классифицировать. Однако классификации все же есть.

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

ГЛАВА 2. АНАЛИЗ МЕЖДУНАРОДНЫХ И ОТЕЧЕСТВЕННЫХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

2.1. Особенности стандартизации языков программирования

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

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

Язык Java, ставший в последнее время весьма распространенным, постепенно был значительно расширен и модифицирован: новая спецификация получила название Java 2 [12].

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

Эволюцию стандартизации языков программирования можно разделить на три этапа:

I. Наличие для конкретного языка частного стандарта. Такой подход подразумевает, что разработчики компиляторов сами определяют семантику и синтаксис являются стандартными для языка. Это приводит к хаосу и не соответствию разных компиляторов.

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

III. Появление организаций предназначенных сугубо для установки различных стандартов [9].

Самые популярные организации:

Американский национальный институт стандартов ANSI (American National Standards Institute)

Институт инженеров по электротехнике и электронике IEEE (Institute of Electrical and Electronic Engineers).

Организация международных стандартов ISO (International Organization for Standardization).

Благодаря появлению вышеописанных организаций стандартизация является централизованным процессом и проходит своевременно.

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

1) Старая конструкция сначала помечается как не рекомендуемая возможность. Это означает, что использовать ее не желательно, но можно.

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

3) Устаревшая возможность удалять из стандарта через некоторый заранее заданный интервал.

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

Государственные стандарты отслеживают тенденции развития программирования и дают обязательные рекомендации по их соблюдению. Помимо государственных стандартов (ГОСТ) действуют отраслевые стандарты (ОСТ), стандарты предприятий (СТП) [10].

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

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

В области программирования общепризнанной ведущей организацией по разработке стандартов является институт ANSI (Американский национальный институт стандартов). Данный институт является лидером по установке стандартов языков программирования, кодовых таблиц клавиш и символов, выводимых на экран, и еще многих других. Необходимо также отметить стандарты ISO.

К сожалению, самое благородное дело стандартизации – достижение всеобщей унификации и взаимозаменяемости – может также стать тормозом развития. Вводя новый стандарт, надо учитывать последствия ввода, особенно если стандарт является опережающим и опережает практику развития или если стандарт является слишком «узким» и тормозит эволюцию прогресса. Во всем мире руководствуются следующим отношением к стандартам: или полностью им следуй, или делай свой собственный стандарт. Стандарты дают дополнительные ограничения [6].

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

2.2. Сходства и различия международных и отечественных стандартов языков программирования

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

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

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

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

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

Условие Продолжения Цикла

Тело Цикла

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

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

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

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

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

Цикл С Предусловием PASCAL::=

?while? Условие Продолжения Цикла ?do?

Тело Цикла

Цикл С Предусловием C::=

?while? ?(? Условие Продолжения Цикла ?)?

Тело Цикла

Цикл С Предусловием MODULA::=

?while? Условие Продолжения Цикла ?do?

Тело Цикла ? end?

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

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

Имя Типа

Базовый Тип

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

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

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

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

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

Тип Указатель PASCAL::=

Имя Типа ?=? ?^? Базовый Тип

Тип Указатель C::=

?typedef? Имя Типа ?*? Базовый Тип

Тип Указатель MODULA2::=

Имя Типа ?=? ?pointer? ?to? Базовый Тип

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

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

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

Список компонент, из которых состоит конструкция (в Тип Указатель это компоненты Имя Типа и Базовый Тип)

Описание каждой компоненты

Описание конструкции в целом

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

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

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

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

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

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

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

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

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

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

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

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

Паскаль: for i:=0 to max do inc(j);

Си, Си++, Java: for(i=0; i<=max; i++) j++;

Модула 2: for i:=0 to max do inc(j) end;

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

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

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

задание констант (наиболее распространенный вариант)

задание inline–функций

создание настраиваемых модулей (из других языков они есть только в Аде)

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

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

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

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

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

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

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

Выводы по второй главе

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

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

ЗАКЛЮЧЕНИЕ

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

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

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

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

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

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

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

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

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

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

ANSI – объединение американских промышленных и деловых групп, разрабатывающее торговые и коммуникационные стандарты.

IEEE – международная некоммерческая ассоциация специалистов в области техники, мировой лидер в области разработки стандартов по радиоэлектронике и электротехнике.

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

  1. Александреску, А. Языки программирования / А. Александреску. – СПб.: Символ–плюс, 2014. – 544 c.
  2. Ашарина, И.В. Основы программирования на языках С и С++/ И.В. Ашарина. – М.: ГЛТ, 2016. – 208 c.
  3. Баженова, И.Ю. Языки программирования / И.Ю. Баженова. – М.: Академия, 2018. – 448 c.
  4. Белоусова, С.Н. Основные принципы и концепции программирования на языке VBA в Excel / С.Н. Белоусова, И.А. Бессонова. – М.: Бином. ЛЗ, 2017. – 200 c.
  5. Гавриков, М.М. Теоретические основы разработки и реализации языков программирования/ М.М. Гавриков, А.Н. Иванченко, Д.В. Гринченков. – М.: КноРус, 2018. – 184 c.
  6. Головин, И.Г. Языки и методы программирования/ И.Г. Головин. – М.: Академия, 2014. – 208 c.
  7. Дорогов, В.Г. Основы программирования на языке С/ В.Г. Дорогов, Е.Г. Дорогова. – М.: Форум, 2015. – 320 c.
  8. Касторнова, В.А. Структуры данных и алгоритмы их обработки на языке программирования/ В.А. Касторнова. – СПб.: BHV, 2016. – 304 c.
  9. Кауфман, В.Ш. Языки программирования. Концепции и принципы / В.Ш. Кауфман. – М.: ДМК, 2017. – 464 c.
  10. Макаровских, Т.А. Языки и методы программирования/ Т.А. Макаровских, А.В. Панюков. – М.: Ленанд, 2018. – 216 c.
  11. Орлов, С. Теория и практика языков программирования / С. Орлов. – СПб.: Питер, 2017. – 688 c.
  12. Серебряков, В.А. Теория и реализация языков программирования / В.А. Серебряков. – М.: Физматлит, 2016. – 236 c.
  13. Фаулер, М. Предметно–ориентированные языки программирования / М. Фаулер. – М.: Вильямс И.Д., 2018. – 576 c.
  14. Фридман, А. Основы объектно–ориентированного программирования на языке СИ++ / А. Фридман. – М.: Горячая линия –Телеком, 2016. – 234 c.
  15. Шохирев, М.В. Языки программирования/ М.В. Шохирев. – М.: Интуит, 2015. – 279 c.