Mengapa ukuran program begitu besar?

186

Jika kita melihat program vintage Netscape Navigator atau versi awal Microsoft Word, program-program itu berukuran kurang dari 50 MB. Sekarang ketika saya menginstal google chrome itu 200 MB dan versi desktop Slack adalah 300 MB. Saya membaca tentang beberapa aturan bahwa program akan mengambil semua memori yang tersedia tidak peduli berapa banyak tetapi mengapa?

Mengapa ukuran program saat ini sangat besar dibandingkan dengan 10 atau 15 tahun yang lalu? Program tidak melakukan lebih banyak fungsi secara signifikan dan tidak terlihat sangat berbeda. Apa itu babi sumber daya sekarang?

Niklas Rosencrantz
sumber
134
Ukurannya hanya 4 kali lipat ?! Itu luar biasa mengingat betapa lebih banyak browser modern
Richard Tingle
23
Sebagai catatan, saya percaya 'beberapa aturan bahwa program akan mengambil semua memori yang tersedia tidak peduli berapa banyak tapi mengapa?' mungkin merujuk pada memori akses acak daripada ruang disk fisik, setidaknya itu akan menjadi interpretasi saya tentang itu. Bisa jadi salah.
Trotski94
103
Jadi apa yang Anda katakan adalah bahwa sebuah program yang pernah mengambil ruang hard disk senilai $ 10 sekarang membutuhkan ruang hard disk bernilai sekitar 30 sen? Saya menemukan ini sulit untuk dikhawatirkan.
Eric Lippert
49
"Program-programnya tidak melakukan lebih banyak fungsi secara signifikan" - Tuan yang baik. Lihat saja spesifikasi HTML 4 dan spesifikasi CSS 1 (jangan khawatir, saya akan menunggu - ini tidak akan memakan waktu lama bahkan jika Anda membacanya). Netscape 4 bahkan tidak berhasil mengimplementasikannya dengan benar. Jumlah HTML dan CSS baru dan gila yang didukung Chrome cukup besar. Ditambah lagi memiliki tab. Dan pembaruan itu sendiri setiap enam minggu.
Paul D. Waite
13
BTW. 50 MB pada zaman Netscape itu besar, tetapi, sebagai catatan, itu tidak hanya mencakup peramban web tetapi juga klien surat dan editor HTML, dan mungkin bahkan sesuatu yang lain.
el.pescado

Jawaban:

266

"Terlihat sangat berbeda" adalah masalah persepsi. Grafik saat ini harus terlihat bagus dengan resolusi layar yang sangat berbeda dari sebelumnya, dengan hasil gambar 100x100 yang dulu lebih dari cukup baik untuk sebuah logo sekarang akan terlihat sangat norak. Itu harus diganti dengan gambar 1000x1000 dari hal yang sama, yang merupakan faktor 100 di sana. (Saya tahu Anda dapat menggunakan grafik vektor saja, tetapi itu hanya menekankan intinya - kode rendering grafik vektor harus ditambahkan ke sistem yang tidak membutuhkannya sebelumnya, jadi ini hanya pertukaran dari satu jenis peningkatan ukuran ke yang lainnya.)

"Bekerja secara berbeda" juga merupakan masalah persepsi. Peramban hari ini melakukan lebih banyak hal secara signifikan daripada satu sejak 1995. (Cobalah berselancar di internet dengan laptop bersejarah pada suatu hari hujan - Anda akan menemukan itu hampir tidak dapat digunakan.) Tidak banyak dari mereka yang digunakan sangat banyak, dan penggunaannya mungkin sama sekali tidak menyadari 90 % dari mereka, tetapi mereka ada di sana.

Selain itu, tentu saja, adalah kecenderungan umum untuk menghabiskan lebih sedikit waktu untuk mengoptimalkan hal-hal untuk ruang dan lebih banyak pada memperkenalkan fitur-fitur baru. Ini adalah efek samping alami dari komputer yang lebih besar, lebih cepat, lebih murah untuk semua orang. Ya, adalah mungkin untuk menulis program yang seefisien sumber daya seperti pada 1990, dan hasilnya akan sangat cepat dan apik. Tapi itu tidak akan hemat biaya lagi; browser Anda akan membutuhkan waktu sepuluh tahun untuk menyelesaikannya, pada saat itu persyaratannya akan berubah sepenuhnya. Orang-orang biasa memprogram dengan sangat memperhatikan efisiensi karena mesin-mesin kecil yang lambat tadi memaksa mereka untuk melakukannya, dan semua orang juga melakukannya. Begitu ini berubah, hambatan untuk keberhasilan program bergeser dari mampu berjalan sama sekali menjadi berjalansemakin banyak benda mengkilap , dan di sanalah kita berada sekarang.

