Apa itu "runtime"?

404

Saya telah mendengar tentang hal-hal seperti "C Runtime", "Visual C ++ 2008 Runtime", ".NET Common Language Runtime", dll.

  • Apa itu " runtime " sebenarnya?
  • Terbuat dari apa?
  • Bagaimana cara berinteraksi dengan kode saya? Atau mungkin lebih tepatnya, bagaimana kode saya dikontrol olehnya?

Saat mengkode bahasa assembly di Linux, saya bisa menggunakan instruksi INT untuk melakukan panggilan sistem. Jadi, apakah runtime tidak lebih dari sekelompok fungsi pra-pabrikasi yang membungkus fungsi tingkat rendah menjadi fungsi yang lebih abstrak dan tingkat tinggi? Tapi bukankah ini lebih seperti definisi untuk perpustakaan, bukan untuk runtime?

Apakah "runtime" dan " runtime library " adalah dua hal yang berbeda?

TAMBAH 1

Saat ini, saya berpikir mungkin Runtime memiliki kesamaan dengan yang disebut dengan Virtual Machine , seperti JVM. Inilah kutipan yang mengarah pada pemikiran seperti itu:

Proses kompilasi ini cukup kompleks untuk dipecah menjadi beberapa lapisan abstraksi, dan ini biasanya melibatkan tiga penerjemah: kompiler, implementasi mesin virtual, dan assembler. --- Elemen Sistem Komputasi (Pendahuluan, Jalan Menuju Ke Tanah Perangkat Keras)

ADD 2

Buku Expert C Programming: Deep C Secrets . Bab 6 Struktur Data Runtime adalah referensi yang berguna untuk pertanyaan ini.

smwikipedia
sumber
Runtime tersebut berisi runtime libraryplus beberapa kode kontrol dan dan beberapa keadaan (disediakan oleh OS).
Martin York
43
Pertanyaan bagus, selalu mempertanyakan ini.
contactmatt
Saya tidak akan memanggil fungsi INT. Silakan lihat stackoverflow.com/questions/1817577/… untuk rincian lebih lanjut.
Koray Tugay
2
Saya menemukan pos lain di situs saudara yang mungkin berguna: programmers.stackexchange.com/questions/294346/…
CloudyTrees
Saya selalu menganggapnya seperti kotak pasir untuk infrastruktur tingkat bawah. Anda memiliki Task Manager / Atau proses pada kit Unix, semua pustaka GUI tingkat rendah dll. Semua itu adalah bagian dari runtime. Fondasi di mana hal-hal dibangun.
JGFMK

Jawaban:

262

Runtime menjelaskan perangkat lunak / instruksi yang dijalankan saat program Anda berjalan, terutama instruksi yang tidak Anda tulis secara eksplisit, tetapi diperlukan untuk pelaksanaan kode Anda dengan benar.

Bahasa tingkat rendah seperti C memiliki runtime yang sangat kecil (jika ada). Bahasa yang lebih kompleks seperti Objective-C, yang memungkinkan untuk pengiriman pesan dinamis, memiliki runtime yang jauh lebih luas.

Anda benar bahwa kode runtime adalah kode pustaka, tetapi kode pustaka adalah istilah yang lebih umum, yang menggambarkan kode yang dihasilkan oleh pustaka mana pun . Kode runtime secara khusus kode yang diperlukan untuk mengimplementasikan fitur-fitur bahasa itu sendiri.

e.James
sumber
103

Runtime adalah istilah umum yang merujuk pada pustaka, kerangka kerja, atau platform apa pun yang dijalankan oleh kode Anda.

Runtime C dan C ++ adalah kumpulan fungsi.

.NET runtime berisi juru bahasa perantara , pengumpul sampah, dan banyak lagi.

