Вы заинтересованы в эффективном использовании отладчика? Тогда да. Вы заинтересованы в написании надежного или эффективного кода? Тогда да.
Лично я забочусь о бэкенде больше, чем о фронтэнде. Я рекомендую компилировать для ARM вместо x86, в этом случае вы не обязательно изучаете ассемблер (где я рекомендую написать свой собственный дизассемблер), поэтому, если вы используете gcc, у него есть дизассемблер, и вы можете увидеть, что ваш код высокого уровня делает для изменения конечный результат, а также сколько изменений вы можете сделать с помощью параметров компилятора. Большинству программистов на языке высокого уровня понятно, что один и тот же код может иметь совершенно разные результаты в зависимости от используемых параметров компилятора и командной строки.
Для середины компилятора я рекомендую как lcc, так и sdcc. Вы можете или не можете купить книгу LCC:
[http://www.cs.princeton.edu/software/lcc/][1]
Вам не нужно, хотя, источник находится в сети (во многих формах). Как и sdcc (небольшой компилятор c устройством, изначально созданный для 8051 и других 8-битных микро). Я рекомендую зайти в интерфейс, где компилятор отвечает бэкэнду, вы обнаружите, что ваш код превращен в серию атомарных частей, иногда наоборот. а = б + 7; может закончиться тем, что загрузит постоянное целое число 7. читает из памяти переменную b в следующие доступные регистры. Добавьте 7 плюс регистр с помощью b и сохраните в следующем доступном регистре. сохранить значение в регистре в месте в памяти для.
Вы можете сделать это и с gcc, но в конечном итоге вы поймете, что gcc не так хорош, как вы, хотя это и было. Из-за количества языков, количества бэкэндов, количества раздач в миксе и т. Д. Он огромен и сложен. Хотя он обойдется и работает для языков и платформ, на которых работают эксперты. То, что gcc может научить вас, что другие не могут, так это то, что различные языки внешнего интерфейса будут сводиться к общему среднему языку, который серверная часть превращает в конкретные инструкции для каждой платформы.
Наконец, интерфейс. По большей части люди используют bison / yacc, который является инструментом, который вы создаете описание для вашего языка высокого уровня, и инструмент может анализировать вводимые пользователем данные на основе вашего описания и превращать его в этот средний язык, если хотите.
Если вы планируете, что ваше хобби или карьера связаны с написанием программного обеспечения, я бы сказал, что вы должны выполнить это упражнение один раз, если не много раз. Эти знания будут влиять на общее качество вашего кода, надежность вашего кода, производительность вашего кода и эффективность написания кода.
Я был бы осторожен с утверждением «не пиши для компилятора, а пиши для чтения». Существует много плохого кода, потому что такого рода утверждения используются неправильно. Написание кода для удобства обслуживания приводит к плохому коду, который необходимо поддерживать. Ремонтопригодность является взаимоисключающей с надежностью и производительностью. Лично у меня была бы надежность и производительность, чем плохой код, который может поддерживать любой выпускник колледжа.
Со временем вы научитесь не слишком стараться писать для компилятора. Просто не тратьте впустую свой код, не используйте особенности языка. Если вам нужно было провести дополнительное исследование, чтобы выяснить какую-то функцию компилятора, вы можете быть уверены, что большая часть мира не понимает этого, включая человека, который должен внедрить его в компиляторы. Поэтому вы можете ожидать, что эта функция не будет работать согласованно между компиляторами, поэтому вы должны использовать ее в первую очередь. Это также означает, что не пытайтесь писать свой код для одного конкретного компилятора, не слишком привязывайтесь к gcc и его функциям, пробуйте sdcc и lcc, а также microsoft, borland, kiel и другие. Сделайте ваш код чистым, простым, читаемым и переносимым.
Итог: если вы серьезно относитесь к написанию программного обеспечения, то вам абсолютно необходимо знать, как работает компилятор. gcc, sdcc, lcc (и vbcc, если вы можете его найти) - все они бесплатные, с открытым исходным кодом и предоставляют опыт обучения, который улучшит ваши навыки программирования.