Тут тонкость в том, что код C++ переводится компилятором в код C, а код C генерирует соответствующий ассемблерный код. Отсюда и эффективность. То есть, программируя на плюсах в конечном счете вы пишете на ассемблере.
Да с хера ли? Компилятор генерит код в машкодах, а не на каком не на ассемблере. Ассемблер это ЧЕЛОВЕКОЧИТАЕМОЕ представление машинных кодов, но смысла переводить C в ассемблер нет никакого.
Язык C по сути есть как бы машинонезависимый ассемблер. Есть даже флаги компиляторов, по пямяти не скажу, по которым кроме бинарников компилятор сохранит вам .asm файлы вашего кода.
Ты бы почитал определение ассемблера на вики. А типа компилятор паскаля имеет ключевое слово assembler; asm, по-этому паскаль это такой ассемблер машинонезависмый? Ппц большего бреда в жизни не читала.
Почитай внимательнее сама, пожалуйста (желательно дальше определения). Суть ассемблера далеко не только в том, чтобы быть человекочитаемым представлением машинного кода. Дело в том, что языков машинных кодов очень много, и в один момент люди поняли, что писать программы специфично для каждого языка очень накладно. Был придумана идея ассемблера - создать некоторый язык более высокого уровня, который бы обобщал большое количество машинных кодов и позволял писать программы сразу под много машин. При наличии ассемблера, писать программы на C специфично для каждой модели компьютеры - реально бред, который может нести только человек, влезающий спор, прочитав пару предложений на вики и мнящий себя после этого экспертом.
Я не спец в вопросе, на самом деле, но вы сказанули редкостную глупость.
Во-первых, с того, что сам компилятор для C пишет человек, а не машина, внезапно. Писать перевод напрямую в машинный код, наверное, достаточно сложная задача.
Во-вторых, вы предлагаете для каждой модели компьютера писать собственный компилятор C (языки машинных кодов то разные) - увы, это нереально. Зато для каждой модели написан разработчиком ассемблер (задача попроще), а вариантов языков ассемблера не очень много. Поэтому, логично, что большинство адекватных компиляторов пишутся специфично для каждого языка ассемблера.
В общем, поинтересуйтесь вопросом, прежде чем публично такие глупости произносить. Вот рандомная статья, например. https://habr.com/sandbox/114988/
Она собственно не понимает основной идеи. Идея Си в том, что программист работает на низком уровне абстракции, код на Си сравнительно легко преобразуется в машинные команды(ну или ассемблер). Приплетать сюда тот же паскаль (в том то и разница, паскаль это абстракция другого уровня)... Эмоционально кричать об генерации машинного кода напрямую(ассемблер для того и изобрели)... Эх, женщины...
Может потому, что ты не специалист, то и не стоило хрень писать? Публично. Во-первых, компиляторы пишутся с оптимизацией на КАЖДЫЙ процессор, с учетом его архитектуры. Даже с учётом различий i7 - Core i5 - Ryzen и тд. Так как есть нюансы управления кэшом, специфичные команды и тд. То есть твоё «предлагаете для каждой модели писать компилятор» - редкостная хрень. Во-вторых, десятки языков компилируют напрямую в машкода. Помимо gcc из статьи есть MS Visual Studio, есть Borland C++, C++ Builder, Intel C++ , десятки их. В третьих - все программы сначала пишет человек, потом их исполняет машина, написать генерацию машкодов не сложнее текстовых инструкций на асме. Блин, я программист хер знает сколько лет, спорить со мной?
Я тебе сейчас открою небольшой секрет: всё переводится в асм. Даже высер нуба на джаваскрипте.
IT-юмор
5.6K пост52.4K подписчиков
Правила сообщества
Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору