Компьютерная программа - Computer program

Компьютерная программа "hello, world", автор: Брайан Керниган (1978)

А компьютерная программа это собрание инструкции[1] это может быть казнен по компьютер для выполнения конкретной задачи.

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

Сборник компьютерных программ, библиотеки, и связанные данные называются программного обеспечения. Компьютерные программы можно классифицировать по функциональным направлениям, например: программное обеспечение и программное обеспечение. Базовый метод, используемый для некоторых вычислений или манипуляций, известен как алгоритм.

История

Взлом кода алгоритмы существуют веками. В 9 веке Арабский математик Аль-Кинди описал криптографический алгоритм расшифровки зашифрованного кода, в Рукопись о расшифровке криптографических сообщений. Он дал первое описание криптоанализ к частотный анализ, самый ранний алгоритм взлома кода.[2]

Ранние программируемые машины

Самые ранние программируемые машины предшествовали изобретение цифрового компьютера. Еще в 9 веке программируемый музыкальный секвенсор был изобретен персидским Бану Муса братья, описавшие автоматизированный механический флейта игрок в Книга гениальных устройств.[3][4] В 1206 году арабский инженер Аль-Джазари изобрел программируемый драм-машина где музыкальный механический автоматы можно было заставить играть разные ритмы и образцы ударных.[5] В 1801 г. Жозеф-Мари Жаккард разработал ткацкий станок которые соткали бы узор, следуя серии перфорированных карт. Узоры можно было соткать и повторить, раскладывая карточки.[6]

Аналитическая машина

Диаграмма Лавлейса из примечания G, первый опубликованный компьютерный алгоритм

В 1837 г. Чарльз Бэббидж был вдохновлен ткацким станком Жаккарда на попытку построить Аналитическая машина.[6]Названия составных частей счетного устройства заимствованы из текстильной промышленности. В текстильной промышленности пряжу привозили из магазина на помол. Устройство должно было иметь «хранилище» - память для хранения 1000 чисел по 40 десятичных цифр в каждом. Затем числа из "магазина" были бы переданы в "мельницу" (аналог ЦП современной машины) для обработки. «Поток» - это выполнение запрограммированных инструкций устройством. Он был запрограммирован с использованием двух наборов перфорированных карт - один для управления операцией, а другой для входных переменных.[6][7] Однако после того, как британское правительство вложило более 17000 фунтов стерлингов, тысячи зубчатых колес и шестерен никогда не работали вместе.[8]

За девять месяцев 1842–1843 гг. Ада Лавлейс перевел мемуары итальянского математика Луиджи Менабреа. Мемуары посвящены аналитической машине. Перевод содержал примечание G, в котором подробно описывался метод расчета Числа Бернулли с помощью аналитической машины. Эта записка признана некоторыми историками первой в мире письменной компьютерной программой.[9]

Универсальная машина Тьюринга

В 1936 г. Алан Тьюринг представил Универсальная машина Тьюринга - теоретическое устройство, которое может моделировать каждое вычисление, которое может быть выполнено на Тьюринг завершен вычислительная машина.[10]Это конечный автомат у которого есть бесконечно длинная лента чтения / записи. Машина может перемещать ленту вперед и назад, изменяя ее содержимое при выполнении алгоритм. Машина запускается в начальном состоянии, выполняет последовательность шагов и останавливается, когда попадает в состояние остановки.[11]Некоторые считают, что эта машина является источником компьютер с хранимой программой -использован Джон фон Нейман (1946) для «Электронного вычислительного прибора», который теперь имеет фон Неймана архитектура имя.[12]

Ранние программируемые компьютеры

В Z3 компьютер, изобретенный Конрад Зузе (1941) в Германия, был цифровым и программируемым компьютером.[13] Цифровой компьютер использует электричество в качестве вычислительного компонента. Z3 содержал 2400 реле для создания схемы. Схемы обеспечивали двоичный, плавающая точка, компьютер с девятью инструкциями. Программирование Z3 осуществлялось с помощью специально разработанной клавиатуры и перфолента.

