Dlaczego rozmiary programów są tak duże?

185

Jeśli spojrzymy na starodawny program Netscape Navigator lub wczesną wersję Microsoft Word, te programy miały mniej niż 50 MB. Teraz, gdy instaluję Google Chrome, jest to 200 MB, a wersja Slacka na komputer to 300 MB. Czytałem o pewnej zasadzie, że programy zajmą całą dostępną pamięć, bez względu na to, ile to kosztuje, ale dlaczego?

Dlaczego obecne rozmiary programów są tak duże w porównaniu do 10 czy 15 lat temu? Programy nie wykonują znacznie więcej funkcji i nie wyglądają inaczej. Co to jest teraz świnia zasobów?

Niklas Rosencrantz
źródło
134
Tylko 4 razy większy ?! To niesamowite, biorąc pod uwagę, o ile bardziej nowoczesna przeglądarka robi
Richard Tingle
23
Na marginesie, uważam, że „jakaś zasada, że ​​programy zajmą całą dostępną pamięć, bez względu na to, ile to kosztuje, ale dlaczego?” prawdopodobnie odnosi się raczej do pamięci o dostępie swobodnym niż do fizycznej przestrzeni dyskowej, przynajmniej taka byłaby moja interpretacja tego. Może być źle
Trotski94,
103
Mówisz więc, że program, który kiedyś zajmował miejsce na dysku twardym o wartości 10 USD, teraz zajmuje miejsce na dysku twardym o wartości około 30 centów? Trudno mi się martwić.
Eric Lippert,
49
„Programy nie wykonują znacznie więcej funkcji” - dobry panie. Wystarczy spojrzeć na specyfikację HTML 4 i specyfikację CSS 1 (nie martw się, poczekam - nie zajmie ci to długo, nawet jeśli je przeczytasz). Netscape 4 nawet nie zdołał poprawnie ich zaimplementować. Liczba nowych i zwariowanych HTML i CSS obsługiwanych przez Chrome jest znaczna. Plus ma zakładki. I aktualizuje się co sześć tygodni.
Paul D. Waite
13
BTW. 50 MB w czasach Netscape było duże, ale dla przypomnienia obejmowało nie tylko przeglądarkę internetową, ale także klienta poczty i edytor HTML, a może nawet coś innego.
el.pescado,

Odpowiedzi:

265

„Wyglądać inaczej” to kwestia percepcji. Dzisiejsza grafika musi wyglądać dobrze w zupełnie innych rozdzielczościach ekranu niż kiedyś, w wyniku czego obraz 100 x 100, który kiedyś był wystarczająco dobry dla logo, wyglądałby teraz strasznie tandetnie. Musiał zostać zastąpiony obrazem tej samej rzeczy o wymiarach 1000 x 1000, czyli 100 razy. (Wiem, że zamiast tego można użyć grafiki wektorowej, ale to tylko podkreśla tę kwestię - kod renderujący grafikę wektorową musiał zostać dodany do systemów, które wcześniej go nie potrzebowały, więc jest to tylko kompromis z jednym rodzajem zwiększenia rozmiaru do innego.)

„Praca inaczej” jest również kwestią percepcji. Dzisiejsza przeglądarka robi masowo więcej niż jedną z 1995 roku. (Spróbuj pewnego dnia w Internecie surfować po historycznym laptopie - okaże się, że jest prawie bezużyteczny.) Niewiele z nich jest używanych bardzo często, a ich użycie może być zupełnie nieświadome 90 % z nich, ale oni tam są.

Do tego oczywiście ogólna tendencja do spędzania mniej czasu na optymalizacji rzeczy pod kątem miejsca, a więcej na wprowadzaniu nowych funkcji. Jest to naturalny efekt uboczny większych, szybszych i tańszych komputerów dla wszystkich. Tak, możliwe byłoby pisanie programów, które są tak wydajne pod względem zasobów jak w 1990 roku, a wynik byłby oszałamiająco szybki i szybki. Ale nie byłoby to już opłacalne; Twoja przeglądarka zajmie dziesięć lat, do tego czasu wymagania ulegną całkowitej zmianie. Ludzie zwykli programować ze szczególną dbałością o wydajność, ponieważ powolne, małe maszyny z przeszłości były do ​​tego zmuszone, a wszyscy inni też to robili. Gdy tylko to się zmieniło, wąskie gardło sukcesu programu zmieniło się z możliwości uruchomienia w ogóle na działaniecoraz więcej błyszczących rzeczy i właśnie tam jesteśmy.

