Найти тему

Введение в C++: Что такое язык программирования?

Оглавление

Современный компьютер способен выполнять большой пул задач за короткое время. С каждым годом его возможности растут, количество одновременно возможных задач увеличивается, а время за которое он их реализует — уменьшается. Одновременно с этим фактом, никуда не исчезает существенное ограничение всех компьютеров — они по умолчанию понимают только ограниченный набор команд. Компьютеру для выполнения любого действия нужно максимально точно описать: “Что, как и в какой момент времени он должен сделать?”.

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

А как же компьютер будет выполнять эти инструкции? Для этого в современном компьютере есть процессор, материнская плата, блок оперативной памяти, жесткий диск — и это только основные, есть еще и дополнительные, такие как видеокарта. Так вот все это (жарг. железо) называется аппаратными средствами. И как только программа будет загружена в память компьютера, именно пресловутое железо займется последовательным выполнением всех инструкций, записанных в программе.

На каком языке говорит компьютер?

-2

Возможно, это станет для вас новостью, но центральный процессор вашего и любого другого компьютера не понимает ни C++, ни какой-либо другой язык программирования. Такой вот он косноязычный “дядя Вася из глубинки”.

Ладно, хорошо, а на каком языке он общается? Помните эти картинки из крутых хакерских фильмов с единицами и нулями на экране? Вот это и есть язык центрального процессора. Называется он машинным кодом или машинным языком.

Пример инструкции для центрального процессора: 10110000 01100001

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

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

Язык Ассемблера

-3

Мы уже разобрались в том, что инструкции для компьютера в машинном коде писать было долго, трудно и энергозатратно. Вот умные дядьки и решили создать язык Ассемблера. Что он из себя представлял?

Он по сути являлся прародителем всех языков программирования и каждая инструкция для процессора в нем была выражена с помощью набора коротких команд.

Пример инструкции в машинном коде на языке ассемблера (это та же инструкция, пример которой есть выше в машинном коде): mov al, 061h

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

Какие проблемы были у языка Ассемблера?
  1. Для каждой простой задачи требовалось знать очень много инструкций. Конечно, по сравнению с написанием машинного кода время работы и трудозатраты на каждую программу существенно сократились, но все равно создание каждой программы требовала от программиста множества знаний, умений и времени.
  2. Очень часто программу написанную одним программистом на Ассемблере невозможно было понять другому программисту. Так как язык ассемблера представлен целыми талмудами инструкций, чтение его кода превращалось в извращенную попытку понять предложение, занимаясь рассматриванием каждой отдельной буквы.
  3. Язык Ассемблера не решал сложности переноса программ с одного типа процессоров на другой их тип. В итоге для каждого процессора приходилось разрабатывать свой язык Ассемблера, либо сильно модифицировать существующую программу.

Что было дальше?

-4

В начале было слово… Кхм! Это из другой книги.

Чтобы решить проблемы Ассемблера, были разработаны языки программирования высокого уровня и первым из них стал FORTRAN. В дальнейшем были разработаны такие языки как C, Pascal, C++ и другие. Кстати, C++ первоначально не являлся самостоятельным языком. Его создатель просто сделал себе костыли для решения некоторых задач в С. Но в эту историю мы углубляться не будем.

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

Вот пример инструкции выраженной на языке C++, которую мы уже писали выше на машинном языке и языке Ассемблера: a = 97;

С появлением языков программирования высокого уровня, необходимость переводить их код в понятный компьютеру машинный никуда не исчезла. Для этого были реализованы два способа — компиляция и интерпретация. Естественно, все языки программирования стали делиться на компилируемые и интерпретируемые.

Язык C++ — компилируемый.

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

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

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

Стоит отметить, что существуют ЯП, в которых становится доступна компиляция и интерпретация кода. Например: ЯП Java.

Очень надеюсь, что данная статья помогла вам понять: Что же такое язык программирования?

Комментарий для тех, кто нашел ошибки или неточности в статье: Не нужно закидывать меня тапками. Если вы видите объективные ошибки, сообщите об этом в комментариях. Также не забудьте посмотреть описание канала, там четко даны объяснения о том, зачем и для чего создан этот канал.

P.S.: Для тех, кому надоело читать теорию. К практике программирования я перехожу в этой статье