Ответ 1
приблизительное представление о количественном вкладе, который каждый из этих методов
Проблема с этим вопросом заключается в том, что на этом уровне детализации он практически невозможен.
В течение 15 лет были улучшены все аспекты стека программного обеспечения, от кода пользователя и идиомы, до библиотек, оптимизации компилятора, генерации кода и времени выполнения. Производительность уже в течение нескольких лет была сосредоточена на более чем десятке разработчиков.
В результате тысячи изменений были внесены, в результате чего мы получаем сегодня от GHC. Нет простого списка.
Вот быстрый список, чтобы указать, насколько широким и неопровержимым является этот quesiton.
Оптимизация компилятора
Улучшенная оптимизация компилятора делает сквозные улучшения по 1-15%.
- например пометка указателя (14%)
- специализация конструктора (улучшение на 10%)
- a far более надежный inliner.
Лучшие библиотеки
Усовершенствованные библиотеки могут иметь огромное влияние на определенные области. Например. для массива и строковых данных мы теперь имеем:
- bytestring (8x улучшение по сравнению с списками)
- вектор
- Репа
которые часто в 10 раз лучше, чем версии списка.
Улучшенные интерфейсы
Улучшенные интерфейсы для быстрого написания кода
- new primops
- лучше числовые преобразования.
- привязки FFI с более низкими накладными расходами.
Лучшие инструменты
Лучшие инструменты для анализа производительности
- Ядро GHC
- threadscope
- лучший профайлер
- лучшие инструменты GC
Runtime
Время выполнения стало умнее - например, сборщик мусора значительно лучше
- GHC parallel GC, снова несколько% для каждой программы.
- IO-потоки получили дешевле и быстрее.
Генерация кода
Генератор кода лучше.
- вместо генерации C, GHC целей LLVM, улучшающих некоторые массивные программы на 25%, некоторые на 100%.
- генератор исходного кода также переписан и улучшен.
Лучшие идиомы
И, наконец, идиомы для написания быстрого кода теперь гораздо более широко поняты.
Итак, вы можете назвать любое место в стеке программного обеспечения, и произошло несколько процентов улучшений. Также были серьезные прорывы во время исполнения, компилятор и дизайн библиотеки.