Kilian Foth
źródło
120
Konkretnymi przykładami rzeczy, które powinna zawierać nowoczesna przeglądarka, byłyby biblioteki kryptograficzne, baza danych Unicode, środowisko wykonawcze JavaScript i kompilator optymalizujący JIT, kodeki wideo, renderer PDF, a także skomplikowany silnik renderujący i parsery dla wszystkich obsługiwanych typów MIME. To się sumuje, ale w przeciwieństwie do gier, przeglądarki nie wymagają dużej ilości zasobów o wysokiej rozdzielczości. Nowoczesny plik do pobrania dla Firefoksa waży tylko 40–50 MB skompresowanych.
amon
23
„wynik byłby oszałamiająco szybki i elegancki” - brzmi jak pobożne życzenie.
Doc Brown,
16
@amon Nie zapominaj, że przeglądarki zawierają także inne rodzaje zasobów i cały interfejs API dla wtyczek i nie tylko. Są nawet dostarczane z narzędziami do debugowania (profilery, analiserzy sieci, inspektorzy elementów, w pełni funkcjonalna konsola, debuggery i wiele innych). Przeglądarki zbliżają się do całego systemu operacyjnego, niż wszyscy możemy sobie wyobrazić. Trwa nawet dyskusja na temat korzystania z Websemblera! OP powinien być zaskoczony mnóstwem bzdur, które mogą napchać w przeglądarce.
Ismael Miguel
10
@IsmaelMiguel Jeśli chodzi o system operacyjny Chrome, przeglądarki już całym systemem operacyjnym. ;-P
Ajedi32
111
tendency to spend less time on optimizing things for space To. Kiedy piszę kod, nie optymalizuję miejsca ani szybkości. Optymalizuję pod kątem konserwacji. Ważniejsze jest to, że baza kodów może się łatwo zmieniać niż być szybka lub mała. Mogę oczekiwać, że za każdą skargę dotyczącą szybkości programu otrzymam dziesięć wniosków o nowe funkcje i zero wniosków, aby je zmniejszyć.
user2023861,
108

Jeśli porównasz Netscape Navigator do nowoczesnej przeglądarki, istnieje ogromna różnica w funkcjonalności. Wystarczy porównać specyfikację HTML 3.2 (51 stron, kiedy robię podgląd wydruku) z bieżącą specyfikacją HTML (wersja PDF to 1155 stron). To 20-krotny wzrost wielkości.

Netscape Navigator nie miał DOM i CSS! Nie wprowadzono żadnych dynamicznych zmian w dokumencie, JavaScript modyfikujący DOM ani arkusze stylów. Brak kart. Brak dźwięku lub obrazu. Nowoczesna przeglądarka jest znacznie bardziej złożonym programem.

JacquesB
źródło
12
Tak, najnowsze przeglądarki wykonują animacje, gradienty, efekty filtrów obrazu, JavaScript, grafikę 2D (płótno), grafikę 3D z WebGL, generowanie audio, gamepad (!), Dekodowanie wideo, zaawansowane przechowywanie po stronie klienta, komunikację peer-to-peer (WebRTC), geolokalizacja, WebSocket, WebCryptography, MIDI, dostęp do mikrofonu / kamery internetowej, powiadomienia itp.
ysdx 24.09.2015
1
Dodaj robiąc więcej rzeczy (DOM, CSS, JavaScript), aby mieć także więcej nieruchomości (wiele monitorów, ogromny wzrost rozdzielczości: ekrany komputerowe stają się większe: od 1999 do 2011 ) - 800x600 vs 1920x1080 vs 4k ... 8k i więcej ... Rozdzielczość od 1080 do 4k czterokrotnie ... 8k znowu czterokrotnie.
WernerCD
7
@WernerCD Po prostu posiadanie większego ekranu nie wymaga większego pliku binarnego. Ikona 32 na 64 piksele, 32-bitowa wymaga takiej samej ilości miejsca na dysku, niezależnie od tego, czy jest wyświetlana na monitorze o wymiarach 800 x 600, czy 2560 x 1440. Zmiana rozmiaru okna nie zmienia rozmiaru pliku binarnego. W przypadku wyświetlaczy ważne jest to, że kiedy zaczniesz robić rzeczy takie jak podwojenie pikseli, potrzebujesz większych zasobów, aby nadal wyglądać ostrzej (er).
8bittree
1
@ 8bittree może zwiększyć wymagania dotyczące wydajności oprogramowania. A bardziej wydajny kod może być bardziej złożony (np. Witryna wykorzystująca Canvas prawdopodobnie wymaga większej złożoności i kodu niż strona wykorzystująca pliki SVG). Ale tak, w większości masz rację.
Paul Draper,
1
Chociaż z pewnością prawdą jest, że obecny HTML robi znacznie więcej niż HTML 3.2, sama specyfikacja jest również o wiele bardziej szczegółowa, co dodaje znaczną ilość treści do specyfikacji. Porównaj długość opisu EMelementu HTML 3.2 - pełne osiem lub dziewięć słów - z długością tego samego w specyfikacji HTML 5 - dla mnie, więcej niż screening zawierający otaczający materiał opisujący element, gdzie ma zastosowanie i jakie jest jego przeznaczenie.
CVn
79

Jednym z powodów jest to, że dane spakowane w aplikacjach są większe, ponieważ mają wyższą rozdzielczość i jakość. Ikona w czasach Netscape miała co najwyżej 32 x 32 piksele, z co najmniej 8-bitową głębią (prawdopodobnie tylko 4), podczas gdy teraz jest prawdopodobnie czymś w rodzaju 64 x 64 i jest w prawdziwym kolorze z przezroczystością, co oznacza 32-bitową głębię. To 16 razy większy. A miejsce jest tak tanie, że ludzie często nawet nie zawracają sobie głowy sprawdzaniem opcji „skompresowanej” podczas generowania PNG.

Innym powodem jest to, że obecnie aplikacje niosą ze sobą zadziwiającą ilość danych, czego nie zrobiły starsze aplikacje. Istnieją dziś aplikacje dostarczane wraz z prezentacją „wprowadzenie” na wideo .

Innym powodem jest to, że obecnie języki programowania łączą się z bogatymi środowiskami wykonawczymi, które są dość duże, do 100 MB każdy. Nawet jeśli nie korzystasz ze wszystkich funkcji środowiska wykonawczego, nadal musisz spakować całą aplikację.

Ale głównym powodem jest to, że dzisiaj istnieje mnóstwo bibliotek, które możemy wykorzystać w naszych aplikacjach, i opracowaliśmy kulturę korzystania z bibliotek, aby uniknąć ciągłego ponownego wymyślania koła. Oczywiście, kiedy zaczniesz korzystać z bibliotek, pojawi się kilka pytań, a my wypracowaliśmy zwyczaj udzielania najbardziej liberalnych odpowiedzi:

  • Czy warto dołączyć kolejną bibliotekę, jeśli będzie używana tylko przez jedną z moich funkcji? - tak

  • Czy warto dołączyć kolejną bibliotekę, jeśli potrzebuję tylko niewielkiego podzbioru całego bogactwa funkcji oferowanych przez tę bibliotekę? - tak

  • Czy warto dołączyć kolejną bibliotekę, jeśli jej włączenie uratuje mnie od 2 dni pracy? - tak

  • Czy warto uwzględnić wiele bibliotek, które służą mniej więcej temu samemu celowi, tylko dlatego, że różni programiści na mojej liście płac znają się już na różnych bibliotekach? - tak

    (Uwaga: obserwuję te tendencje, nie składam żadnego oświadczenia, czy się z nimi zgadzam, czy nie).

Innym powodem, o którym warto wspomnieć, jest to, że próbując zdecydować, której aplikacji użyć spośród kilku opcji, niektórzy użytkownicy uważają, że ta, która zajmuje więcej miejsca, będzie miała więcej funkcji, będzie miała bardziej wyszukaną grafikę itp. (Co jest oczywiście kompletnym nonsensem .)

Podsumowując, czy oprogramowanie zachowuje się jak gaz? Czy zajmuje to całą dostępną przestrzeń? W pewnym sensie tak, ale nie w niepokojącym stopniu. Jeśli spojrzymy na to, co zajmuje najwięcej miejsca na naszych dyskach, dla większości z nas odpowiedź brzmi: nie są to aplikacje, ale zdecydowanie media takie jak filmy i muzyka . Oprogramowanie nie rozwija się w tym samym tempie, co pojemność pamięci, i jest mało prawdopodobne, że kiedykolwiek się zwiększy, więc w przyszłości aplikacje prawdopodobnie będą stanowiły znikomy ułamek miejsca dostępnego dla użytkowników.

Mike Nakis
źródło
17
To jest poprawna odpowiedź. (Obecnie) wyżej oceniane komentarze wspominają o większej funkcjonalności, ale to nie wyjaśnia w pełni zwiększonego rozmiaru. Rozmiar pochodzi z dołączonych bibliotek, które zapewniają te funkcje.
user1936,
5
@ IsmaelMiguel dobrze, mówiłem o zwykłych użytkownikach. Również gry są szczególnym przypadkiem, ponieważ te 35 GB to głównie media, a nie kod ani biblioteki. Zdarza się, że są to media, które można oglądać tylko za pomocą specjalnej aplikacji, którą jest gra. Ale nawet dla graczy 35 GB to nic na dzisiejszych dyskach wielotabajtowych. W każdym razie, załóżmy, że jeśli jesteś graczem, który nalega na posiadanie małego dysku, nie jesteś w pobliżu reprezentanta użytkowników.
Mike Nakis,
2
@MikeNakis Nie każdy gracz ma dysk o pojemności 1 TB lub pieniądze na zakup dysku SSD 256 GB. Niektóre, jak ja, mają dysk SSD o pojemności 128 GB lub laptop o pojemności mniejszej niż 500 GB. Jakiś czas temu 80% mojego miejsca na dysku SSD było po prostu grami. To było po prostu 3-4 gry, jedzenie przestrzeni. A w samej grze prawie każdy ma laptopa i gra na nim.
Ismael Miguel
5
@Mike, och, to nie ma znaczenia. Kiedy mówimy o rozmiarze aplikacji, mamy na myśli albo rozmiar pliku instalacyjnego do pobrania, albo całkowite miejsce zajmowane przez aplikację na dysku po zainstalowaniu. Obejmuje to biblioteki, media, dane, wszystko. W dzisiejszych czasach, aby uniknąć problemów z niekompatybilnością, aplikacje zwykle są dostarczane wraz z większością potrzebnych bibliotek, zamiast mieć nadzieję, że biblioteki będą już zainstalowane i będą miały odpowiednią wersję itp. Rozmiar głównego pliku wykonywalnego tak naprawdę nie ma żadnego interesu ani żadnej konsekwencji.
Mike Nakis,
3
@IsmaelMiguel Dla programisty prawdopodobnie są to różne maszyny wirtualne, kontenery dokerów i tym podobne. Nie ma lepszego wzdęcia niż pomnożenie całych rozdętych systemów ;-)
cmaster
16

Oprócz innych anserów, 10 lat temu zwykle istniałyby osobne wersje dla wersji zlokalizowanych / międzynarodowych. Teraz ogólnie jest tak, że programy dołączą pełną obsługę lokalizacji do każdej wydanej wersji, która uzupełnia rozmiar programu.

Eterm
źródło
5
Mogę się mylić, ale pracuję pod złudzeniem, że sznurki są najmniejszą częścią tego problemu. To prawda, że ​​istnieje wiele języków, ale liczba napisów, które użytkownik widzi, jest bardzo ograniczona. W końcu jednym z najpewniejszych sposobów na niepowodzenie w interfejsie użytkownika jest dodanie zbyt dużej ilości tekstu.
cmaster
5
Dodając do tego, co @cmaster powiedział, Firefox specjalnie nie nie połączą pełną lokalizację (a ja myślę o nim, ani czy OpenOffice.)
BenjiWiebe
2
@cmaster Strings, no. Ale zlokalizowane wideo i audio, szczególnie w kontekście gier? IIRC była gra 60 GB (GTA V?), W której> 10 GB było wyłącznie zlokalizowanym dźwiękiem. To znacząca część.
Bob
@ Bob Racja, nie myślałem o grach, wydają się być jednym wielkim wyjątkiem od tego, co napisałem.
cmaster
Dla każdego języka tablica ciągów może zsumować kilka dodatkowych K bajtów. Same ikony aplikacji zwykle przewyższają całkowity rozmiar całej zawartości łańcucha (możliwymi wyjątkami są aplikacje z osadzonymi słownikami)
andyb
13

