Файл: Международные и отечественные стандарты языков программирования. Сходство и отличия стандартов ( Цель стандартизации языков программирования).pdf
Добавлен: 17.05.2023
Просмотров: 45
Скачиваний: 4
введение
В современном мире многие компании разрабатывают программы для себя или клиентов. И чтобы получить качественный результат с минимальным расходом человеческих и финансовых ресурсов, важно чтобы программисты, которые пишут программы, работали по одному, максимально адаптированному под задачи, стандарту языка программирования.
Компания может взять уже готовый стандарт или создать свой на основе другого, но чтобы выбрать или сделать его, нужно оценить преимущества и недостатки всех существующих стандартов.
Стандарты языков программирования формируются по всему миру, и чтобы подобрать лучший или сделать лучший, нужно опираться не только на отечественный опыт, но и на опыт всего мира.
В конечном итоге, чтобы выбрать или разработать максимально подходящий стандарт, нужно оценить уже существующие стандарты по всем миру, сравнить их между собой и взять один или несколько за основу.
Моя цель: показать значимость изучения стандартов языков программирования на примере сходств и различий между ними.
Основные задачи:
- Изучить цели стандартизации языков программирования.
- Разобрать два существующих стандарта языков программирования (отечественного и международного), найти отличия и сходства между ними.
- Траспонировать полученную информацию на жизненные обстоятельства.
Объектом исследования являются международные и отечественные стандарты языков программирования.
Предметом исслежования — сходства и отличия между международными и отечествеными стандартами для языков программирования.
Цель стандартизации языков программирования
Для начала, давайте разберемся, что такое язык программирования и для чего его нужно стандартизировать.
Язык программи́рования — формальный язык, предназначенный для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, определяющих внешний вид программы и действия, которые выполнит исполнитель (обычно — ЭВМ) под её управлением. Язык программирования предназначен для написания компьютерных программ, которые представляют собой набор правил, позволяющих компьютеру выполнить тот или иной вычислительный процесс, организовать управление различными объектами, и т. п[1]
Формулировка выше описывает современное значение языков программирования. Но исторически, первые языки программирования появились гораздо раньше изобретения компьютера и компьютерных программ.
Фактически, программируемыми можно считать музыкальную шкатулку или пианино. А до компьютеров, существовали аналитические машины и интерпритаторы.
Очевидно, что существует множество программируемых объектов, каждый из которых отличается задачами, функционалом и результатом. Логично, что для выполнения разных задач на разных объектах проще использовать новый язык программирования, чем пытаться адаптировать всё к одному: например, сложно металлический цилиндр с зубьями адаптировать для ткацкого станка, где благодаря картонным картам разделялись нити и направлялись в ткань.
Почти для каждого объекта был изобретен свой аутентичный язык со своими правилами и системой.
Возвращаясь к современности, компьютер объединил в себе большую часть инструентов, а именно их «мозговую, программную» часть. Теперь ткацкий станок подключаеся к компьютеру, а в компьютере ему уже задаются алгоритмы для шитья. Музыкальные колонки транслируют мелодию, которую мы задаем в компьютере.
Фактически, металлический цилиндр с зубьями и кортонка для ткацкого станка преобразовались в программы, которые задают работу аппаратов.
Но как и в старое время с большим количеством программируемых объектов, крайне сложно написать язык программирования, который смог бы одинаково быстро и качественно решать поставленные задачи программистов: создать новую программу, закодировать Электронно Вычислительную Машину и т.д.
И дело не в том, что не существует многофункциональных языков или умных программистов, проблема в том, что перед людьми стоит бесконечное множество разных задач и 1 язык не может решать их все максимально эффективно.
На сегодняшний день существует более 600 использумых языков программирования. Но даже, если программисты используют один язык для разных задач, то им приходится адаптировать его под свои задачи: не все возможности конкретного языка программирования нужны для выполнения задачи: программисты могут отключать некоторые функции, изменять уже существующие или добавлять новые. Соответственно, они изменяют не сам язык, а компилятор, присваевая одним переменным, функциям, правилам другие.
Тоесть, для каждой задачи, программисты могут оптимизировать язык и фактически, создать новые или усовершенствовать текущие правила работы с языком. И так, фактически, они меняют стандарт языка программирования.
В конечном итоге, мы получаем огромное количество версий языка программирования и не все компиляторы и программы могут давать одинаковый результат. Поэтому, для того чтобы компиляция одной и той же программы различными компиляторами всегда давала одинаковый результат, разрабатываются общие стандарты языков программирования.
Существует ряд организаций, целенаправленно занимающихся вопросами стандартизации. Это Американский национальный институт стандартов ANSI (American National Standards Institute), Институт инженеров по электротехнике и электронике IEEE (Institute of Electrical and Electronic Engineers), Организация международных стандартов ISO (International Standards Organization).
Как правило, при создании языка выпускается частный стандарт, определяемый разработчиками языка. Если язык получает широкое распространение, то со временем появляются различные версии компиляторов, которые не точно следуют частному стандарту. В большинстве случаев идет расширение первоначально зафиксированных возможностей языка. Для приведения наиболее популярных реализаций языка в соответствие друг с другом разрабатывается согласительный стандарт. Очень важным фактором стандартизации языка программирования является своевременность появления стандарта – до широкого распространения языка и создания множества несовместимых реализаций. В процессе развития языка могут появляться новые стандарты, отражающие современные нововведения. Так, язык FORTRAN первоначально был стандартизирован в 1966 году. В результате был издан стандарт FORTRAN 66. Далее этот стандарт несколько раз пересматривался (в 1977 году был выпущен FORTRAN 77, затем появился и FORTRAN 90). Язык Java, ставший в последнее время весьма распространенным, постепенно был значительно расширен и модифицирован: новая спецификация получила название Java 2.
В процессе развития языка некоторые его конструкции и функции устаревают. Однако с целью обратной совместимости новые версии должны поддерживать и все устаревающие возможности. Это ведет к «разбуханию» компиляторов. В последнее время в реализациях введено понятие нерекомендуемой и устаревшей возможности. В первом случае следующий стандарт еще будет поддерживать нерекомендуемую возможность, но может перевести ее в категорию устаревшей. Во втором случае стандарт может исключить поддержку возможности, объявленной ранее как устаревшая. Введение нерекомендуемых и устаревших возможностей предоставляет разработчикам временной интервал, в течение которого они могут модифицировать код в соответствии с новыми требованиями стандарта.[2]
Вывод: существует огромное количество версий языка, а точнее его компиляторов. Чтобы компиляция одной и той же программы различными компиляторами всегда давала одинаковый результат, разрабатываются общие стандарты языков программирования.
Отличия и сходства между двумя существующими стандартами языков программирования (отечественным и международным)
Итак мы знаем, что существуют общие стандарты языка программирования и даже есть организации, которые занимаются только созданием этих стандартов. Но не только крупные международные компании могут создавать стандарты — любая организация или группа программистов может выбрать или создать для себя новый стандарт. Опять же, исходя из своих задач.
Давайте сравним «общепринятый» международный стандарт языка С++ и созданный на его основе стандарт отечественной компании «Kernel».
Полный список изменений вы можете прочитать по ссылке http://1io.ru/files/stdcpp_0.1.1.2b.pdf
Я же постараюсь обобщенно рассказать про изменения и сделать выводы, зачем они были внесены.
Стандарт предлагает оптимизировать работу с кодом и ускорить её, путем использования «(до 10 строк кода) встроенные функции».
«Архитектура расположения файлов проекта должна быть сформирована таким образом, чтобы путь до файла был написан без спец. сокращений (например, «.» — текущий каталог или «..» - каталог уровнем выше). А включения нужно располагать в алфавитном порядке»
«Параметры функции по умолчанию запрещены. Все параметры, применяемые в функции, должны быть явно заданы при ее вызове»
«Массивы переменной длины и alloca запрещены»
«Переменные пишутся только в нижнем регистре»
Я перечеслил несколько изменений в стандарте компании «Kernel». Очевидно, что изменения не затрагивают глубокий функционал и имеют больше косметический характер. Все изменения направлены на ускорение работы при написании кода и его компиляции: уменьшение количества строк, упрощение механики и стандартизация переменных.
В конкретной компании «Kernel» не требуются сложные массивы, громоздкие вычисления и операции, для организации важно, что код получился простой для понимания и к нему могли быстро подключаться новые программисты.
Если рассмотреть стандарт для более крупной организации: «Google C++ Style Guide» (полный стандарт вы можете посмотреть по ссылке: https://google.github.io/styleguide/cppguide.html)
Они вносят больше изменений в правилах работы с языком программирования, строго ограничивая рамки написания кода: например запрещая объявлять несколько переменных в одном объявлении, если какая-либо из переменных содержит указатель или ссылку; или указывая ситуации для использования скобок «(,)», «{,}»...
Для такой крупной организации важна не простота языка, а потенциальное количетсво ошибок. Так как задачи, которые решаются при помощи «Google C++ Style Guide» обширнее и сложнее, чем у компании «Kernel», «Google» не может ставить ограничения на сложность кода. Для них важно уменьшить количество ошибок и разночтений.
Поговорим о сходствах: очевидно, что ни «Kernel», ни «Google» не вносят критических изменений в стандарт языка: они скорее стараются уменьшить количество разночтений и ошибок.
Глубокой «перестройкой» языка занимаются профильные организации типа: ANSI (American National Standards Institute), Институт инженеров по электротехнике и электронике IEEE (Institute of Electrical and Electronic Engineers), Организация международных стандартов ISO (International Standards Organization) и реже другие компании.
Выводы: крупные различия между стандартами не сильно зависят от местоположения компании или организации, не так важно отечетсвенная она или международная. Важен размер компании или организации и масштабность задач, которые они решают.
Отличия между стандартами прослеживаются между мелкими компаниями, крупными компаниями и профильными организациями. У каждой из них свой пул задач, для которого они изменяют стандарт.
Соответственно, у объектов в рамках одной категории больше сходств и отличия незначительны.
Наложение полученных результатов на жизненные обстоятельства
В конечном итоге, мы получаем 3 группы разных стандартов языков программирования: маленькой компании, крупного бизнеса, профильной организации.
И если ваш проект вписывается в одну из этих групп, то вовсе не обязательно придумывать свой стандарт. Логичнее выбрать стандарт копании из данной группы и взять его без изменений или слегка адаптировать.