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