Язык программирования

Материал из «Знание.Вики»
«Hello world» на языке программирования C#

Язык программирования — это формальный язык, используемый для формулирования структур данных и алгоритмов, то есть вычислительных правил которые могут быть выполнены компьютером. Они обычно состоят из пошаговых инструкций, которые составлены из разрешенных (текстовых) шаблонов, называемых синтаксисом.[1]

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

Характеристики

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

  • Логическое развитие программы для решения конкретной задачи.
  • Написание логики программы с использованием определенного языка программирования (кодирование программы).
  • Компилирование или интерпретация программы после преобразования её в машинный язык.
  • Тестирование и отладка программы.
  • Написание документации.

По сути язык программирования состоит из набора символов (называемого алфавитом), грамматических (лексических/морфологических и синтаксических) и семантических правил, которые вместе определяют допустимые языковые структуры и их значение.[2] Существуют ошибки, которые не позволяют рассматривать термины «язык программирования» и «компьютерный язык» как синонимы. Компьютерные языки включают в себя языки программирования и другие, такие как, например, HTML (язык разметки веб-страниц, который сам по себе не является языком программирования, а представляет собой набор инструкций, позволяющих структурировать содержимое документов).

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

История

Если вы хотите, чтобы компьютер понял ваши инструкции, вам необходимо использовать определенный язык. Он известен как машинный код и легко читается вычислительной машиной, но слишком сложен для людей. Фактически, он состоит только из длинных строк чисел 0 и 1.

Пример кода COBOL

Чтобы облегчить работу, первые операторы компьютеров решили создать переводчик для замены 0 и 1 словами или абстракцией слов и букв, происходящих из английского языка; это известно как язык ассемблера. Например, для сложения используется буква A английского слова add (добавлять) Системный язык ассемблера имеет ту же структуру, что и машинный язык, но буквы и слова легче запомнить или понять, чем цифры.

Чтобы запомнить программные последовательности для обычных действий, их стали называть легко запоминающимися и ассоциируемыми именами: ADD (добавить), SUB (вычесть), MUL (умножить) и т. д. Эта последовательность позиций была названа «инструкциями», а этот набор инструкций был переименован языком ассемблера. Впоследствии появились различные языки программирования, которые получили свое название потому, что имеют синтаксическую структуру, аналогичную структуре языков, написанных людьми, также называемых языками высокого уровня.

Джон Бэкус в 1953 году представил своему начальству предложение разработать более практичную альтернативу языку ассемблера[3]для программирования мэйнфрейма IBM 704. Историческая команда Fortran Джона Бэкуса состояла из программистов Ричарда Голдберга, Шелдона Ф. Беста, Харлана Херрика, Питера Шеридана, Роя Натта, Роберта Нельсона, Ирвинга Циллера, Лоис Хейбт и Дэвида Сэйра.

Первое руководство по языку Fortran появилось в октябре 1956 года[4], а первый компилятор Fortran был выпущен в апреле 1957 года. В результате клиенты не хотели использовать язык высокого уровня в случае, если их компилятор не мог создать код, производительность которого была сопоставима с производительностью кодов, созданных вручную на языке ассемблера.


В 1960 году был создан COBOL, один из языков, используемых до сих пор в управленческой информатике. Когда сложность задач, выполняемых компьютерами, возросла, возникла необходимость в более эффективном методе их программирования.[5] В результате были созданы языки высокого уровня, такие как BASIC на микрокомпьютерах 1980-х годов. Для выполнения простой задачи, как сложение двух чисел, может потребоваться несколько инструкций на языке ассемблера. На языке высокого уровня достаточно одного оператора.

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

Языки программирования исторически разделялись по разным критериям:

Историческая классификация

Из-за появления новых языков для более выразительного программирования, такие стили различались в нескольких поколениях, каждое из которых представляло языки разработки с похожими общими характеристиками. Что касается языков высокого и низкого уровня, то они имеют свои особенности.

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

Классификация по парадигмам

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

Классификация по назначению

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

Классификация по поколениям

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

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

Первое поколение

На первых компьютерах был реализован машинный код[8] (основанный на двоичной системе), который может быть представлен последовательностями 0 и 1. Однако, каждая модель компьютера имеет свою собственную внутреннюю структуру при программировании. Они были названы языками низкого уровня, потому что они прямо контролируют оборудование и связаны с физической структурой компьютеров. которые их поддерживают. Из-за того, что этот тип языка намного ближе к машинной логике, чем к человеческой, программировать на нем очень сложно. Этот язык используется для планирования критически важных задач операционных систем, приложений реального времени или драйверов устройств. Другое ограничение этих языков заключается в том, что для выполнения логических инструкций требуются определенные знания программирования.

Второе поколение

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

Третье поколение

Языки высокого уровня заменили символические инструкции машинными кодами[9], подобными человеческому языку или языку математики. Это сделано для того, чтобы обычный пользователь мог быстрее решить проблему обработки данных. Они используются для создания программного обеспечения в вычислительных областях, где достигается высокая производительность по сравнению с языками предыдущих поколений. Среди них, в частности, C, Fortran, Smalltalk, ADA, C++, C#, Cobol, Delphi, Java и Python. Большинство этих языков могут быть универсальными, то есть язык не ориентирован на одну специальность, а может использоваться для создания различных программ. Для многих самых популярных задач существуют библиотеки, упрощающие программирование, которые позволяют повторно использовать код.

