Ostatnio gdzieś czytałem, że dopasowywanie wzorców zachodzi podczas wykonywania, a nie podczas kompilacji. (Szukam źródła, ale nie mogę go znaleźć w tej chwili). Czy to prawda? A jeśli tak, czy strażnicy w funkcjach mają taką samą wydajność?Czy dopasowanie wzoru jest bardziej wydajne niż osłony?
Czytanie tego było dla mnie zaskakujące, ponieważ uważałem, że GHC był w stanie zoptymalizować niektóre (prawdopodobnie nie wszystkie) decyzje dotyczące dopasowania wzorca podczas kompilacji. Czy to się dzieje w ogóle?
Przypadek np
f 1 = 3
f 2 = 4
vs
f' a | a == 1 = 3
| a == 2 = 4
uwagi f
i f'
kompilacji do tej samej liczby instrukcji (na przykład w rdzeniu i/lub dolnej)?
Czy sytuacja jest inna, jeśli dopasowuję wzór do konstruktora zamiast wartości? Na przykład. jeśli GHC widzi, że funkcja z lokalizacji jest zawsze wywoływana za pomocą jednego konstruktora, czy optymalizuje to wywołanie w sposób, który eliminuje sprawdzanie w czasie wykonywania? A jeśli tak, to czy możesz podać przykład pokazujący, co daje optymalizacja?
Podsumowując
Co warto wiedzieć o tych dwóch podejść pod względem wydajności?
Kiedy jest jeden preferowany pod względem wydajności?
Pytasz, jak uzyskać podstawowe wyniki GHC lub jak zastosować kryterium? – jberryman
Istotne: [Haskell GHC: jaka jest złożoność czasu dopasowania wzorca z N konstruktorami?] (Http://stackoverflow.com/q/9027384/2751851) – duplode
Zwykle uważam, że dopasowanie do wzorca jest szybsze, biorąc pod uwagę że instancje 'Eq' są zwykle oparte na dopasowywaniu wzorców. – AJFarmar