Slaks
sumber
4
Pustaka standar C ++ tidak hanya berisi fungsi, dan merujuk ke Matt Ball, "runtime" C dan C ++ adalah pustaka runtime, .NET runtime adalah pustaka runtime dan sistem runtime.
smerlin
1
Pertanyaan saya adalah apakah perpustakaan statis juga runtime? Saya kira istilah ini digunakan sebagian besar untuk objek bersama, bukan? pertimbangkan libc di linux. Dan bagaimana dengan platform dan kerangka kerja? mereka juga dipecah menjadi perpustakaan?
Amir Zadeh
3
Tetapi bagaimana kode saya dapat berjalan di " pustaka, kerangka kerja, atau platform " apa pun? Ini harus dijalankan pada CPU atau unit pemrosesan lainnya. Bisakah Anda memberikan level detail tambahan untuk klarifikasi lebih lanjut?
n611x007
Runtime C dan C ++ adalah kumpulan fungsi. -> Fungsi apa?
Koray Tugay
3
@ KorayTugay: Fungsi-fungsi di perpustakaan standar, seperti coutatau printf.
SLaks
80

Sesuai Wikipedia: runtime library / run-time system .

Dalam pemrograman komputer, pustaka runtime adalah pustaka program khusus yang digunakan oleh kompiler, untuk mengimplementasikan fungsi yang dibangun ke dalam bahasa pemrograman, selama runtime (eksekusi) dari program komputer. Ini sering termasuk fungsi untuk input dan output, atau untuk manajemen memori.


Sistem run-time (juga disebut sistem runtime atau hanya runtime) adalah perangkat lunak yang dirancang untuk mendukung pelaksanaan program komputer yang ditulis dalam beberapa bahasa komputer. Sistem run-time berisi implementasi perintah tingkat rendah dasar dan juga dapat menerapkan perintah tingkat lebih tinggi dan dapat mendukung pengecekan tipe, debugging, dan bahkan pembuatan dan optimalisasi kode. Beberapa layanan dari sistem run-time dapat diakses oleh programmer melalui antarmuka pemrograman aplikasi, tetapi layanan lain (seperti penjadwalan tugas dan manajemen sumber daya) mungkin tidak dapat diakses.


Re: edit , "runtime" dan "runtime library" adalah dua nama berbeda untuk hal yang sama

Matt Ball
sumber
69
Wikipedia bukan sumber kutipan yang bagus. Ini adalah lokasi yang baik untuk mulai mencari sumber otoritatif tetapi itu sendiri tidak boleh dianggap berwibawa dan karena itu mengutip dari itu tidak dapat diandalkan. (Sesuai pernyataan Tuan Wales, pembuat Wikipedia).
Martin York
5
Apa yang dimaksud "selama runtime" dalam kutipan pertama (seharusnya tentang perpustakaan runtime) merujuk? Interpretasi [mis] yang mudah dapat berupa yang berikut: "ketika program sedang dieksekusi, kompiler, secara paralel, menggunakan perpustakaan (untuk dirinya sendiri) untuk mengimplementasikan (mis. Menghasilkan kode tambahan saat runtime)" dijanjikan "(oleh spesifikasi bahasa ) fungsi untuk program ". Ini mungkin salah dan / atau mudah bengkok dengan kekurangan sistem run-time.
n611x007
2
Untuk melanjutkan dari tempat Loki pergi, terutama ketika tidak ada artikel yang memberikan referensi (itu bukan kutipan, itu hanya sesuatu yang saya pikir lebih baik saya katakan)
arsaKasra
1
@ MartinYork, tidak hanya ensiklopedia yang tidak resmi, tetapi juga fokus pada dokumentasi dan bukan penjelasan. Itu bisa sangat berbeda.
Roy Prins
59

Lingkungan runtime atau eksekusi adalah bagian dari implementasi bahasa yang mengeksekusi kode dan hadir pada saat run-time ; bagian waktu kompilasi dari implementasi disebut lingkungan terjemahan dalam standar C.

Contoh:

  • Java runtime terdiri dari mesin virtual dan perpustakaan standar

  • runtime C umum terdiri dari loader (yang merupakan bagian dari sistem operasi) dan perpustakaan runtime, yang mengimplementasikan bagian-bagian dari bahasa C yang tidak dibangun ke dalam dieksekusi oleh kompiler; di lingkungan yang dihosting, ini termasuk sebagian besar perpustakaan standar

Christoph
sumber
2
Terima kasih, saya pikir ini adalah jawaban terbaik dalam topik ini.
Koray Tugay
1
Saya menghargai penamaan "lingkungan eksekusi" tetapi saya berpikir bahwa menggunakan hanya "runtime" sebagai alias untuk yang pertama adalah ide yang buruk (yang dari pengamatan saya apa yang dilakukan banyak programmer), "lingkungan runtime" lebih akurat. Saya setuju dengan @ MichałTrybus bahwa "runtime" berarti "waktu ketika program dijalankan".
WloHu
32

