2015-08-20 2 views
2

Go 1.5 удалось выпустить загрузочный компилятор, написанный на Go. Предполагая, что Go медленнее, чем C, и более ранний компилятор Go написан на C, является ли загрузочный компилятор медленнее во время компиляции?Ускоренный компилятор Is Go 1.5 медленнее, чем компилятор Go 1.4, написанный на C?

+2

Bootstrapping не имеет к этому никакого отношения. «Bootstrapped compiler» и «компилятор, написанный на C» не являются взаимоисключающими. То, что вы действительно задаете, находится между «компилятором, написанным в Go» и «компилятором, написанным на C». – EJP

+1

Заголовок не передавал специфику в теле вопроса (это * Go 1.5's * загрузочный компилятор медленнее, чем * 1.4 * компилятор в C), поэтому я отредактировал его, чтобы быть более четким, но это кажется разумным вопросом, даже если мы не совсем любим ответ (да, строит в 1.5 медленнее). – twotwotwo

ответ

7

Да, компилятор Go 1,5 медленнее, а discussed in the release notes:

Строит в Go 1.5 будет медленнее в примерно в два раза. Автоматический перевод компилятора и компоновщика с C на Go привел к унииоматическому коду Go, который плохо работает по сравнению с хорошо написанным Go. Инструменты анализа и рефакторинг помогли улучшить код, но многое еще предстоит сделать. Дальнейшее профилирование и оптимизация будут продолжены в версиях Go 1.6 и будущих версиях. Для получения дополнительной информации см. Эти slides и связанные с ними video.

Опять же, автоматический перевод был автоматически переведен, поэтому после перевода он выводит тот же код, что и раньше: ваши программы не медленнее, потому что это компилятор. The rest of the release notes и ссылки выше пролить больше света. Существуют соображения, отличные от скорости компиляции: авторы намереваются двигаться быстрее в Go, чем они могли бы в C.

Я бы рекомендовал обновить: с открытым исходным кодом будет зависеть от 1.5, и если вы останетесь за собой теряют много классных вещей, таких как большие сокращения латентности GC, отталкивая большую часть этой работы в фоновом режиме (также обсуждаются в разделе «Эффективность», приведенном выше, я написал немного больше об этом responding to another question).

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

0

Ну, PyPy написана на Python и, как известно, быстрее (иногда), чем CPython написанной на C.

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

C быстро, потому что он близок к процессору, но скорость языка в основном больше связана с алгоритмами для создания более «расширенной» функции (простой в использовании, но расширенной по сравнению с функциями процессора).

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

+0

К сожалению, я не думаю, что это совершенно правильно - компиляция Go 1.5 медленнее 1.4 (по-прежнему быстро по сравнению с множеством вещей, но это был не вопрос). Авторы Go надеются, что с течением времени они смогут компенсировать эту разницу с помощью настройки производительности и лучшей распараллеливания. Извините, что у меня нет больших цитат, но, например, есть эта тема, начинающаяся 5 июля: https://groups.google.com/forum/#!тема/golang-nuts/uBFzGIturOA – twotwotwo

+0

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

+0

Нет, скорость генерируемого кода не зависит от скорости компилятора в этом случае. Программы, у которых были длительные паузы GC, как правило, почти полностью работают на фоне (я ответил об этом в другом месте) (https://stackoverflow.com/questions/31684862/how-fast-is-the-go-1 -5-дс-с-терабайт-на-RAM/31686469)). Если у вас есть тонны goroutines и контекстных переключателей, изменения планировщика могут вам помочь. [В противном случае многие программы могут видеть небольшие изменения] (http://kokizzu.blogspot.com/2015/07/go-142-vs-15-beta-1-benchmark.html). – twotwotwo

Смежные вопросы