Jednym z powodów są zależności. Program o bogatej funkcjonalności i dobrym wyglądzie wymaga wielu rzeczy - szyfrowania, sprawdzania pisowni, pracy z XML i JSON, edycji tekstu i wielu innych rzeczy. Skąd oni pochodzą? Może rzucisz własnym i utrzymasz je tak małe, jak to możliwe. Najprawdopodobniej korzystasz z komponentów stron trzecich (być może licencjonowanego na licencji MIT typu open source), które mają wiele funkcji, których tak naprawdę nigdy nie potrzebujesz, ale kiedy potrzebujesz jednej funkcji z komponentu innej firmy, często musisz nosić ze sobą cały komponent. Dodajesz więc coraz więcej zależności, a one same ewoluują i rozwijają Twój program, który zależy od nich.

sharptooth
źródło
Jestem trochę ciekawy, dlaczego z dnia na dzień pojawiły się dwa głosy negatywne.
sharptooth
6
Nie zrobiłem tego, ale nie sądzę, że to naprawdę odpowiada na pytanie wystarczająco głęboko. Prawie mówi tylko, że „oprogramowanie staje się większe, ponieważ robi więcej rzeczy”, a na podstawie innych odpowiedzi zobaczysz, że to naprawdę coś więcej.
Wyścigi lekkości na orbicie
1
Powiązanym czynnikiem jest to, że w systemach, które używają linkowania statycznego, linker może potrzebować tylko pobrać kod, który jest rzeczywiście używany (niektóre linkery zawsze wciągałyby wszystko, ale lepsze próbowały być selektywne). Podczas korzystania z dynamicznego łączenia, zwłaszcza jeśli moduły mogą być współużytkowane, nawet jeśli pierwszy kod, który instaluje moduł, potrzebuje tylko jednej funkcji z niego, nie ma możliwości dowiedzenia się, jakie funkcje mogą być potrzebne przez inny kod, który chce współdzielić moduł.
supercat
@sharptooth Nawet się nie zastanawiam. Podczas gdy w większości przypadków system działa, widzę też okropnie błędne, niepoprawne odpowiedzi, które są oceniane jak szalone i akceptowane, podczas gdy poprawne są zbyt często zapominane o zapomnieniu ...
Brian Knoblauch,
10

Chociaż grafika / użyteczność są rzeczywiście czynnikami, to jest bardzo dużo tego, co zawiera biblioteka / nadmiar skompilowanego kodu.

Przykład tego, jak mały może być nadal kod: MenuetOS, pełny 64-bitowy system operacyjny z potężnymi aplikacjami, który mieści się na pojedynczej dyskietce.

Przykład tego, jak duży może być kod bez wyraźnego powodu: wykonałem proste wyjście tekstowe „Witaj, świecie!” ostatnio w Adzie. Skompilowany plik wykonywalny miał ponad 1 MiB !. Ten sam plik wykonywalny w asemblerze to po prostu KiB lub 2 (a większość z nich to plik wykonywalny, rzeczywisty działający kod to kilkadziesiąt bajtów).

Brian Knoblauch
źródło
3
Co to jest dyskietka? ;)
500 - Wewnętrzny błąd serwera
@ 500-InternalServerError Co to jest Ada? : D
BenjiWiebe,
3
dla początkujących dyskietka kosztuje około 1,4 MiB
Sarge Borsch
3
Widziałem współczesne pliki wykonywalne Ady poniżej 200 bajtów. Ale jeśli Twój kompilator domyślnie pobiera takie środowisko wykonawcze jak pełne zadanie, niezależnie od tego, czy korzystasz z zadań, czy nie, to należy spodziewać się około 1 MB. I zwykle nie warto zawracać sobie głowy rozbiorem go.
Brian Drummond,
@BrianDrummond, brzmi jak naprawdę kiepskie środowisko uruchomieniowe lub kiepskie środowisko uruchomieniowe, biblioteka i linker. W wideo szkoleniowym, które widziałem wiele lat temu, Jean Ichbiah i wsp. Wspomnieli, że typowe środowisko uruchomieniowe Ada (dla oryginalnej wersji języka) będzie dotyczyło 4K. Z ciekawości sprawdziłem to z pakietem uruchomieniowym TI 320C30, którego używaliśmy. Miał rację co do pieniędzy.
John R. Strohm,
7

