Runtime vs Waktu kompilasi

370

Apa perbedaan antara run-time dan compile-time?

devforall
sumber
Saya telah memberikan contoh yang sangat kecil tapi jelas .... Itu tidak mengintimidasi dengan detail besar. Setelah itu semua jawaban bisa dijawab. Mereka luar biasa ...
sankar banerjee

Jawaban:

479

Perbedaan antara waktu kompilasi dan waktu lari adalah contoh dari apa yang oleh para ahli teori berkepala runcing disebut sebagai pembedaan fase . Ini adalah salah satu konsep yang paling sulit untuk dipelajari, terutama bagi orang-orang tanpa banyak latar belakang dalam bahasa pemrograman. Untuk mendekati masalah ini, saya merasa perlu untuk bertanya

  1. Invarian apa yang memuaskan program?
  2. Apa yang salah pada fase ini?
  3. Jika fase berhasil, apa saja kondisi akhir (apa yang kita ketahui)?
  4. Apa input dan outputnya, jika ada?

Waktu kompilasi

  1. Program tidak perlu memuaskan invarian. Bahkan, itu tidak perlu menjadi program yang baik sekali. Anda dapat memberi makan HTML ini ke kompiler dan melihatnya ...
  2. Apa yang salah pada saat kompilasi:
    • Kesalahan sintaksis
    • Mengetik kesalahan pemeriksaan
    • (Jarang) kompiler macet
  3. Jika kompiler berhasil, apa yang kita ketahui?
    • Program ini dibentuk dengan baik --- program yang berarti dalam bahasa apa pun.
    • Dimungkinkan untuk mulai menjalankan program. (Program mungkin langsung gagal, tapi setidaknya kita bisa mencoba.)
  4. Apa input dan outputnya?
    • Input adalah program yang sedang dikompilasi, ditambah file header, antarmuka, pustaka, atau voodoo lain yang perlu diimpor untuk dikompilasi.
    • Keluaran diharapkan kode perakitan atau kode objek yang dapat dipindahkan atau bahkan program yang dapat dieksekusi. Atau jika terjadi kesalahan, output adalah banyak pesan kesalahan.

Jalankan waktu

  1. Kami tidak tahu apa-apa tentang invarian program --- mereka adalah apa pun yang dimasukkan oleh programmer. Run-time invarian jarang diberlakukan oleh kompilator saja; butuh bantuan dari programmer.
  2. Apa yang bisa salah adalah kesalahan run-time :

    • Pembagian dengan nol
    • Mendereferensi pointer nol
    • Kehabisan memori

    Juga ada kesalahan yang terdeteksi oleh program itu sendiri:

    • Mencoba membuka file yang tidak ada di sana
    • Mencoba menemukan halaman web dan menemukan bahwa URL yang diduga tidak terbentuk dengan baik
  3. Jika run-time berhasil, program selesai (atau terus berjalan) tanpa crash.
  4. Input dan output sepenuhnya tergantung pada programmer. File, jendela di layar, paket jaringan, pekerjaan yang dikirim ke printer, sebut saja. Jika program meluncurkan rudal, itu adalah output, dan itu terjadi hanya pada saat dijalankan :-)
Norman Ramsey
sumber
13
Jawaban yang sangat bagus untuk apa yang dicakupnya (+1) namun Anda bahkan tidak menyentuh aspek meta-programing waktu kompilasi vs run-time dan itu, IMHO, adalah bagian yang paling menarik. Saya akan memberikan, mengingat jawaban ini diterima, bahwa itu mungkin di luar apa yang dicari OP.
BCS
4
Bagus, jika seseorang bertanya kepada saya tentang hal itu selama kuliah saya, saya akan menggunakan server Anda :-)
e-satis
12
Ini jawaban yang sangat bagus. Ini cukup jelas dan dapat dipahami. Tidak mudah menemukan jawaban yang jelas di Google.
Tarik
7
Sekalipun Anda telah memprogram beberapa saat, masih tidak mudah untuk mendapatkannya ... itu bukan hanya pemula. Pertanyaan bagus oleh OP.
PositiveGuy
11
"Programnya tidak perlu memuaskan setiap invarian. Faktanya, itu tidak perlu program yang baik sekali. Kamu bisa memberi makan HTML ini ke kompiler dan menontonnya di ..." Aku tidak tahu apa yang kamu katakan sini. Bisakah Anda menjelaskan ini secara sederhana, tidak macet dengan semua sampah teknis ini?
PositiveGuy
175

Saya memikirkannya dalam hal kesalahan, dan kapan mereka bisa ditangkap.

Waktu kompilasi:

