Bisakah kompiler dan interpreter memiliki bug, dan apa yang dapat kita (sebagai pengguna) lakukan untuk mengatasinya? [Tutup]

28

Jika pekerjaan kompiler pada dasarnya menerjemahkan kode sumber ke dalam kode level mesin, dapatkah ada kesalahan dalam kompiler, yaitu "terjemahan yang salah?"

Hal yang sama berlaku untuk penerjemah: bisakah ia gagal menghasilkan konten yang dibutuhkan kadang-kadang?

Saya belum pernah mendengar ada bug di kompiler / juru bahasa, tetapi apakah mereka ada?

Raja Penyihir
sumber
6
dalam pengembangan mereka pasti akan ada hanya melihat bugtracker pada kompiler open source apa pun
ratchet freak
7
Saya belum pernah mendengar ada bug di kompiler / juru bahasa, tetapi apakah mereka ada? Saya menemukan milis untuk bug di kompiler gcc: gcc.gnu.org/ml/gcc-bugs
FrustratedWithFormsDesigner
47
Ini bukan pertanyaan yang sangat bagus, itu hanya menanyakan sesuatu yang masuk akal.
12
Tidak ada komentar atau jawaban sejauh ini yang membahas kemungkinan menemukan bug kompilator. Pastikan untuk menyingkirkan kesalahan dalam kode Anda sendiri terlebih dahulu.
Dan Pichelman
6
Jawaban singkat: pasti. Sementara IDE dan kompiler biasanya dilakukan dalam satu inci dari kehidupan mereka sebelum mereka melihat dunia luar, selalu ada sudut kasus di suatu tempat dimana pengembang menjadi sedikit terlalu pintar akan menemukan.
KeithS

Jawaban:

51

iya nih

Anda cenderung menemukan mereka lebih banyak dalam bahasa yang secara aktif dikembangkan daripada dalam bahasa yang relatif matang (dan karenanya tidak sering melihat banyak perubahan). Ini mungkin mengapa sebagian besar bahasa dirilis pada berbagai 'tahap' stabilitas. Bangunan malam jauh lebih stabil daripada kandidat rilis , yang dengan sendirinya cenderung lebih stabil daripada versi yang dirilis dan digunakan secara aktif.

Untungnya sebagian besar bahasa ini (terutama yang bersifat open source) akan memiliki sistem pelacakan bug publik yang dapat Anda kirimi laporan.

Dalam pengalaman saya sendiri, saya menemukan bug yang cukup tidak jelas tapi parah di Scala pada Windows . Saya mengirimkan temuan saya ke pelacak bug dan masalah ini diperbaiki dengan cukup cepat. Dalam hal itu, pengembang bahasa cukup pintar untuk memasukkan catatan bermanfaat dalam output log kesalahan, menunjukkan bahwa apa yang saya temui sebenarnya adalah kesalahan kompiler, dan mengatakan ke mana harus menyerahkan laporan.

KChaloux
sumber
Semoga Anda tidak keberatan; Saya menambahkan paragraf baru (menunggu persetujuan) yang saya pikir mungkin relevan. Kompiler tidak hanya berisi bug, tetapi juga mengandung kode jahat.
Andy
@Andy sepertinya salah satu moderator menolaknya sebagai sesuatu yang harus menjadi komentar atau jawaban terpisah.
KChaloux
Bukan hanya "ya", tapi "sial ya!" :-)
Hellion
C matang dan aktif dikembangkan. Begitu juga C ++. Begitu juga Jawa. dll ..
Djechlin
100

Dalam kata-kata awam:

Semua program dapat memiliki bug.

Kompiler adalah program.

Ergo, kompiler dapat memiliki bug.

Tulains Córdova
sumber
55
Lebih mengkhawatirkan: Debugger adalah program. Oleh karena itu, pengadu memiliki bug.
Daniel Gratzer
19
@ jozefg: Jadi bagaimana Anda men-debug debugger? Siapa yang menonton para pengamat?
FrustratedWithFormsDesigner
16
@FrustratedWithFormsDesigner Pengamat pengamat, ya.
Jimmy Hoffa
9
@ JoelFan Karena saya menulis "bisa", pengecualian itu tercakup. Jika Anda mengatakan "memiliki", Anda harus menentukan bahwa Anda hanya mengacu pada program non-sepele. Dengan mengatakan "dapat memiliki", Anda tidak harus melakukannya.
Tulains Córdova
8
Program "Hello world" dapat memiliki bug jika memenuhi kompiler yang disadap.
wtsang02
22

Ada bug bahkan di perangkat keras; contoh yang terkenal adalah bug Pentium FDIV . Tanpa ragu ada kemungkinan bahwa kompiler mengandung bug.

m3th0dman
sumber
2
+1 Ini membawa saya ke kisah awal monyet .
luser droog
4

Tentu saja, karena kompiler adalah perangkat lunak.

Pada tahun 2005, saya mengalami kegagalan kode pada perangkat lunak yang sangat penting yang saya tulis untuk perusahaan besar. Karena biaya perusahaan jutaan dolar untuk memperbaiki, mereka tentu saja meluncurkan penyelidikan besar-besaran.

Untungnya (dari sudut pandang saya), masalah ini ternyata menjadi masalah penyusun di Delphi. Pada blok coba akhirnya, nilai kembali fungsi dihancurkan, dan menghasilkan hasil yang benar-benar acak kembali ke pemanggil. Ini didokumentasikan, dan diakui oleh Borland.

.NET dikenal memiliki ratusan kebocoran memori yang berbeda, terutama dalam implementasi awalnya.

