Komputerowa gra porównawcza języka
The Computer Language Benchmarks Game (wcześniej nazywana The Great Computer Language Shootout ) to darmowy projekt oprogramowania do porównywania, w jaki sposób dany podzbiór prostych algorytmów może zostać zaimplementowany w różnych popularnych językach programowania .
Projekt składa się z:
- Zestaw bardzo prostych problemów algorytmicznych
- Różne implementacje powyższych problemów w różnych językach programowania
- Zestaw testów jednostkowych w celu sprawdzenia, czy przesłane implementacje rozwiązują problem
- Ramy do uruchamiania i synchronizowania wdrożeń
- Strona internetowa ułatwiająca interaktywne porównanie wyników
Obsługiwane języki
Ze względu na ograniczenia zasobów obsługiwany jest tylko niewielki podzbiór popularnych języków programowania, według uznania operatora gry.
- Ada
- C
- Kaplica
- C#
- C++
- Strzałka
- Erlang
- F#
- Fortran
- Iść
- Haskella
- Jawa
- JavaScript
- Julia
- Seplenienie
- Lua
- OCaml
- Pascala
- Perl
- PHP
- Pyton
- Rakieta
- Rubin
- Rdza
- Pogawędka
- Szybki
Metryka
Mierzone są następujące aspekty każdego wdrożenia:
- całkowity czas pracy użytkownika
- szczytowa alokacja pamięci
- gzip 'ped rozmiar kodu źródłowego rozwiązania
- suma całkowitego czasu procesora we wszystkich wątkach
- indywidualne wykorzystanie procesora
Często spotyka się wiele rozwiązań tego samego problemu w tym samym języku programowania. Podkreśla to, że w ramach ograniczeń danego języka można podać rozwiązanie, które ma wysoką abstrakcję, jest wydajne pod względem pamięci, jest szybkie lub może być lepiej zrównoleglone.
Programy porównawcze
To był wybór projektowy od samego początku, aby uwzględnić tylko bardzo proste problemy z zabawkami, z których każdy zapewnia inny rodzaj wyzwania programistycznego. Daje to użytkownikom Benchmark Game możliwość przeanalizowania różnych implementacji.
- drzewa binarne
- chameneos-redux
- fannkuch-redux
- szybko
- k-nukleotyd
- mandelbrota
- konkurs meteorów
- n-ciało
- picyfry
- regex-redux
- odwrotne uzupełnienie
- norma widmowa
- pierścień gwintowany
Historia
Projekt był znany jako The Great Computer Language Shootout do 2007 roku.
Port dla systemu Windows był utrzymywany oddzielnie w latach 2002-2003.
Źródła zostały zarchiwizowane na GitLabie.
Istnieją również starsze forki na GitHub.
Projekt stale się rozwija. Lista obsługiwanych języków programowania jest aktualizowana mniej więcej raz w roku, zgodnie z trendami rynkowymi. Użytkownicy mogą również przesyłać ulepszone rozwiązania dowolnego problemu lub sugerować udoskonalenie metodologii testowania.
Zastrzeżenia
Twórcy sami podkreślają, że osoby prowadzące badania powinny zachować ostrożność podczas korzystania z takich mikrobenchmarków:
[...] testy porównawcze JavaScript są przelotnie małe i zachowują się w sposób znacząco inny niż rzeczywiste aplikacje. Udokumentowaliśmy liczne różnice w zachowaniu i na podstawie tych zmierzonych różnic wywnioskowaliśmy, że wyniki oparte na testach porównawczych mogą wprowadzać w błąd osoby wdrażające silnik JavaScript. Ponadto obserwujemy interesujące zachowania w rzeczywistych aplikacjach JavaScript, których testy porównawcze nie wykazują, co sugeruje, że wcześniej niezbadane strategie optymalizacyjne mogą być produktywne w praktyce.
Uderzenie
Wyniki testów porównawczych ujawniły różne problemy z kompilatorem. Czasami dany kompilator nie potrafił przetworzyć nietypowych, ale poza tym poprawnych gramatycznie konstrukcji. W innych przypadkach wydajność środowiska uruchomieniowego była poniżej oczekiwań, co skłoniło programistów kompilatorów do zmiany ich możliwości optymalizacji.
Różne artykuły badawcze zostały oparte na testach porównawczych, ich wynikach i metodologii.