Kilian Foth
sumber
120
Contoh nyata dari hal-hal yang harus dimasukkan oleh browser modern adalah pustaka crypto, database Unicode, runtime JavaScript, dan pengoptimalan kompiler JIT, codec video, renderer PDF, selain mesin render yang rumit dan parser untuk semua jenis MIME yang didukung. Itu memang bertambah, tetapi tidak seperti game, browser tidak memerlukan banyak aset beresolusi tinggi. Pengunduhan Firefox modern hanya berbobot 40-50 MB terkompresi.
amon
23
"hasilnya akan sangat cepat dan apik" - kedengarannya seperti angan-angan.
Doc Brown
16
@amon Jangan lupa bahwa browser juga menyertakan jenis sumber daya lainnya dan seluruh API untuk plugin dan apa yang tidak. Mereka bahkan datang dengan alat debugging (profiler, analis jaringan, pemeriksa elemen, konsol yang berfungsi penuh, debugger dan banyak lagi). Browser semakin dekat ke seluruh sistem operasi daripada yang bisa kita bayangkan. Bahkan ada diskusi yang sedang berlangsung untuk menggunakan Majelis Web! OP harus kagum dengan banyak omong kosong yang mereka dapat menjejalkan di browser.
Ismael Miguel
10
@IsmaelMiguel Sejauh yang bersangkutan Chrome OS, browser sudah merupakan keseluruhan sistem operasi. ;-P
Ajedi32
111
tendency to spend less time on optimizing things for space Ini. Ketika saya menulis kode, saya tidak mengoptimalkan ruang atau kecepatan. Saya mengoptimalkan untuk pemeliharaan. Lebih penting bahwa basis kode dapat berubah dengan mudah daripada cepat atau kecil. Saya dapat berharap bahwa untuk setiap keluhan tentang kecepatan program, saya akan mendapatkan sepuluh permintaan untuk fitur baru dan nol permintaan untuk membuatnya lebih kecil.
user2023861
109

Jika Anda membandingkan Netscape Navigator dengan peramban modern, ada perbedaan besar dalam fungsi. Bandingkan saja HTML 3.2 Spec (51 halaman saat saya melakukan preview cetak) dengan HTML Spec saat ini (versi PDF adalah 1155 halaman). Itu peningkatan ukuran 20x.

Netscape Navigator tidak memiliki DOM dan tidak memiliki CSS! Tidak ada perubahan dinamis pada dokumen, tidak ada JavaScript yang memodifikasi DOM atau style-sheet. Tidak ada tab. Tidak ada audio atau video. Peramban modern adalah program yang jauh lebih kompleks.

JacquesB
sumber
12
Ya, peramban terkini melakukan animasi, gradien, efek filter gambar, JavaScript, grafis 2D (kanvas), grafik 3D dengan WebGL, generasi Audio, Gamepad (!), Penguraian video, penyimpanan sisi klien yang canggih, komunikasi Peer-to-peer (WebRTC), Geolokasi, WebSocket, WebCryptography, MIDI, akses ke mic / webcam, notifikasi, dll.
ysdx
1
Tambahkan melakukan lebih banyak barang (DOM, CSS, Javascript) ke juga memiliki lebih banyak real estat (Banyak Monitor, resolusi besar-besaran dalam resolusi: Layar Komputer Semakin Besar: 1999 hingga 2011 ) - 800x600 vs 1920x1080 vs 4k ... 8k dan seterusnya ... 1080 hingga 4k adalah empat kali lipat resolusi ... 8k adalah empat kali lipat lagi.
WernerCD
7
@WernerCD Cukup memiliki layar yang lebih besar tidak memerlukan biner yang lebih besar. Ikon 64 x 64 piksel, 32 bit akan memerlukan jumlah ruang yang sama pada disk, apakah itu ditampilkan pada monitor 800x600 atau 2560x1440. Mengubah ukuran jendela Anda tidak mengubah ukuran biner. Yang penting dengan tampilan adalah ketika Anda mulai melakukan hal-hal seperti penggandaan piksel, maka Anda membutuhkan sumber daya yang lebih besar untuk terus terlihat tajam (er).
8bittree
1
@ 8bittree, ini dapat menempatkan permintaan yang lebih tinggi pada kinerja perangkat lunak. Dan lebih banyak kode performan bisa lebih kompleks (mis. Situs web yang menggunakan Canvas kemungkinan membutuhkan lebih banyak kompleksitas dan kode daripada yang menggunakan SVG). Tapi ya, Anda sebagian besar benar.
Paul Draper
1
Meskipun memang benar bahwa HTML saat ini jauh lebih banyak daripada HTML 3.2, spesifikasi itu sendiri juga jauh lebih rinci yang menambahkan sejumlah besar konten ke spesifikasi. Bandingkan panjang deskripsi EMelemen HTML 3,2 - delapan atau sembilan kata penuh - dengan panjang yang sama dalam spesifikasi HTML 5 - bagi saya, lebih dari satu screenful termasuk materi sekitarnya yang menggambarkan elemen, di mana itu berlaku dan apa tujuan penggunaannya.
CVn
79

