Oto jak to widzę.
Jest kod maszynowy i to wszystko, czego potrzebują komputery, aby coś uruchomić. Komputery nie dbają o języki programowania. Nie ma dla nich znaczenia, czy kod maszynowy pochodzi z Perla, Pythona czy PHP. Języki programowania nie obsługują komputerów. Służą programistom.
Niektóre języki programowania działają wolniej niż inne, ale niekoniecznie dlatego, że coś jest z nimi nie tak. W wielu przypadkach dzieje się tak dlatego, że robią więcej rzeczy, które programiści musieliby zrobić (tj. Zarządzanie pamięcią) i robiąc te rzeczy, są lepsi w tym, co powinni robić - służą programistom.
Czy zatem wolniejsze działanie języków programowania jest naprawdę złe?
programming-languages
language-agnostic
performance
Emanuil Rusev
źródło
źródło
Odpowiedzi:
Nie sądzę, że to automatycznie źle. Python działa wolniej niż C ++, ale gdy oba są wystarczająco szybkie , Python może być najlepszym wyborem dla danego problemu, nawet jeśli jest wolniejszy .
To zawsze jest kompromis. W przypadku małych, jednorazowych zadań pisanie skryptów w języku Python jest znacznie szybsze niż w przypadku aplikacji C ++, która robi to samo (typowym przykładem dla mnie jest przetwarzanie wsadowe tekstu lub chodzenie po drzewie katalogów i robienie czegoś z plikami), i tak naprawdę nie dbam o to, czy zajmuje to 10 ms, czy 1000 ms, mimo że jest 100 razy wolniejszy, ponieważ pisanie i testowanie może zająć połowę czasu.
Oczywiście byłoby miło, gdyby Python był tak szybki jak C ++, więc w tym sensie zgadzam się z twoim stwierdzeniem, że „slow = bad”. Ale wtedy mam raczej potężny język, który działa tak szybko, jak chcę, nie robiąc pewnych rzeczy (powiedzmy, sprawdzanie granic tablic na surowych tablicach), o ile pozwala mi zdecydować, kiedy dokonać tego kompromisu (powiedzmy, używając std: :wektor).
źródło
Całkiem proste - powolność jest złą rzeczą
gdy program wymaga określonego poziomu wydajności
ponieważ bez tej wydajności nie spełniasz wymagań.
Może to być wszystko, od aplikacji biznesowej, która musi przetwarzać zapytania w dopuszczalnym czasie, po grę, która musi wyświetlać wiele informacji na ekranie w dowolnym momencie. Jeśli program nie jest wystarczająco szybki, to po prostu nie działa .
źródło
Spójrz na to w ten sposób: komputery są głupie . Postępują zgodnie z instrukcjami, które może wykonać każdy kretyn ze stołem triggera. Uparcie nalegają na robienie tego, co powiedziałeś, zamiast tego, co miałeś na myśli. Ani strzępu kierunku i intuicji. To jest straszne.
JEDNA rzecz, do której zmierza komputer, jest szybka. Naprawdę! Knucklehead z szafką na dokumenty może wykonać to samo zadanie, co baza danych. Jakiś facet rozkręcający prasę drukarską mógłby zrobić to, co robi Apache. Poważnie! I tak się stało przez setki lat. Dlaczego komputer jest dobry na WSZYSTKO, to jego szybkość.
Tak więc język programowania, który (w porównaniu z innymi językami) nie wykorzystuje, nie ma TYLKO korzyści z używania komputerów.
źródło
Język programowania może być bardzo wysoki, „robić dużo”, a jednocześnie być bardzo szybki. OCaml jest językiem wyższego poziomu niż PHP, ale wytwarza kod prawie tak szybko jak C. JavaScript jest tak dynamiczny jak PHP, ale można go wykonać naprawdę szybko. Jest to więc głównie problem z implementacją języka, a nie projekt. Języki dynamiczne trudniej jest wdrożyć wydajnie, ale nie jest to niemożliwe.
źródło
Szybkość można mierzyć w kategoriach czasu działania, początkowego czasu programowania i czasu konserwacji (czas potrzebny na odwrócenie problemów / błędów oraz przygotowanie nowego kodu i wdrożenie go).
Języki skryptowe mają zazwyczaj wolniejszy czas działania, ale krótszy czas konserwacji, ponieważ często można dokonać szybkiej zmiany i wdrożenia bez konieczności przebudowy całego systemu, a czasem nawet bez konieczności zatrzymywania się i ponownego uruchamiania.
Dlatego wiele zależy od równowagi, której potrzebujesz.
Kontekst jest również ważny. Ładowanie początkowej konfiguracji zajmuje 0,5 sekundy zamiast 0,1 sekundy nie jest niczym wielkim, ale w czasie wykonywania wykonanie zapytania zamiast 0,1 sekundy może być dużym problemem, jeśli musi obsłużyć 100 zapytań, a zatem zajmuje 50 sekund zamiast 10
źródło
Proste - klienci uwielbiają szybkie oprogramowanie. W rzeczywistości głównym celem komputerów jest szybkie obliczanie.
źródło
Wolność jest względna. Jeśli muszę czytać port 10 razy na sekundę, język, który nie może utworzyć pliku binarnego, który może to zrobić, jest zbyt wolny. Jeśli otoh piszę aplikację internetową, w której sekwencja żądania / odpowiedzi między serwerem a przeglądarką / klientem jest mierzona w sekundach, a użytkownik prawdopodobnie spędza minuty na ekranie przed kliknięciem przycisku, języka programowania, który może obsłużyć przetwarzanie żądania w ciągu 1 sekundy jest prawdopodobnie wystarczająco szybki (oczywiście są one znacznie szybsze).
Oczywiście język programowania może być czynnikiem determinującym szybkość wykonywania, ale to nie będzie sam język, ale kompilatory i / lub środowiska wykonawcze, które są z nim związane. Widać to wyraźnie w rozwoju Java, w którym wydajność JVM (nawet w identycznych środowiskach sprzętowych) z biegiem lat radykalnie wzrosła. I oczywiście zawsze jest możliwe pisanie strasznie wolnego kodu w dowolnym środowisku, które wybierzesz. Takie stwierdzenia, jak „C ++ jest dziesięć razy szybszy niż Java”, są automatycznie fałszywe, chyba że są kwalifikowane i określone ilościowo co do tego, które warunki zostały przetestowane i jak. Równie możliwe jest stworzenie testu, w którym Java jest szybsza niż C ++, wszystko zależy od tego, czego używasz jako kodu testowego i jak go wykonujesz.
źródło
Ponieważ języki programowania nie istnieją do obsługi programistów, istnieją po to, aby tworzyć programy do obsługi użytkowników.
Jeśli potrzebujesz tylko małego osobistego narzędzia do zrobienia czegoś za jednym razem, może być ono tak wolne, jak chcesz. Ale gdy zaczniesz wdrażać użytkowników, zależy im na szybkości i skalowaniu, zwłaszcza jeśli będą go używać wielokrotnie. (Na przykład instalator może być powolny; lepiej go nie instaluje.) I to nie tylko język; to ogólnie program. Jeśli twój program jest wolny, użytkownicy nie będą go lubić. A jeśli masz konkurencję, użytkownicy, którzy nie lubią twojego programu, są bardzo złe. Tak więc język, który przyczynia się do tego, że użytkownicy nie lubią twojego programu (spowalniając go) jest zły.
Należę do zespołu, który pisze oprogramowanie sterujące dla mediów nadawczych. Istnieje duża szansa, że Twoja ulubiona stacja telewizyjna lub radiowa działa na nim, jeśli jesteś w USA. Wydajność to jedna z rzeczy, o których najczęściej słyszymy od klientów. Pierwotnie został napisany z myślą o małych operacjach jednostanowiskowych, ale teraz podpisujemy duże sieci nadawcze i kablowe z setkami kanałów, a skala zaczyna być problemem. Jeśli nie będziemy w stanie sprawić, by wszystko zaczęło działać szybko, przekażą swoje kontrakty o wartości wielu milionów dolarów ludziom, którzy mogą, a my skończymy z pracą. Dlatego używamy szybkiego, skompilowanego języka i optymalizujemy nasze bazy danych.
źródło
Ponieważ szybsze jest lepsze. Czas to pieniądz. Jeśli piszesz oprogramowanie serwera i używasz wolniejszego języka programowania, kupujesz więcej serwerów. Jeśli piszesz oprogramowanie w wersji termokurczliwej, tracisz klientów wobec rywali, którzy są szybsi.
W przypadku wszelkiego rodzaju trwałego oprogramowania, z którego korzystają ludzie, zwykle chcemy go jak najszybciej. Na poziomie montażu czas wprowadzania na rynek zwiększa się zbyt mocno, aby nie był opłacalny. To wszystko kompromisy. Z biznesowego punktu widzenia bardziej opłacalne może być pozwolenie biednym programistom debugować błędy pamięci w C ++, robiąc to jeszcze przez kilka miesięcy, jeśli oznacza to, że produkt jest szybszy niż twoi rywale.
Szybkość jest tak naprawdę ważna w wielu programach. Powolne języki są obecnie uważane za „złe”, ponieważ są naprawdę zbyt wolne (Python może być 50x - 100x wolniejszy, a to za dużo)
źródło
Nie wiem, jak doszedłeś do tego wniosku. Powiedziałbym: inżynierowie używają języków programowania do swoich potrzeb.
To jest także płatne stwierdzenie. Zdefiniuj, co masz na myśli, używając tutaj słowa „wolniej”. Wolniej może oznaczać:
Te dwie kwestie, które przychodzą na myśl, są również powiązane, gdy istnieje pewien rodzaj kompromisu między czasem poświęconym na rozwój i wydajność.
źródło
Jak każde oprogramowanie, spowolnienie może być oznaką podstawowych problemów / złego projektu. Design jest wprawdzie trochę zeitgeist, ale to nie umniejsza faktu, że zasady projektowania, na których się teraz opiera, są nieaktualne i uważane za „złe”.
Weźmy na przykład klasyczną ASP i ASP.net.
źródło
Ktoś skomentował, że „Klienci uwielbiają oprogramowanie, które spełnia wymagania i mieści się w ramach budżetu”. Cóż, to prawda - ale ma to duży wpływ na wolne oprogramowanie, i to prawie z definicji oznacza wolniejsze języki programowania (i frameworki) oraz algorytmy i konfigurację. Powolny język programowania jest prawdopodobnie najważniejszą częścią tego wszystkiego po prostu dlatego, że jest to podstawa, z której najtrudniej będzie go zmienić. Jeśli używasz bazy danych Oracle i potrzebujesz większej wydajności, możesz zoptymalizować tabele / indeks / itp. Łatwo. Jeśli masz słaby algorytm w kodzie, możesz napisać inny kod. Jeśli twój framework jest powolny, możesz go wymienić - to nie jest takie proste, ale można to zrobić bez przepisywania wszystkiego. Jeśli twój język jest zbyt wolny, musisz praktycznie zacząć od nowa.
Zajrzyj na Facebooka, aby dowiedzieć się, na czym polega problem, aby PHP działało wystarczająco szybko, gdy trzeba było skalować.
Dla reszty z nas „niefunkcjonalne wymagania dotyczące wydajności” są często zapisywane w specyfikacjach, szczególnie w przypadku skalowalnych aplikacji internetowych. Niespełnienie strony „musi zostać wyświetlone użytkownikowi w ciągu 2 sekund od żądania”, a użytkownik traci umowę (lub płaci kary). Tak, tak, klienci uwielbiają oprogramowanie spełniające wymagania - a wymagania te mówią, że musi być szybki (może nie obchodzi Cię, jak długo użytkownicy spędzają wpatrywać się w klepsydrę, ale klient na pewno to robi - to ogromny koszt).
Na przykład w dużym call center powiedziano mi, że ustalili, że na każdą sekundę, którą można zaoszczędzić na procesie odbierania połączeń, 1 rozmówca może zostać „zredukowany”. To nagle prawdziwe pieniądze i ogromna zachęta dla szefów, aby uzyskać szybsze, wydajniejsze i bardziej użyteczne oprogramowanie.
Dużo czasu poświęca się martwiąc się, że programiści wypuszczają kod tak szybko, jak to możliwe (a następnie cały czas testują i refaktoryzują jednostki, lol). Przekonałem się, że nie jest to tak ważny czynnik, jak ludzie myślą - jeśli jesteś ekspertem w swoim języku, możesz go kodować znacznie szybciej niż niedoświadczony. Dlatego ekspert C ++ może pisać kod szybciej i dokładniej niż początkujący programista PHP. Myślę więc, że bycie ekspertem jest ważniejsze niż wybranie „łatwego” języka i dlatego nie lubię kultu „przepisywania w fajne, nowe rzeczy”, które wydają się być wszędzie dzisiaj.
źródło
Zaznaczę, że większość problemów z wydajnością istnieje, ponieważ programista wykonał złą pracę, a nie dlatego, że język był zbyt wolny. Naprawdę, istnieje wiele bardziej istotnych rzeczy, o które należy się martwić w wydajności niż w wybranym języku. To około 1,203,407 pozycji na mojej liście.
źródło
Wszystko inne jest równe, szybsza jazda to dobra rzecz. W końcu nikt tak naprawdę nie chce dłużej czekać na niektóre wyniki, a gdy ten wynik zostanie osiągnięty, może zwolnić zasoby na inne rzeczy.
Ale nie wszystko inne jest równe. Na początek ważne jest również, aby uzyskać właściwy wynik lub przynajmniej odpowiedni. (Jeśli dozwolone są całkowicie niepoprawne wyniki, możesz je naprawdę szybko wygenerować i będą one miały dokładnie zerową wartość dla każdego.) Jeśli zmiana na nieco wolniejszy język zwiększa prawdopodobieństwo uzyskania właściwego wyniku, zwykle jest to wielki kompromis. Języki wyższego poziomu mają tutaj przewagę nad językami niższego poziomu, ponieważ ich bogatszy zestaw modeli zwykle ułatwia wyrażenie złożonego problemu bez nadmiernej ilości wyraźnych szczegółów.
Zwykle ważne jest również zarządzanie kosztami produkcji oprogramowania, dodawania nowych funkcji zgodnie z potrzebami i utrzymywania ich działania w miarę zmiany systemów bazowych. Języki wyższego poziomu zwykle pozwalają na szybsze przetwarzanie programów, a utrzymanie kosztów programowania w ramach budżetu ma dużą wartość. Rzeczywiście, utrzymywanie kosztów na niskim poziomie pozwala na osiągnięcie większej liczby różnych rzeczy, co ogólnie jest dobrą rzeczą.
Ostatnią kluczową kwestią, na którą należy zwrócić uwagę, jest to, że nie jest konieczne używanie tylko jednego języka i że w wielu systemach oprogramowania większość ich komponentów nie jest krytyczna pod względem wydajności. Użycie języka niskiego poziomu do produkcji wysokowydajnych komponentów dla bitów krytycznych jest rozsądne, podczas gdy pozostawienie mniej istotnych części językowi wysokiego poziomu (aby zminimalizować koszty ich wytworzenia) jest wyjątkowo rozsądne. Co więcej, funkcje, które tworzą dobry język niskiego poziomu (zdolność precyzyjnego kontrolowania tego, co robi maszyna), nie są funkcjami, które tworzą dobry język wysokiego poziomu (zdolność wnioskowania o szczegółach na podstawie znacznie mniejszych opisów): są diametralnie przeciwne, więc możliwość łączenia ich ze sobą i wykorzystywania ich ze względu na swoje mocne strony i unikanie słabości, to naprawdę świetna rzecz.
Które elementy należy poddać wysokowydajnej obróbce? Optymalizacja? Zmierz je. Profiluj je. Znajdź prawdę zamiast zgadywać. Skoncentruj swój wysiłek tam, gdzie robi to najlepiej.
źródło