Derleyiciler ve tercümanlar hata yapabilir mi ve biz (kullanıcılar olarak) onlarla başa çıkmak için ne yapabiliriz? [kapalı]


28

Bir derleyicinin çalışması temel olarak kaynak kodunu makine seviyesi koduna çeviriyorsa, derleyicide herhangi bir aksaklık olabilir, yani hatalı bir "çeviri?"

Aynısı bir tercüman için de geçerlidir: bazen gerekli içeriği çıkartamaz mı?

Derleyicilerde / tercümanlarda herhangi bir hata duymadım ama var mı?


6
gelişiminde kesinlikle var olacaklar, sadece herhangi bir açık kaynaklı derleyicideki bugtracker'a bakacaklar
ratchet freak

7
Derleyicilerde / tercümanlarda herhangi bir hata duymadım ama var mı? Hatalar için e-posta listesini gcc derleyicide buldum
FrustratedWithFormsDesigner

47
Bu gerçekten iyi bir soru değil, sadece sağduyu olan bir şey soruyor.

12
Şu ana kadar yapılan yorum ve cevapların hiçbiri bir derleyici hatasıyla karşılaşma olasılığını ele almamaktadır. Önce kendi kodunuzdaki hataları ekarte ettiğinizden emin olun.
Dan Pichelman,

6
Kısa cevap: kesinlikle. IDE'ler ve derleyiciler genellikle dış dünyayı görmeden önce hayatlarının bir inçinde kullanılırken, bir geliştiricinin biraz fazla akıllı olacağı bir yerde her zaman bir köşe durumu vardır.
KeithS

Yanıtlar:


51

Evet

Onları, aktif olarak geliştirilen ve nispeten olgun olanlara göre daha fazla dilde bulma eğilimindesiniz (ve bu nedenle sık sık çok fazla değişiklik görmüyorsunuz). Bu muhtemelen çoğu dilin istikrarın çeşitli “aşamalarında” yayınlanmasının nedeni budur. Gecelik bir yapının, serbest bırakılmış ve aktif olarak kullanılan bir sürüme göre daha az kararlı olması muhtemel olan serbest bırakma adayından daha az kararlı olması muhtemeldir.

Neyse ki, bu dillerin çoğunun (özellikle açık kaynaklı olanlar) rapor gönderebileceğiniz hata izleme sistemi olacaktır.

Kendi tecrübelerime göre, Windows'ta Scala'da oldukça belirsiz fakat ciddi bir hatayla karşılaştım . Bulgularımı hata izleyiciye gönderdim ve sorun oldukça hızlı bir şekilde düzeltildi. Bu durumda, dil geliştiricileri, hata günlüğü çıktısında yararlı bir not içerecek kadar akıllıydı; bu, benim karşılaştığım şeyin aslında bir derleyici hatası olduğunu ve raporun nereye gönderileceğini söyledi.


Umarım sakıncası yoktur; İlgili olabileceğini düşündüğüm yeni bir paragraf ekledim (onay bekliyor). Bir derleyici sadece hatalar değil, zararlı kodlar da içerebilir.
Andy,

@Andi moderatörlerden biri gibi yorum veya ayrı bir cevap olması gereken bir şey olarak reddetti.
KChaloux

Sadece "evet" değil, "cehennem evet!" :-)
Hellion

C hem olgun hem de aktif olarak gelişmiştir. Öyleyse C ++. Java da öyle. etc ..
djechlin 10:14

100

Layman'ın sözleriyle:

Tüm programlarda hata olabilir.

Derleyiciler programdır.

Ergo, derleyicilerde hatalar olabilir.


55
Daha endişe verici: Hata ayıklayıcılar programdır. Bu nedenle, hata ayıklayıcıların hataları var.
Daniel Gratzer

19
@jozefg: Peki hata ayıklayıcısını nasıl hata ayıklarsınız? İzleyicileri kim izliyor?
SinirliWithFormsDesigner

16
@FrustratedWithFormsDesigner İzleyici gözlemcileri, ahh.
Jimmy Hoffa,

9
@JoelFan "Yapabileceğim" yazdığımdan beri, bu istisna ele alındı. Eğer "sahip" derseniz, sadece önemsiz olmayan programlara atıfta bulunduğunuzu belirtmeniz gerekir. "Olabilir" diyerek mecbur değilsin.
Tulains Córdova

8
"Merhaba dünya" programları, eğer derlenmiş bir derleyiciye uyuyorsa, hatalara sahip olabilir.
wtsang02



4

Elbette, çünkü derleyiciler yazılımdır.

2005 yılında, büyük bir şirket için yazdığım çok kritik bir yazılım parçasında bir kod parçasında hata oluştu. Firmaya kelimenin tam anlamıyla düzeltilmesi milyonlarca dolara mal olduğu için elbette büyük bir soruşturma başlattılar.

Neyse ki (benim açımdan), sorun Delphi'de bir derleyici sorunu olarak ortaya çıktı. Sonunda deneme bloğunda, bir işlevin dönüş değeri imha edildi ve arayan kişiye kesinlikle rastgele sonuçlar verdi. Bu belgelendi ve Borland tarafından kabul edildi.

.NET, özellikle ilk uygulamalarında, kelimenin tam anlamıyla, yüzlerce farklı bellek sızıntısı olduğu bilinmektedir.

Hatasız yazılım diye bir şeyin olmadığını iddia edeceğim. Derleyiciler istisna değildir. Yine de, çoğu iş yazılımından daha kapsamlı bir şekilde test edildiler ve akıllı, eleştirel, çekişmeli insanlar tarafından tüketiliyorlar, bu nedenle iz kayıtları aslında oldukça iyi.