To prawda, że ​​oprogramowanie musi być zbudowane tak, aby pasowało do dwóch rzeczy: użytkowników i dostępnego sprzętu. Program jest odpowiedni do swoich celów, jeśli robi to, czego chce użytkownik w odpowiednim czasie, korzystając ze sprzętu do dyspozycji użytkownika. No cóż. Ale w miarę jak sprzęt poprawia się zasadniczo we wszystkich mierzalnych wymiarach, rośnie liczba dyskretnych programów, które zmieniają się z niepasujących do pasujących - przestrzeń projektowa staje się większa:

  • Języki wyższego poziomu umożliwiają wyrażanie pomysłów w krótszym czasie niż w przeszłości. I odwrotnie, ta obniżona złożoność umożliwia wyrażanie coraz bardziej złożonych pomysłów.
  • Sprzedaż wiązana większej ilości danych z aplikacją może sprawić, że będzie ona natychmiast bardziej użyteczna. Na przykład prawdopodobnie nie potrwa długo, zanim aplikacje sprawdzające pisownię zostaną dołączone do każdego języka znanego ludzkości - w końcu to tylko kilka gigabajtów.
  • Kompromisy sprzętowe umożliwiają programistom i użytkownikom większy wybór zasobów, na których im zależy. Zobacz na przykład FLAC / OGG vs WAV, SVG vs PNG, indeksy baz danych.
  • Ludzkie interfejsy często wymieniają coś, co wcześniej stanowiłoby ogromną ilość sprzętu pod względem użyteczności. Antyaliasing, wysoka rozdzielczość, szybkie odświeżanie i przesuwanie pomiędzy dyskretnymi panelami - wszystko to zapewnia bardziej realistyczne, a zatem intuicyjne i możliwe do odniesienia, wrażenia.
l0b0
źródło
6

Jest to zdecydowanie prawda w odniesieniu do aplikacji na Androida. Cztery lata temu prosta aplikacja zajmowała około 2-5 megabajtów. Obecnie prosta aplikacja zajmuje około 10-20 megabajtów.

Im więcej dostępnego miejsca, tym większy rozmiar aplikacji.

Myślę, że istnieją dwa główne powody w przypadku Androida:

  • Google rozszerzyło platformę Android, dodało wiele nowych funkcji.

  • Deweloperzy już się nie przejmują. Obrazy są zawarte w znacznie wyższej rozdzielczości (oczywiście zwiększone rozdzielczości ekranu smartfona), biblioteki innych firm są bezmyślnie uwzględnione.

Mike76
źródło
1
Ten ostatni punkt jest dokładnie właściwy.
Wyścigi lekkości na orbicie
3
Zrobiłem w sumie jedną aplikację na Androida, a plik APK to 0,05 MB. Z drugiej strony nie robi tak wiele. Nadal zastanawiam się, dlaczego aplikacja stopera (o podobnej funkcjonalności jak moja, choć zupełnie inna) zajmuje kilka MB.
immibis
5
Ostatni punkt jest zły, programiści się tym przejmują. Musimy tylko pogodzić różne priorytety i sprawić, że ta aplikacja będzie nieco większa, ma sens.
NPSF3000,
Nie pomogło też to, że SDK (w tym czasie) nalegał na dodanie biblioteki 5+ MB do mojej aplikacji 0,05 MB, której nie potrzebowałem, i musiałem pamiętać o jej usunięciu przed kompilacją wydania.
immibis
4

Wiele z nich sprowadza się do czasu programisty i kosztu tego czasu. W czasach, gdy Visual Basic po raz pierwszy pojawił się na scenie, konkurował z C / C ++, a dużym wyzwaniem było to, że można napisać „Hello World” w ANSI C dla Windows w około 15 KB. Problem z VB polegał na tym, że zawsze miałeś albatross biblioteki wykonawczej 300K.

Teraz możesz 10-krotnie powiększyć swój program VB i nadal byłoby to tylko kilka K więcej, ale 10-krotnie większy niż twój program C / C ++ i patrzysz na kilka miesięcy rozwoju.

W końcu nadęty aplikacji to niewielka cena za ogromne skoki w produkcji deweloperskiej, obniżkę ceny i ogromny potencjał, który nigdy nie byłby możliwy w dawnych, ręcznie opracowanych czasach rozwoju; gdy programy były małe i szybkie, ale także słabe, niekompatybilne ze sobą, słabo wyposażone i kosztowne w rozwoju.