string my_value = Console.ReadLine();
int i = my_value;

Nilai string tidak dapat ditetapkan sebagai variabel bertipe int, sehingga kompiler tahu pasti pada waktu kompilasi bahwa kode ini memiliki masalah

Jalankan waktu:

string my_value = Console.ReadLine();
int i = int.Parse(my_value);

Di sini hasilnya tergantung pada string apa yang dikembalikan oleh ReadLine (). Beberapa nilai dapat diuraikan ke int, yang lain tidak bisa. Ini hanya dapat ditentukan pada saat run time

ikan buntal
sumber
59
Sekarang ini adalah sesuatu yang kita semua bisa mengerti. Tidak ada kata teknologi sampah umum di sini. Bagus.
PositiveGuy
Untuk Aplikasi iPhone: Apakah waktu kompilasi pertama kali kode dikompilasi oleh pengembang menjadi .appekstensi? atau itu terjadi saat diluncurkan oleh setiap kali pengguna memulai aplikasi?
Sayang
1
@Madu dikompilasi pertama kali oleh pengembang menjadi
.app
2
Ini adalah jawaban garis bawah yang bagus yang mencakup perbedaan antara waktu kompilasi dan waktu proses secara konseptual. Saya menghargai jawaban akademik, profesor yang dipilih juga, tetapi jawaban ini jelas dan ringkas. Setelah membaca jawaban ini, saya dapat kembali dan membaca jawaban yang dipilih, dan itu lebih masuk akal. Terima kasih
mojave
72

Waktu kompilasi: periode waktu di mana Anda, pengembang, menyusun kode Anda.

Run-time: periode waktu di mana pengguna menjalankan perangkat lunak Anda.

Apakah Anda memerlukan definisi yang lebih jelas?

Yuval Adam
sumber
12
@BCS: OP mungkin memiliki pengantar yang sangat sederhana untuk pemrograman menggunakan bahasa yang ditafsirkan atau byte-kompilasi-kemudian-jalankan-dalam-satu-langkah sehingga perbedaan itu tidak pernah diperlukan. Pertanyaannya naif, tapi tidak bisu.
dmckee --- ex-moderator kitten
@ dmckee: Saya pikir jawaban ini bahkan tidak akan berguna bagi pengguna Anda karena tidak memiliki konten informasi lebih dari pertanyaan aslinya. Siapa pun yang akan mengajukan pertanyaan bahwa jawaban ini menjawab tidak memiliki pemrograman bisnis (dan saya tidak berpikir OP menanyakannya).
BCS
Saya punya pertanyaan singkat. Ketika seseorang mengatakan bahwa kesalahan runtime tipikal dibagi dengan nol tetapi bagaimana jika Anda memiliki variabel, katakanlah int x = 3/0tetapi Anda tidak melakukan apa pun dengan variabel ini. Kami tidak mencetaknya atau apa pun. Apakah itu masih dianggap sebagai kesalahan runtime?
Robben
Untuk Aplikasi iPhone: Apakah waktu kompilasi pertama kali kode dikompilasi oleh pengembang menjadi ekstensi .app? atau itu terjadi saat diluncurkan oleh setiap kali pengguna memulai aplikasi? Jika ini waktu kompilasi dimana kode pengembang sedang dikompilasi, lalu mengapa saya peduli? Maksud saya ini tidak akan memengaruhi pengalaman pengguna, bukan? Karena itu akan membunuh waktu pengembang saja!
Sayang
1
@Robben saya berasumsi Anda sudah mendapatkan jawaban Anda setelah sekian lama, tetapi saya akan menjawabnya untuk orang lain. Ya itu akan menjadi kesalahan runtime bahkan jika Anda tidak menggunakannya
فربد ضروري
22