Dalam pemahaman saya, runtime adalah persis apa artinya - waktu ketika program dijalankan. Anda dapat mengatakan sesuatu terjadi pada waktu runtime / run atau pada waktu kompilasi.

Saya pikir runtime dan runtime perpustakaan harus (jika mereka tidak) dua hal yang terpisah. "C runtime" sepertinya tidak cocok untuk saya. Saya menyebutnya "C runtime library".

Jawaban untuk pertanyaan Anda yang lain: Saya pikir istilah runtime dapat diperluas untuk menyertakan juga lingkungan dan konteks program saat dijalankan, jadi:

  • itu terdiri dari segala sesuatu yang dapat disebut "lingkungan" selama waktu ketika program dijalankan, misalnya proses lain, keadaan sistem operasi dan perpustakaan yang digunakan, keadaan proses lainnya, dll
  • itu tidak berinteraksi dengan kode Anda dalam pengertian umum, itu hanya mendefinisikan dalam keadaan apa kode Anda berfungsi, apa yang tersedia untuk itu selama eksekusi.

Jawaban ini untuk beberapa orang hanya memperpanjang pendapat saya, bukan fakta atau definisi.

Michał Trybus
sumber
29

Matt Ball menjawabnya dengan benar. Saya akan mengatakannya dengan contoh.

Pertimbangkan menjalankan program yang dikompilasi di kompiler Turbo-Borland C / C ++ (versi 3.1 dari tahun 1991) dan biarkan dijalankan di bawah versi windows 32-bit seperti Win 98/2000 dll.

Ini adalah kompiler 16-bit. Dan Anda akan melihat semua program Anda memiliki pointer 16-bit. Mengapa begitu ketika OS Anda 32bit? Karena kompiler Anda telah mengatur lingkungan eksekusi 16 bit dan OS versi 32-bit mendukungnya.

Apa yang biasa disebut sebagai JRE (Java Runtime Environment) menyediakan program Java dengan semua sumber daya yang mungkin perlu dijalankan.

Sebenarnya, lingkungan runtime adalah produk otak dari ide Mesin Virtual. Mesin virtual mengimplementasikan antarmuka mentah antara perangkat keras dan apa yang mungkin perlu dijalankan oleh suatu program. Lingkungan runtime mengadopsi antarmuka ini dan menyajikannya untuk penggunaan programmer. Pengembang kompiler akan membutuhkan fasilitas ini untuk menyediakan lingkungan eksekusi untuk program-programnya.

penyebab utama
sumber
Mesin virtual mengimplementasikan antarmuka "mentah" antara perangkat keras dan apa yang mungkin perlu dijalankan oleh suatu program. -> Saya tidak yakin tentang ini.
Koray Tugay
7

Jalankan waktu tepat di tempat kode Anda muncul dan Anda dapat melihat banyak hal penting yang dilakukan kode Anda.

Runtime memiliki tanggung jawab untuk mengalokasikan memori, membebaskan memori, menggunakan sub sistem sistem operasi seperti (Layanan File, Layanan IO .. Layanan Jaringan dll.)

Kode Anda akan disebut "BEKERJA DI TEORI" sampai Anda menjalankan kode Anda secara praktis. dan Runtime adalah teman yang membantu dalam mencapai ini.

TalentTuner
sumber
3

runtime dapat menunjukkan fase saat ini dari kehidupan program (runtime / waktu kompilasi / waktu muat / waktu tautan) atau itu bisa berarti pustaka runtime, yang membentuk tindakan tingkat rendah dasar yang berinteraksi dengan lingkungan eksekusi. atau itu bisa berarti sistem runtime, yang sama dengan lingkungan eksekusi.

dalam kasus program C, runtime adalah kode yang mengatur stack, heap, dll. yang merupakan persyaratan yang diharapkan oleh lingkungan C. pada dasarnya mengatur lingkungan yang dijanjikan oleh bahasa. (bisa memiliki komponen runtime library, crt0.lib atau sesuatu seperti itu dalam kasus C)

