Файл: Международные и отечественные стандарты языков программирования.pdf
Добавлен: 31.03.2023
Просмотров: 130
Скачиваний: 2
СОДЕРЖАНИЕ
1. История стандартизации языков программирования
2. Предмет стандартизации в области разработки программного обеспечения
3. Организации, осуществляющие разработку стандартов в области информационных технологий
3.1. Международные организации стандартизации в области ИТ
3.1.2. Международная электротехническая комиссия МЭК
3.1.3. Объединённый технический комитет №1 ИСО/МЭК
3.1.5. Консорциум World Wide Web (W3C)
3.2. Национальные организации стандартизации в области ИТ
3.2.3. Межгосударственный совет по стандартизации, метрологии и сертификации
4. Международные и отечественные стандарты языков программирования
Введение
В Толковом словаре по информатике В.И. Першикова и В.М. Савинкова [14] понятие стандартизация определяется как принятие соглашения по спецификации, производству и использованию аппаратных и программных средств вычислительной техники; установление и применение стандартов, норм, правил и т.п.
Стандартизация играет существенную роль во всех отраслях человеческой деятельности, обеспечивая и облегчая взаимодействие различных участников производственных, технологических и бизнес-процессов, устанавливая единые правила и нормы, придерживаясь которых. Не является исключением и отрасль разработки программного обеспечения.
В подавляющем большинстве современные языки программирования являются высокоуровневыми, то есть для выполнения программ, написанных на таких языках, необходим интерпретатор – это либо компилятор, либо транслятор в байт-код, либо CLI (Common Language Infrastructure), либо браузерный движок (browser engine, в случае выполнения программных сценариев, написанных на скриптовых языках). Но во всех случаях критически важно, чтобы результат работы одного и того же кода, преобразованного различными интерпретаторами, всегда давал одинаковый результат. Добиться этого можно только единственным способом – принять единый свод правил (стандарт), и придерживаться его всем разработчикам и программного обеспечения, с одной стороны, и программ-интерпретаторов – с другой.
В настоящее время разработаны, поддерживаются и обновляются стандарты практически для всех основных языков программирования. Кроме того, стандарты покрывают и другие области разработки программного обеспечения: интерфейс OLE, обеспечивающий взаимодействие между программами, структуры данных, протоколы и форматы обмена данными, системы документации ПО, контроль качества, жизненные циклы разработки и многое другое.
Объект исследования – языки программирования
Предмет исследования – стандарты языков программирования
Цель курсовой работы – сравнение международных и отечественных стандартов языков программирования
Исходя из поставленной цели исследования нужно решить следующие задачи:
- Рассмотреть историю стандартизации языков программирования.
- Рассмотреть предмет стандартизации в области разработки программного обеспечения и, в частности, языков программирования.
- Рассмотреть структуру и состав международных и национальных организаций, занимающихся стандартизацией в области разработки программного обеспечения, и их взаимоотношения.
- Проанализировать сходства и отличия международных и отечественных стандартов.
1. История стандартизации языков программирования
Как и во многих других отраслях человеческой деятельности стандарты языков программирования возникали не сразу, а, скорее, описывали и приводили в единую систему правил, сложившуюся к тому времени де-факто ситуацию, основываясь на уже созданных к тому времени и широко используемых языках программирования.
Самые первые электронные программируемые вычислительные машины, такие как, например, Z3 Конрада Цузе или ЭНИАК Джона Мокли, программировались непосредственно в двоичном коде (хотя Конрад Цузе и разработал первый в мире высокоуровневый язык программирования Plankalkül [1], который, правда, был реализован много позднее, около 2000 года). На данном этапе развития языков программирования никакой стандартизации еще не требовалось, так как каждая машина была по-своему уникальна и у каждой был специфический набор машинных команд.[2] Более того, задание новой программы для новой задачи компьютера ЭНИАК, фактически вело к его перепрограммированию и превращало его в совершенно новую машину.
Программирование в машинных кодах, то есть на так называемых языках первого поколения, занимало много времени и требовало специальной подготовки программистов. И довольно быстро это привело к появлению языков программирования второго поколения, самый известный представитель которых, Assembler, успешно используется и по сей день. Но в целом ситуация изменилась незначительно, так как эти языки представляли собой лишь более удобочитаемую мнемоническую запись все тех же машинных команд.[15] Но, хотя для них уже использовались программы-трансляторы в машинный код (компиляторы), но компиляция все еще полностью зависела от архитектуры конкретной машины, и выработать сколько ни было строгие стандарты в то время не представлялось возможным. К тому же, сообщество программистов к тому времени было еще недостаточно широко, и само программирование еще не приобрело массовости. Таким образом, стандарты для первых языков программирования, использовавшихся для самых первых ЭВМ, были сугубо внутренними, корпоративными стандартами. Они основывались на внутренних спецификациях, создававшихся самими создателями машин.
Но достаточно скоро, в конце тех же 50-х годов, стали появляться и серийные ЭВМ. В основном они использовались Министерством обороны США (и некоторых других стран), ведущими институтами и крупными корпорациями для технических, инженерных и научных расчётов. В то же время возникали потребности и в реализации новых вычислительных задач. Но программирование в машинных кодах, пусть даже с использованием мнемонических языков, все равно оставалось довольно долгим и трудоемким процессом. С ростом парка вычислительных машин, а также, соответственно, и количества людей, работающих с ними, с появлением новых вычислительных задач возникла настоятельная необходимость разработки и использования высокоуровневых языков, более близких семантически к естественным человеческим языкам (так называемых языков третьего поколения). И уже в 50-х годах XX века появились первые широко используемые языки высокого уровня – FORTRAN, LISP, COBOL и многие другие. Такие языки позволяли (по крайней мере, в теории, хотя на практике возникало множество ограничений) выполнять программу, написанную на них, на любой ЭВМ, на которой есть транслятор соответствующего языка. В связи с этим возникла необходимость выработки неких общих правил, по которым программа, написанная на таком языке, интерпретируется транслятором, чтобы один и тот же код на различных трансляторах давал одинаковый результат.
Введение стандартов было затруднено чрезвычайно быстрым развитием языков программирования. Как правило, язык разрабатывался группой ученых и инженеров для какой-либо специальной задачи, затем он расширялся, получал новые возможности, приобретал популярность и широко использовался другими разработчиками. Стандарт языка в таком случае вырабатывался де-факто и его было сложно зафиксировать. Как правило, такой стандарт фиксировался в виде внутрикорпоративной спецификации.
Например, самый первый высокоуровневый язык FORTRAN был создан Джоном Бекусом (John Backus) в корпорации IBM в 1957 году и предназначался для инженерных вычислений. Язык оказался настолько удачным, что очень скоро он становится практически самым активно используемым для научных и инженерных расчётов. Однако, первый официально зафиксированный стандарт языка FORTRAN, разработанный Министерством Обороны США, появляется лишь в ноябре 1978 года, 21 год спустя.[5] И еще через три года, в марте 1980-го, был принят на основе этого стандарта первый международный стандарт языка FORTRAN ISO 1539:1980. [18]
Сходным образом обстояли дела и с другими языками программирования. Язык C был разработан Деннисом Ритчи (Dennis Ritchie), сотрудником Bell Labs в 1973 году, а первый его стандарт был принят ANSI (ANSI X3.159-1989) лишь в 1983. Язык Pascal, созданный в 1970-м получил свой первый стандарт лишь в 1983 (IEC/ISO 7185).
Сейчас ситуация несколько изменилась, и в последние годы стандарты стали диктовать направление развития языков программирования. Проиллюстрировать это можно хотя бы на примере языка ECMAScript. Сейчас ECMAScript является базовым стандартом, на котором основаны самые распространенные в веб-разработке языки - JavaScript, JScript и ActionScript.
Фактически же история начиналась с того, что Брандан Эйх в 1995 году разработал для браузера Netscape Navigator язык управления контентом веб-страниц JavaScript. Нововведение сразу стало пользоваться популярностью, поскольку позволило добавить интерактивность в веб-страницы, представлявшие до этого статическую HTML-разметку. И год спустя, в 1996 году, уже корпорация Microsoft представила свою реализацию сценарного языка JScript для своего браузера Internet Explorer (версия 3). Языки были чрезвычайно похожи, использовали схожий синтаксис, одинаковую парадигму программирования, одинаковые типы данных (при нестрогой типизации), так что и до сих пор многие считают их одним и тем же языком. Отличия были, в основном, в объектах и методах взаимодействия сценария с браузером и в том, что язык JScript мог также использоваться в качестве сценарного языка в операционной системе Windows. Вслед за успешным внедрением поддержки сценарного языка в браузеры компаниями Netscape и Microsoft поддержка сценариев была добавлена и в браузер Opera (версия 3, язык JavaScript).
В результате того, что каждый из браузеров интерпретировал скрипты немного по-своему, веб-программисты столкнусь с проблемой, когда не могло быть твердой уверенности, что написанные скрипты будут работать именно так, как задумывалось, у любого пользователя, в каком бы браузере он ни открыл данную страницу. Эта ситуация позднее была названа «Первой войной браузеров», и она усугублялась тем, что разработчики браузеров, стремясь привлечь как можно больше пользователей и захватить по возможности большую долю на рынке, бесконтрольно добавляли новые возможности в язык. Разработчики решали такие проблемы при помощи полифилов, проверки наличия методов или избегая использовать некоторые полезные возможности одного из языков, которые поддерживались не всеми браузерами.
Упорядочиванием сложившейся ситуации занялась европейская организация по стандартизации Ecma, специализировавшаяся в области информационных и коммуникационных систем. Разработка первой редакции спецификации началась в ноябре 1996 года. Принятие спецификации состоялось в июне 1997 года. Будучи отправленной в ISO/IEC JTC 1 для принятия по процедуре Fast-Tracking, она послужила основой международного стандарта ISO/IEC 16262:1998 [4]. В июне 1998 года общим собранием ECMA была принята вторая редакция ECMA-262, соответствующая ISO/IEC 16262. Третья редакция спецификации отличалась от предыдущей введением поддержки регулярных выражений, улучшением поддержки строк, введением новых управляющих конструкций, механизма исключений, форматирования при численном вводе и некоторыми другими изменениями. Принятый стандарт, будучи рекомендованным, а не обязательным, являясь результатом выделения общей части из двух исходных языков - JavaScript от Netscape и JScript от Microsoft, послужил в дальнейшем той основой, на которой создавались следующие браузерные движки, в том числе и других компаний (Google Chrome, Safari и многие другие).
Сейчас развитие сценарных языков уже следует за стандартом. В июне 2015 года Ecma приняла стандарт ECMAScript 6 (ECMAScript 2015, ES6), определяющий множество революционно-новых возможностей языка. Появились программы-транспилеры, преобразующие новый синтаксис к классическому, понимаемому всеми браузерами (например, модуль Babel, использующийся при сборке проектов в webpack [17]), что позволило разработчикам сразу начать использовать новые возможности, не дожидаясь добавления их поддержки разработчиками браузеров.
На сегодняшний день уже практически всеми браузерами последних версий поддерживаются многие или почти все возможности ES6. [6]
Все чаще написание программ на большинстве языков происходит в какой-либо среде разработки (Integrated Development Environment, IDE). Такая среда разработки, опираясь в свою очередь на установленный стандарт языка, ускоряя и облегчая рутинные операции по написанию кода, позволяет сократить количество ошибок, контролирует качество кода (так называемые программы-линтеры). Без строго заданных стандартов это также было бы невозможно.
Таким образом, сейчас процесс стандартизации языков программирования перестает быть упорядочиванием стихийно возникающих языков и их различных версий, как это происходило в первые годы разработки языков. Теперь в большинстве случаев команды разработчиков языка активно сотрудничают с организациями по стандартизации, предлагая нововведения к внесению в стандарт прежде их реализации. И с принятием нового стандарта вносятся изменения во все инструменты разработки. Или, как в случае со скриптовыми языками, интерпретируемыми браузерами, новые возможности добавляются в браузерные движки.
2. Предмет стандартизации в области разработки программного обеспечения
Стандарты на сегодняшний день покрывают практически все аспекты, связанные с информационными технологиями – начиная с терминологии, стандартов самих языков программирования, различных аспектов разработки системного и прикладного программного обеспечения, и заканчивая стандартами контроля качества программ.
Как и во многих других областях, в информационных технологиях стандартизации требовала прежде всего понятийная база. Так самый первый стандарт, ISO 2382:1974 определяющий общую терминологию, используемую в информационных технологиях, был принят еще в 1974 году. [8] Он, являясь своего рода словарем, состоял из нескольких частей, каждая из которых раскрывала понятия одной из областей: базовые понятия ИТ, семантики языков программирования, обработки данных, систем обработки информации и т.д. Целью этого стандарта являлось установить единую терминологию для всех производителей компьютерного оборудования и разработчиков программного обеспечения.
Последним ныне действующим значительно расширенным стандартом, определяющим терминологию ИТ, является ISO 2382:2015. [7]
Наличие такого стандартизированного и согласованного всеми заинтересованными участниками словаря терминов трудно переоценить, поскольку он исключает возможность недопонимания как между различными группами разработчиков, так и внутри самой группы.