( sunting : yang berikut ini berlaku untuk C # dan bahasa pemrograman sejenis yang sangat diketik. Saya tidak yakin apakah ini membantu Anda).

Misalnya, kesalahan berikut akan dideteksi oleh kompiler (pada waktu kompilasi ) sebelum Anda menjalankan program dan akan menghasilkan kesalahan kompilasi:

int i = "string"; --> error at compile-time

Di sisi lain, kesalahan seperti berikut ini tidak dapat dideteksi oleh kompiler. Anda akan menerima kesalahan / pengecualian saat run-time (ketika program dijalankan).

Hashtable ht = new Hashtable();
ht.Add("key", "string");
// the compiler does not know what is stored in the hashtable
// under the key "key"
int i = (int)ht["key"];  // --> exception at run-time
M4N
sumber
Pengecualian. Hashtable adalah satu tapi saya menemukan langkah terbesar adalah .net 1.1 ke .net 2.0, pergi dari untyped ke ketikan dataset (dan sekarang LINQ). Mencoba memecahkan masalah formulir yang rusak dengan database yang cerdik yang digunakan untuk membuat saya sangat sedih!
Spence
19

Penerjemahan kode sumber ke hal-hal yang terjadi pada [layar | disk | jaringan] dapat terjadi dalam (kira-kira) dua cara; menyebutnya kompilasi dan interpretasi.

Dalam program yang dikompilasi (contohnya c dan fortran):

  1. Kode sumber dimasukkan ke dalam program lain (biasanya disebut compiler - go figure), yang menghasilkan program yang dapat dieksekusi (atau kesalahan).
  2. Eksekusi dijalankan (dengan mengklik dua kali, atau mengetikkan namanya di baris perintah)

Hal-hal yang terjadi pada langkah pertama dikatakan terjadi pada "waktu kompilasi", hal-hal yang terjadi pada langkah kedua dikatakan terjadi pada "waktu berjalan".

Dalam program yang ditafsirkan (contoh MicroSoft basic (on dos) dan python (saya pikir)):

  1. Kode sumber dimasukkan ke dalam program lain (biasanya disebut interpreter) yang "menjalankan" secara langsung. Di sini interpreter berfungsi sebagai lapisan perantara antara program Anda dan sistem operasi (atau perangkat keras pada komputer yang sangat sederhana).

Dalam hal ini perbedaan antara waktu kompilasi dan waktu menjalankan agak sulit untuk dijabarkan, dan jauh lebih tidak relevan bagi programmer atau pengguna.

Java adalah sejenis hibrida, di mana kode dikompilasi ke bytecode, yang kemudian berjalan pada mesin virtual yang biasanya merupakan interpreter untuk bytecode.

Ada juga kasus menengah di mana program dikompilasi untuk bytecode dan dijalankan segera (seperti dalam awk atau perl).

dmckee --- mantan kucing moderator
sumber
11

Pada dasarnya jika kompiler Anda dapat mengetahui apa yang Anda maksud atau apa nilainya "pada waktu kompilasi", ia dapat mengubah kode ini menjadi kode runtime. Tentunya jika kode runtime Anda harus melakukan perhitungan setiap kali akan berjalan lebih lambat, jadi jika Anda dapat menentukan sesuatu pada waktu kompilasi, itu jauh lebih baik.

Misalnya.

Lipat konstan:

Jika saya menulis:

int i = 2;
i += MY_CONSTANT;

Kompilator dapat melakukan perhitungan ini pada waktu kompilasi karena ia tahu apa itu 2, dan apa itu MY_CONSTANT. Karena itu menghemat dari melakukan perhitungan setiap eksekusi tunggal.

Tempat menyimpan bahan makanan
sumber
Dan lebih mudah untuk mempertahankan kode waktu kompilasi daripada kode terikat runtime. Pada waktu kompilasi Anda dapat menggunakan kompiler untuk memeriksa beberapa hal. Hal yang sama pada saat runtime membutuhkan lebih banyak waktu untuk diperiksa karena melibatkan pengujian.
user1154664
10

Hmm, ok well, runtime digunakan untuk menggambarkan sesuatu yang terjadi ketika suatu program sedang berjalan.

Waktu kompilasi digunakan untuk menggambarkan sesuatu yang terjadi ketika suatu program sedang dibangun (biasanya, oleh kompiler).

dicroce
sumber
8

Waktu kompilasi:

Hal-hal yang dilakukan pada waktu kompilasi menimbulkan (hampir) tanpa biaya ketika program yang dihasilkan dijalankan, tetapi mungkin dikenakan biaya besar ketika Anda membangun program.

Run-Time:

Kurang lebih kebalikannya. Sedikit biaya saat Anda membangun, lebih banyak biaya saat program dijalankan.

Dari sisi lain; Jika sesuatu dilakukan pada waktu kompilasi, itu hanya berjalan pada mesin Anda dan jika sesuatu dijalankan, itu berjalan pada mesin pengguna Anda.

Relevansi

Contoh di mana ini penting akan menjadi tipe pembawa unit. Versi waktu kompilasi (seperti Boost.Units atau versi saya di D ) berakhir secepat menyelesaikan masalah dengan kode titik apung asli sementara versi run-time akhirnya harus mengemas informasi tentang unit yang nilainya masuk dan lakukan pemeriksaan di dalamnya di samping setiap operasi. Di sisi lain, versi waktu kompilasi meminta bahwa unit nilai diketahui pada waktu kompilasi dan tidak dapat menangani kasus di mana mereka berasal dari input run-time.

BCS
sumber
8

Mengikuti dari jawaban pertanyaan serupa sebelumnya Apa perbedaan antara run-time error dan compiler error?

Kompilasi / waktu kompilasi / Kesalahan sintaksis / semantik: Kesalahan kompilasi atau waktu kompilasi adalah kesalahan yang terjadi karena kesalahan pengetikan, jika kita tidak mengikuti sintaks dan semantik yang tepat dari bahasa pemrograman apa pun maka kesalahan waktu kompilasi dilemparkan oleh kompiler. Mereka tidak akan membiarkan program Anda untuk mengeksekusi satu baris sampai Anda menghapus semua kesalahan sintaks atau sampai Anda men-debug kesalahan waktu kompilasi.
Contoh: Kehilangan titik koma di C atau salah ketik intsebagai Int.

Kesalahan runtime: Kesalahan runtime adalah kesalahan yang dihasilkan saat program dalam keadaan berjalan. Jenis kesalahan ini akan menyebabkan program Anda berperilaku tidak terduga atau bahkan dapat mematikan program Anda. Mereka sering disebut sebagai Pengecualian.
Contoh: Misalkan Anda membaca file yang tidak ada, akan menghasilkan kesalahan runtime.

Baca lebih lanjut tentang semua kesalahan pemrograman di sini

Pankaj Prakash
sumber
7

Sebagai tambahan untuk jawaban lain, inilah cara saya menjelaskannya kepada orang awam:

Kode sumber Anda seperti cetak biru sebuah kapal. Ini mendefinisikan bagaimana kapal harus dibuat.

Jika Anda menyerahkan cetak biru Anda ke galangan kapal, dan mereka menemukan cacat saat membangun kapal, mereka akan berhenti membangun dan segera melaporkannya kepada Anda, sebelum kapal meninggalkan dok kering atau air yang tersentuh. Ini adalah kesalahan waktu kompilasi. Kapal itu bahkan tidak pernah benar-benar mengambang atau menggunakan mesinnya. Kesalahan ditemukan karena mencegah kapal bahkan dibuat.

Ketika kode Anda dikompilasi, itu seperti kapal sedang diselesaikan. Dibangun dan siap untuk digunakan. Ketika Anda mengeksekusi kode Anda, itu seperti meluncurkan kapal dalam perjalanan. Penumpang naik, mesin menyala dan lambungnya di atas air, jadi ini runtime. Jika kapal Anda memiliki cacat fatal yang menenggelamkannya pada pelayaran perdananya (atau mungkin beberapa pelayaran setelah karena sakit kepala tambahan) maka ia mengalami kesalahan runtime.

Jared K
sumber
5

Misalnya: Dalam bahasa yang sangat diketik, tipe dapat diperiksa pada waktu kompilasi atau pada saat runtime. Pada waktu kompilasi itu berarti, bahwa kompiler mengeluh jika jenisnya tidak kompatibel. Pada saat runtime berarti, bahwa Anda dapat mengkompilasi program Anda dengan baik tetapi pada saat runtime, ia melempar pengecualian.

Stefan Steinegger
sumber
4

Sederhananya perbedaan kata b / w waktu kompilasi & waktu Jalankan.

waktu kompilasi: Pengembang menulis program dalam format .java & mengonversi ke dalam Bytecode yang merupakan file kelas, selama kompilasi ini setiap kesalahan yang terjadi dapat didefinisikan sebagai kesalahan waktu kompilasi.

Run time: File .class yang dihasilkan digunakan oleh aplikasi untuk fungsionalitas tambahannya & logika ternyata salah dan melempar kesalahan yang merupakan kesalahan run time

prasanna
sumber
4

Berikut adalah kutipan dari Daniel Liang, penulis 'Pengantar pemrograman JAVA', tentang masalah kompilasi:

"Program yang ditulis dalam bahasa tingkat tinggi disebut program sumber atau kode sumber. Karena komputer tidak dapat menjalankan program sumber, program sumber harus diterjemahkan ke dalam kode mesin untuk dieksekusi . Terjemahan dapat dilakukan dengan menggunakan alat pemrograman lain yang disebut penerjemah atau kompiler . " (Daniel Liang, "Pengantar pemrograman JAVA" , p8).

...Dia melanjutkan...

"Kompiler menerjemahkan seluruh kode sumber menjadi file kode mesin , dan file kode mesin kemudian dieksekusi"

Ketika kita memasukkan kode tingkat tinggi / yang bisa dibaca manusia, ini awalnya tidak berguna! Itu harus diterjemahkan ke dalam urutan 'kejadian elektronik' di CPU kecil Anda! Langkah pertama menuju ini adalah kompilasi.

Sederhananya: kesalahan waktu kompilasi terjadi selama fase ini, sementara kesalahan waktu berjalan terjadi kemudian.

Ingat: Hanya karena suatu program dikompilasi tanpa kesalahan tidak berarti itu akan berjalan tanpa kesalahan.

Kesalahan waktu berjalan akan terjadi di bagian siap, berjalan atau menunggu siklus hidup program sementara kesalahan waktu kompilasi akan terjadi sebelum tahap 'baru' dari siklus hidup.

Contoh kesalahan waktu kompilasi:

Kesalahan Sintaks - bagaimana kode Anda dapat dikompilasi menjadi instruksi level mesin jika mereka ambigu ?? Kode Anda perlu menyesuaikan 100% dengan aturan sintaksis bahasa jika tidak dapat dikompilasi ke dalam kode mesin yang berfungsi .

Contoh kesalahan run-time:

Kehabisan memori - Panggilan ke fungsi rekursif misalnya dapat menyebabkan stack overflow mengingat variabel tingkat tertentu! Bagaimana ini bisa diantisipasi oleh kompiler !? itu tidak bisa.

Dan itu adalah perbedaan antara kesalahan waktu kompilasi dan kesalahan waktu berjalan

Thomas Flood
sumber
2

Run time berarti sesuatu terjadi ketika Anda menjalankan program.

Waktu kompilasi berarti sesuatu terjadi ketika Anda menyusun program.

Zifre
sumber
2

Waktu kompilasi:

Hal-hal yang dilakukan pada waktu kompilasi menimbulkan (hampir) tanpa biaya ketika program yang dihasilkan dijalankan, tetapi mungkin dikenakan biaya besar ketika Anda membangun program. Run-Time:

Kurang lebih kebalikannya. Sedikit biaya saat Anda membangun, lebih banyak biaya saat program dijalankan.

Dari sisi lain; Jika sesuatu dilakukan pada waktu kompilasi, itu hanya berjalan pada mesin Anda dan jika sesuatu dijalankan, itu berjalan pada mesin pengguna Anda.

siva
sumber
2

Waktu kompilasi: Waktu yang diambil untuk mengubah kode sumber menjadi kode mesin sehingga menjadi executable disebut waktu kompilasi.

Run time: Ketika suatu aplikasi sedang berjalan, itu disebut run time.

Kesalahan waktu kompilasi adalah kesalahan sintaksis, kesalahan referensi file yang hilang. Kesalahan runtime terjadi setelah kode sumber dikompilasi menjadi program yang dapat dieksekusi dan saat program sedang berjalan. Contohnya adalah crash program, perilaku program yang tidak terduga atau fitur tidak berfungsi.

Steffi Keran Rani J
sumber
2

Bayangkan bahwa Anda adalah bos dan Anda memiliki asisten dan pelayan, dan Anda memberi mereka daftar tugas yang harus dilakukan, asisten (waktu kompilasi) akan mengambil daftar ini dan melakukan pemeriksaan untuk melihat apakah tugas tersebut dapat dipahami dan bahwa Anda tidak menulis dalam bahasa atau sintaks yang canggung, jadi dia mengerti bahwa Anda ingin menugaskan seseorang untuk suatu pekerjaan sehingga dia menugaskannya untuk Anda dan dia mengerti bahwa Anda ingin kopi, jadi perannya sudah selesai dan pelayan (waktu berjalan) mulai menjalankan tugas-tugas itu sehingga dia pergi untuk membuatkan Anda kopi tetapi tiba-tiba dia tidak menemukan kopi untuk membuatnya jadi dia berhenti membuatnya atau dia bertindak berbeda dan membuatkan Anda teh (ketika program bertindak berbeda karena dia menemukan kesalahan ).

Ala'a
sumber
1

Berikut ini adalah ekstensi dari Jawaban untuk pertanyaan "perbedaan antara waktu proses dan waktu kompilasi?" - Perbedaan overhead yang terkait dengan run-time dan compile-time?

Kinerja run-time dari produk berkontribusi pada kualitasnya dengan memberikan hasil lebih cepat. Kinerja waktu kompilasi dari produk berkontribusi pada ketepatan waktunya dengan memperpendek siklus edit-kompilasi-debug. Namun, baik kinerja run-time dan kinerja compile-time adalah faktor sekunder dalam mencapai kualitas tepat waktu. Oleh karena itu, seseorang harus mempertimbangkan peningkatan kinerja run-time dan compile-time hanya ketika dibenarkan oleh peningkatan kualitas produk secara keseluruhan dan ketepatan waktu.

Sumber yang bagus untuk dibaca lebih lanjut di sini :

Amit Shekhar
sumber
1

Saya selalu memikirkannya relatif terhadap overhead pemrosesan program dan bagaimana hal itu mempengaruhi kinerja seperti yang dinyatakan sebelumnya. Contoh sederhananya adalah, apakah mendefinisikan memori absolut yang diperlukan untuk objek saya dalam kode atau tidak.

Boolean yang didefinisikan membutuhkan x memori. Ini kemudian dalam program yang dikompilasi dan tidak dapat diubah. Ketika program dijalankan, ia tahu persis berapa banyak memori yang dialokasikan untuk x.

Di sisi lain jika saya hanya mendefinisikan jenis objek generik (yaitu jenis tempat tempat yang tidak ditentukan atau mungkin pointer ke beberapa gumpalan raksasa) memori yang sebenarnya diperlukan untuk objek saya tidak diketahui sampai program dijalankan dan saya menetapkan sesuatu untuk itu , dengan demikian maka harus dievaluasi dan alokasi memori, dll. akan kemudian ditangani secara dinamis pada saat run (lebih banyak run time overhead).

Cara penanganannya secara dinamis akan bergantung pada bahasa, kompiler, OS, kode Anda, dll.

Pada catatan itu namun itu akan sangat tergantung pada konteks di mana Anda menggunakan run time vs waktu kompilasi.

TC
sumber
1

kita dapat mengklasifikasikan ini di bawah dua kelompok besar yang mengikat statis dan mengikat dinamis. Ini didasarkan pada ketika pengikatan dilakukan dengan nilai-nilai yang sesuai. Jika referensi diselesaikan pada waktu kompilasi, maka itu adalah pengikatan statis dan jika referensi diselesaikan pada saat runtime maka itu adalah pengikatan dinamis. Penjilidan statis dan penjilidan dinamis disebut juga jilid awal dan jilid akhir. Kadang-kadang mereka juga disebut sebagai polimorfisme statis dan polimorfisme dinamis.

Joseph Kulandai.

pengguna3708939
sumber
1

Perbedaan utama antara waktu proses dan waktu kompilasi adalah:

  1. Jika ada kesalahan sintaksis dan ketikkan cek dalam kode Anda, maka ia melempar kesalahan waktu kompilasi, di mana-sebagai run-time: ia memeriksa setelah mengeksekusi kode. Sebagai contoh:

int a = 1 int b = a/0;

di sini baris pertama tidak memiliki titik koma di akhir ---> kompilasi kesalahan waktu setelah menjalankan program saat melakukan operasi b, hasilnya tidak terbatas ---> run-time error.

  1. Kompilasi waktu tidak mencari output dari fungsionalitas yang disediakan oleh kode Anda, sedangkan run-time tidak.
Sindhu
sumber
1

inilah jawaban yang sangat sederhana:

Waktu runtime dan waktu kompilasi adalah istilah pemrograman yang merujuk pada berbagai tahap pengembangan program perangkat lunak. Untuk membuat program, pengembang terlebih dahulu menulis kode sumber, yang menentukan bagaimana program akan berfungsi. Program kecil mungkin hanya berisi beberapa ratus baris kode sumber, sedangkan program besar mungkin berisi ratusan ribu baris kode sumber. Kode sumber harus dikompilasi ke dalam kode mesin agar menjadi dan program yang dapat dieksekusi. Proses kompilasi ini disebut sebagai waktu kompilasi (anggap kompiler sebagai penerjemah)

Program yang dikompilasi dapat dibuka dan dijalankan oleh pengguna. Ketika aplikasi sedang berjalan, itu disebut runtime.

Istilah "runtime" dan "waktu kompilasi" sering digunakan oleh programmer untuk merujuk pada berbagai jenis kesalahan. Kesalahan waktu kompilasi adalah masalah seperti kesalahan sintaks atau referensi file yang hilang yang mencegah program berhasil dikompilasi. Kompiler menghasilkan kesalahan waktu kompilasi dan biasanya menunjukkan baris kode sumber apa yang menyebabkan masalah.

Jika kode sumber program telah dikompilasi menjadi program yang dapat dieksekusi, mungkin masih ada bug yang terjadi saat program sedang berjalan. Contohnya termasuk fitur yang tidak berfungsi, perilaku program yang tidak terduga, atau crash program. Jenis masalah ini disebut kesalahan runtime karena terjadi pada saat runtime.

Referensi

Ahmed KhaShaba
sumber
0

IMHO Anda perlu membaca banyak tautan, sumber daya untuk membuat ide tentang perbedaan antara waktu Runtime vs Kompilasi karena ini adalah subjek yang sangat kompleks. Saya memiliki daftar di bawah ini beberapa gambar / tautan yang saya rekomendasikan.

Terlepas dari apa yang dikatakan di atas, saya ingin menambahkan bahwa kadang-kadang gambar bernilai 1000 kata:

  1. urutan kedua ini: pertama adalah waktu kompilasi dan kemudian Anda menjalankan Sebuah program yang dikompilasi dapat dibuka dan dijalankan oleh pengguna. Ketika aplikasi sedang berjalan, itu disebut runtime: waktu kompilasi dan kemudian runtime1 kompilasi waktu dan kemudian runtime1;

CLR_diag mengkompilasi waktu dan kemudian runtime2  CLR_diag mengkompilasi waktu dan kemudian runtime2

 from Wiki  

https://en.wikipedia.org/wiki/Run_time https://en.wikipedia.org/wiki/Run_time_(program_lifecycle_phase)

Run time, run-time, atau runtime dapat merujuk ke:

Komputasi

Jalankan waktu (fase siklus hidup program) , periode di mana program komputer dieksekusi

Pustaka Runtime , pustaka program yang dirancang untuk mengimplementasikan fungsi yang dibangun ke dalam bahasa pemrograman

Sistem Runtime , perangkat lunak yang dirancang untuk mendukung pelaksanaan program komputer

Eksekusi perangkat lunak, proses melakukan instruksi satu per satu selama fase run time

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini Daftar kompiler https://en.wikipedia.org/wiki/List_of_compilermasukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

  • cari di google dan bandingkan kesalahan runtime vs kesalahan kompilasi:

kesalahan runtime

kompilasi kesalahan ;

  1. Menurut pendapat saya hal yang sangat penting untuk diketahui: 3.1 perbedaan antara build vs compile dan Build Lifecycle https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

3,2 perbedaan antara 3 hal ini: kompilasi vs build vs runtime

https://www.quora.com/What-is-the-difference-between-build-run-and-compile Fernando Padoan, Pengembang yang sedikit penasaran dengan desain bahasa Dijawab 23 Februari Saya akan mundur dalam kaitannya untuk jawaban lain:

menjalankan membuat beberapa biner dapat dieksekusi (atau sebuah skrip, untuk bahasa yang ditafsirkan), dijalankan dengan baik ... sebagai proses baru di komputer; kompilasi adalah proses penguraian program yang ditulis dalam beberapa bahasa tingkat tinggi (lebih tinggi jika dibandingkan dengan kode mesin), memeriksa sintaksnya, semantik, menghubungkan perpustakaan, mungkin melakukan beberapa optimasi, kemudian membuat program biner yang dapat dieksekusi sebagai output. Eksekusi ini dapat dalam bentuk kode mesin, atau semacam kode byte - yaitu, instruksi yang menargetkan beberapa jenis mesin virtual; membangun biasanya melibatkan memeriksa dan menyediakan dependensi, memeriksa kode, mengkompilasi kode ke dalam biner, menjalankan tes otomatis dan mengemas [bin] biner yang dihasilkan dan aset lainnya (gambar, file konfigurasi, perpustakaan, dll.) ke dalam beberapa format spesifik file yang dapat digunakan. Perhatikan bahwa sebagian besar proses bersifat opsional dan beberapa bergantung pada platform target yang Anda bangun. Sebagai contoh, mengemas aplikasi Java untuk Tomcat akan menghasilkan file .war. Membangun sebuah Win32 yang dapat dieksekusi dari kode C ++ hanya bisa menampilkan program .exe, atau bisa juga mengemasnya di dalam installer .msi.

leonidaa
sumber
0

Lihatlah contoh ini:

public class Test {

    public static void main(String[] args) {
        int[] x=new int[-5];//compile time no error
        System.out.println(x.length);
    }}

Kode di atas berhasil dikompilasi, tidak ada kesalahan sintaksis, sangat valid. Tetapi pada saat dijalankan, ia melakukan kesalahan berikut.

Exception in thread "main" java.lang.NegativeArraySizeException
    at Test.main(Test.java:5)

Seperti ketika dalam waktu kompilasi kasus-kasus tertentu telah diperiksa, setelah waktu berjalan itu kasus-kasus tertentu telah diperiksa setelah program memenuhi semua kondisi Anda akan mendapatkan output. Jika tidak, Anda akan mendapatkan waktu kompilasi atau menjalankan kesalahan waktu.

Mathan_kumar
sumber
0

kelas publik RuntimeVsCompileTime {

public static void main(String[] args) {

    //test(new D()); COMPILETIME ERROR
    /**
     * Compiler knows that B is not an instance of A
     */
    test(new B());
}

/**
 * compiler has no hint whether the actual type is A, B or C
 * C c = (C)a; will be checked during runtime
 * @param a
 */
public static void test(A a) {
    C c = (C)a;//RUNTIME ERROR
}

}

class A{

}

class B extends A{

}

class C extends A{

}

class D{

}

sankar banerjee
sumber
0

Anda dapat memahami struktur kompilasi kode dari membaca kode aktual. Struktur run-time tidak jelas kecuali Anda memahami pola yang digunakan.

MagGGG
sumber
-1

Ini bukan pertanyaan yang bagus untuk SO (ini bukan pertanyaan pemrograman khusus), tapi itu bukan pertanyaan yang buruk secara umum.

Jika menurut Anda itu sepele: bagaimana dengan waktu-baca vs waktu-kompilasi, dan kapan perbedaan yang berguna ini dibuat? Bagaimana dengan bahasa di mana kompiler tersedia saat runtime? Guy Steele (bukan boneka, dia) menulis 7 halaman di CLTL2 tentang EVAL-WHEN, yang dapat digunakan oleh programmer CL untuk mengendalikan ini. 2 kalimat hampir tidak cukup untuk definisi , yang itu sendiri jauh dari penjelasan .

Secara umum, ini adalah masalah sulit yang tampaknya dihindari oleh perancang bahasa. Mereka sering hanya mengatakan "inilah kompiler, ia melakukan kompilasi waktu; semuanya setelah itu dijalankan, bersenang-senang". C dirancang agar mudah diimplementasikan, bukan lingkungan yang paling fleksibel untuk komputasi. Saat Anda tidak memiliki kompiler yang tersedia saat runtime, atau kemampuan untuk dengan mudah mengontrol ketika ekspresi dievaluasi, Anda cenderung berakhir dengan peretasan dalam bahasa tersebut untuk penggunaan makro umum yang palsu, atau pengguna datang dengan Pola Desain untuk disimulasikan memiliki konstruksi yang lebih kuat. Bahasa yang sederhana untuk diimplementasikan jelas dapat menjadi tujuan yang bermanfaat, tetapi itu tidak berarti itu adalah akhir dari semua desain bahasa pemrograman. (Saya tidak menggunakan EVAL-KETIKA banyak, tapi saya tidak bisa membayangkan hidup tanpa itu.)

Dan masalah di sekitar waktu kompilasi dan run-time sangat besar dan sebagian besar masih belum dijelajahi. Itu bukan untuk mengatakan SO adalah tempat yang tepat untuk berdiskusi, tetapi saya mendorong orang untuk menjelajahi wilayah ini lebih jauh, terutama mereka yang tidak memiliki praduga tentang apa yang seharusnya. Pertanyaannya tidak sederhana atau konyol, dan setidaknya kita bisa mengarahkan inkuisitor ke arah yang benar.

Sayangnya, saya tidak tahu referensi bagus tentang ini. CLTL2 membicarakannya sedikit, tetapi tidak bagus untuk mempelajarinya.

Ken
sumber
4
Bung apa yang bukan pertanyaan pemrograman yang baik untuk Anda semua relatif. Saya pikir itu adalah pertanyaan yang sangat bagus dan sesuatu yang ingin saya pelajari lebih lanjut. Ya saya tahu "konsep" umum dan apa waktu kompilasi dan runtime tetapi saya ingin tahu kebijakan yang terjadi benar-benar di run time vs waktu kompilasi. Intriquicies itulah yang penting saat Anda memprogram dan perlu diperhatikan. Itu tidak terlalu konkret jadi itu sebabnya dia bertanya. Aku benci ketika orang-orang duduk di sini dan mengatakan pertanyaan umum seperti ini tidak ada gunanya ketika mereka adalah beberapa pertanyaan paling penting untuk dipahami oleh para dev.
PositiveGuy
1
Jika Anda tidak melihat nilai dalam pertanyaan, itu masalah Anda. Jika bersifat umum, ada alasan untuk itu. Hanya karena Anda tidak menyukai pertanyaan umum, bukan berarti dunia berputar di sekitar apa yang menurut Anda berguna. Dia memiliki niat tertentu untuk menanyakan hal ini dan dia ingin sejumlah jawaban untuk lebih memahami dan mendefinisikan keduanya. Mendapatkan?
PositiveGuy