Файл: Международные и отечественные стандарты языков программирования. Сходство и отличия стандартов (Организация ANSI).pdf
Добавлен: 04.04.2023
Просмотров: 358
Скачиваний: 1
ВВЕДЕНИЕ
Стандартизация – неотъемлемый процесс, позволяющий привести общие наработки к единому стилю исполнения, качеству, технологическому процессу и сведению к единому образу изготовляемых продукций. Процесс стандартизации позволяет приводить процесс производства и изготовления к пошаговым действиям и играет курирующую роль на всех этапах. Стандартизация применяется повсеместно и во всех отраслях, так, к примеру, стандарт 2014 года от организации USB-IF, позволил привести контактные разъёмы всех мобильных устройств к единому стилю, благодаря чему, на сегодняшний день любой USB кабель способен беспрепятственно использоваться для передачи информации любого гаджета, а также его зарядке.
Язык программирования [1] — формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под ее управлением.
Со времени создания первых программируемых машин увеличивалось и число самих языков программирования. На сегодняшний день их насчитывают более двух с половиной тысяч. Каждый год их число увеличивается. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования. Создатели языков по-разному толкуют понятие язык программирования, однако сами языки программирования могут быть представлены в виде набора спецификаций, определяющих его синтаксис и семантику. Однако даже при наличии десятков тысяч программ для PC [2], пользователям зачастую требуется иные возможности программного обеспечения имеющихся программ. В этих случаях следует использовать системы программирования [3], т.е. системы для разработки новых программ. Эти системы обычно включают компилятор, осуществляющий преобразование программ на языке программирования в программу в машинных кодах, или интерпретатор, осуществляющий непосредственное выполнение программы на языке программирования, редактор текстов программ, библиотеки полезных подпрограмм, отладчики, а иногда и различные вспомогательные программы. Для популярных языков программирования (Си, Си++, Паскаль, Бейсик, Фортран и др.) имеется множество систем программирования, позволяющих создавать программы, работающие в среде DOS, Windows и др. В последнее время стали появляться системы программирования на языке Java, они позволяют создавать программы, вызываемые при просмотре Web-страниц в глобальной электронной сети Internet. Особым классом систем программирования являются системы для создания приложений типа клиент-сервер. Эти системы позволяют быстро создавать информационные системы для подразделений и даже крупных предприятий. В них содержатся средства для создания пользовательского интерфейса, описания процедур обработки данных, заготовки для выполнения типовых действий по обработке данных и т.д. Эти системы, как правило, позволяют работать с самыми различными СУБД — Oracle, MS SQL Server и др.
Таким образом, при всём многообразии языков программирования, созданные алгоритмы и инструкции к определённым программам, зачастую попросту не подходили к предназначенным им компиляторам или интерпретаторам, а иногда производили результат существенно отличимый от запланированного, в виду индивидуальности своего кода и наличию в нём различных ошибок. Во избежание «уникальности» ПО, было принято решение о стандартизации языков программирования, подразумевающее под собою сведение свободных вариантов языковых единиц к одному. Создание сложной системы немыслимо без единых стандартов. Они нужны для борьбы с хаосом и неразберихой, но вместе с этим стандарт не должен быть слишком «узким» и мешать техническому прогрессу. Государственные стандарты отслеживают тенденции развития программирования и дают обязательные рекомендации по их соблюдению. Помимо государственных стандартов (ГОСТ) действуют отраслевые стандарты (ОСТ), стандарты предприятий (СТП).
1. Разработка языков программирования и компиляторов
Идеальный язык программирования — это такая же недостижимая мечта, как и идеальная жизнь. Но стремление к совершенству приводит к появлению вещей, которые делают нашу жизнь лучше. Скептики могут увидеть в этом изобретение очередного велосипеда. Но и это не бывает напрасным: если очередной велосипед не стал лучше прежнего, то сам процесс улучшает изобретателей. Велосипед может быть забыт и выкинут, а вот изобретатели приобретут инженерный опыт.
Изначально языков программирования не было вовсе, были машинные коды - команды непосредственно для процессора, который мог получать данные из внешних источников (перфокарты, магнитная лента и т.д.), сохранять в своих ячейках (регистрах) или в ячейках оперативной памяти, проводить арифметические и битовые операции над данными в регистрах, сохранять, обменивать, в зависимости от условий выбирать следующую команду, обрабатывать разные события (прерывания) и т.д. Современные процессоры делают то же самое, но с большим числом оптимизаций и распараллеливания.
Для каждой команды был какой-то код, для удобства записываемый как 16-ричное число. Например, (условно), код: "A3 DD 05 00" мог загружать в регистр A число 5, а код "DD" - складывать регистр A с регистром B, помещая результат в B.
К великому сожалению, отечественный след в истории кибернетики значительно скромнее, чем бы он мог быть. Особенно это касается языков программирования. Единственный отечественный язык программирования, получивший общемировую известность, это язык Рефал [4]. Однако распространённость этого языка весьма и весьма мала.
Первым в мире транслятором языка высокого уровня является ПП «Программирующая Программа», он же ПП-1, успешно испытанный в 1954 году. Транслятор ПП-2 (1955 год, 4 в мире транслятор) уже был оптимизирующим и содержал собственный загрузчик и отладчик, библиотеку стандартных процедур. Первыми программами, принадлежащими системному программному обеспечению, были трансляторы — ассемблеры и автокоды на Западе, программирующие программы (ПП) у нас.
Появление системного программирования поставило задачу создания адекватных языков программирования. Все языки, появившиеся к началу 60 годов — Фортран, Кобол, Алгол-60 и другие, — не учитывали этой области программистской деятельности, и алголовские системы, будучи достаточно большими программными системами, писались еще в машинных кодах вручную.
Основоположником информатики в СССР, в частности раздела автоматизации программирования, является Алексей Андреевич Ляпунов, первым предложивший рассматривать программу как последовательность чередующихся этапов, на которых выполняется некая обработка данных. Этап Ляпунов предложил назвать оператором, а схемой счета — совокупность операторов и логических условий. Схема и совокупность спецификаций каждого оператора — это программа. Взгляд на программу в таком ключе стал революционным и сразу лег в основу первых трансляторов (компиляторов) или программирующих программ, как их тогда называли.
В США Программирование появилось задолго до 50-х годов XX века. Первые идеи высказал ещё Чарльз Бэббидж, которого по праву считают отцом компьютера. Он не знал о транзисторах, микросхемах и мониторах, но достаточно точно описал основные принципы, на которых будут строится все вычислительные машины. Развила идею графиня Ада Лавлейс. Её место в истории до сих вызывает немало споров, но одно абсолютно точно – именно Ада фактически стала первым известным программистом. Благодаря её трудам стало понятно, что путь к эффективному использованию машин – алгоритмы, описанные в коде.
В 1950-х всё было иначе – приходилось работать с элементарными машинными кодами, а это практически всё равно что программировать при помощи паяльника.
Ещё одной проблемой было то, что за разработку языков отвечали люди, непосредственно связанные с созданием компьютеров – в первую очередь инженеры и лишь вынужденно программисты. Потому они и представляли язык в виде последовательности номеров операций и ячеек памяти.
Программистам приходилось долго учиться машинным командам, потом внимательно писать код, а после завершения ещё несколько раз его перепроверять – риск ошибки был велик. Проблемы возникла, когда развитие машин стало тормозиться нехваткой кадров для написания программ. Требовалось срочное решение.
2. Стандартизация языков программирования
Как правило, при создании языка выпускается частный стандарт, определяемый разработчиками языка. Если язык получает широкое распространение, то со временем появляются различные версии компиляторов, которые не точно следуют частному стандарту. В большинстве случаев идет расширение зафиксированных первоначально возможностей языка. Для приведения наиболее популярных реализаций языка в соответствие друг с другом разрабатывается согласительный стандарт. Очень важным фактором стандартизации языка программирования является своевременность появления стандарта – до широкого распространения языка и создания множества несовместимых реализаций. В процессе развития языка могут появляться новые стандарты, отражающие современные нововведения.
В процессе развития языка некоторые его конструкции и функции устаревают. Однако с целью обратной совместимости новые версии должны поддерживать и все устаревающие возможности. Это ведет к "разбуханию" компиляторов. В последнее время в реализациях введено понятие «не рекомендуемой» и «устаревшей» возможности. В первом случае следующий стандарт еще будет поддерживать не рекомендуемую возможность, но может перевести ее в категорию устаревшей. Во втором случае стандарт может исключить поддержку возможности, объявленной ранее как устаревшая. Введение не рекомендуемых и устаревших возможностей предоставляет разработчикам временной интервал, в течение которого они могут модифицировать код в соответствии с новыми требованиями стандарта.
Эволюцию стандартизацию языков программирования можно разделить на три этапа:
а. Наличие для конкретного языка частного стандарта. Такой подход подразумевает, что разработчики компиляторов сами определяют семантику и синтаксис являются стандартными для языка. Это приводит к хаосу и не соответствию разных компиляторов.
б. Появление согласительного стандарта, данный этап подразумевает что производители компиляторов договариваются межу собой о стандарте языка. Такой вариант лучше, чем частный стандарт, однако с каждой новой версией языка разработчикам компиляторов приходится договориться заново. Два выше описанных этапа среди общего списка недостатков, имеют 1 главный - не своевременная стандартизация новых версий.
в. Появление организаций, предназначенных сугубо для установки различных стандартов.
Первые компьютеры приходилось программировать двоичными машинными кодами. Однако программировать таким образом — довольно трудоемкая и тяжелая задача. Для упрощения этой задачи начали появляться языки программирования низкого уровня, которые позволяли задавать машинные команды в понятном для человека виде. Для преобразования их в двоичный код были созданы специальные программы — трансляторы.
Трансляторы делятся на:
компиляторы — превращают текст программы в машинный код, который можно сохранить и после этого использовать уже без компилятора (примером является исполняемые файлы с расширением *.exe).
интерпретаторы — превращают часть программы в машинный код, выполняют его и после этого переходят к следующей части. При этом каждый раз при выполнении программы используется интерпретатор.
Примером языка низкого уровня является ассемблер. Языки низкого уровня ориентированы на конкретный тип процессора и учитывают его особенности, поэтому для переноса программы на ассемблере на другую аппаратную платформу её нужно почти полностью переписать. Определенные различия есть и в синтаксисе программ под разные компиляторы. Правда, центральные процессоры для компьютеров фирм AMD и Intel практически совместимы и отличаются лишь некоторыми специфическими командами. А вот специализированные процессоры для других устройств, например, видеокарт и телефонов содержат существенные различия.
Языки низкого уровня, как правило, используют для написания небольших системных программ, драйверов устройств, модулей стыков с нестандартным оборудованием, программирование специализированных микропроцессоров, когда важнейшими требованиями являются компактность, быстродействие и возможность прямого доступа к аппаратным ресурсам.
Ассемблер — язык низкого уровня, широко применяется до сих пор.
В пятидесятые годы двадцатого века с появлением компьютеров на электронных лампах началось бурное развитие языков программирования. Компьютеры, стоившие в то время значительно дороже, чем разработка любой программы, требовали высокоэффективного кода. Такой код разрабатывался вручную на языке Ассемблер. В середине 50-х годов под руководством Джона Бэкуса для фирмы «IBM» был разработан алгоритмический язык программирования «FORTRAN». Несмотря на то, что уже существовали разработки языков, выполняющие преобразование арифметических выражений в машинный код, создание языка FORTRAN (FORmula TRANslator), предоставляющего возможность записи алгоритма вычислений с использованием условных операторов и операторов ввода/вывода, стало точкой отсчета эры алгоритмических языков программирования.