Salah satu alasannya adalah bahwa data yang dikemas dalam aplikasi lebih besar karena mereka memiliki resolusi dan kualitas yang lebih tinggi. Ikon di masa Netscape adalah paling banyak 32x32 piksel, dengan kedalaman paling banyak 8 bit, (mungkin hanya 4,) sementara sekarang mungkin sekitar 64x64 dan warnanya benar dengan transparansi, artinya kedalaman 32 bit. Itu 16 kali lebih besar. Dan ruang sangat murah sehingga orang sering tidak repot-repot memeriksa opsi "terkompresi" saat menghasilkan PNG.

Alasan lain adalah bahwa aplikasi saat ini membawa sejumlah data yang membingungkan dengan mereka, yang aplikasi lama tidak. Ada aplikasi hari ini yang dikirimkan bersama dengan presentasi "memulai" dalam video .

Alasan lain adalah bahwa bahasa pemrograman saat ini cenderung cocok dengan lingkungan run-time yang kaya, yang cukup besar, masing-masing mencapai 100MB. Bahkan jika Anda tidak menggunakan semua fitur dari lingkungan run-time Anda, Anda masih harus mengemas semuanya dengan aplikasi Anda.

Tetapi alasan utamanya adalah bahwa saat ini ada berton-ton perpustakaan di luar sana yang dapat kita gunakan dalam aplikasi kita, dan kita telah mengembangkan budaya menggunakan perpustakaan untuk menghindari penemuan kembali yang konstan dari roda. Tentu saja, begitu Anda mulai menggunakan perpustakaan, beberapa pertanyaan muncul, dan kami telah mengembangkan kebiasaan memberikan jawaban paling liberal kepada mereka:

  • Apakah layak untuk memasukkan pustaka lain jika hanya akan digunakan oleh salah satu fungsi saya? - ya.

  • Apakah layak untuk menyertakan pustaka lain jika saya hanya membutuhkan sebagian kecil dari seluruh kekayaan fungsionalitas yang ditawarkan oleh pustaka itu? - ya.

  • Apakah layak untuk memasukkan perpustakaan lain jika dimasukkannya hanya akan menyelamatkan saya dari 2 hari kerja? - ya.

  • Apakah layak untuk menyertakan beberapa perpustakaan yang melayani tujuan yang kurang lebih sama hanya karena programmer yang berbeda pada daftar gaji saya sudah terbiasa dengan perpustakaan yang berbeda? - ya.

    (Harap dicatat bahwa saya hanya mengamati kecenderungan ini, saya tidak membuat pernyataan apa pun tentang apakah saya setuju atau tidak setuju dengan mereka.)

Alasan lain yang layak disebutkan adalah bahwa ketika mencoba memutuskan aplikasi mana yang akan digunakan di antara beberapa pilihan, beberapa pengguna berpikir bahwa yang menempati lebih banyak ruang akan lebih penuh fitur, akan memiliki grafik yang lebih menarik, dll. (Yang omong kosong, tentu saja .)

