"Информатика (в 2-х частях)", Горячев А.В., Макарина Л.А., Паволоцкий А.В., Платонова Н.С.
Языки программирования позволяют записывать команды, по которым компьютер решает задачи. Первые программы составляли из машинных кодов — их компьютер выполнял напрямую, но человеку было трудно их запоминать и проверять. Ассемблер заменил часть кодов условными обозначениями, а языки высокого уровня сделали запись алгоритмов ещё понятнее. Чтобы компьютер понял такую программу, используют транслятор: он переводит команды заранее или по мере выполнения. История языков показывает, как способы программирования становились удобнее и подходили для всё более сложных задач.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Язык программирования — формальный язык, с помощью которого записывают команды для компьютера. У такого языка есть правила записи, похожие на правила в обычном языке, но более строгие. Они нужны, чтобы компьютер и программист одинаково понимали каждую команду.
Машинный язык — набор команд, представленных в виде кодов, которые компьютер может выполнять непосредственно. Эти коды соответствуют действиям процессора. Такой язык позволяет управлять компьютером напрямую, хотя человеку его трудно читать.
Язык высокого уровня — язык программирования, команды которого удобнее человеку читать и записывать, чем машинные коды. С его помощью алгоритм можно описать понятными словами и знаками. Это помогает создавать и проверять программы, не думая постоянно о внутреннем устройстве компьютера.
Транслятор — программа, которая преобразует программу с одного языка программирования в другой, понятный компьютеру. Например, она может перевести запись на языке высокого уровня в машинный код. Благодаря этому программисту не нужно составлять все машинные команды вручную.
Первые программы записывали машинными кодами, потому что процессор может выполнять именно команды, представленные в подходящей ему форме. Программисту приходилось помнить коды и записывать их в строгом порядке. Ошибка даже в одной команде могла привести к неправильному результату, а сама запись была неудобна для чтения. Поэтому прямое управление компьютером было возможно, но работа требовала большой внимательности.
Ассемблер упростил запись, заменив машинные коды условными обозначениями, которые легче запомнить человеку. Например, вместо числового кода команды программист мог использовать короткое слово или сокращение. Однако компьютер не выполняет такие обозначения напрямую: они служат понятной человеку записью машинных команд. Значит, перед запуском программу на ассемблере нужно перевести в машинный код.
Языки высокого уровня появились, чтобы записывать алгоритмы ещё понятнее и решать более сложные задачи с меньшим количеством технических деталей. Команды таких языков ближе к привычным человеку словам и математическим обозначениям, чем к кодам процессора. Это позволяет сосредоточиться на том, что должна делать программа, а не на способе выполнения каждой машинной команды. Кроме того, такие языки обычно меньше зависят от особенностей конкретного компьютера.
Для выполнения программы на языке высокого уровня нужен способ перевода её команд в форму, которую понимает компьютер. Компилятор обычно заранее переводит программу целиком, после чего можно запускать полученный код. Интерпретатор переводит и выполняет команды по мере работы программы. Эти способы различаются моментом перевода, но оба помогают связать понятную программисту запись с командами компьютера.
Языки программирования развивались вместе с задачами, которые люди поручали компьютерам. Чем сложнее становились программы, тем нужнее были средства, позволяющие быстрее писать, читать и исправлять их. Новые языки и трансляторы уменьшали необходимость вручную работать с отдельными машинными командами. При этом разные языки могут оставаться полезными для разных задач, поэтому развитие не означает, что все прежние языки исчезают.
| Этап | Как записывали команды | Что требовалось для выполнения | Преимущество и ограничение |
|---|---|---|---|
| Машинный язык | Кодами команд, понятными процессору | Компьютер выполнял команды непосредственно | Прямое управление, но запись трудна для человека |
| Язык ассемблера | Условными обозначениями машинных команд | Перевод в машинный код | Запись понятнее, но тесно связана с командами компьютера |
| Языки высокого уровня | Командами, удобными для записи алгоритмов | Перевод или интерпретация | Удобно человеку, но обычно требуется транслятор |
| Роль транслятора | Преобразует программу с одного языка на другой | Компилятор переводит заранее, интерпретатор — во время выполнения | Позволяет компьютеру выполнять программу, записанную на другом языке |
Читайте таблицу сверху вниз, чтобы проследить, как запись команд становилась удобнее для человека. По столбцам можно сравнить, что нужно компьютеру для выполнения программы и чем приходится расплачиваться за удобство записи. Строка о трансляторе показывает, почему программа на языке высокого уровня не всегда запускается напрямую.
Условие. Расположи машинный язык, язык ассемблера и язык высокого уровня в порядке развития и объясни, что менялось в способе записи команд. Сравни, насколько каждая запись близка человеку и машинным командам. Для ответа важно не просто перечислить названия, а установить, как менялась запись.
Ответ. Порядок такой: машинный язык, язык ассемблера, язык высокого уровня. Команды перешли от кодов к условным обозначениям, а затем к более понятной человеку записи алгоритмов.
Условие. Программист записал команды условными обозначениями, соответствующими машинным командам. Определи вид языка и объясни, почему эту запись нельзя сразу считать машинным кодом. Подсказка: выясни, предназначены ли обозначения для человека или компьютер выполняет их непосредственно.
Ответ. Это язык ассемблера. Его обозначения удобнее человеку, но они не являются машинным кодом, поэтому для выполнения требуется перевод в машинные команды.
Условие. Для одной задачи написали программу на языке высокого уровня. Объясни, зачем компьютеру нужен транслятор, и сравни предварительный перевод всей программы с переводом команд во время выполнения. Важно различать не сами языки, а способы перевода.
Ответ. Транслятор связывает запись на языке высокого уровня с командами, которые может выполнить компьютер. Компилятор обычно переводит программу заранее, а интерпретатор переводит команды в ходе выполнения.
Ошибка: считать машинный язык и язык ассемблера одним и тем же. Их путают, потому что команды ассемблера соответствуют машинным командам. Проверь себя вопросом: записаны ли команды непосредственно кодами для процессора? Если стоят условные обозначения, это ассемблер, которому нужен перевод.
Ошибка: думать, что компьютер всегда выполняет программу на языке высокого уровня без перевода. Команды выглядят понятными, поэтому может показаться, что компьютер понимает их напрямую. Чтобы проверить себя, вспомни: процессор выполняет машинные команды, значит, обычно нужен перевод или интерпретация.
Ошибка: путать язык программирования с транслятором. Оба связаны с записью и выполнением программы, поэтому их роли иногда смешивают. Язык задаёт правила записи команд, а транслятор — это программа, которая переводит запись; проверь, описывается ли система правил или инструмент перевода.
Ошибка: считать, что появление нового языка полностью заменяет все предыдущие. Так думают, представляя развитие как последовательную смену одного языка другим. Но разные языки могут подходить для разных задач; проверь себя, спросив, обязательно ли новый способ записи удобнее во всех ситуациях.
Перед изучением языков программирования полезно знать, что такое алгоритм, команда и программа. Алгоритм задаёт последовательность действий, а программа записывает её так, чтобы компьютер мог выполнять команды. Понимание того, как компьютер обрабатывает данные, помогает представить, зачем командам нужна точная форма.
Эта тема пригодится, когда ты будешь изучать алгоритмы и записывать программы на конкретном языке. Чтобы запустить такую программу, нужно понимать, как компьютер получает команды и какую роль играет переводчик. Так история языков связывает придумывание решения с его выполнением на компьютере.
Связь с устройством компьютера объясняет, почему машинные команды должны быть представлены в форме, которую процессор может выполнить. Языки высокого уровня делают запись удобной человеку, но сами по себе не меняют способ работы процессора. Между этими уровнями помогает транслятор.
Почему первые программы было трудно писать?
Их записывали машинными кодами, которые компьютер мог выполнять непосредственно. Программисту приходилось помнить множество кодов и внимательно следить за каждой командой, поэтому писать и проверять такие программы было сложно.
Чем язык ассемблера отличается от машинного языка?
Машинный язык состоит из кодов, выполняемых процессором, а ассемблер использует для команд условные обозначения, удобные человеку. Запись на ассемблере перед выполнением нужно перевести в машинный код.
Почему компьютер не всегда может выполнить программу на языке высокого уровня напрямую?
Команды такого языка записаны в форме, удобной человеку, но процессор выполняет машинные команды. Поэтому программу обычно переводят в машинный код или обрабатывают специальной программой во время выполнения.
Чем компилятор отличается от интерпретатора?
Компилятор обычно заранее переводит программу целиком, а затем компьютер выполняет полученный код. Интерпретатор переводит и выполняет команды по ходу работы программы.
Почему старые языки программирования продолжают использовать?
Разные языки подходят для разных задач и устройств, а некоторые программы уже написаны на старых языках и продолжают работать. Поэтому новый язык не обязательно полностью заменяет предыдущие.
§ 3. История языков программирования