Czy istnieje badanie porównawcze zużycia pamięci przez środowiska wykonawcze języków programowania, skorelowane z współczynnikiem ekspresyjności i błędów błędów produkcyjnych? [Zamknięte]

10

Istnieje wiele badań porównawczych i dostępnych online, jeśli chodzi o wydajność środowiska wykonawczego aplikacji zbudowanych w tym lub innym języku. Niektóre napędzane przez korporacje, niektóre akademickie, niektóre tylko osobiste raporty z eksperymentów.

Dostajemy również przyzwoity udział w badaniach porównawczych dotyczących skutków ubocznych języka programowania i jego narzędzi, takich jak:

  • czasy budowy
  • prawdopodobieństwo wykrycia błędu poprodukcyjnego,
  • moc ekspresyjna,
  • itp...

Jednak ostatnio coraz bardziej dziwi mnie zużycie pamięci przez moje programy bardziej niż cokolwiek innego. Może to wynikać z faktu, że chociaż prawo Moore'a jest po naszej stronie w kwestii surowej wydajności, zdaliśmy sobie sprawę, że inne wąskie gardła mają większe znaczenie. To, i nie mam tendencji do aktualizacji mojego sprzętu co jakiś czas, i mam trochę „starych” (czytaj Pentium 4 3.6GHz 2005-2006 z 4 GB pamięci RAM), które w dzisiejszych czasach są trudne do użycia w dużych aplikacjach bez wymagając ode mnie wielkiego wysiłku, aby wycisnąć z nich każdy kawałek soku (wybór systemu operacyjnego, interfejsu użytkownika, ulepszenie usług i demonów, wybór aplikacji do wykonania zadania lub innego ...). Szczerze mówiąc, czasami odpalam toplub procexppłaczę na widok pamięci wykorzystywanej przez najbardziej niewinne programy.

Mogę rozwiązać ten problem, pchając się w kierunku podanym powyżej i zasadniczo próbując ograniczyć siebie i programy, z których korzystam (chyba z tego powodu mam wielką miłość do programów cli), ale nie mogę się powstrzymać od myślenia że może robimy to źle.

Nowoczesne narzędzia dla współczesnych potrzeb

Oczywiście języki wyższego poziomu są prawdopodobnie lepsze i uzasadniają ich wartość ciężaru własnego. Pewnych wyborów projektowych dokonano wtedy z dobrych (lub podobno dobrze zaplanowanych) powodów, w wielu łańcuchach narzędzi. Współdzielone biblioteki, modele pamięci, procesory wstępne, systemy typów itp. Ale niektóre mogą być bardziej opłacalne niż inne dzięki naszemu nowoczesnemu sprzętowi i chętnie przeczytam kilka poważnych badań na ten temat.

Moje pytanie brzmi zatem: czy wisi w grze Benchmarks Game i innych, które koncentrują się na porównaniu podstawowego zużycia pamięci przez środowisko wykonawcze języków?

Co więcej, czy istnieją badania porównujące to z innymi parametrami (podobnie jak w tym artykule , na przykład w przypadku innych kryteriów, również opartych na grze Benchmarks )?

Haylem
źródło
3
Dlaczego gra testowa jest niewystarczająca? Jest to prawdopodobnie najlepszy dostępny zasób i już szczegółowo opisuje zużycie pamięci.
Robert Harvey,
@RobertHarvey: Dostarcza informacji o pamięci, ale nie dotyczy środowiska wykonawczego „podstawowego”. Wydaje mi się również, że wydobywanie informacji z gry Benchmark jest raczej tajemnicze (tym bardziej zasługuje na to, że ten artykuł robi niesamowitą robotę ze swoimi danymi, chociaż nie tego szukam).
haylem,
1
Może pomóc osobom próbującym odpowiedzieć na twoje pytanie, jeśli podasz informacje o tym, jaki problem chcesz rozwiązać, z pewnymi szczegółami, takimi jak środowisko wykonywania i pożądane zużycie pamięci. Odpowiedź będzie się różnić, jeśli piszesz oprogramowanie dla środowiska osadzonego (gdzie ważna jest ilość używanej pamięci) w porównaniu z nowoczesnym komputerem stacjonarnym (gdzie zużycie pamięci jest zasadniczo nieistotne, chyba że system oprogramowania jest ekstremalnie duży).
Robert Harvey,
2
How much memory consumption makes you weep?30 MB dla nieaktywnej karty Chrome bez rozszerzeń, 100 MB dla CCC ATI, nawet 11 MB dla nieaktywnej wtyczki googletalk lub 23 MB dla nieaktywnego sterownika drukarki. Te rzeczy i wiele innych. Przykład chromu jest trochę poza parkiem, ponieważ jest bardziej złożonym przykładem, ale inne już mnie dość zaskakują.
haylem,
1
niech nam kontynuować tę dyskusję w czacie
Robert Harvey