Jadi, untuk menyimpulkan, apakah perangkat lunak berperilaku seperti gas? Apakah ia cenderung menempati semua ruang yang tersedia untuknya? Dalam arti tertentu ya, tetapi tidak sampai batas yang mengkhawatirkan. Jika kita melihat apa yang paling memakan ruang di drive kita, bagi kebanyakan dari kita jawabannya adalah bahwa itu bukan aplikasi, tetapi media seperti film dan musik sejauh ini . Perangkat lunak belum membengkak pada tingkat yang sama dengan kapasitas penyimpanan yang telah berkembang, dan tidak mungkin akan pernah demikian, sehingga di masa depan aplikasi cenderung mewakili sebagian kecil dari ruang penyimpanan yang tersedia bagi pengguna.

Mike Nakis
sumber
17
Ini jawaban yang benar. Komentar (saat ini) yang berperingkat lebih tinggi menyebutkan lebih banyak fungsi, tetapi itu tidak sepenuhnya menjelaskan peningkatan ukuran. Ukurannya berasal dari perpustakaan yang disertakan yang menyediakan fungsionalitas tersebut.
user1936
5
@IsmaelMiguel, saya berbicara tentang pengguna biasa. Juga, permainan adalah kasus khusus, karena 35GB ini sebagian besar media, bukan kode, atau perpustakaan. Kebetulan itu adalah media yang hanya bisa Anda lihat melalui aplikasi khusus, yaitu gim. Tetapi bahkan untuk seorang gamer, 35GB tidak ada artinya pada drive multi-terabyte saat ini. Bagaimanapun, anggaplah bahwa jika Anda seorang gamer yang bersikeras memiliki drive kecil, maka Anda tidak berada di dekat perwakilan pengguna di luar sana.
Mike Nakis
2
@ MikeNakis Tidak setiap gamer memiliki drive 1TB, atau uang untuk membeli SSD 256GB. Beberapa, seperti saya, memiliki 128GB SSD, atau laptop dengan kurang dari 500GB. Beberapa waktu yang lalu, 80% dari penggunaan ruang SSD saya hanyalah permainan. Itu hanya 3-4 pertandingan, memakan ruang. Dan dalam permainan itu sendiri, hampir semua orang memiliki laptop dan memainkannya.
Ismael Miguel
5
@ Mike oh, tidak masalah. Ketika kita berbicara tentang ukuran aplikasi, yang kita maksud adalah ukuran file instalasi yang dapat diunduh, atau total ruang yang ditempati oleh aplikasi pada disk setelah diinstal. Ini termasuk perpustakaan, media, data, semuanya. Dan saat ini, untuk menghindari masalah ketidakcocokan, aplikasi biasanya dikirimkan bersama dengan sebagian besar perpustakaan yang mereka butuhkan, alih-alih berharap bahwa perpustakaan akan sudah diinstal, dan versi yang tepat, dll. Ukuran file yang dapat dieksekusi utama tidak benar-benar menarik, atau konsekuensi apa pun.
Mike Nakis
3
@ IsmaelMiguel Untuk seorang programmer, kemungkinan mesin virtual mereka yang berbeda, wadah buruh pelabuhan, dan semacamnya. Tidak ada mengasapi yang lebih baik daripada mengalikan seluruh sistem kembung ;-)
cmaster
16

Sebagai tambahan untuk jawaban lainnya, 10 tahun yang lalu biasanya ada versi terpisah untuk versi terlokalisasi / internasional. Sekarang umumnya program-program akan menggabungkan dukungan lokalisasi penuh ke dalam setiap versi yang dirilis yang memenuhi ukuran program.

Eterm
sumber
5
Saya mungkin salah, tetapi saya bekerja di bawah ilusi bahwa string adalah bagian paling sedikit dari masalah ini. Benar, ada banyak bahasa di luar sana, tetapi jumlah string yang pernah dilihat pengguna masih sangat terbatas. Bagaimanapun, salah satu cara paling pasti untuk gagal di antarmuka pengguna Anda adalah dengan memasukkan terlalu banyak teks.
cmaster
5
Menambah apa yang dikatakan @cmaster, Firefox secara khusus tidak membundel lokalisasi penuh (dan sementara saya memikirkannya, OpenOffice juga tidak.)
BenjiWiebe
2
@cmaster Strings, no. Tapi video dan audio yang dilokalkan, terutama dalam konteks game? IIRC ada permainan 60 GB (GTA V?) Di mana> 10 GB hanya audio yang dilokalisasi. Itu bagian yang signifikan.
Bob
@ Oke, saya tidak memikirkan game, sepertinya itu satu-satunya pengecualian untuk apa yang saya tulis.
cmaster
Untuk setiap bahasa, tabel string mungkin menambahkan hingga beberapa byte K tambahan. Hanya ikon aplikasi saja yang biasanya mengerdilkan ukuran total dari semua konten string (kemungkinan pengecualian adalah aplikasi dengan kamus yang disematkan)
andyb
13

