Go 1.5 удалось выпустить загрузочный компилятор, написанный на Go. Предполагая, что Go медленнее, чем C, и более ранний компилятор Go написан на C, является ли загрузочный компилятор медленнее во время компиляции?Ускоренный компилятор Is Go 1.5 медленнее, чем компилятор Go 1.4, написанный на C?
ответ
Да, компилятор 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, не кусает вас.
Ну, PyPy написана на Python и, как известно, быстрее (иногда), чем CPython написанной на C.
В случае Go, язык делает его легче писать более эффективный код, так что не должна быть медленнее старой версии C. Писатели были осторожны, чтобы убедиться в этом. Вместо того, чтобы быстрее, он легче поддерживать и расширять.
C быстро, потому что он близок к процессору, но скорость языка в основном больше связана с алгоритмами для создания более «расширенной» функции (простой в использовании, но расширенной по сравнению с функциями процессора).
Классический пример - управление памятью. C malloc/free по своей сути медленный, поскольку он реорганизует свободную память всякий раз, когда вы ее отпускаете. Сборщик мусора звучит намного медленнее из-за работы, которую он должен выполнять, но ваша программа может освободить память и продолжить работу на полной скорости.
К сожалению, я не думаю, что это совершенно правильно - компиляция Go 1.5 медленнее 1.4 (по-прежнему быстро по сравнению с множеством вещей, но это был не вопрос). Авторы Go надеются, что с течением времени они смогут компенсировать эту разницу с помощью настройки производительности и лучшей распараллеливания. Извините, что у меня нет больших цитат, но, например, есть эта тема, начинающаяся 5 июля: https://groups.google.com/forum/#!тема/golang-nuts/uBFzGIturOA – twotwotwo
Я также могу только продолжить то, что я слышал в подкасте с одной из команд. Я ожидал бы, что компилятор будет медленнее, потому что теперь он может сделать больше. Сложны ли скомпилированные приложения? –
Нет, скорость генерируемого кода не зависит от скорости компилятора в этом случае. Программы, у которых были длительные паузы 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
- 1. Go Cross компилятор не работает
- 2. Ошибка сборки go компилятор из источника
- 3. Go Concurrency: алгоритм Чудновского медленнее, чем синхронизация
- 4. Go-Scala-Go! В чем основные отличия?
- 5. Где я могу найти Blue, компилятор C#, написанный на C#?
- 6. Is JQuery * компилятор * возможно?
- 7. Является ли компилятор Go достаточно умным, чтобы забрать микрооптимизацию?
- 8. Почему компилятор go «gc» использует другое соглашение о вызове, чем C?
- 9. Может ли компилятор Go To быть установлен в Windows?
- 10. Go: json encoding struct с указателями медленнее, чем с копиями?
- 11. Почему компилятор Go не рассматривает объявленную переменную как ошибку?
- 12. huffman decoding is go nutts
- 13. Как написать компилятор C на C?
- 14. DB2 эквивалентна GO GO GO?
- 15. C++ компилятор на MacOS
- 16. Как работает компилятор Go1?
- 17. Параллельный сегмент Go-lang работает медленнее, чем сегмент серии
- 18. C Компилятор Бесконечные ошибки?
- 19. проверить, что компилятор создает код Java 1.5
- 20. Веб-компилятор
- 21. Go - возврат указателя на стек
- 22. Управление версиями пакетов в Go 1.5
- 23. быстрый компилятор против объектива c компилятор
- 24. Имеет ли компилятор Intel C++ компилятор ресурсов?
- 25. Golang Препроцессор, как и компилятор C-стиля
- 26. Is Go уязвим для переполнения буфера
- 27. Компилятор «g ++» и «C++»
- 28. почему компилятор java 1.4 не жалуется на стороннюю библиотеку, скомпилированную с компилятором 1.5?
- 29. mod_rewrite в .htaccess, go/*, go ?, go?/* Work, но go /? * Не
- 30. Unity3D сопрограммная ошибка компилятор
Bootstrapping не имеет к этому никакого отношения. «Bootstrapped compiler» и «компилятор, написанный на C» не являются взаимоисключающими. То, что вы действительно задаете, находится между «компилятором, написанным в Go» и «компилятором, написанным на C». – EJP
Заголовок не передавал специфику в теле вопроса (это * Go 1.5's * загрузочный компилятор медленнее, чем * 1.4 * компилятор в C), поэтому я отредактировал его, чтобы быть более четким, но это кажется разумным вопросом, даже если мы не совсем любим ответ (да, строит в 1.5 медленнее). – twotwotwo