Berapa lama kode kompleks diperlukan untuk dikompilasi


2

The XKCD komik di bawah ini menunjukkan bahwa kode membutuhkan banyak waktu untuk mengkompilasi (Mungkin tidak cukup waktu untuk menggelar pertarungan pedang, tetapi Anda mendapatkan ide). Namun, dengan kode Java sederhana yang saya kerjakan, dibutuhkan kurang dari 2 detik untuk mengkompilasi 1.000 baris atau lebih di BlueJ, dan IDE lain seperti Eclipse tampaknya mengkompilasi dengan cepat sampai batas tertentu.

Jadi dalam keadaan apa (bahasa, kompleksitas kode, dll) suatu bagian kode sebenarnya membutuhkan waktu lama (katakanlah,> 1 menit) untuk dikompilasi, atau komik ini hanya mengambil kebebasan kreatif (yang sepertinya tidak seperti xkcd).

masukkan deskripsi gambar di sini


5
Kernel linux lengkap membawa saya 15 menit misalnya
djsmiley2k

3
Agak sulit untuk menghitung ini ... itu sangat tergantung pada mesin Anda tetapi Kernel Linux dapat mengambil setengah jam untuk mengkompilasi, OpenOffice digunakan untuk mengambil lebih dari satu jam, dan bahkan Firefox membutuhkan waktu yang cukup lama. 1000 baris hampir tidak ada dalam hal kompleksitas perangkat lunak.
Mokubai

Lihatlah Gentoo atau Linux From Scratch.
Sacha K

Tergantung kapan kartun itu digambar. Kembali pada tahun 1970-an, membangun sistem operasi IBM 360 yang digunakan untuk berjalan semalam. Tapi itu menggunakan macro Assembler.
David Marshall

2
Lelucon yang dibuat kartun itu adalah bahwa bos tidak tahu berapa lama waktu yang dibutuhkan untuk mengkompilasi, sehingga mereka menggunakan ini sebagai alasan untuk menghindar.
psusi

Jawaban:


0

Ada banyak faktor yang berkontribusi terhadap hal ini, tetapi ukurannya besar. Sebagian besar sistem build modern berupaya melakukan kompilasi parsial ketika Anda mengubah kode, sehingga hanya bagian-bagian yang diubah yang dibangun. Namun, beberapa alat tidak mampu melakukan ini.

Saat mengkompilasi jutaan baris .NET code yang tersebar di ratusan proyek, waktu kompilasi Anda mulai menjadi cukup besar. Ketika mengkompilasi pustaka besar sambil juga mengkompilasi kode sumber Anda sendiri, seperti yang sering dilakukan di dunia asli C / C ++, Anda juga akan menambah waktu kompilasi Anda.

Terutama dengan C dan C ++, waktu yang dihabiskan untuk mengurai header cukup besar. Ini adalah proses I / O terikat yang sangat kuat untuk berulang kali membaca ribuan header. Ini adalah salah satu alasan mengapa teknik header yang dikompilasi sebelumnya dibuat. Tentu saja, SSD mempercepat ini juga.

Sunting: Saya lupa menyebutkan bahwa build sering menyertakan generator kode khusus atau kompiler DSL. Alat-alat ini seringkali merupakan proyek-proyek buatan sendiri yang tidak terlalu dioptimalkan seperti alat-alat yang banyak digunakan, sehingga mereka dapat menjadi hambatan jika digunakan terlalu banyak.


0

Dengan teknologi saat ini, dibutuhkan basis kode yang cukup besar untuk dikompilasi. Tapi ketika dinosaurus (mainframe dan komputer mini besar - PDP 11/70, 64K memori inti muncul di benak) berkeliaran di bumi (pertengahan 70-an), bahkan terminal yang terhubung ke satu-satunya komputer untuk tim perangkat lunak lebih besar daripada hari ini PC desktop. Jika Anda memiliki koneksi 9600 baud, Anda adalah salah satu dari sedikit yang dipilih - kebanyakan dari kita bersyukur bisa ditingkatkan menjadi 2400! Mesin itu dibagi waktu di antara pengguna yang terhubung, pekerjaan mengiris waktu dengan cara round-robin.

Ketika tenggat waktu semakin dekat dan semua orang berusaha untuk mendapatkan bagian dari sistem target yang dikompilasi, bahkan waktu respons komunikasi terminal pun akan terganggu. Dalam kasus yang parah, CPU menghabiskan banyak waktu untuk menukar pekerjaan dari disk dengan yang sebenarnya memprosesnya. Dalam situasi itu, waktu kompilasi pada urutan banyak menit tidak biasa.

Saya ingat percakapan yang serupa (lebih buruk!) Dengan kartun itu, sekitar jam 3:30 suatu malam ketika tenggat waktu semakin dekat. Departemen berada di 3 shift (shift-diferensial? Sekrup itu!) Karena proyek itu begitu buruk man, satu-satunya mesin untuk 25 SWE begitu macet. Saya dipanggil untuk membaca kertas di terminal saya, berusaha untuk tidak tertidur, sambil menunggu kompilasi selesai.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.