Salah satu alasannya adalah ketergantungan. Program dengan fungsionalitas yang kaya dan ketampanan membutuhkan banyak hal yang dilakukan - enkripsi, pemeriksaan ejaan, bekerja dengan XML dan JSON, mengedit teks dan banyak hal lainnya. Dari mana mereka berasal? Mungkin Anda menggulung sendiri dan menyimpannya sekecil mungkin. Kemungkinan besar Anda menggunakan komponen pihak ketiga (sumber terbuka berlisensi MIT mungkin) yang memiliki banyak fungsi yang sebenarnya tidak pernah Anda perlukan tetapi begitu Anda membutuhkan fungsi tunggal dari komponen pihak ketiga Anda sering harus membawa seluruh komponen di sekitarnya. Jadi Anda menambahkan semakin banyak dependensi dan seiring mereka sendiri berevolusi dan menumbuhkan program Anda yang bergantung padanya tumbuh pula.

sharptooth
sumber
Saya agak ingin tahu mengapa ini mendapat dua downvotes semalam.
sharptooth
6
Saya tidak melakukannya tetapi saya pikir ini tidak benar-benar menjawab pertanyaan dengan cukup mendalam. Cukup banyak hanya mengatakan "perangkat lunak menjadi lebih besar karena ia melakukan lebih banyak hal", dan Anda akan melihat dari jawaban lain bahwa sebenarnya ada lebih dari itu.
Lightness Races in Orbit
1
Faktor terkait adalah bahwa dalam sistem yang menggunakan penghubung statis, penghubung mungkin hanya perlu menarik kode yang benar-benar digunakan [beberapa penghubung akan selalu menarik semua hal, tetapi yang lebih baik mencoba menjadi selektif]. Saat menggunakan tautan dinamis, terutama jika modul dapat dibagikan, bahkan jika kode pertama yang menginstal modul hanya memerlukan satu fungsi darinya, tidak ada cara untuk mengetahui fungsi apa yang mungkin diperlukan oleh kode lain yang ingin berbagi modul.
supercat
@sharptooth Aku bahkan tidak bertanya-tanya lagi. Sementara dalam kebanyakan kasus, sistem ini bekerja, saya juga melihat jawaban yang salah dan salah dijatuhkan secara gila-gilaan dan diterima sementara jawaban yang benar terlalu sering terlupakan ...
Brian Knoblauch
10

Sementara grafis / kegunaan memang faktor yang berkontribusi, ada banyak sekali yang perpustakaan / kode kompilasi berlebih.

Contoh seberapa kecil kode yang masih BISA: MenuetOS, OS 64-bit penuh dengan aplikasi yang kuat yang sesuai dengan satu floppy disk.

Contoh bagaimana kode besar dapat tanpa alasan yang jelas: Saya melakukan output teks sederhana "Halo, Dunia!" di Ada baru-baru ini. Eksekusi yang dikompilasi adalah lebih dari 1 MiB !. Eksekusi yang sama dalam perakitan hanya KiB atau 2 (dan sebagian besar yang dapat dieksekusi overhead, kode yang berjalan sebenarnya adalah puluhan byte).

Brian Knoblauch
sumber
3
Apa itu floppy disk? ;)
500 - Kesalahan Server Internal
@ 500-InternalServerError Apa itu Ada? : D
BenjiWiebe
3
untuk pendatang baru, floppy disk sekitar 1,4 MiB
Sarge Borsch
3
Saya telah melihat executable Ada yang modern di bawah 200 byte. Tetapi jika kompiler Anda melakukan hal-hal seperti runtime penugasan penuh secara default, apakah Anda menggunakan tugas atau tidak, maka 1MB atau lebih diharapkan. Dan biasanya tidak perlu repot-repot melepasnya.
Brian Drummond
@BrianDrummond, terdengar seperti runtime yang benar-benar jelek, atau runtime jelek dan pustaka dan tautan. Dalam video pelatihan yang saya lihat bertahun-tahun yang lalu, Jean Ichbiah et al menyebutkan bahwa runtime Ada yang khas (untuk versi asli bahasa) akan sekitar 4K. Karena penasaran, saya memeriksanya terhadap paket runtime TI 320C30 yang kami gunakan. Dia benar dalam hal uang.
John R. Strohm
7