Saya berpendapat bahwa tidak ada perangkat lunak tanpa bug. Kompiler tidak terkecuali. Mereka, bagaimanapun, diuji lebih teliti daripada kebanyakan perangkat lunak bisnis, dan dikonsumsi oleh orang-orang yang cerdas, kritis, dan suka bertengkar, sehingga rekam jejak mereka sebenarnya, secara keseluruhan, cukup bagus.

Singkat
sumber
Ada perangkat lunak "yang diverifikasi secara formal". Secara matematis terbukti bekerja. Kadang-kadang bahkan kode yang diverifikasi secara formal memiliki bug. Implementasi quickRort Java IIRC secara resmi diverifikasi, tetapi itu tidak termasuk dalam luapan.
David Plumpton
1
Apa perangkat lunaknya? Ayo :)
Rocklan
2

Tidak hanya bug, tetapi juga malware yang disengaja.

Trojan "login" yang diterapkan oleh Brian Kernighan ke kompiler Unix C asli adalah yang paling terkenal; artikel http://cm.bell-labs.com/who/ken/trust.html memiliki latar belakang tentang hal ini.

Juha Laiho
sumber
1
Apakah jelas itu benar-benar dilaksanakan?
Keith Thompson
Ini adalah topik yang cukup menarik, tetapi sama sekali tidak terkait dengan pertanyaan ini.
@delnan saya tidak setuju; inti pertanyaannya adalah "berapa banyak yang bisa saya percayai pada kompiler saya?"
Andy
1

Ya tentu saja seperti kompiler perangkat lunak yang memiliki bug, misalnya daftar bug gcc ada di sini

JohnB
sumber
0

Iya nih.

Juga, tidak hanya dengan kompiler, tetapi juga dengan Penerjemah / debugger, dan alat perangkat lunak pihak ke-3.

Kami saat ini menggunakan beberapa perangkat lunak pihak ke-3, dan telah mengalami beberapa masalah. Terkadang mereka berterima kasih kepada kami, karena menemukan dan melaporkan bug. :)

Beberapa dari mereka juga memiliki kebocoran memori, yang menyebabkan crash. Pertanyaan penting di sini adalah, bagaimana menentukan apakah alat pihak ke-3, atau kompiler memiliki bug agar aplikasi Anda berfungsi dengan benar?

JNL
sumber
Pertanyaan penting Anda kemudian akan mengarah kembali ke masalah Hentikan
wtsang02
0

Compiler adalah program yang membaca program yang ditulis dalam satu bahasa (bahasa sumber) dan menerjemahkannya ke dalam program lain yang setara dalam bahasa lain (bahasa target), sebagian besar bahasa mesin.

Ada beberapa fase kompiler yang digunakan untuk memindai kode sumber Anda. Ada tabel simbol yang melacak semua kata kunci yang dipindai dalam kode bahasa sumber.

Fase 1: Lexical Analyzer - membaca semua karakter dalam program sumber dan membentuk pemisahan token yang logis (int, char, float, if-else, for, while dll)

Fase 2: Sintaksis Analyzer - menganalisis struktur aliran token. Penguraian hierarkis ekspresi yang mencakup postfix / awalan dll. (A = b + c * d)

Fase 3: Semantic Analyzer - Jenis pengecekan token (bilangan bulat ke nyata, float dll.) Dan banyak hal seperti operator diutamakan dll.

Fase 4: Penghasil Kode Menengah - a = b + c * de (temp1 = c * d, temp2 = temp1 + b, temp3 = temp2-e)

Fase 5: Optimasi Kode - Berbagai Analisis (aliran kontrol, aliran data, transformasi)
yang mengeliminasi: kode Redundansi, propagasi Konstanta, kode mati sebagian, subekspresi umum, kode invarian lingkaran

Fase 6: Pembuatan Kode - Pembuatan kode target (Sebagian Besar Bahasa Perakitan) menempatkan nilai dalam Register

Semua fase ini hanyalah program yang ditulis dengan baik dan mungkin ada sejumlah N kekurangan dalam hal itu ..

Abhishek Kulkarni
sumber
-1

Tentu saja, kompiler hanyalah program dan penulisnya juga idiot :). Bahkan spesifikasi bahasa dapat memiliki bug. Contoh: c # + foreach + lambda .

Atau dengan Python, bug dalam interpreter: Kompilasi iblis dan crash interpreter .

Nah, jika Anda ingin melihat bug di compiler / interpeter -> lihat di php. Ada bug yang terkenal dengan integer overflow. Perbaikan pertama dimulai dari if (size > INT_MAX) return NULL;. Kelanjutan cerita .

Viktor Lova
sumber
Penulis kompiler bukan idiot. Karena kompiler cukup rumit, penghalang untuk memasuki lapangan juga jauh lebih tinggi. Jadi kita bisa berharap orang-orang yang menulisnya tidak melakukan kesalahan seperti orang biasa.
jszpilewski
Foreach / lambda bukanlah bug, ini tergantung pada keputusan desain yang spesifik dan hati nurani yang dibuat sebelum lambda ditambahkan.
Andy
@Andy, seperti yang saya tahu, tidak ada yang tahu masalah apa yang akan ditimbulkan keputusan ini. Kenapa tidak bug?
Viktor Lova
@ jszpilewski apakah Anda melihat senyum setelah teks itu?
Viktor Lova
1
Saya sarankan Anda membaca kembali OP, karena pertanyaannya bukan tentang apakah spesifikasi dapat memiliki bug, ini tentang apakah KOMPILER dapat memiliki bug. Karena kompiler C # cocok dengan spesifikasi, kompiler tidak memiliki bug. Saya juga menyarankan Anda membaca kembali kutipan Wikipedia Anda sendiri "Bug perangkat lunak adalah kesalahan, cacat, kegagalan, atau kesalahan dalam program komputer"
Andy