В Электронный числовой интегратор и компьютер (Осень 1945 г.) Тьюринг завершен, универсальный компьютер, использовавший 17 468 вакуумные трубки создать схемы. По сути, это была серия Паскалины соединены вместе.[14] Его 40 единиц весили 30 тонн, занимали 1800 квадратных футов (167 м²).2) и потребляли 650 долларов в час (в валюте 1940-х годов ) в электричестве в простое.[14] Было 20 база-10 аккумуляторы. Программирование ENIAC заняло до двух месяцев.[14] Три функциональные таблицы были на колесах, и их нужно было свернуть на фиксированные функциональные панели. Таблицы функций были подключены к функциональным панелям с помощью тяжелых черных кабелей. Каждая функциональная таблица имела 728 вращающихся ручек. Программирование ENIAC также включало установку некоторых из 3000 переключателей. Отладка программы заняла неделю.[14] Программистами ENIAC были женщины, известные под общим названием «девушки ENIAC».[15] и включены Джин Дженнингс Бартик, Бетти Холбертон, Марлин Вескоф, Кэтлин МакНалти, Рут Тейтельбаум, и Фрэнсис Спенс.[16]ENIAC показал параллельные операции. Различные наборы аккумуляторов могут одновременно работать по разным алгоритмам. Он использовал машины для перфокарт для ввода и вывода, и он контролировался с помощью тактовый сигнал. Он работал в течение восьми лет, рассчитывая параметры водородной бомбы, прогнозируя погодные условия и составляя таблицы стрельбы для прицеливания артиллерийских орудий.

В Манчестер Бэби (Июнь 1948 г.) компьютер с хранимой программой.[17] Программирование перешло от перемещения кабелей и регуляторов настройки; вместо этого компьютерная программа хранилась в памяти в виде чисел. Только три биты памяти было доступно для хранения каждой инструкции, поэтому она была ограничена восемью инструкциями. Для программирования было доступно 32 переключателя.

Поздние компьютеры

Переключатели для ручного ввода на Данные General Nova 3, выпускался в середине 1970-х гг.

Компьютеры, произведенные до 1970-х годов, имели переключатели на передней панели для программирования. Компьютерная программа была написана на бумаге для справки. Инструкция представляла собой конфигурацию настроек включения / выключения. После настройки конфигурации была нажата кнопка выполнения. Затем этот процесс был повторен. Компьютерные программы также вводились вручную через бумажная лента или же перфокарты. После того, как носитель был загружен, с помощью переключателей был установлен начальный адрес и нажата кнопка выполнения.[18]

В 1961 г. Берроуз B5000 был построен специально для программирования в АЛГОЛ 60 язык. Аппаратные схемы, упрощающие компилировать фаза.[19]

В 1964 г. IBM System / 360 была линия из шести компьютеров, каждый из которых имел одинаковые архитектура набора команд. Модель 30 была самой маленькой и дешевой. Клиенты могли обновить и сохранить то же самое программное обеспечение.[20] Каждая модель System / 360 представлена мультипрограммирование. При поддержке операционной системы в памяти может одновременно находиться несколько программ. Когда ждали ввод, вывод, другой мог вычислить. Каждая модель также могла подражать другие компьютеры. Клиенты могли перейти на System / 360 и сохранить свои IBM 7094 или же IBM 1401 программное обеспечение.[20]

Компьютерное программирование

Компьютерное программирование это процесс написания или редактирования исходный код. Редактирование исходного кода включает в себя тестирование, анализ, уточнение, а иногда и координацию с другими программистами совместно разработанной программы. Человека, который практикует этот навык, называют компьютером. программист, разработчик программного обеспечения, а иногда и кодер.

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

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

Компьютерная программа, написанная в стиле императивного программирования.

Компьютерные программы можно разделить на категории язык программирования парадигма используется для их производства. Две из основных парадигм: императив и декларативный.

Императивные языки

Императивные языки программирования указать последовательный алгоритм с использованием объявлений, выражений и операторов:[21]

  • А декларация пары Переменная имя для тип данных - Например: var x: целое число;
  • An выражение дает значение - например: 2 + 2 дает 4
  • А утверждение может присвоить выражение переменной или использовать значение переменной для изменения программы поток управления - Например: х: = 2 + 2; если x = 4, то do_something ();

Одной из критических замечаний по поводу императивных языков является побочный эффект оператора присваивания для класса переменных, называемых нелокальными переменными.[22]