Четвертое поколение

Это название был присвоено определенным инструментам, которые позволяют создавать простые приложения путем объединения готовых деталей. Сегодня считается, что эти инструменты, в общем-то, не являются языками. В частности, некоторые предлагают зарезервировать название четвертого поколения для объектно-ориентированного программирования. По структуре они напоминают английский язык. Другие функции: доступ к базе данных, графические возможности, автоматическая генерация кода и возможность визуального программирования (например, Visual Basic или SL). При этом его преимущества — это более высокая производительность и меньшая утомляемость у программистов, поскольку предоставляемые инструменты включают последовательности инструкций. Необходимость концентрации ниже, поскольку некоторые инструкции, которые даются инструментам, включают последовательности инструкций на другом уровне внутри инструмента. Когда нужно поддерживать уже существующие программы, это менее сложно, поскольку требует более низкого уровня концентрации. Однако его недостатки заключаются в том, что эти готовые инструменты обычно менее гибкие, чем прямые инструкции в языках низкого уровня. Также часто создается зависимость от одного или нескольких сторонних поставщиков, что приводит к потере автономии. Они часто содержат библиотеки других поставщиков, что влечет за собой установку дополнительных опций, которые считаются необязательными. При отсутствии договоров с поставщиками, это программы, которые работают исключительно на языке, на котором были созданы. Это означает, что они обычно не соответствуют международным стандартам ISO и ANSI, что сопряжено с риском в будущем, поскольку время их пребывания на рынке неизвестно. 

Парадигма программирования

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

Он связан с формализацией определенных языков на тот момент их определения. Это один из способов программирования. Задержка во времени с точки зрения принятия и использования ограничена, потому что новые парадигмы предлагают новые или лучшие решения, которые частично или полностью заменяют её. На данный момент наиболее широко используемая парадигма программирования — это «объектно-ориентированная» (объектно-ориентированная). Основной ядром этой парадигмы является объединение данных и обработки в сущность, которая называется «объект», связанную с другими «объектными» сущностями.

Элементы

Переменные и векторы

Переменные — это заголовки, которые присваивают пространствам в памяти для хранения определенных данных. Это контейнеры данных, и поэтому они различаются в зависимости от типа данных, которые они способны хранить.[11] При использовании большинства языков программирования требуется указать конкретный тип переменной для сохранения определенных данных. Например, в Java, если мы хотим сохранить текстовую строку, нам нужно указать тип переменной String. Однако в таких языках, как PHP или JavaScript, эта спецификация переменных не нужна.

Тип данных Краткое описание
Char Эти переменные содержат один символ, то есть букву, знак или число.
Int Они содержат целое число.
Float Они содержат десятичное число.
String Они содержат текстовые строки или, что то же самое, представляют собой вектор с несколькими переменными типа Char.
Boolean Они могут содержать только ноль или единицу.

Условные выражения

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

If Указывает условие для выполнения части программы.[12]

Else if Всегда предшествует «If» и указывает условие для выполнения части программы, если она не соответствует условию предыдущего if.

Else Всегда предшествует if, а иногда Else If. Указывает, что он должен быть выполнен, когда предварительные условия не выполняются.

Циклы

К циклам относятся условные выражения, но они постоянно выполняют код до тех пор, пока выполняется определенное условие. Самые частые из них — это:

For — Код выполняется, пока переменная находится между двумя заданными параметрами.

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

While Выполняет код до тех пор, пока выполняется запрошенное вами условие.

Функции

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

Синтаксис

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

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

Реализация

Реализация языка — это способ выполнения программы для определенной комбинации программного и аппаратного обеспечения. Есть два способа реализации языка: компиляция и интерпретация.[13]

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

Примечания

  1. История языков. oselkschool.ru.
  2. Грамматика языков программирования. www.psciences.net.
  3. Персона. Джон Бэкус — создатель первого языка программирования высокого уровня. Хабр.
  4. Fortran: 65 лет с момента выхода первого справочного руководства. www.linux.org.ru.
  5. Вероника Елкина. COBOL — язык программирования, на котором работают почти все банкоматы. Rusbase.
  6. 6. Языки программирования и их классификация.. StudFiles.
  7. IT&Life. Основные этапы истории развития компьютеров (рус.) ?. ITandLife.ru (21 апреля 2021).
  8. Алан Тьюринг, отец современного компьютера. itnan.ru.
  9. Языки программирования высокого уровня: высокоуровневые языки (рус.) ?. Уроки по программированию Programmera.ru (12 июля 2017).
  10. Парадигмы программирования: что это, какие виды бывают, примеры использования. Парадигмы программирования: что это, какие виды бывают, примеры использования.
  11. Переменная в программировании. Что это такое?. Skysmart.
  12. Marat Abdrakhmanov. C#. Урок 6. Условные операторы и циклы (рус.) ? (24 ноября 2020).
  13. Трансляция, компиляция и интерпретация | Контент-платформа Pandia.ru. pandia.ru.
WLW Checked Off icon.svg Данная статья имеет статус «готовой». Это не говорит о качестве статьи, однако в ней уже в достаточной степени раскрыта основная тема. Если вы хотите улучшить статью — правьте смело!