Sepele benar bahwa perangkat lunak harus dibangun agar sesuai dengan dua hal: Pengguna dan perangkat keras yang tersedia. Suatu program cocok untuk tujuannya jika ia melakukan apa yang diinginkan pengguna tepat waktu dengan perangkat keras yang dimilikinya. Baiklah ya Tetapi seiring dengan peningkatan perangkat keras pada dasarnya semua dimensi yang dapat diukur, jumlah program diskrit yang bergerak dari tidak layak ke peningkatan - ruang desain menjadi lebih besar:

  • Bahasa tingkat yang lebih tinggi memungkinkan untuk mengekspresikan ide dalam kode & waktu kurang dari sebelumnya. Sebaliknya, kompleksitas yang lebih rendah ini memungkinkan untuk mengekspresikan gagasan yang semakin kompleks.
  • Menggabungkan lebih banyak data dengan aplikasi dapat menjadikannya secara instan lebih bermanfaat. Misalnya, mungkin tidak akan lama sebelum aplikasi pemeriksa ejaan dibundel dengan setiap bahasa yang dikenal manusia - hanya beberapa gigabytes.
  • Imbalan perangkat keras memungkinkan pengembang dan pengguna memiliki lebih banyak pilihan sumber daya yang mereka pedulikan. Lihat misalnya FLAC / OGG vs WAV, SVG vs PNG, indeks basis data.
  • Antarmuka manusiawi sering menukar apa yang sebelumnya berarti sejumlah besar perangkat keras untuk kegunaan. Anti-aliasing, resolusi tinggi, penyegaran cepat, dan menggesek di antara jumlah apa yang membuat panel diskrit menjadikan pengalaman yang lebih realistis, dan karenanya intuitif dan dapat dihubungkan.
l0b0
sumber
6

Ini jelas benar tentang aplikasi Android. Empat tahun lalu, aplikasi sederhana memakan waktu sekitar 2-5 megabyte. Saat ini aplikasi sederhana membutuhkan ruang sekitar 10-20 megabyte.

Semakin banyak ruang yang tersedia, semakin besar ukuran aplikasi.

Saya pikir ada dua alasan utama dalam hal Android:

  • Google memperluas kerangka kerja Android, menambahkan banyak fungsi baru.

  • Pengembang tidak peduli lagi. Gambar termasuk dalam resolusi yang jauh lebih tinggi (tentu saja resolusi layar smartphone meningkat), perpustakaan pihak ketiga disertakan tanpa berpikir.

Mike76
sumber
1
Poin terakhir itu benar sekali.
Lightness Races in Orbit
3
Saya telah membuat total satu aplikasi android, dan APK adalah 0,05MB. Dan lagi, itu tidak melakukan banyak hal. Saya masih bertanya-tanya mengapa aplikasi stopwatch (dengan jumlah fungsionalitas yang sama seperti aplikasi saya, meskipun sangat berbeda) membutuhkan beberapa MB.
immibis
5
Titik peluru terakhir yang salah, pengembang melakukan perawatan. Kami hanya perlu menyulap berbagai prioritas dan menjadikan aplikasi itu sedikit lebih besar masuk akal.
NPSF3000
Itu juga tidak membantu bahwa SDK (pada saat itu) bersikeras menambahkan perpustakaan 5 + MB ke aplikasi 0,05MB saya yang tidak saya butuhkan, dan saya harus ingat untuk menghapusnya sebelum rilis rilis.
immibis
4

Banyak dari itu bermuara pada waktu pengembang dan biaya waktu itu. Kembali pada hari-hari ketika Visual Basic pertama kali tiba di tempat kejadian, itu bersaing dengan C / C ++ dan ketukan besar terhadap itu adalah bahwa Anda bisa menulis 'Hello World' di ANSI C untuk Windows di mungkin 15K. Masalah dengan VB adalah Anda selalu memiliki albatros dari 300K runtime library.

Sekarang, Anda bisa 10x ukuran program VB Anda dan itu masih akan hanya beberapa K lebih, tetapi 10x ukuran program C / C ++ Anda dan Anda sedang melihat beberapa BULAN pengembangan lebih lanjut.