"Resmi olarak doğrulanmış" bir yazılım var. Çalışması matematiksel olarak kanıtlanmıştır. Ara sıra resmen doğrulanmış kodun bile hataları vardır. IIRC Java'nın quicksort uygulaması resmen doğrulandı, ancak bu taşmaları hesaba katmadı.
David Plumpton

1
Yazılım neydi? Hadi :)
Rocklan

2

Yalnızca hatalar değil, kasıtlı kötü amaçlı yazılımlar da.

Brian Kernighan tarafından orijinal Unix C derleyicisine uygulanan "giriş" truva atı bunlardan en bilinenleri; http://cm.bell-labs.com/who/ken/trust.html makalesinde bu konuda bazı bilgiler bulunmaktadır.


1
Bunun gerçekten uygulandığı açık mı?
Keith Thompson,

Bu oldukça ilginç bir konudur, ancak bu soru ile ilgili değildir.

@delnan Ben katılmıyorum; Sorunun merkezinde "derleyicime ne kadar güvenebilirim?" gibi görünüyor.
Andy,

1

Evet, tabii ki herhangi bir yazılım derleyicisinin hataları gibi, örneğin gcc hata listesi burada


0

Evet.

Ayrıca, yalnızca derleyicilerle değil, aynı zamanda Yorumlayıcılar / hata ayıklayıcılar ve herhangi bir 3. parti yazılım aracıyla da.

Şu anda bazı 3. taraf yazılımları kullanıyoruz ve sorunun bir kısmını yaşıyoruz. Bazen bir hatayı bulup bildirdikleri için bize teşekkür ederler. :)

Bazılarında da bazı hafıza sızıntıları vardır, bu da kazaya neden olur. Buradaki önemli soru, 3. parti aracının mı, yoksa derleyicinin başvurunuzun doğru çalışması için hataları olup olmadığını nasıl belirleyebilir?


Önemli sorunuz daha sonra Halting problemine
wtsang02

0

Derleyici, bir dilde (kaynak dil) yazılmış bir programı okuyan ve başka bir dilde (hedef dil), çoğunlukla makine dilinde başka bir eşdeğer programa çeviren bir programdır.

Kaynak dil kodunuzun satır satır tarandığı farklı derleyici aşamaları vardır. Kaynak dil kodunda taranan tüm Anahtar Kelimeleri izleyen bir sembol tablosu vardır.

Faz 1: Lexical Analyzer - kaynak programdaki tüm karakterleri okur ve belirteçlerin mantıksal olarak ayrılmasını sağlar (int, char, float, eğer öyleyse, o zaman, vb.)

Faz 2: Sözdizimi Analizörü - belirteçlerin akışının yapısını analiz eder. Sonek / önek vb. İçeren ifadelerin hiyerarşik ayrıştırılması (a = b + c * d)

Faz 3: Semantik Analizör - Jetonların tip kontrolü (gerçek sayı, float vb.) Ve operatör önceliği vb. Birçok şey.

Faz 4: Ara Kod Üreticisi - a = b + c * de (temp1 = c * d, temp2 = temp1 + b, temp3 = temp2-e)

Faz 5: Kod Optimizasyonu - Çeşitli Analizler (kontrol akışı, veri akışı, dönüşümler)
Ortadan Kaldıran : Artıklık kodu, Sabit yayılım, Kısmi ölü kod, ortak alt ifade, Döngü değişmez kodu

Aşama 6: Kod Üretimi - Kayıtlara değerler koyarak hedef kodun (çoğunlukla Assembly Dili) oluşturulması

Tüm bu aşamalar iyi yazılmış programlardan başka bir şey değildir ve bunun içinde N kusur olabilir.


-1

Tabii ki, derleyiciler sadece programlardır ve yazarları da salaktır :). Dil belirtiminde bile bir hata olabilir. Örnek: c # + foreach + lambda .

Veya Python'da tercüman hata: Kötü ast çöker tercüman derleme .

Eğer derleyici / yorumlayıcıda hatalara bakmak istiyorsanız -> php'ye bakın. Tamsayı taşması ile ünlü bir hata var. İlk düzeltme başladı if (size > INT_MAX) return NULL;. Hikayenin devamı .


Derleyici yazarları salak değildir. Derleyiciler oldukça karmaşık olduğu için alana girme engeli de oldukça yüksektir. Bu yüzden, onları yazan insanların ortalama erkeklerin yaptığı gibi hata yapmamalarını bekleyebiliriz.
jszpilewski

Foreach / lambda bir hata değildir, lambdalar eklenmeden önce verilen özel ve vicdan tasarım kararına bağlıdır.
Andy,

@Andy, bildiğim gibi, hiç kimse bu kararın hangi sorunlara neden olacağını bilmiyor. Neden hata değil?
Viktor Lova

@ jszpilewski bu metinden sonra bir gülümseme görüyor musunuz?
Viktor Lova

1
OP'yi tekrar okumanızı öneriyorum, çünkü sorusu spesifikasyonların hataları olup olmadığıyla ilgili değil, COMPILERS'ın hataları olup olmadığıyla ilgili. C # derleyicisi belirtimle eşleştiğinden, derleyicide hata yoktu. Ayrıca kendi Wikipedia alıntılarınızı tekrar okumanızı tavsiye ederim "Bir yazılım hatası bir bilgisayar programında bir hata, kusur, arıza veya hatadır"
Andy,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.