Re[37]: Есть ли вещи, которые вы прницпиально не понимаете...
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 07.02.14 23:04
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Определение какое-то странное — о строительных блоках любого языка можно рассуждать как о математических объектах и извлекать из этого пользу.


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

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

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

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

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

Очевидно, из этого не следует, что Ассемблер или С++ иногда становятся высокоуровневыми языками. Это значит, что они легко используются в конкретных случаях, а ассемблер будет самым быстродейственным, т.к. быстродействие там где ближе всего к железу.
Теоретически, компиляторы С++ создают код, который невозможно написать таким же быстрым но руками на ассемблере. Парадокс в том, что любую такую программу можно ускорить парочкой локальных финтов на ассемблере.
Это следует из того, что
1. компилятр пишут люди
2. компилятор всего лишь слепок текущих представлений, а не кладезь абсолютной истины

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