Декларативные языки

Декларативные языки программирования описывать Какие вычисления должны выполняться, а не как чтобы вычислить это. В декларативных программах отсутствует поток управления и считаются наборы инструкций. Две широкие категории декларативных языков: функциональные языки и логические языки. Принцип функциональных языков (например, Haskell ) не допускать побочные эффекты, что упрощает рассуждение о программах, таких как математические функции.[22] Принцип логических языков (например, Пролог ) состоит в том, чтобы определить проблему, которую необходимо решить, - цель - и оставить подробное решение самой системе Prolog.[23] Цель определяется путем предоставления списка подцелей. Затем каждая подцель определяется путем дальнейшего предоставления списка ее подцелей и т. Д. Если путь подцелей не может найти решения, то эта подцель отступил и систематически пытаются найти другой путь.

Составление и интерпретация

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

Компиляторы используются для перевода исходного кода с языка программирования на любой объектный код или же Машинный код.[24] Чтобы объектный код стал машинным кодом, требуется дальнейшая обработка, а машинный код состоит из центральный процессор родные инструкции, готовые к исполнению. Скомпилированные компьютерные программы обычно называют исполняемыми файлами, двоичными образами или просто двоичные файлы - ссылка на двоичный формат файла используется для хранения исполняемого кода.

Некоторые скомпилированные и собранные объектные программы необходимо объединить как модули с компоновщик утилита для создания исполняемой программы.

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

Главный недостаток интерпретаторов - компьютерные программы работают медленнее, чем при компиляции. Интерпретация кода выполняется медленнее, потому что интерпретатор должен декодировать каждый оператор, а затем выполнить его. Однако разработка программного обеспечения может быть быстрее с использованием интерпретатора, поскольку тестирование выполняется немедленно, когда этап компиляции опускается. Еще один недостаток интерпретаторов - наличие интерпретатора на исполняющем компьютере. Напротив, скомпилированные компьютерные программы не нуждаются в компиляторе во время выполнения.

Точные компиляторы предварительно скомпилировать компьютерные программы непосредственно перед выполнением. Например, Ява виртуальная машина Hotspot содержит Just In Time Compiler, который выборочно компилирует байт-код Java в машинный код, но только код, который прогнозирует Hotspot, вероятно, будет использоваться много раз.

Скомпилированные или интерпретируемые программы могут выполняться в пакетный процесс без человеческого взаимодействия.

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

Никакие свойства языка программирования не требуют исключительной компиляции или эксклюзивной интерпретации. Категоризация обычно отражает самый популярный метод языкового исполнения. Например, Java считается интерпретируемым языком, а C - компилируемым языком, несмотря на существование компиляторов Java и интерпретаторов C.

Хранение и исполнение

В 1950-х годах компьютерные программы хранились на перфорированная бумажная лента

Обычно компьютерные программы хранятся в энергонезависимая память пока прямо или косвенно не будет запрошено казнен пользователем компьютера. По такому запросу программа загружается в оперативная память компьютерной программой, называемой Операционная система, где он может быть доступен непосредственно центральному процессору. Затем центральный процессор выполняет («запускает») программу, инструкция за инструкцией, до завершения. Выполняемая программа называется процесс.[25] Прекращение происходит либо путем нормального самовыключения, вмешательством пользователя, либо по ошибке - программной или аппаратной.

Одновременное исполнение

Многие операционные системы поддерживают многозадачность что позволяет запускать множество компьютерных программ одновременно на одном компьютере. Операционные системы могут запускать несколько программ через планирование процессов - программный механизм для выключатель то ЦПУ между процессами часто, чтобы пользователи могли взаимодействовать с каждой программой во время ее работы.[26] Внутри оборудования современные многопроцессорные компьютеры или компьютеры с многоядерными процессорами могут запускать несколько программ.[27]

Самомодифицирующиеся программы

Компьютерная программа в исполнение обычно рассматривается как отличное от данные программа действует. Однако в некоторых случаях это различие стирается, когда компьютерная программа модифицируется. Модифицированная компьютерная программа впоследствии выполняется как часть той же программы. Самомодифицирующийся код возможно для программ, написанных на Машинный код, язык ассемблера, Лисп, C, КОБОЛ, PL / 1, и Пролог.

