Что такое язык программирования
Язык программирования (ЯП) - семантическая система со строго формализованным синтаксисом, позволяющая создавать, хранить и редактировать алгоритмы для компьютеров привычными человеку языковыми средствами.
Текст, написанный на языке программирования, может быть преобразован в машинные коды - последовательность числовых команд и данных, пригодных для выполнения электронным процессором.
За последние несколько десятилетий было создано множество языков программирования для различных целей:
- управления автоматическими устройствами;
- создания настольных приложений;
- создания мобильных приложений;
- создания веб-приложений;
- обработки данных научных и статистических исследований;
- разработки компьютерных игр;
- организации сетевых коммуникаций и т.п.
Существует также большое количество вспомогательных синтаксисов, не являющихся полноценными (полными по Тьюрингу) языками программирования, но активно используемых в информационных технологиях (html, css, json, markdown и др.).
Специалист в области информационных технологий должен хорошо ориентироваться в языках программирования. Существуют их многочисленные классификации. Ниже будут рассмотрены наиболее важные из них.
Уровни языков программирования. Компиляция и интерпретация
В зависимости от того, насколько синтаксис языков программирования абстрагирован от машинных кодов, можно разделить их на ЯП низкого и высокого уровня. В низкоуровневом программировании используются непосредственно машинные коды, а также инструкции ассемблера, позволяющие заменить команды-числа на понятные человеку сокращения.
Для преобразования таких мнемонических сокращений в доступные процессору бинарные последовательности используются промежуточные программы: компиляторы, интерпретаторы, трансляторы.
Ниже приведен фрагмент программы, в которой сопоставляются команды ассемблера (sub, mov, xor, callq, add) и их аргументы (справа от команд) с порождаемыми ими машинными кодами (средняя колонка). В колонке слев приводятся номера первых байт машинного кода в каждой строке.
2004b0 48 83 ec 08 sub $0x8,%rsp
2004b4 bf bc 05 20 00 mov $0x2005bc,%edi
2004b9 31 c0 xor %eax,%eax
2004bb e8 e8 fe ff ff callq getData
2004c0 48 83 c4 08 add $0x8,%rsp
2004c4 83 c0 01 add $0x1,%eax
Языки высокого уровня позволяют писать программы с помощью синтаксисов, близких к нормальному человеческому языку. Например, следующий код на современном языке JavaScript
let greating = 'Hello, World!'
console.log.print(greating)
легко "перевести" на обычный язык: "Пусть приветствием будет фраза 'Hello, World!'. Напечатать на консоли приветствие".
В настоящее время низкоуровневыми языками пользуется очень небольшое количество специалистов. В основном они заняты в сфере производства микропроцессорной электроники. Это свидетельствует не о падении квалификации нынешних программистов, а о росте мощности компьютеров и повышении надежности, эффективности и расширении возможностей высокоуровневых языков.
Разделение языков на низко- и высокоуровневые представляет интерес в основном в историческом и образовательном контекстах.
Группы языков по происхождению.
В ходе эволюции языков программирования одни из них оказывались бесперспективными и сходили со сцены, другие, напротив, порождали множества языков-последователей. Одним из самых плодотворных в этом отношении оказался появившийся в начале 1970-х гг. язык Си. От него ведут свое происхождение такие мощные и до сих пор актуальные языки программирования, как C++, C#, Java, JavaScript. Синтаксис этих языков построен на использовании скобок (круглых, квадратных, фигурных) некоторых спецсимволов (||
, &&
).
Существует и другая ветвь развития ЯП, синтаксис которых берет свое начало от одного их первых языков программирования - Fortran. В их текстах активно используются ключевые слова (begin, end), для обозначения вложенности в вычислительные блоки широко применяются отступы и переводы строк. К таким языкам относятся Pascal и его производные, Python, CoffeeScript и др.
Интерпретируемые и компилируемые языки программирования.
В зависимости от того, как исходный код программы превращается в выполняемые процессором инструкции, языки программирования делятся на компилируемые и интерпретируемые. В первом случае текст, написанный программистом, сначала преобразуется в бинарную последовательность и записывается в долговременную память компьютера. После этого его можно многократно использовать. Если потребовалось внести в программу изменения - нужно отредактировать текст программы и заново его откомпилировать.
Программы на интерпретируемых языках запускаются на исполнение сразу же, минуя стадии компиляции и сохранения. Это удобно, когда алгоритм интенсивно отлаживается. Недостатком интерпретируемых языков является несколько большее потребление ресурсов компьютера (оперативной памяти, процессорного времени) и более длительный запуск, по сравнению с бинарными файлами.
Парадигмы программирования
В последние годы все чаще можно говорить о конкуренции не между языками программирования, а между парадигмами.
Современные ЯП достаточно просты в освоении, и специалист может успешно пользоваться сразу несколькими. Однако для успешной работы он должен выбрать еще и стиль написания: удобнее ли ему представлять предметную область в виде взаимосвязанных объектов (объектно ориентированное программирования) или лучше описать ее в форме последовательно вызываемых функций (функциональное программирование).
Парадигма программирования - набор принципов, определяющих подход к написанию алгоритмов.
К наиболее распространенным парадигмам относятся:
- объектно-ориентированное программирование;
- функциональное программирование;
- императивное программирование (учет состояний программы и изменяющих их команд);
- визуальное программирование (сборка программы из модулей, представленных как графические объекты) и т.п.
Современные развитые ЯП поддерживают, как правило, сразу несколько парадигм. Так, например, на JavaScript можно писать как в функциональном, так и в объектно-ориентированном стилях.