Подтвердить что ты не робот

Какие методы внесли наибольший вклад в улучшение производительности Haskell?

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

Все изменилось. Сегодня Haskell (GHC) имеет отличную производительность, часто недалеко от C/С++. Итак, что именно было изменено в компиляторе, который внес наибольший вклад в это улучшение? Я знаю несколько методов, которые часто используются, например, лучший анализ распаковки и строгости. Я хотел бы иметь некоторое приблизительное представление о количественном вкладе, который каждый из этих методов привел к общему улучшению производительности.

Если вы предпочитаете, вопрос также может быть сформулирован в следующих терминах: рассмотрите не очень высокую производительность GHC Haskell в середине 90-х. Каковы были бы лучшие 5 областей, чтобы улучшить, чтобы приблизить производительность к 2013 году GHC Haskell?

4b9b3361

Ответ 1

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

Проблема с этим вопросом заключается в том, что на этом уровне детализации он практически невозможен.

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

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

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

Оптимизация компилятора

Улучшенная оптимизация компилятора делает сквозные улучшения по 1-15%.

Лучшие библиотеки

Усовершенствованные библиотеки могут иметь огромное влияние на определенные области. Например. для массива и строковых данных мы теперь имеем:

которые часто в 10 раз лучше, чем версии списка.

Улучшенные интерфейсы

Улучшенные интерфейсы для быстрого написания кода

Лучшие инструменты

Лучшие инструменты для анализа производительности

  • Ядро GHC
  • threadscope
  • лучший профайлер
  • лучшие инструменты GC

Runtime

Время выполнения стало умнее - например, сборщик мусора значительно лучше

Генерация кода

Генератор кода лучше.

  • вместо генерации C, GHC целей LLVM, улучшающих некоторые массивные программы на 25%, некоторые на 100%.
  • генератор исходного кода также переписан и улучшен.

Лучшие идиомы

И, наконец, идиомы для написания быстрого кода теперь гораздо более широко поняты.

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