Pada akhirnya penggembungan aplikasi Anda adalah harga kecil untuk membayar lompatan besar dalam produksi pengembangan, pengurangan harga dan luasnya kemampuan yang tidak akan pernah mungkin terjadi di masa pengembangan kerajinan tangan yang lama; ketika program kecil dan cepat tetapi juga lemah, tidak kompatibel satu sama lain, kurang fitur dan mahal untuk dikembangkan.

andyb
sumber
2
posting ini agak sulit dibaca (dinding teks). Maukah Anda mengeditnya menjadi bentuk yang lebih baik?
nyamuk
1
"10x ukuran" Hello World membutuhkan "bulan lebih banyak pengembangan"? Apakah menyikat gigi sepuluh kali melibatkan berdiri di depan cermin tanpa henti selama sebulan?
bcrist
Menyikat gigi x kali adalah fungsi linier x, tetapi pemrograman umumnya bukan fungsi linier. Jika Anda membuat setiap baris kode menggunakan fungsi bahasa tingkat paling rendah, Anda mendapatkan kode cepat dan kecil tetapi dengan biaya yang lebih tinggi per tingkat kompleksitas. Bahasa tingkat tinggi mengasapi lebih banyak tetapi menjaga biaya lebih dekat ke fungsi linear dari kompleksitas.
andyb
2

Seiring waktu, kebutuhan pengguna semakin berkembang dan semakin banyak menuntut, sehingga vendor / penulis berbagai perangkat lunak dipaksa untuk memenuhi kebutuhan tersebut atas nama persaingan.

Tetapi memenuhi kebutuhan baru berarti sering menambahkan kode baru. Kode baru berarti kerentanan baru untuk diperbaiki. Memperbaiki kerentanan baru dapat menambahkan kode atau membuka pintu ke kerentanan baru.

Setiap fitur yang ditambahkan untuk memenuhi kebutuhan pengguna mungkin memerlukan lebih banyak daya prosesor untuk kecepatan (kita semua mengeluh tentang kecepatan browser ini atau itu), sumber daya grafis baru untuk efek visual yang lebih baik ... dll.

Semua ini berarti menambahkan lapisan aplikasi (kode) baru, keamanan dan terkadang perangkat keras.


sumber
0

Banyak ukuran berasal dari perpustakaan built in. Banyak aplikasi hari ini dibangun menggunakan elektron yang membundel sejumlah besar dengan aplikasi. Jika Anda menginstal aplikasi di Linux biasanya lebih kecil karena sebagian besar aplikasi sudah diinstal melalui shared library yang juga digunakan oleh program lain.

Qwertie
sumber
-1

Saat membuat perangkat lunak, jika Anda memerlukan fungsi A, Anda akan mengimpor modul A *. A * dapat memecahkan A, tetapi A * dapat memecahkan masalah lebih dari A, dan A * bisa besar. Semua modul besar menghasilkan perangkat lunak berukuran besar.

Mungkin bukan kasus yang sama, tetapi sesuatu seperti ini: Jika Anda hanya perlu mencetak "hello world" pada konsol menggunakan Java, Anda perlu JRE (> 60MB) diinstal.

Jika contoh Java tidak bagus, coba yang ini: Jika perangkat lunak perlu login ke file, itu mungkin menggunakan modul logging yang benar-benar dapat membuat log ke database, melalui jaringan dan beberapa fitur lainnya, tetapi fungsi tidak pernah digunakan dalam proyek.

neoedmund
sumber
Mengapa tepatnya ada 5 downvotes dan tidak ada satu komentar yang menjelaskan mengapa?
Kromster
1
@KromStern Bagian pertama sangat menyoroti bagaimana perpustakaan bekerja, dan melakukannya dengan cara yang sangat tidak jelas dengan penggunaan yang tidak konsisten code. Saya berpendapat bahwa itu tidak benar-benar menjawab pertanyaan sama sekali. Bagian kedua menggunakan Java sebagai contoh (meskipun mencoba untuk mengklaim bahwa JRE harus dianggap sebagai bagian dari pertumbuhan ukuran aplikasi - yang lagi-lagi melewatkan pokok pertanyaan dan bukan contoh yang adil sama sekali dan terus mengabadikan kesalahpahaman tentang Jawa). Semua itu salah, atau mengulang poin dalam jawaban sebelumnya, yang ditulis dengan lebih baik.
1
Contoh Anda masuk ke jaringan atau file juga tidak bagus - karena dari sudut pandang kode, keduanya adalah file dan ditangani dengan cara yang persis sama (perbedaan antara file dan jaringan ditangani oleh sistem operasi). Saya belum melihat kerangka kerja logging yang memiliki "log ke database" sebagai bagian dari fungsi intinya karena ini akan dipersulit oleh Oracle vs MySQL vs Sql Server vs Postgres vs ... driver dan perbedaan dialektis.
@ user40980 Perbedaan antara file dan jaringan tidak ditangani oleh sistem operasi. Mereka membutuhkan panggilan OS yang berbeda untuk terhubung dan menulis. Akses basis data ditangani melalui lapisan kemandirian basis data seperti JDBC atau libdbi. (Yang pada gilirannya dapat menarik driver untuk semua database yang didukung berbeda!)
immibis
-2

