Сколько из компилятора мы должны знать?

Если вы посмотрите здесь , это показывает, как настроить разделитель

    jms_serializer:
        ...
        property_naming:
            id: ~
            separator:  _
            lower_case: true
            enable_cache: true

10
задан Joel Coehoorn 9 December 2011 в 15:30
поделиться

13 ответов

Вероятно, не повредил бы знать, как компилятор оптимизирует Ваш код, но не пишет для компилятора, но пишет, чтобы люди читали.

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

20
ответ дан 3 December 2019 в 13:35
поделиться

Без любого доказательства эффективности вообще, я чувствую себя лучше о понимании, что происходит с моим кодом для знания просто немного о компиляторах и небольшом количестве блока. Можно изучить много путем чтения Jack Crenshaw, Позвольте нам Сборка Компилятор.

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


Править: Также стоит отметить, что много проблем, которые не призывают к "компилятору", все еще лучше всего подается методами компилятора. Парсинг любого скромно сложного командного языка является проблемой компилятора, даже если Вы не пишете исполняемый файл.


Edit2: Многие обычные тексты проявляют довольно абстрактный, математический подход к проблеме компилятора, которая может быть пугающей или сбивать с толку сначала. Учебное руководство Креншо берет, "начинают строчить код" подход, которому сообщает более тонкое понимание автора. Хорошее введение, но если Вы серьезны Ваш, должно добиться более формального исследования.

10
ответ дан 3 December 2019 в 13:35
поделиться

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

  1. Если у Вас нет идеи, что делает компилятор, можно непреднамеренно написать код, который является намного более дорогим, чем Вы предназначили. Это особенно верно при выделении памяти, не зная это. Классический пример должен связать строки в цикле, например, как в

    ответ =""

    поскольку я = 1 к n делаю

      answer = answer .. strings[i]    -- .. is string concatenation
    

    Этот код квадратичен, делая квадратичный объем выделения и копирования. Плохие новости.

  2. Другая большая причина знать что-то о компиляторах состоит в том, что часто проблема требует небольшого языка. Если Вы знаете что-то о компиляторах (интерпретаторы так же хороши здесь, вероятно, лучше), затем, можно создать немного языка. Если у Вас есть выбор относительно того, на что похож язык, часто лучше позволить кому-то еще создать язык для Вас. Lua является языком, который особенно хорош в том, чтобы быть используемым в качестве компонента другими программами.

Учебное руководство Креншо не плохо. Другая хорошая книга, если можно тронуть его, является P. J. Книга Brown's по интерактивным компиляторам и интерпретаторам. Это долго распродано, но Вы могли бы найти его в библиотеке.

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

3
ответ дан 3 December 2019 в 13:35
поделиться

Я думаю, что это, конечно, сделает Вас лучшим программистом тонким способом.

Общее понимание того, как это работает, поможет Вам больше знать о коде, который Вы пишете. Я видел много опытных разработчиков, которые изо всех сил пытаются понять некоторые фундаментальные понятия при изучении нового языка. Если Вы будете знать приблизительно, как работает компилятор и (возможно, более важный), как код выполнен, Вы поймете лучше эти понятия. Я говорю о "куче" по сравнению со стеком, указателями, и т.д.

Это может также пригодиться, если необходимо написать код, чтобы проанализировать или перевести некоторый текст. Я однажды записал программу для перевода некоторых sql условий в другой пользовательский формат и запись, что маленький синтаксический анализатор для него был самым простым и самым изящным способом сделать это (или таким образом, я думаю :))

Кроме того, глубокое понимание компилятора может помочь Вам оптимизировать специально для него, но это может быть действительно твердо и не всегда рекомендуемое, как сказал coobird.

3
ответ дан 3 December 2019 в 13:35
поделиться

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

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

Править

Например: компиляторы C хранят данные в массивах последовательно главный формат, таким образом, необходимо выполнить итерации по многомерным массивам, варьирующимся самый высокий размер (самый правый индекс) сначала и затем продолжающимся к самому низкому размеру (крайний левый индекс). Фортран делает точно противоположное, храня массивы в столбце главный формат. Это означает, что в Фортране необходимо варьироваться самый низкий размер сначала, продолжая двигаться к самому высокому размеру. Это улучшит отношение удачного обращения в кэш Вашего кода и значительно улучшит производительность для больших многомерных массивов.

2
ответ дан 3 December 2019 в 13:35
поделиться

Не изучайте компиляторы, изучайте проблемы, решенные ими.

1
ответ дан 3 December 2019 в 13:35
поделиться

Я думаю, что делает компилятор важная вещь здесь (это создает объяснение с x, y, z характеристики), Который переводится в, знают платформу, для которой Вы нацелены.

Путем это делает ту задачу, не важны (если Вы не пишете компиляторы, конечно),

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

:) Кажется очевидным, но я удивлен числом разработчика, которого я встретил, который даже не смотрел на выход компилятора.

1
ответ дан 3 December 2019 в 13:35
поделиться

У Вас есть интерес к эффективному использованию отладчика? Затем да. У Вас есть интерес к записи надежного или эффективного кода? Затем да.

Лично я забочусь о бэкенде о больше, чем frontend. Я рекомендую компилировать для ARM вместо x86, в этом случае Вы не изучаете ассемблер обязательно (где я рекомендую писать Ваш собственный дизассемблер), поэтому если Вы используете gcc, он имеет дизассемблер, и Вы видите то, что оба Ваших кода высокого уровня делают для изменения конечного результата, а также сколько изменения можно внести с параметрами компилятора. Это - глазной опыт открытия для большинства программистов высокоуровневого языка понять, что тот же код может иметь дико различные результаты на основе параметров компилятора и используемых параметров командной строки.