Odpowiedzi:

7

Znalazłem częściowe informacje, więc zacznę kompilować swoje ustalenia we własnej odpowiedzi. Nie pozwól, aby powstrzymało Cię to od przekazywania własnych odpowiedzi (lub edytowania tej).

Istniejąca literatura:

  • Empiryczne porównanie 7 języków programowania - Prechelt (2000) [ PDF ]

    Trochę przestarzały, ale obejmuje część materiału, który mnie interesuje, i daje pogląd na wykorzystanie pamięci ekspresyjnej i jej ekspresję. Wyniki mogą się znacznie różnić, ale jest to ciekawy początek.

  • Szybkość, wielkość i niezawodność języków programowania - Marceau (2009) [ blog ]

  • Używany kod, używane kształty czasu z gry Benchmarks [ u32 , u32q , u64 , u64q ]

    Chociaż nie obejmuje zużycia pamięci w czasie wykonywania, praca Marceau jest mniej więcej takim rodzajem referencji lub badań empirycznych, które chętnie znajdę dla tej krytyki pod względem treści i jakości. Dobry przykład tego, czego szukam, tylko dla różnych wskaźników. Drugi artykuł to kontynuacja znaleziona na stronie Benchmarks Game, która została opublikowana wkrótce po (i które zawiera odniesienia) pracy Marceau, z nowszymi ekranami i większą liczbą języków, choć wciąż bez szczegółów pamięci wykonawczej. Każdy wykres na tych stronach prowadzi następnie do języka-to-języka porównaniu która zrobienia zapewnić wysoki poziom informacji w pamięci chociaż.

Haylem
źródło
Praca Marceau jest ćwiczeniem polegającym na opowiadaniu historii, a niektóre z nich nie mają sensu - „Czy wprowadzenie funkcji funkcjonalnych zabija wydajność?” ignoruje prosty fakt, że niektóre z tych programów w „języku funkcjonalnym” mogą nie korzystać z funkcji funkcjonalnych. Dane pochodzą z poprzedniego wcielenia gry testowej; i początkowo był używany bez zrozumienia, więc po opublikowaniu było kilka cykli korekty (sprawdź komentarze).
igouy
W przypadku „podstawowego zużycia pamięci w środowisku wykonawczym” proste porównanie programów „hello world” może być tak dobre, jak potrzebujesz.
igouy
@igouy: tak. Nie mam co do tego wątpliwości, ale miałem nadzieję, że nie będę musiał eksperymentować i dokumentować / utrzymywać tego samego :) W rzeczywistości nawet mniej niż cześć świat byłby OK, ponieważ w niektórych nie musiałbyś nawet linkować (lub load), na przykład, procedury drukowania. (wyłączenie optymalizacji kompilatora i innych rzeczy również może być wskazane)
haylem
@igouy: w sprawie pracy Marceau, wiem, przeczytałem stronę, komentarze, zaktualizowane strony z Benchmark Game i skontaktowałem się z nim. Ten artykuł jest nadal moim zdaniem dobrym odniesieniem. Fakt, że jest niedoskonały, nie odbiera jego wartości i nadal zmierza w kierunku tego, co chciałbym znaleźć (lub odtworzyć siebie).
haylem
„ale miałem nadzieję, że sam nie będę musiał eksperymentować i dokumentować / utrzymywać” - spójrz na pomiary w Archiwum internetowym . Na nieszczęście dla ciebie zdecydowałem, że pomiary pamięci dla Hello World były całkowicie mylące i przestałem je wyświetlać po 2005 roku.
igouy
1

To nie odpowiada na pytanie na słowo, ale może nieco zmienia perspektywę. Mam na myśli zapis z czatu, aby nadać ton temu komentarzowi, który z pewnością będzie przedmiotem wielu głosów negatywnych.

Są ludzie, dostawcy sprzętu, dostawcy narzędzi i programiści, którzy są zaniepokojeni wydajnością. Na razie będzie to coraz większy problem dla nich i dla nas wszystkich. Obawy te są zakorzenione w urządzeniach mobilnych, zwłaszcza w potworach o dużej mocy i pożeraniu baterii z największymi ekranami i najsilniejszymi radiotelefonami.

Cofnijmy się jeszcze raz, po części dlatego, że znaleźliśmy się w obecnej sytuacji, ze stosunkowo masywnymi ramami i lekkim lekceważeniem ogólnej wydajności, poza ulepszeniami sprzętowymi, jest dziedzictwem. Zgodność ze starszymi systemami utwierdza nas w zgodności oprócz kompatybilności. To nie tyle wina czasów najwyższego poziomu, że zasadniczo są one tym samym środowiskiem wykonawczym, działającym dość wydajnie i wydajnie, gdy są używane w innym środowisku operacyjnym (np. Xbox, Windows Mobile pre 7/8 / Surface, Java Framework itp.).