Saya membaca tentang beberapa aturan bahwa program akan mengambil semua memori yang tersedia tidak peduli berapa banyak tetapi mengapa?

Itu tidak sepenuhnya benar. Sistem tidak akan melepaskan memori yang telah mereka konsumsi sampai sistem operasi berada di bawah tekanan memori. Ini adalah peningkatan kinerja. Jika Anda menjelajahi halaman dengan gambar aktif, Anda menavigasi. Anda mungkin menavigasi kembali, karena itu memerlukan gambar lagi. Jika sistem operasi memiliki RAM, tidak ada gunanya membersihkan memori sampai Anda yakin Anda tidak akan membutuhkannya lagi.

Menghapus memori segera akan mengambil siklus CPU dan bandwidth memori jauh dari pengguna ketika mereka kemungkinan besar ingin halaman web yang sangat responsif ditampilkan di layar.

Sistem operasi akan menggunakan semua memori non-aplikasi yang tersedia, yang sebagian besar digunakan untuk cache sistem file.

Manajemen memori adalah masalah yang sulit tetapi ada orang yang sangat pintar mengerjakannya sepanjang waktu. Tidak ada yang disia-siakan dengan sengaja dan tujuan utamanya adalah menyediakan komputer yang sangat responsif kepada Anda.

Phil Hannent
sumber
3
Sama sekali bukan itu maksud dari perkataan itu. Memori virtual dan pengumpulan sampah baru saja ditemukan ketika kutipan itu ditulis, dan itu tidak tersebar luas.
Jörg W Mittag
-2

Mungkin benar bahwa program cenderung meluas untuk mengisi ruang yang tersedia, mirip dengan fenomena pinggiran kota tempat Anda menambahkan jalur baru ke jalan raya yang macet dan dalam beberapa tahun lalu lintas didukung kembali.

Tetapi jika Anda memeriksanya, Anda mungkin menemukan bahwa program mereka sebenarnya melakukan lebih banyak hal. Browser, misalnya, menjalankan grafik yang lebih bagus, memiliki alat pengembang yang licin yang tidak ada beberapa tahun yang lalu, dll. Mereka juga menautkan ke banyak perpustakaan, kadang-kadang hanya menggunakan sebagian kecil dari kode. Jadi, sementara program dapat meningkatkan ukuran untuk mengisi memori yang tersedia, beberapa di antaranya mungkin menjadi alasan yang sah.

Paul J Abernathy
sumber
2
ini tampaknya tidak menawarkan sesuatu yang substansial atas poin yang dibuat dan dijelaskan dalam 13 jawaban sebelumnya
nyamuk
-3

Perpustakaan yang dibangun di atas objek yang tidak dioptimalkan memerlukan lebih banyak memori untuk memuat, menginstal, dan lebih banyak siklus komputasi untuk beroperasi. Kode objek sebagian besar mengasapi.

Cukup langkah melalui kode C ++ standar yang berjalan untuk melihat semua pemanggilan objek yang menegaskan () untuk memastikan semuanya adalah objek yang valid. Saat Anda mendesain lapisan demi lapisan objek yang membungkus objek, lapisan bawahnya membengkak dan buram. Pemrogram menjadi malas dan mengambil lebih banyak objek karena lebih cepat daripada mendesain ulang apa yang terbatas pada fungsionalitas yang diperlukan. Sangat sederhana.

Pertimbangkan ukuran kernel Linux C, hanya kernel, versus ukuran aplikasi yang dipesan lebih dahulu. Kernel dapat menjalankan seluruh mesin. Tapi itu tidak dibangun secepat aplikasi, butuh waktu lambat untuk membuat fungsionalitas terbaik.

daemondave
sumber