Гайд Перевод Learncpp.com: раздел 0.2 // Введение в языки программирования. На русском.

Легенда форума
Статус
Оффлайн
Регистрация
10 Дек 2018
Сообщения
4,377
Реакции[?]
2,282
Поинты[?]
187K
Привет!
Второй по счёту перевод Learncpp.com, вот ссылка на предыдущую часть:
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
Ссылка на следующую часть:
Пожалуйста, авторизуйтесь для просмотра ссылки.



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

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

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

Машинный язык:

Процессор компьютера не способен распознавать язык C++. Ограниченный набор инструкций, которые процессор может понимать непосредственно, называется машинным кодом (или машинным языком, или набором инструкций).

Вот пример инструкции по машинному языку: 10110000 01100001

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

То, как эти инструкции организованы, выходит за рамки данного введения, но интересно отметить две вещи. Во-первых, каждая инструкция состоит из последовательности 1 и 0. каждый отдельный 0 или 1 называется двоичной цифрой или битом, для краткости. Количество битов, составляющих одну команду, варьируется - например, некоторые процессоры обрабатывают инструкции, которые всегда имеют длину 32 бита, в то время как некоторые другие процессоры (например, семейство x86, которое вы, вероятно, используете) имеют инструкции, которые могут быть переменной длины.

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

Ассемблер:

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

Вот та же инструкция, что и выше, на языке ассемблера: mov al, 061h

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

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

Языки высокого уровня:

Для решения проблем удобочитаемости и переносимости были разработаны новые языки программирования, такие как C, C++, Pascal (а позже и такие языки, как Java, Javascript и Perl). Эти языки называются языками высокого уровня, поскольку они предназначены для того, чтобы программист мог писать программы, не беспокоясь о том, на каком компьютере будет выполняться программа.

Вот та же инструкция, что и выше в C / C++: a = 97;

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

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

Вот упрощенное представление процесса компиляции:

Compiling-min.png

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

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

Вот упрощенное представление процесса интерпретации:

Interpreting-min.png

Необязательное к прочтению:

Хорошее сравнение преимуществ компиляторов и интерпретаторов можно найти
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
Большинство языков могут быть скомпилированы или интерпретированы, однако традиционно компилируются такие языки, как C, C++ и Pascal, тогда как “скриптовые” языки, такие как Perl и Javascript, обычно интерпретируются. Некоторые языки, такие как Java, используют сочетание этих двух.

Языки высокого уровня обладают многими желательными свойствами.

Во-первых, языки высокого уровня гораздо легче воспринимать и писать, потому что команды ближе к естественному языку, который мы используем каждый день. Во-вторых, языки высокого уровня требуют меньше инструкций для выполнения той же задачи, что и языки более низкого уровня, что делает программы более лаконичными и простыми для понимания. В C++ вы можете сделать что-то вроде a = b * 2 + 5; в одной строке. На языке ассемблера для этого потребуется 5 или 6 различных инструкций.

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

Portability-min.png

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

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

Правила, рекомендации и предупреждения:

По мере прохождения этих учебных пособий мы выделим много важных моментов в следующих трех категориях:


Правило

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

Наилучшая практика

Лучшие практики - это то, что вы должны делать, потому что такой способ действий обычно считается стандартным или настоятельно рекомендуемым. То есть, либо все делают это таким образом (а если вы делаете иначе, вы будете делать то, чего люди не ожидают), либо это превосходит альтернативы.

Предупреждение

Предупреждения - это вещи, которые вы не должны делать, потому что они обычно приводят к неожиданным результатам.
 
Последнее редактирование:
Забаненный
Статус
Оффлайн
Регистрация
2 Июл 2020
Сообщения
1,223
Реакции[?]
510
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
сам переводишь или гугл ?)
 
Легенда форума
Статус
Оффлайн
Регистрация
10 Дек 2018
Сообщения
4,377
Реакции[?]
2,282
Поинты[?]
187K
сам переводишь или гугл ?)
Яндекс, я исправляю недочёты, ошибки, улучшаю читабельность и т.п.
Если бы я сам переводил, это заняло бы намного больше времени, а перевод получился +- таким же, может даже чуть хуже.
 
Сверху Снизу