Jakich optymalizacji można oczekiwać, aby GHC działał niezawodnie?

GHC ma wiele optymalizacji, które może wykonać, ale nie wiem, jakie one są, ani jak prawdopodobne jest ich wykonanie iw jakich okolicznościach.

Moje pytanie brzmi: jakich transformacji mogę się spodziewać za każdym razem lub prawie tak? Jeśli spojrzę na fragment kodu, który będzie często wykonywany (oceniany), a moją pierwszą myślą jest „hmm, może powinienem to zoptymalizować”, w którym to przypadku powinna być moja druga myśl: „nawet o tym nie myśl, GHC to zrozumiał?

Czytałem gazetęStream Fusion: od list do strumieni do niczego w ogólei technika, której użyli do przepisania przetwarzania listy na inną formę, którą normalne optymalizacje GHC w sposób niezawodny zoptymalizowałyby do prostych pętli, była dla mnie nowością. Jak mogę stwierdzić, kiedy moje własne programy kwalifikują się do tego rodzaju optymalizacji?

Jesttrochę informacji w podręczniku GHC, ale to tylko część drogi do odpowiedzi na pytanie.

EDYCJA: Zaczynam nagrodę. Chciałbym mieć listę transformacji niższego poziomu, takich jak lambda / let / case-floating, specjalizacja argumentów typu / konstruktora / funkcji, analiza ścisłości i rozpakowywanie, pracownik / wrapper i cokolwiek innego, co znaczące GHC, które opuściłem , wraz z wyjaśnieniami i przykładami kodu wejściowego i wyjściowego, a najlepiej ilustracjami sytuacji, gdy całkowity efekt jest czymś więcej niż sumą jego części. A najlepiej wspomnieć o transformacjachprzyzwyczajenie zdarzyć. Nie oczekuję nowatorskich wyjaśnień każdej transformacji, wystarczy kilka zdań i wbudowanych przykładów kodu jednowierszowego (lub link, jeśli nie jest to do dwudziestu stron artykułu naukowego), o ile jest to duży obraz do końca. Chcę być w stanie przyjrzeć się fragmentowi kodu i zgadnąć, czy skompiluje się w wąską pętlę, czy nie, lub co musiałbym zmienić, aby to zrobić. (Nie interesuje mnie tak wiele w dużych platformach optymalizacyjnych, jak fusion strumieniowe (po prostu przeczytałem o tym artykuł); więcej w rodzaju wiedzy, którą ludzie, którzypisać te ramy mają.)

questionAnswers(3)

yourAnswerToTheQuestion