alvin
sumber
3

Saya menemukan bahwa struktur folder berikut ini membuat konteks yang sangat luas untuk memahami apa runtimeitu:

Runtimes dari Mozilla XulRunner

Anda dapat melihat bahwa ada ' sumber ', ada ' SDK ' atau 'Perangkat Pengembangan Perangkat Lunak' dan kemudian ada Runtime, misalnya. hal-hal yang dijalankan - saat runtime. Isinya seperti:

Isi folder runtime

Zip win32 berisi .exe -s dan .dll -s.

Jadi misalnya. runtime C akan menjadi file seperti ini - pustaka runtime C, .so-s atau .dll -s - yang Anda jalankan saat runtime, dibuat khusus dengan dimasukkannya (atau kontennya 'atau tujuan') dalam definisi Bahasa C (di 'kertas'), kemudian diimplementasikan oleh implementasi C pilihan Anda. Dan kemudian Anda mendapatkan runtime dari implementasi itu, untuk menggunakannya dan membangunnya.

Artinya, dengan sedikit polarisasi, file yang dapat dijalankan yang dibutuhkan oleh pengguna program berbasis C baru Anda. Sebagai pengembang program berbasis C, Anda juga demikian, tetapi Anda juga memerlukan kompiler C dan header pustaka C; para pengguna tidak membutuhkannya.

n611x007
sumber
1
satu lagi untuk mengontekstualisasikan runtime, adalah artikel ini yang tidak terkait mitos bagian python mitos 6, di mana Anda dapat melihat perbedaan antara runtime dan bahasa pemrograman , dalam paragraf pertama mitos 6.
n611x007
3

Runtime pada dasarnya berarti ketika program berinteraksi dengan perangkat keras dan sistem operasi mesin. C tidak memiliki runtime sendiri tetapi sebaliknya, ia meminta runtime dari sistem operasi (yang pada dasarnya merupakan bagian dari ram) untuk mengeksekusi sendiri.

Shrey Mittal
sumber
1

Jika pemahaman saya dari membaca jawaban di atas adalah benar, Runtime pada dasarnya adalah 'proses latar belakang' seperti pengumpulan sampah, alokasi memori, pada dasarnya setiap proses yang dipanggil secara tidak langsung, oleh perpustakaan / kerangka kerja dimana kode Anda ditulis, dan khususnya yang proses yang terjadi setelah kompilasi, saat aplikasi sedang berjalan.

modularmoon
sumber
-1

Bagian-bagian dari dokumentasi MSDN ini menangani sebagian besar pertanyaan Anda: http://msdn.microsoft.com/en-us/library/8bs2ecf4(VS.71).aspx

Saya harap ini membantu.

Terima kasih, Damian

Damian Schenkelman
sumber
3
Sebenarnya tidak; dia tidak hanya bertanya tentang .Net.
SLaks
@ Mat: Benar lagi. Namun 2/3 dari runtime-nya didukung oleh .Net, 1/2 dari tag-nya berhubungan dengan .Net dan saya hanya berpikir tautannya akan berguna.
Damian Schenkelman
Saya akan mengucapkannya "3/4 bahasa mendukung .NET". .NET tidak melakukan banyak dukungan, itu dirancang untuk menjaga celah kuat antara unix dan windows di tingkat middleware.
Matt Joiner
@MattJoiner - Itu mungkin benar pada tahun 2010, tetapi hari ini benar-benar tidak benar dengan .NET Standard dan implementasi open-source seperti .NET Core, dll.
rory.ap
-2

Run time adalah contoh di mana Anda tidak tahu tentang jenis objek apa yang dibuat selama pelaksanaannya, pembuatan objek didasarkan pada kondisi tertentu atau beberapa pekerjaan perhitungan. Sebaliknya, waktu kompilasi adalah contoh di mana objek yang diperlukan ditentukan oleh Anda sebelum eksekusi.

chethan
sumber
-3

Runtime agak berlawanan dengan waktu desain dan waktu kompilasi / waktu tautan. Secara historis itu berasal dari lingkungan mainframe lambat di mana waktu mesin mahal.


sumber
1
Ini tidak menjawab pertanyaan & semakin memperumitnya.
cglotr