Porównaj zakres kompatybilności komputera stacjonarnego ze starszym oprogramowaniem z zakresem kompatybilności urządzenia mobilnego.

W przypadku urządzeń mobilnych producenci urządzeń dokładają starań, aby zapewnić pewną kompatybilność, ale nie uczynili kompatybilności podstawową podstawą. Gdy istnieje wybór między dalszym zapewnianiem zgodności a przenoszeniem projektu systemu mobilnego do przodu, system mobilny idzie do przodu.

W przypadku komputerów stacjonarnych wydaje się, że jest odwrotnie. Jeśli znacząca przełomowa zmiana trafi w marketerów lub pierwszych użytkowników w niewłaściwy sposób, wielokrotnie przesuwa potrzebne funkcje i przeprojektowanie na zapleczu. W pewnym momencie pamiętam plotki o tym, że my, użytkownicy systemu Windows, znajdziemy całkowicie i dramatycznie nowy system plików z Windows XP, potem w Vistę, później to samo dla Seven i wreszcie w Eight, ale nie, tylko stopniowo ulepszany od czasu po raz pierwszy widzieliśmy to w Windows2000? Nowy system plików długo siedział, został złomowany, a jakkolwiek pogłoski decydują później, nie mogę powiedzieć. To prawdopodobnie największy znany przypadek, ale jestem przekonany, że nie jest to jedyny duży przypadek.

Nawet w przypadku najnowszych tabletów i mobilnych systemów operacyjnych Microsoft, który niegdyś kształtował rynek, jest teraz spleciony w mecz śmierci nie tylko z konsumentami, ale także z cienia samego siebie z działu komputerów stacjonarnych. Tablet musiał znacznie współpracować z odpowiednikiem na komputery stacjonarne. Nie, nie mógł się z tym doskonale bawić, ze względu na różnice w architekturze, ale także z powodu archaicznego charakteru podstaw pulpitu, dokonał znacznych poświęceń.

Teraz z pewnością Windows jest łatwym celem do jakiejkolwiek krytyki w tej sytuacji, ale inne platformy są dalekie od „bez grzechu”. W ekosystemie Linuksa czai się wiele reliktów, które z pewnością powodują wielką konsternację dla systematycznych ulepszeń.

Ekonomia odgrywa dużą rolę w tym równaniu; sposób, w jaki finansujemy nasze komputery i aplikacje na jednym, oraz sposób, w jaki są one finansowane na drugim, jest zdumiewająco odmienny. Tam, gdzie Wintel silnie wpłynął na przestarzałość, Apple i Google zmieniły go w prawie ścisły harmonogram. To jest nieco poza kursem, niż zamierzałem, więc odejdę, gdy siedzi, i niech czytelnicy zabiorą go stamtąd.

Jeśli i kiedy duzi dostawcy zmienią swoje modele przestarzałości i ceny, mogą zacząć iść do przodu ze zmianami na większą skalę w bardziej wyrównanym tempie. Te frameworki najwyższego poziomu, które są obsługiwane przez języki najwyższego rzędu, będą się w pewien sposób kurczyć, ponieważ będą w stanie osiągnąć swoje zadanie na wysokim poziomie z bardziej niskopoziomową wydajnością, ponieważ nieefektywna pośrednia kompatybilność i warstwy niskiego poziomu będą zostać drastycznie zmniejszone, jeśli nie wyeliminowane.

JustinC
źródło
Naprawdę tak naprawdę nie odpowiada, to bardziej jak swobodne myśli, które dodają do pytania pytania :) Jednak dzięki i +1 za wgląd. (Ponadto chcę wyjaśnić, że nigdy nie zamierzałem wyróżniać systemów Microsoft jako części sprawców. Dowolny system operacyjny jako ten sam problem, jeśli pozwala na to model pamięci systemu i format wykonywalny).
haylem
Z pewnością nie mam zamiaru wkurzać się w Microsoft, ale są to najłatwiejsze przypadki, które większość z nich widzi w tym względzie. Inna wielka nazwa, tradycyjni dostawcy są w tej samej łodzi, choć może nawet pod nieco innym względem (na przykład bazy danych klasy przemysłowej i sprzęt sieciowy; ile kompromisów przenoszą, które w przeciwnym razie utrudniają znaczną poprawę ich podstawowej innowacyjności i wartości) . Nawet bliżej domu na produktach, które każdy z nas wspiera, wykonujemy ten przysłowiowy krzyż w takim czy innym stopniu.
JustinC