andyb
źródło
2
ten post jest raczej trudny do odczytania (ściana tekstu). Czy mógłbyś edytować go w lepszym kształcie?
komar
1
„10x większy rozmiar” Hello World wymaga „miesięcy większego rozwoju”? Czy mycie zębów dziesięć razy wymaga ciągłego stania przed lustrem przez miesiąc?
bcrist
Szczotkowanie zębów x razy jest funkcją liniową x, ale programowanie zasadniczo nie jest funkcją liniową. Jeśli tworzysz ręcznie każdą linię kodu przy użyciu najbardziej niskiego poziomu funkcji językowych, otrzymujesz szybki i mały kod, ale o wyższym koszcie na poziom złożoności. Języki wyższego poziomu nadymają się bardziej, ale utrzymują koszty bliższe liniowej funkcji złożoności.
andyb
2

Z czasem potrzeby użytkowników ewoluują i stają się coraz bardziej wymagające, więc dostawcy / autorzy różnych programów są zmuszeni do zaspokojenia tych potrzeb w imię konkurencji.

Ale zaspokojenie nowej potrzeby oznacza często dodawanie nowego kodu. Nowy kod oznacza nowe luki do usunięcia. Naprawa nowych luk może dodać kod lub otworzyć drzwi do nowych luk.

Każda dodana funkcja zaspokajająca potrzeby użytkownika może wymagać większej mocy procesora dla szybkości (wszyscy narzekamy na szybkość tej lub innej przeglądarki), nowych zasobów graficznych dla lepszych efektów wizualnych ... itp.

Wszystko to oznacza dodawanie nowych warstw aplikacji (kodu), bezpieczeństwa, a czasem sprzętu.


źródło
0

Wiele rozmiarów pochodzi z wbudowanych bibliotek. Wiele aplikacji jest obecnie budowanych przy użyciu elektronu, który łączy ogromną ilość z aplikacją. Jeśli instalujesz aplikacje w systemie Linux, zwykle są one znacznie mniejsze, ponieważ duża część aplikacji jest już zainstalowana za pośrednictwem bibliotek współużytkowanych, z których korzystają także inne programy.

Qwertie
źródło
-1

Jeśli podczas tworzenia oprogramowania potrzebujesz funkcji A, zaimportujesz moduł A *. A * może rozwiązać A, ale A * może rozwiązać problemy bardziej niż A, a A * może być duży. Wszystkie duże moduły tworzą duże oprogramowanie.

Może nie ten sam przypadek, ale coś w tym rodzaju: Jeśli po prostu chcesz wydrukować „hello world” na konsoli za pomocą Java, musisz zainstalować JRE (> 60 MB).

Jeśli przykład Javy nie jest dobry, wypróbuj ten: Jeśli oprogramowanie musi zalogować się do pliku, może użyć modułu rejestrującego, który może tworzyć dzienniki do bazy danych, przez sieć i niektóre inne funkcje, ale funkcje nigdy nie są używane w projekt.

neoedmund
źródło
Dlaczego dokładnie jest 5 głosów negatywnych i ani jednego komentarza wyjaśniającego dlaczego?
Kromster,
1
@KromStern Pierwsza sekcja bardzo szybko wyjaśnia, jak działają biblioteki, i robi to w bardzo niejasny sposób z niespójnym użyciem code. Twierdziłbym, że tak naprawdę wcale nie odpowiada na pytanie. Druga sekcja wykorzystuje Javę jako przykład (choć stara się twierdzić, że środowisko JRE powinno być uważane za część wzrostu wielkości aplikacji - co ponownie pomija sens pytania i nie jest wcale dobrym przykładem i nadal utrwala nieporozumienia z Javą). W sumie to albo źle, albo powtarza punkty z poprzednich, lepiej napisanych odpowiedzi.
1
Twój przykład logowania do sieci lub pliku też nie jest dobry - ponieważ z punktu widzenia kodu oba są plikami i obsługiwane są dokładnie w ten sam sposób (rozróżnienie między plikiem a siecią jest obsługiwane przez system operacyjny). Nie widziałem jeszcze struktury rejestrowania, która ma „logować się do bazy danych” jako część jej podstawowej funkcjonalności, ponieważ byłoby to skomplikowane przez Oracle vs MySQL vs Sql Server vs. Postgres vs.… sterowniki i różnice dialektyczne.
@ user40980 Rozróżnienie między plikiem a siecią nie jest obsługiwane przez system operacyjny. Potrzebują różnych wywołań systemu operacyjnego do łączenia się i pisania. Dostęp do bazy danych jest obsługiwany przez warstwę niezależności bazy danych, taką jak JDBC lub libdbi. (Które z kolei mogą przyciągać sterowniki dla wszystkich różnych obsługiwanych baz danych!)
immibis
-2