Функциональные категории

Компьютерные программы можно классифицировать по функциональным признакам. Основные функциональные категории: программное обеспечение и программное обеспечение. Системное программное обеспечение включает Операционная система какие пары компьютерное железо с помощью прикладного программного обеспечения.[28] Цель операционной системы - предоставить среду, в которой прикладное программное обеспечение выполняется удобным и эффективным образом.[28] В состав системного ПО помимо операционной системы входят встроенные программы, программы загрузки, и микропрограммы. Прикладное программное обеспечение, предназначенное для конечные пользователи есть пользовательский интерфейс. Прикладное программное обеспечение, не предназначенное для конечного пользователя, включает промежуточное ПО, который связывает одно приложение с другим. Прикладное программное обеспечение также включает служебные программы. Различие между системным программным обеспечением и прикладным программным обеспечением является предметом обсуждения.

Программное обеспечение

Пример приложения: GCalctool, программный калькулятор

Существует много типов прикладного программного обеспечения:

Служебные программы

Служебные программы прикладные программы, предназначенные для помощи системные администраторы и программисты.

Операционная система

An Операционная система - это низкоуровневое программное обеспечение, которое поддерживает основные функции компьютера, такие как планирование задач и управление периферийными устройствами.[28]

В 1950-х годах программист, который одновременно был оператором, писал программу и запускал ее. После завершения выполнения программы выходные данные могли быть напечатаны или перфорированы на бумажной ленте или карточках для последующей обработки.[18]Чаще всего программа не работала. Затем программист посмотрел на индикаторы консоли и возился с переключателями консоли. Если повезло меньше, была сделана распечатка памяти для дальнейшего изучения. В 1960-е годы программисты сократили потери времени, автоматизируя работу оператора. Программа под названием Операционная система всегда хранился в компьютере.[29]

Первоначально операционные системы были запрограммированы на сборка; однако современные операционные системы обычно пишутся на C.

Загрузочная программа

А компьютер с хранимой программой требует начальной компьютерной программы, хранящейся в ее только для чтения памяти к ботинок. Процесс загрузки заключается в идентификации и инициализации всех аспектов системы, начиная с регистры процессора к контроллеры устройств к объем памяти содержание.[30] После процесса инициализации эта начальная компьютерная программа загружает Операционная система и устанавливает счетчик команд чтобы начать нормальную работу.

Встроенные программы

В микроконтроллер справа от этого флешка контролируется встроенным прошивка.

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

Программы микрокода

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

Смотрите также

