Компьютерная программа
Компью́терная програ́мма — набор команд для компьютера, описывающий алгоритм его действий при выполнении некоторой задачи.
В аналогичном смысле программою называют также набор инструкций, описывающих порядок действий любой другой вычислительной машины (например, программируемого калькулятора) или автомата (такого, как жаккардовый ткацкий станок), однако такие программы не называют компьютерными.
Процесс составления компьютерной программы называется программированием, а людей, занимающихся программированием, называют программистами. В широком смысле к программированию относят весь процесс сочинения программы, который нередко включает ряд фаз, предшествующих собственно программированию (планирование, составление алгоритма, и т. д.).
Существует собирательное понятие «программное обеспéчение», в рамках которого объединяются все программы, предназначенные для выполнения тех или иных задач; и в рамках него они классифицируются по функциональному назначению (прикладное программное обеспечение, системное программное обеспечение, и т. д.), по отношению к интеллектуальной собственности их авторов (свободное программное обеспечение, собственническое программное обеспечение, и т. д.), и так далее.
Составление и исполнение программы[править | править код]
Конечной формой любой программы является машинный код, предназначенный для непосредственного исполнения устройством управления, которое в современных компьютерах является частью процессора. Так как машинный код имеет форму, мало пригодную для составления и даже для восприятия человеком (кодовые номера операций), то вместо программирования в машинном коде используются другие приёмы и средства, облегчающие труд программиста.
Исторически первым (и наиболее примитивным) из них является программирование на языке ассемблера, в котором каждому элементу машинного кода поставлен в соответствие собственный буквенный (мнемонический) код, пригодный для запоминания и употребления человеком (программистом). Когда программист составит программу на языке ассемблера, он запускает особую программу (ассемблер), предназначенную для перевода этого кода в машинный код, затем сохраняемый на диске в виде файла, пригодного для запуска на исполнение. (Этим запуском в случае необходимости занимается загрузчик программ, входящий в состав операционной системы компьютера.)
Языки программирования высокого уровня[править | править код]
Более распространённым, чем язык ассемблера, в наши дни является программирование при помощи языков программирования высокого уровня. Элементы этих языков освобождены от однозначного соответствия машинному коду того или иного процессора, а предназначены для формального описания алгоритмов. При этом могут применяться два различных подхода:
- Императивное программирование — описание порядка действий компьютера, управляющих его поведением и состоянием. В рамках этого подхода исторически развиваются разные методы (структурное программирование, процедурное программирование, объектно-ориентированное программирование, событийно-ориентированное программирование и т. д.), некоторые из которых подчас применяются одновременно.
- Декларативное программирование — выбор конкретного алгоритма автоматизируется, а программист задаёт только ряд требований, которым решение задачи должно удовлетворять. Примерами подходов декларативного программирования являются:
- функциональное программирование, в котором алгоритм описывается как вычисление некоторой математической функции (возможно, определяемой через другие математические функции),
- логическое программирование — автоматическое доказательство теорем и применение логического вывода, что приводит к созданию информации на основе имеющегося набора фактов и правил.
Употребление языков высокого уровня увеличивает продуктивность труда программиста, так как автоматизирует трудоёмкий процесс перевода алгоритма в машинные коды, а также способствует переносимости программы между системами с различными процессорами, машинный код у которых различается. Кроме того, употребление комментариев к исходному коду программ (невозможное в машинном коде) улучшает понятность программы с человеческой точки зрения, как для других программистов (например, при совместном программировании), так и для первоначального автора.
Преобразование программы в машинный код[править | править код]
Программа на языке высокого уровня, подобно вышеописанному коду на языке ассемблера, также нуждается в преобразовании в машинный код перед её исполнением. Возможны следующие подходы к этой задаче:
- Компиляция, то есть обработка исходного кода программы другой специализированной программою (компилятором), создающим исполнимый файл с машинным кодом внутри. Запуск этого файла является достаточным для исполнения программы, так что он может распространяться отдельно от компилятора и от исходного кода.
- Интерпретация программ — при этом подходе исходный код программы воспринимается как набор инструкций для другой специализированной программы (интерпретатора), которая-то и занимается исполнением этих инструкций (самостоятельно подбирая необходимый для этой задачи машинный код).
Интерпретация по сравнению с компиляцией имеет и недостаток, которым является необходимость интерпретатора для исполнения программы, и достоинство, которым является возможность запуска исходного кода программы (без отдельного подготовительного действия компиляции, без создания отдельного исполняемого файла).
Действия самогó компилятора или интерпретатора зависят от конкретного языка программирования и от системы машинных кодов конкретного процессора, поэтому компиляторы и интепретаторы производятся отдельно для каждого языка программирования и отдельно для каждой из компьютерных платформ, отличающихся по системе машинных кодов и (или) по способу их запуска. Компиляция некоторой программы компилятором также производится отдельно для каждой из платформ и порождает различные машинные коды, соответствующие особенностям той или иной платформы.
Нередким является наличие нескольких компиляторов или интерпретаторов для одного и того же языка высокого уровня, созданных различными производителями. Обыкновенно они также различаются возможностями языка (например, наборами готовых, ужé реализованных, алгоритмов, готовых к употреблению программистами).
Декларативные языки программирования, как правило, являются интерпретируемыми, так как принцип описания алгоритмов, в них принятый, исключает однозначный перевод программы на машинные коды и требует принятия решений интерпретатором.