Czytałem o pewnej zasadzie, że programy zajmą całą dostępną pamięć, bez względu na to, ile to kosztuje, ale dlaczego?

To nie do końca prawda. Systemy nie zwalniają pamięci, którą zużyły, dopóki system operacyjny nie znajdzie się pod presją pamięci. Jest to poprawa wydajności. Jeśli przeglądasz stronę z włączonymi obrazami, nawigujesz dalej. Możesz wrócić do poprzedniej wersji, dlatego ponownie potrzebujesz obrazu. Jeśli system operacyjny ma pamięć RAM, wyczyszczenie pamięci nie ma sensu, dopóki nie będziesz pewny, że nie będziesz jej potrzebować ponownie.

Natychmiastowe wyczyszczenie pamięci zabrałoby cykle procesora i przepustowość pamięci od użytkownika, gdy najprawdopodobniej chcą, aby na ekranie wyświetlane były szybko reagujące strony internetowe.

System operacyjny zajmie całą dostępną pamięć nieaplikacyjną, z której większość przeznaczona jest na pamięć podręczną systemu plików.

Zarządzanie pamięcią to trudny problem, ale przez cały czas pracują nad nią bardzo mądrzy ludzie. Celowo nie marnuje się niczego, a kluczowym celem jest zapewnienie bardzo responsywnego komputera.

Phil Hannent
źródło
3
Nie o to w ogóle chodzi w tym powiedzeniu. Pamięć wirtualna i wyrzucanie elementów bezużytecznych zostały właśnie wynalezione, kiedy napisano ten cytat, i nie były rozpowszechnione.
Jörg W Mittag
-2

Może być prawdą, że programy rozszerzają się, by zapełnić dostępną przestrzeń, podobnie jak zjawiska podmiejskie, w których dodaje się nowe pasy do zablokowanej sieci autostrady iw ciągu kilku lat ruch jest ponownie generowany.

Ale jeśli spojrzysz na to, może się okazać, że ich programy robią więcej rzeczy. Przeglądarki, na przykład, uruchamiają bardziej wyszukaną grafikę, mają zręczne narzędzia programistyczne, które nie istniały kilka lat temu, itp. Łączą się również z wieloma bibliotekami, czasami wykorzystując tylko niewielką część kodu. Tak więc chociaż programy mogą się zwiększać, aby zapełnić dostępną pamięć, niektóre z nich mogą być uzasadnione.

Paul J Abernathy
źródło
2
wydaje się, że nie oferuje to nic istotnego w porównaniu z punktami przedstawionymi i wyjaśnionymi w poprzednich 13 odpowiedziach
gnat
-3

Biblioteki zbudowane na obiektach, które nie są zoptymalizowane, wymagają więcej pamięci do załadowania, zainstalowania i większej liczby cykli obliczeniowych do działania. Kod obiektowy jest w większości nadęty.

Wystarczy przejść przez uruchomiony standardowy kod C ++, aby zobaczyć wszystkie wywołania obiektów assert () ed, aby upewnić się, że są poprawnymi obiektami. Podczas projektowania warstwa po warstwie obiektów otaczających obiekty, podkłady są nadęte i nieprzezroczyste. Programiści stają się leniwi i przyjmują więcej obiektów, ponieważ jest to szybsze niż przeprojektowywanie tego, co jest ograniczone do wymaganej funkcjonalności. To naprawdę takie proste.

Rozważ rozmiar jądra Linux C, po prostu jądra, w porównaniu z wielkością niestandardowych aplikacji. Jądro może uruchomić całą maszynę. Ale nie został zbudowany tak szybko, jak aplikacje, aby uzyskać najlepszą funkcjonalność, potrzeba dużo czasu.

daemondave
źródło