Рекомендации

  1. ^ Рохкинд, Марк Дж. (2004). Расширенное программирование Unix, второе издание. Эддисон-Уэсли. п. 1.1.2.
  2. ^ Дули, Джон Ф. (2013). Краткая история криптологии и криптографических алгоритмов. Springer Science & Business Media. С. 12–3. ISBN  9783319016283.
  3. ^ Koetsier, Teun (2001), "О предыстории программируемых машин: музыкальные автоматы, ткацкие станки, калькуляторы", Механизм и теория машин, Эльзевьер, 36 (5): 589–603, Дои:10.1016 / S0094-114X (01) 00005-2.
  4. ^ Капур, Аджай; Карнеги, Дейл; Мерфи, Джим; Лонг, Джейсон (2017). «Громкоговорители по желанию: история электроакустической музыки без использования громкоговорителей». Организованный звук. Издательство Кембриджского университета. 22 (2): 195–205. Дои:10.1017 / S1355771817000103. ISSN  1355-7718.
  5. ^ Ноэль Шарки (2007), Программируемый робот XIII века, Университет Шеффилда
  6. ^ а б c Маккартни, Скотт (1999). ENIAC - Триумфы и трагедии первого в мире компьютера. Уокер и компания. п.16. ISBN  978-0-8027-1348-3.
  7. ^ Бромли, Аллан Г. (1998). "Аналитическая машина Чарльза Бэббиджа, 1838 г." (PDF). IEEE Annals of the History of Computing. 20 (4).
  8. ^ Таненбаум, Эндрю С. (1990). Структурированная компьютерная организация, третье издание. Прентис Холл. п.15. ISBN  978-0-13-854662-5.
  9. ^ Дж. Фуэги; Дж. Фрэнсис (октябрь – декабрь 2003 г.), «Лавлейс и Бэббидж и создание записей 1843 года»'", Анналы истории вычислительной техники, 25 (4): 16, 19, 25, Дои:10.1109 / MAHC.2003.1253887
  10. ^ Розен, Кеннет Х. (1991). Дискретная математика и ее приложения. McGraw-Hill, Inc. стр.654. ISBN  978-0-07-053744-6.
  11. ^ Линц, Питер (1990). Введение в формальные языки и автоматы. Д. К. Хит и компания. п. 234. ISBN  978-0-669-17342-0.
  12. ^ Дэвис, Мартин (2000), Двигатели логики: математики и происхождение компьютера (1-е изд.), Нью-Йорк, штат Нью-Йорк: W. W. Norton & Company, ISBN  978-0-393-32229-3, (pb.)
  13. ^ «История вычислительной техники».
  14. ^ а б c d Маккартни, Скотт (1999). ENIAC - Триумфы и трагедии первого в мире компьютера. Уокер и компания. п.102. ISBN  978-0-8027-1348-3.
  15. ^ Фринк, Бренда Д. (1 июня 2011 г.). "Исследователь показывает, как компьютерные фанаты заменили" компьютерных девушек "."". Гендерные новости. Стэндфордский Университет. Архивировано из оригинал 12 марта 2015 г.. Получено 22 октября 2018.
  16. ^ Бартик, Джин Дженнингс (2013). Рикман, Джон; Тодд, Ким Д. (ред.). Пионер-программист: Джин Дженнингс Бартик и компьютер, который изменил мир. Издательство государственного университета Трумэна.
  17. ^ Энтикнэп, Николас (лето 1998), "Золотой юбилей информатики", Воскрешение (20), ISSN  0958-7403, заархивировано из оригинал 9 января 2012 г., получено 19 апреля 2008
  18. ^ а б Зильбершатц, Абрахам (1994). Основные понятия операционной системы, четвертое издание. Эддисон-Уэсли. п. 6. ISBN  978-0-201-50480-4.
  19. ^ Таненбаум, Эндрю С. (1990). Структурированная компьютерная организация, третье издание. Прентис Холл. п.20. ISBN  978-0-13-854662-5.
  20. ^ а б Таненбаум, Эндрю С. (1990). Структурированная компьютерная организация, третье издание. Прентис Холл. п.21. ISBN  978-0-13-854662-5.
  21. ^ Уилсон, Лесли Б. (1993). Сравнительные языки программирования, второе издание. Эддисон-Уэсли. п. 75. ISBN  978-0-201-56885-1.
  22. ^ а б Уилсон, Лесли Б. (1993). Сравнительные языки программирования, второе издание. Эддисон-Уэсли. п. 213. ISBN  978-0-201-56885-1.
  23. ^ Уилсон, Лесли Б. (1993). Сравнительные языки программирования, второе издание. Эддисон-Уэсли. п. 244. ISBN  978-0-201-56885-1.
  24. ^ "Что такое компилятор?". Получено 2012-01-10.
  25. ^ Зильбершатц, Абрахам (1994). Основные понятия операционной системы, четвертое издание. Эддисон-Уэсли. п. 97. ISBN  978-0-201-50480-4.
  26. ^ Зильбершатц, Абрахам (1994). Основные понятия операционной системы, четвертое издание. Эддисон-Уэсли. п. 100. ISBN  978-0-201-50480-4.
  27. ^ Ахтер, Шамим (2006). Многоядерное программирование. Ричард Боулз (Intel Press). С. 11–13. ISBN  978-0-9764832-4-3.
  28. ^ а б c Зильбершатц, Абрахам (1994). Основные понятия операционной системы, четвертое издание. Эддисон-Уэсли. п. 1. ISBN  978-0-201-50480-4.
  29. ^ а б Таненбаум, Эндрю С. (1990). Структурированная компьютерная организация, третье издание. Прентис Холл. п.11. ISBN  978-0-13-854662-5.
  30. ^ Зильбершатц, Абрахам (1994). Основные понятия операционной системы, четвертое издание. Эддисон-Уэсли. п. 30. ISBN  978-0-201-50480-4.

дальнейшее чтение