В течение середины компилятора я рекомендую и lcc и sdcc. Вы можете или не можете хотеть покупать книгу lcc:

[http://www.cs.princeton.edu/software/lcc/] [1]

Вам не нужно к тому, хотя, источник находится в сети (во многих формах). Как sdcc (компилятор C небольшого устройства, созданный первоначально для 8051 и другие 8 битов micros). Моя рекомендация там состоит в том, чтобы войти в интерфейс, где компилятор встречает бэкенд, Вы найдете, что Ваш код был превращен в серию атомарных частей, иногда обратной полировки как. = b + 7; мог бы закончить тем, что был загрузкой постоянное целое число 7. считайте из памяти переменную b в следующие доступные регистры. Добавьте 7 плюс регистр с b и сохраните в следующем доступном регистре. сохраните значение в регистре к местоположению в памяти для a.

Можно сделать это с gcc также, но можно закончить тем, что поняли, что gcc не является столь же большим как Вы, хотя это было. Из-за количества языков и количества бэкендов и количества рук в соединении, и т.д., это огромно и сложно. Это действительно продвигается, хотя, и действительно работает на языки и платформы, которые имеют экспертов, поддерживающих. Какой gcc может учить Вас, что другие не могут быть, что, различные языки на frontend сведутся на общий средний язык, что бэкэнд превращается в конкретные инструкции для каждой платформы.

Наконец frontend. По большей части люди используют bison/yacc, который является инструментом, что Вы создаете описание для своего высокоуровневого языка, и инструмент может проанализировать ввод данных пользователем на основе Вашего описания и превратить его на этот средний язык, если Вы будете.

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

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

Вы будете учиться, со временем, не пытаться слишком трудно записать для компилятора. Просто не будьте расточительны со своим кодом, не используйте Ну и дела функции свиста языка. Если необходимо было провести дополнительное исследование для выяснения некоторой функции компилятора, можно быть уверены, что большая часть мира не понимает это включая человека, который, как предполагается, реализует его в компиляторах. Поэтому можно ожидать, что функция для не работы последовательно через компиляторы поэтому необходимо использовать его во-первых. Это также означает, не пытаются написать Ваш код для одного определенного компилятора, не становитесь слишком приложенными к gcc и его функциям, пробуйте sdcc и lcc и Microsoft и Borland и Киль и других. Сделайте свой код чистым, простым, читаемым, и портативным.

Нижняя строка, если Вы серьезно относитесь к записи программного обеспечения, затем Вы абсолютно, должна знать, как компилятор работает. gcc, sdcc, lcc, (и vbcc, если можно найти его) все бесплатно, открытый исходный код, и обеспечивают полезный опыт, который улучшит навыки кодирования.

2
ответ дан 3 December 2019 в 13:35
поделиться

Я не думаю, что это должно по мере необходимости знать, как компилятор работает, как это к постоянно улучшающемуся знанию о программировании. Теперь, это именно так происходит, что обучение записать компилятор (или принципы позади него), оказывается, отличный способ развернуть знание.

Если бы Вы заинтересовали, то я рекомендовал бы получить Книгу Дракона, также известную как Компиляторы: Принципы, Методы и инструменты. Это может быть немного тяжелое движение в первый раз, но это, конечно, заставит Вас думать. Если бы Вы не делаете все это путем через или застреваете на некоторых частях, я предложил бы отложить его некоторое время и возвратиться позже - намного легче пройти во второй раз вокруг.

1
ответ дан 3 December 2019 в 13:35
поделиться

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

Для определенных компиляторов, однако, большинство разработчиков может уйти, зная всего одну вещь: переключатель компилятора для вывода ассемблера вместо двоичного кода. Исследование произведенного ассемблера скажет Вам точно, что компилятор делает для оптимизации кода и может помочь Вам выяснить, как переписать Ваш код, чтобы заставить его работать еще лучше.
Плюс, это - осуществление забавного "программиста" для обновления знания низкого уровня.

1
ответ дан 3 December 2019 в 13:35
поделиться

Как минимум необходимо быть знакомы с функциями языка на абстрактном уровне. Если Вы не знаете, чувствительны ли имена переменной к регистру, или как числа преобразовываются в булевскую переменную, то Вы, вероятно, не можете даже записать простое 'если' пункт надежно.

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

0
ответ дан 3 December 2019 в 13:35
поделиться

Я думаю, что то, что действительно действительно важно, должно сделать интерпретатор: это дает Вам больше понимания языков программирования, и это - то, что Вы используете... В схеме это на самом деле rnot трудно в сделать interpeter! Но на самом деле я значительно поощрил бы читать части SICP для большого просвещения).

Относительно компиляторов это более сложно, поскольку фокус здесь получает некоторую производительность/выполнение это для фактической машины. Как программист, что важно, там должен знать, по крайней мере, какие задачи они глобально выполняют и когда делают они работают, а не детали, потому что в наше время они превратились в действительно сложные системы особенно с JIT и т.д...

0
ответ дан 3 December 2019 в 13:35
поделиться

В сообщении в блоге Стив Йегге утверждал, что все программисты должны знать, как работают компиляторы . Он заходит так далеко, что говорит:

Мягкий, но настойчивый руководитель Резюме: Если вы не знаете, как компиляторы работают, значит, вы не знаете как работают компьютеры. Если вы не на 100% уверен, знаете ли вы, как компиляторы работать, то вы не знаете, как они Работа.

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

1
ответ дан 3 December 2019 в 13:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: