poniedziałek, 5 listopada 2012

Haskell Strings

Niedawno natrafiłem na stronę http://honza.ca/2012/10/haskell-strings, gdzie autor próbował napisać w Haskellu program realizujący takie oto proste zadanie:
  • Wczytaj plik o nazwie file, który zawiera jakieś zdania,
  • Zamień pierwszą literę każdego wyrazu na wielką,
  • Wypisz wynik na standardowe wyjście.

Ja utworzyłem sobie plik ważący 382 MB składający się z linii 'are you sure about this?'. Nie będę się długo nad tym rozwodził, wypiszę tylko najlepsze rozwiązanie jakie udało mu się znaleźć:



Czas: 0m46.615s

Autor przytacza rozwiązania w innych językach i niemal każde jest szybsze od tego w Haskellu. Weźmy na przykład jego rozwiązanie w C:



Czas: 0m4.027s

Postanowiłem spróbować pobić rozwiązanie autora w Haskellu. W rezultacie udało mi się stworzyć coś takiego:



Czas: 0m2.905s

Jak widać moje rozwiązanie okazało się szybsze od tego w C! Oczywiście rozwiązanie w C pewnie też można jeszcze poprawić ale to i tak nieźle. W każdym razie nie spodziewałem się takiego wyniku. Jeżeli do tej pory ktoś nie wierzył w szybkość programów napisanych w Haskellu to teraz chyba nie powinien mieć wątpliwości. Gorąco zachęcam do nauki!