Apa itu kompiler batch?

28

Saya memiliki kutipan berikut dari kursus kompiler saya (dalam konteks pewarnaan grafik):

Karena lambat, pewarnaan grafik cenderung digunakan dalam kompiler batch, sedangkan pemindaian linier cenderung digunakan dalam kompiler JIT.

Saya tidak dapat menemukan definisi online yang jelas. Jadi, apa yang membuat kompiler menjadi kompiler batch?

Rodrigo
sumber
Pertanyaan itu di luar topik di sini. softwareengineering.stackexchange.com adalah tempat yang lebih baik untuk bertanya
Basile Starynkevitch

Jawaban:

42

Kompiler JIT (Just-In-Time) mengkompilasi kode pada saat run-time, yaitu ketika program sedang berjalan. Oleh karena itu biaya kompilasi adalah bagian dari waktu pelaksanaan program, dan karenanya harus diminimalkan.

Kebalikan dari ini adalah kompiler di masa depan (AOT) yang pada dasarnya identik dengan "kompiler batch". Ini mengubah kode sumber menjadi kode mesin dan kemudian hanya kode mesin didistribusikan. Oleh karena itu, kompiler dapat menjadi sangat lambat karena tidak memengaruhi waktu eksekusi program yang dihasilkan.

Saat ini, ketika orang mengatakan "kompiler" mereka biasanya berarti kompiler AOT. Memang, istilah "kompiler AOT" hanya benar-benar mulai menjadi populer relatif baru-baru ini ketika orang mulai membuat kompiler AOT untuk bahasa yang dikompilasi JIT, khususnya JavaScript. Banyak dari bahasa ini, misalnya C #, kompilasi ke bahasa perantara untuk VM yang kemudian dikompilasi dengan JIT ke kode mesin saat run-time. Istilah "kompiler AOT" memiliki konotasi bahwa kode sumber akan dikompilasi langsung ke kode mesin, jadi tidak ada bentuk kompilasi JIT yang diperlukan saat run-time.

"Batch compiler" adalah sedikit istilah kuno pada saat ini. Kontras nyata dengan kompiler batch ketika istilah itu populer adalah kompilator tambahan . Kompilasi tambahan sering dikaitkan dengan bahasa seperti Lisp di mana Anda memiliki REPL dan Anda bisa secara interaktif meminta implementasi bahasa untuk mengkompilasi fungsi tertentu. Jika suatu fungsi dieksekusi yang kompilasinya tidak diminta sebelumnya, biasanya akan ditafsirkan. Sebuah kompiler batch, sebaliknya, mengkompilasi semua fungsi sekaligus, yaitu dalam sebuah batch.

Derek Elkins
sumber
1
Dan di masa lalu compliers di mana tidak berjalan secara interaktif sama sekali Anda harus mengirimkan pekerjaan ke antrian batch untuk mengkompilasi program Anda
Neuromancer
Dan beberapa implementasi bahasa (awk, cpython, dan sebagainya GNU) mengkompilasi seluruh input ke representasi internal sebagai langkah pertama saat run-time, yang menggabungkan beberapa properti yang dijelaskan di sini.
dmckee
1
@ dmckee kebanyakan jika tidak semua implementasi bahasa, sebenarnya
user253751
Ambiguitas lain: Alat yang disebut kompiler batch ada untuk sistem operasi MSDOS, file batch yang dikompilasi ini menjadi file yang dapat dieksekusi ....
rackandboneman
Tentu saja selalu ada representasi internal. Tapi kadang-kadang itu adalah bahasa sendiri, seperti dalam Gcc, Llvm atau .Net. Ini disebabkan oleh arsitektur front-end / middle / back-end, front-end mengubah bahasa (C, C ++, Java, fortran ..) menjadi bahasa tingkat rendah yang umum, kemudian algoritma optimasi dijalankan, dan akhirnya kode yang dioptimalkan ini dalam bahasa umum diubah oleh back-end menjadi bytecode atau assembler, executable atau static atau dynamic library.
Reun
11

Artinya tersirat dalam kutipan yang Anda berikan! Itu berasal dari pemrosesan batch istilah komputasi yang digunakan ketika tugas tidak dilakukan secara real-time, tetapi dijadwalkan untuk dieksekusi kemudian oleh sistem operasi ketika beban (sering untuk kegiatan real-time) kurang.

Kumpulan kompiler adalah kompilasi yang melakukan kompilasi ketika pengguna tidak menunggu hasil kompilasi. Ini adalah salah satu yang akan kita katakan, menggunakan terminologi yang lebih modern, dilakukan di latar belakang.

Ini adalah kebalikan dari JIT (Just-In-Time) yang dilakukan "langsung" pada waktu yang tepat tanpa kemewahan menghabiskan waktu ekstra untuk melakukan pemrosesan lebih teliti.

Kecepatan kompilasi batch yang lebih lambat dapat diilustrasikan dengan ini:

masukkan deskripsi gambar di sini

Sumber: https://xkcd.com/303/

Atau bahkan ini:

masukkan deskripsi gambar di sini

Sumber: http://dilbert.com/strip/2013-06-22

Brian Tompsett - 汤 莱恩
sumber