Найти в Дзене
Clever Python

Высокоуровневый, низкоуровневый. А в чем разница? Просто о сложном.

Вы все наверняка слышали понятия высокоуровневый, низкоуровневый, и много других интересных слов и словосочетаний по отношению к разным языкам программирования. Рано или поздно возникнет вопрос: «а что это все значит?!» Именно для ответа на этот вопрос и существует данная статья. Высокоуровневые и низкоуровневые языки Давайте с вами разберёмся чем отличается эти два понятия из заголовка. Сразу можно отметить что они никак не характеризуют язык с точки зрения «хороший» и «плохой», а только описывают насколько близок этот язык к тому что реально происходит при исполнении кода программы. Часто пишут, что высокоуровневый язык - это язык с высоким уровнем абстракции и наоборот. Незначащему человеку это описание ничего не даёт, так что разберём это на бытовом примере. Любая программа - это набор инструкций к выполнению для компьютера. Дьявол кроется в деталях, как и понятие об уровне абстракции языка или в уровне детализации команды. Давайте рассмотрим программу написанную на русском языке

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

Рано или поздно возникнет вопрос: «а что это все значит?!»

Именно для ответа на этот вопрос и существует данная статья.

Высокоуровневые и низкоуровневые языки

Градация наиболее популярных языков по степени абстракции
Градация наиболее популярных языков по степени абстракции

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

Часто пишут, что высокоуровневый язык - это язык с высоким уровнем абстракции и наоборот. Незначащему человеку это описание ничего не даёт, так что разберём это на бытовом примере.

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

Примеры программы для языков разного уровня абстракции
Примеры программы для языков разного уровня абстракции

Давайте рассмотрим программу написанную на русском языке «сварить макароны»

Наивысший уровень абстракции этой команды - «сварить макароны» если наш язык программирования - высокоуровневый то так и будет выглядеть весь код программы

Если он будет низкоуровневым, то будет выглядеть как детальный набор команд:

  • взять кастрюлю
  • Налить воду
  • Поставить кастрюлю с водой на плиту
  • Включить плиту на максимальную мощность
  • Посолить 5-ю щепотками соли
  • Дождаться появления пузырьков
  • Достать макароны
  • Высыпать 200 гр. макарон
  • 8 минут ожидать, помешивая каждые 4 минуты
  • Достать дуршлаг
  • Поставить его в раковину
  • Вылить воду из кастрюли с макаронами в раковину

Вот это уже выглядит серьезнее и сложнее, казалось бы, а зачем тогда низкоуровневые языки? Почему они до сих пор не вымерли навсегда?

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

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

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

Все становится ещё сложнее если мы начнём писать на низкоуровневые языках максимально приближенных к машинному коду (вроде Assembler) там количество кода увеличивается многократно.

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

-3

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