Çalışma zamanı ve Derleme zamanı


Yanıtlar:


479

Derleme zamanı ve çalışma zamanı arasındaki fark, sivri başlı kuramcıların faz ayrımı olarak adlandırdığı şeye bir örnektir . Özellikle programlama dillerinde fazla bilgiye sahip olmayan insanlar için öğrenmesi en zor kavramlardan biridir. Bu soruna yaklaşmak için sormak yararlı buluyorum

  1. Program hangi değişmezleri tatmin ediyor?
  2. Bu aşamada neler ters gidebilir?
  3. Aşama başarılı olursa, son koşullar nelerdir (ne biliyoruz)?
  4. Varsa giriş ve çıkışlar nelerdir?

Derleme zamanı

  1. Programın herhangi bir değişmezi karşılaması gerekmez. Aslında, iyi biçimlendirilmiş bir program olması gerekmez. Bu HTML derleyiciye besleyebilir ve barf izleyebilirsiniz ...
  2. Derleme zamanında ne yanlış gidebilir:
    • Sözdizimi hataları
    • Daktilo kontrol hataları
    • (Nadiren) derleyici çöküyor
  3. Derleyici başarılı olursa ne biliyoruz?
    • Program iyi oluşturuldu --- hangi dilde anlamlı bir program.
    • Programı çalıştırmaya başlamak mümkündür. (Program hemen başarısız olabilir, ancak en azından deneyebiliriz.)
  4. Girdiler ve çıktılar nelerdir?
    • Girdi, derlenmekte olan programın yanı sıra, derlenmek için içe aktarılması gereken başlık dosyaları, arabirimler, kütüphaneler veya diğer voodoo'dur .
    • Çıktı umarım montaj kodu, taşınabilir nesne kodu veya yürütülebilir bir programdır. Veya bir şeyler ters giderse, çıktı bir grup hata mesajıdır.

Çalışma süresi

  1. Programın değişmezleri hakkında hiçbir şey bilmiyoruz --- programcının koyduğu her şeydir. Çalışma zamanı değişmezleri yalnızca derleyici tarafından nadiren uygulanır; programcının yardımına ihtiyacı var.
  2. Yanlış giden şey çalışma zamanı hatalarıdır :

    • Sıfıra bölüm
    • Boş bir işaretçiyi silme
    • Bellek yetersiz

    Ayrıca, programın kendisi tarafından algılanan hatalar olabilir:

    • Orada olmayan bir dosyayı açmaya çalışmak
    • Bir web sayfası bulmaya çalışmak ve iddia edilen bir URL'nin iyi oluşturulmadığını keşfetmek
  3. Çalışma zamanı başarılı olursa, program çökmeden bitirir (veya devam eder).
  4. Girişler ve çıkışlar tamamen programlayıcıya bağlıdır. Dosyalar, ekrandaki pencereler, ağ paketleri, yazıcıya gönderilen işler, adını siz koyun. Program füzeleri başlatırsa, bu bir çıktıdır ve sadece çalışma zamanında olur :-)

13
Neleri kapsadığına dair çok iyi bir cevap (+1) ancak derleme zamanı ile çalışma zamanı arasındaki meta programlama özelliklerine bile dokunmuyorsunuz ve IMHO en ilginç kısım. Bu cevap kabul edildiğinde, OP'nin aradığı şeyin dışında olabileceğini kabul edeceğim.
BCS

4
Güzel, eğer derslerim sırasında biri bana bunu sorarsa, ben senin anwser'ını kullanacağım :-)
e-satis

12
Bu gerçekten güzel bir cevap. Oldukça açık ve anlaşılır. Google'da bu kadar net cevapları bulmak kolay değil.
Tarık

7
Bir süre programlamış olsanız bile, elde etmek hala kolay değil ... sadece yeni başlayanlar değil. OP tarafından iyi soru.
PositiveGuy

11
"Programın herhangi bir değişmezi karşılaması gerekmez. Aslında, iyi biçimlendirilmiş bir program olması gerekmez. Bu HTML'yi derleyiciye besleyebilir ve barf izleyebilirsin ..." Ne dediğin hakkında hiçbir fikrim yok buraya. Bunu tüm bu teknik çöplerle dolu olmayan basit terimlerle açıklayabilir misiniz?
PositiveGuy

175

Bunu hatalar ve ne zaman yakalanabilecekleri açısından düşünüyorum.

Derleme zamanı:

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

Bir dize değerine int türünde bir değişken atanamaz, bu nedenle derleyici derleme zamanında bu kodda bir sorun olduğunu bilir

Çalışma süresi:

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

Burada sonuç, ReadLine () tarafından döndürülen dizeye bağlıdır. Bazı değerler bir int'e ayrıştırılabilir, diğerleri olamaz. Bu sadece çalışma zamanında belirlenebilir


59
Şimdi bu hepimizin anlayabileceği bir şey. Burada genel çöp teknik kelimesi yok. Güzel.
PositiveGuy

İPhone Uygulaması için: Kod geliştirici tarafından bir .appuzantıda ilk kez derlendiğinde derleme zamanı mı ? veya kullanıcı uygulamayı her başlattığında lansman sonrasında olur ?
Bal

1
@Honey ilk kez geliştirici tarafından bir .app olarak derlenir
maytham-ɯɐɥʇʎɐɯ

2
Bu, kavramsal olarak derleme ve çalışma süresi arasındaki farkı kapsayan harika bir sonuçtur. Seçilen akademik, profesyonel yanıtı da takdir ediyorum, ama bu açık ve özlü. Bu cevabı okuduktan sonra geri dönüp seçilen cevabı okuyabilirim ve bu daha mantıklı. Thanks
mojave

72

Derleme zamanı: geliştirici olarak kodunuzu derlediğiniz zaman dilimi.

Çalışma zamanı: Bir kullanıcının yazılımınızı çalıştırdığı zaman dilimi.

Daha net bir tanımlamaya ihtiyacınız var mı?


12
@BCS: OP, ayrıştırmaya hiçbir zaman ihtiyaç duyulmaması için yorumlanmış veya bayt-derleme-sonra-bir-çalıştır-çalıştır-dilini kullanarak programlamaya son derece basit bir giriş yapmış olabilir. Soru naif, ama aptal değil .
dmckee --- eski moderatör kedi yavrusu

@dmckee: Bence bu cevap orijinal sorudan daha fazla bilgi içeriğine sahip olmadığı için kullanıcınız için bile yararlı olmaz. Bu cevabın cevapları sorusunu soran herkesin iş programlaması yoktur (ve OP'nin bunu istediğini sanmıyorum).
BCS

Kısa bir sorum var. Birisi tipik bir çalışma zamanı hatasının sıfıra bölündüğünü söylediğinde, int x = 3/0ancak bir değişkeniniz varsa, diyelim ama bu değişkenle hiçbir şey yapmıyorsunuz. Biz ya da başka bir şey yazdırmıyoruz. Bu hala bir çalışma zamanı hatası olarak kabul edilecek mi?
Robben

Bir iPhone Uygulaması için: Kod geliştirici tarafından ilk kez bir .app uzantısına derlendiğinde derleme zamanı mı? veya kullanıcı uygulamayı her başlattığında lansman sonrasında olur? Geliştiricinin kodunun derlendiği zaman derlenmişse neden umursamalıyım? Yani bu kullanıcı deneyimini etkilemez mi? Geliştiricilerin sadece zaman öldüreceği gibi!
Bal

1
@Robben Ben tüm bu süre sonra cevabınız var varsayalım, ama ben diğerleri için cevap verecektir. Evet kullanmasanız bile bir çalışma zamanı hatası olurdu
فربد ضروري 23:17

22

( edit : aşağıdakiler C # ve benzer, güçlü yazılan programlama dilleri için geçerlidir. Bunun size yardımcı olup olmadığından emin değilim).

Örneğin, bir programı çalıştırmadan önce derleyici ( derleme zamanında ) tarafından aşağıdaki hata algılanır ve bir derleme hatasına neden olur:

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

Öte yandan, derleyici tarafından aşağıdakine benzer bir hata algılanamaz. Çalışma zamanında bir hata / istisna alacaksınız (program çalıştırıldığında).

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

İstisnalar. Hashtable biriydi ancak en büyük adımın .net 1.1'den .net 2.0'a, türsüzden yazılan veri kümelerine (ve şimdi linq) gittiğini gördüm. Beni çok üzmek için kullanılan tehlikeli bir veritabanı ile kırık bir formda sorun gidermeye çalışıyorum!
Spence

19

Kaynak kodun [ekran | disk | ağ] olaylarına çevrilmesi (kabaca) iki şekilde olabilir; onları derleme ve yorumlama olarak adlandırın.

Bir de derlenmiş programı (örnekler C ve Fortran gösterilmiştir):

  1. Kaynak kodu, yürütülebilir bir program (veya bir hata) üreten başka bir programa (genellikle derleyici - go şekil denir) beslenir.
  2. Yürütülebilir dosya çalıştırılır (çift tıklatılarak veya komut satırına adı yazarak)

İlk adımda olan şeylerin "derleme zamanında", ikinci adımda olan şeylerin "çalışma zamanında" gerçekleştiği söylenir.

Bir In yorumlanmış programa (örneğin MicroSoft dos üzerinde basic () ve piton (Sanırım)):

  1. Kaynak kodu, onu doğrudan "çalıştıran" başka bir programa (genellikle yorumlayıcı denir) beslenir. Burada yorumlayıcı, programınız ve işletim sistemi (veya gerçekten basit bilgisayarlardaki donanım) arasında bir ara katman görevi görür.

Bu durumda, derleme zamanı ve çalışma süresi arasındaki farkın tespit edilmesi oldukça zordur ve programcı veya kullanıcıyla daha az ilgilidir.

Java, kodun bayt koduna derlendiği bir tür melezdir ve daha sonra genellikle bayt kodu için bir yorumlayıcı olan sanal bir makinede çalışır.

Programın bayt kodlamak ve derhal çalışması için derlendiği bir ara durum da vardır (awk veya perl'de olduğu gibi).


11

Temel olarak, derleyiciniz ne demek istediğinizi veya bir değerin "derleme zamanında" olduğunu hesaplayabilirse, bunu çalışma zamanı koduna sabitleyebilir. Açıkçası, çalışma zamanı kodunuz her zaman daha yavaş çalışacak bir hesaplama yapmak zorundaysa, derleme zamanında bir şey belirleyebiliyorsanız çok daha iyidir.

Örneğin.

Sabit katlama:

Eğer yazarsam:

int i = 2;
i += MY_CONSTANT;

Derleyici bu hesaplamayı derleme zamanında gerçekleştirebilir, çünkü 2'nin ne olduğunu ve MY_CONSTANT'ın ne olduğunu bilir. Bu nedenle, her bir yürütmede bir hesaplama yapmaktan kendini kurtarır.


Ve derleme zaman kodunu korumak, çalışma zamanına bağlı koddan daha kolaydır. Derleme zamanında derleyiciyi bazı şeyleri kontrol etmek için kullanabilirsiniz. Çalışma zamanında aynı şeylerin kontrol edilmesi daha fazla zaman alır çünkü test içerir.
user1154664

10

Hmm, tamam, çalışma zamanı bir program çalışırken meydana gelen bir şeyi tanımlamak için kullanılır.

Derleme zamanı, bir program oluşturulurken (genellikle bir derleyici tarafından) meydana gelen bir şeyi tanımlamak için kullanılır.


8

Derleme zamanı:

Derleme zamanında yapılan şeyler, sonuçta ortaya çıkan program çalıştırıldığında (neredeyse) hiçbir masraf gerektirmez, ancak programı oluşturduğunuzda büyük bir maliyete neden olabilir.

Çalışma süresi:

Aşağı yukarı tam tersi. Oluşturduğunuzda düşük maliyet, program çalıştırıldığında daha fazla maliyet.

Diğer taraftan; Bir şey derleme zamanında yapılırsa, yalnızca makinenizde çalışır ve bir şey çalışma zamanı ise, kullanıcı makinenizde çalışır.

ilgi

Bunun önemli olduğu yerlere örnek olarak birim taşıma tipi verilebilir. Bir derleme zamanı sürümü ( Boost.Units veya D' deki sürümüm gibi ) yerel kayan nokta koduyla ilgili sorunu çözmek kadar hızlı olurken, çalışma zamanı sürümü bir değerin olduğu birimler hakkında bilgi toplamak zorunda kalır her operasyonda yanlarında kontroller yapın. Öte yandan, derleme zamanı sürümleri değerlerin birimlerinin derleme zamanında bilinmesini ve çalışma zamanı girdisinden geldikleri durumla ilgilenememelerini gerektirir.


8

Bir önceki benzer soru yanıtından sonra Çalışma zamanı hatası ile derleyici hatası arasındaki fark nedir?

Derleme / Derleme zamanı / Sözdizimi / Anlambilimsel hatalar: Derleme veya derleme zamanı hataları yazım hatası nedeniyle oluşur, eğer herhangi bir programlama dilinin doğru sözdizimini ve anlambilimine uymazsak derleme zamanı hataları derleyici tarafından atılır. Tüm sözdizimi hatalarını kaldırana kadar veya derleme zamanı hatalarını ayıklayana kadar programınızın tek bir satır yürütmesine izin vermezler.
Örnek C: Bir noktalı virgül eksik veya yanlış yazıyor intolarak Int.

Çalışma zamanı hataları: Çalışma zamanı hataları, program çalışır durumdayken oluşturulan hatalardır. Bu tür hatalar programınızın beklenmedik şekilde davranmasına neden olabilir veya hatta programınızı öldürebilir. Genellikle İstisnalar olarak adlandırılırlar.
Örnek: Var olmayan bir dosyayı okuduğunuzu varsayalım, çalışma zamanı hatasına neden olur.

Tüm programlama hataları hakkında daha fazla bilgiyi buradan edinebilirsiniz


7

Diğer cevaplara bir eklenti olarak, bunu bir layman'a nasıl açıklayacağım:

Kaynak kodunuz bir geminin planı gibidir. Geminin nasıl yapılması gerektiğini tanımlar.

Planınızı tersaneye teslim ederseniz ve gemiyi inşa ederken bir kusur bulurlarsa, gemi kuru alandan veya sudan ayrılmadan hemen önce binayı durduracak ve size bildirecektir. Bu bir derleme zamanı hatasıdır. Gemi asla gerçekte yüzmüyordu ya da motorlarını kullanmıyor. Hata, geminin yapılmasını bile engellediği için bulundu.

Kodunuz derlendiğinde, gemi tamamlanmış gibidir. İnşa edilmiş ve kullanıma hazır. Kodunuzu yürüttüğünüzde, gemiyi bir seferde başlatmak gibi bir şey. Yolcular bindirildi, motorlar çalışıyor ve gövde su üzerinde, bu yüzden çalışma zamanı. Geminizde kızlık yolculuğuna batan ölümcül bir kusur varsa (veya ekstra baş ağrıları için belki de bir miktar seyahatten sonra) bir çalışma zamanı hatası yaşadı.


5

Örneğin: Güçlü yazılan bir dilde bir tür derleme zamanında veya çalışma zamanında denetlenebilir. Derleme zamanında, derleyici türlerin uyumlu olmadığından şikayet eder. Çalışma zamanında, programınızı iyi derleyebileceğiniz anlamına gelir, ancak çalışma zamanında bir istisna atar.


4

Sadece kelime farkı s / b Derleme zamanı ve Çalışma zamanı.

Derleme zamanı: Geliştirici programı .java formatında yazar ve sınıf dosyası olan Bytecode'a dönüştürür, bu derleme sırasında herhangi bir hata oluştuğunda derleme zamanı hatası olarak tanımlanabilir.

Çalışma zamanı: Oluşturulan .class dosyası uygulama tarafından ek işlevselliği için kullanılır ve mantık yanlış olur ve çalışma zamanı hatası olan bir hata atar


4

Derleme konusunda 'JAVA programlamaya giriş' yazarı Daniel Liang'dan bir alıntı:

"Üst düzey bir dilde yazılmış bir program kaynak program veya kaynak kodunu denir. Bir bilgisayar, bir kaynak programı çalıştıramıyor yapabildiğinden bir kaynak program olmalıdır tercüme içine makine koduna için yürütme . Çevirisi adlı başka bir programlama aracı kullanılarak yapılabilir bir tercüman veya derleyici . " (Daniel Liang, "JAVA programlamaya giriş" , s8).

...Diye devam ediyor...

"Derleyici tüm kaynak kodunu bir makine kodu dosyasına çevirir ve makine kodu dosyası yürütülür"

Yüksek seviyeli / insan tarafından okunabilir kodlara bastığımızda, bu ilk başta işe yaramaz! Küçük küçük CPU'nuzda bir dizi 'elektronik olaylar'a çevrilmelidir! Buna doğru ilk adım derleme.

Basitçe söylemek gerekirse, bu aşamada bir derleme zamanı hatası olurken, daha sonra bir çalışma zamanı hatası oluşur.

Unutmayın: Bir programın hatasız derlenmesi, hatasız çalışacağı anlamına gelmez.

Programların yaşam döngüsünün hazır, çalışan veya bekleyen kısmında bir çalışma zamanı hatası oluşurken, yaşam döngüsünün 'Yeni' aşamasından önce bir derleme zamanı hatası oluşacaktır.

Derleme zamanı hatası örneği:

Bir Sözdizimi Hatası - belirsiz ise kodunuz makine düzeyinde talimatlar içinde nasıl derlenebilir? Kodunuzun% 100 dilin sözdizimsel kurallarına uyması gerekir, aksi takdirde çalışan makine koduna derlenemez .

Çalışma zamanı hatası örneği:

Bellek yetersiz - Örneğin özyinelemeli bir işleve yapılan çağrı, belirli bir derecedeki değişken göz önüne alındığında yığın taşmasına neden olabilir! Bu derleyici tarafından nasıl tahmin edilebilir !? olamaz.

Derleme zamanı hatası ile çalışma zamanı hatası arasındaki fark budur.


2

Çalışma süresi, programı çalıştırdığınızda bir şeylerin olduğu anlamına gelir.

Derleme zamanı, programı derlediğinizde bir şeylerin olduğu anlamına gelir.


2

Derleme zamanı:

Derleme zamanında yapılan şeyler, sonuçta ortaya çıkan program çalıştırıldığında (neredeyse) hiçbir masraf gerektirmez, ancak programı oluşturduğunuzda büyük bir maliyete neden olabilir. Çalışma süresi:

Aşağı yukarı tam tersi. Oluşturduğunuzda düşük maliyet, program çalıştırıldığında daha fazla maliyet.

Diğer taraftan; Bir şey derleme zamanında yapılırsa, yalnızca makinenizde çalışır ve bir şey çalışma zamanı ise, kullanıcı makinenizde çalışır.


2

Derleme zamanı: Kaynak kodun çalıştırılabilir hale gelmesi için makine koduna dönüştürülmesi için geçen süreye derleme zamanı denir.

Çalışma süresi: Bir uygulama çalışırken buna çalışma süresi denir.

Derleme zamanı hataları sözdizimi hataları, eksik dosya referans hatalarıdır. Kaynak kod yürütülebilir bir programa derlendikten sonra ve program çalışırken çalışma zamanı hataları oluşur. Örnek olarak program çökmeleri, beklenmedik program davranışları veya özellikler çalışmaz.


2

Bir patron olduğunuzu ve bir asistanınız ve bir hizmetçiniz olduğunu ve onlara yapılacak görevlerin bir listesini verdiğinizi, asistanın (derleme zamanı) bu listeyi alacağını ve görevlerin anlaşılabilir olup olmadığını görmek için bir kontrol yapacağınızı düşünün. herhangi bir garip dilde veya sözdiziminde yazmadı, bu yüzden birisini bir İşe atamak istediğinizi anlar, böylece onu sizin için atar ve biraz kahve istediğinizi anlar, bu yüzden rolü bitti ve hizmetçi (çalışma süresi) bu görevleri yapmaya başlar, bu yüzden size biraz kahve yapmaya gider ama aniden yapmak için kahve bulamaz, bu yüzden onu yapmayı bırakır ya da farklı davranır ve size çay yapar (program bir hata bulduğu için farklı davrandığında) ).


1

İşte "çalışma zamanı ve derleme zamanı arasındaki fark?" Sorusunun cevabının bir uzantısıdır. - Genel giderlerdeki farklar Çalışma zamanı ve derleme zamanı ile ilişkili ?

Ürünün çalışma zamanı performansı, sonuçları daha hızlı sunarak kalitesine katkıda bulunur. Ürünün derleme zamanı performansı, düzenleme-derleme-hata ayıklama döngüsünü kısaltarak zamanında yapılmasına katkıda bulunur. Ancak, hem çalışma zamanı performansı hem de derleme zamanı performansı, zamanında kaliteye ulaşmada ikincil faktörlerdir. Bu nedenle, çalışma zamanı ve derleme zamanı performans iyileştirmelerini yalnızca genel ürün kalitesindeki ve zamanında iyileştirmelerle haklı gösterildiğinde düşünmeliyiz.

Burada daha fazla okumak için harika bir kaynak :


1

Bunu her zaman program işleme yüküne ve daha önce belirtildiği gibi performansın nasıl etkilediğine bağlı olarak düşündüm. Basit bir örnek, koddaki nesnem için gerekli olan mutlak belleği tanımlamak ya da tanımlamamak olabilir.

Tanımlı bir boole x bellek alır, bu daha sonra derlenmiş programdadır ve değiştirilemez. Program çalıştığında, x için ne kadar bellek ayıracağını tam olarak bilir.

Öte yandan, sadece genel bir nesne türü tanımlarsam (yani tanımlanmamış bir yer tutucunun veya belki de bazı dev damlalara işaretçi), program çalıştırılana ve nesneye bir şey atayana kadar nesnem için gereken gerçek bellek bilinmez bu nedenle değerlendirilmeli ve bellek tahsisi vb. daha sonra çalışma zamanında dinamik olarak ele alınmalıdır (daha fazla çalışma süresi ek yükü).

Dinamik olarak nasıl ele alınacağı, dile, derleyiciye, işletim sistemine, kodunuza vb.

Ancak bu notta, çalışma zamanı ve derleme zamanı kullandığınız bağlama göre değişir.


1

bunları farklı iki geniş grup statik statik ve dinamik bağlama altında sınıflandırabiliriz. Bağlamanın karşılık gelen değerlerle ne zaman yapıldığına dayanır. Referanslar derleme zamanında çözülürse, statik bağlanma olur ve başvurular çalışma zamanında çözülürse dinamik bağlanma olur. Statik bağlanma ve dinamik bağlanma, erken bağlanma ve geç bağlanma olarak da adlandırılır. Bazen statik polimorfizm ve dinamik polimorfizm olarak da adlandırılırlar.

Joseph Kulandai.


1

Çalışma zamanı ve derleme zamanı arasındaki en büyük fark:

  1. Kodunuzda herhangi bir sözdizimi hatası varsa ve tür denetimleri varsa, derleme zamanı hatası verir, çalışma zamanı olarak: kodu çalıştırdıktan sonra denetler. Örneğin:

int a = 1 int b = a/0;

Burada ilk satırın sonunda noktalı virgül yoktur --- b işlemini gerçekleştirirken programı yürüttükten sonra derleme zamanı hatası, sonuç sonsuz ---> çalışma zamanı hatası.

  1. Derleme zamanı, kodunuz tarafından sağlanan işlevsellik çıktısını aramaz, çalışma zamanı ise.

1

çok basit bir cevap:

Çalışma zamanı ve derleme zamanı, yazılım programı geliştirmenin farklı aşamalarını ifade eden programlama terimleridir. Bir program oluşturmak için, bir geliştirici önce programın nasıl çalışacağını tanımlayan kaynak kodunu yazar. Küçük programlar yalnızca birkaç yüz satır kaynak kodu içerebilirken, büyük programlar yüz binlerce satır kaynak kodu içerebilir. Yürütülebilir program olabilmesi için kaynak kodunun makine kodunda derlenmesi gerekir. Bu derleme işlemine derleme zamanı denir. (Derleyiciyi çevirmen olarak düşün)

Derlenmiş bir program kullanıcı tarafından açılıp çalıştırılabilir. Bir uygulama çalışırken, buna çalışma zamanı denir.

"Çalışma zamanı" ve "derleme zamanı" terimleri genellikle programcılar tarafından farklı hata türlerine atıfta bulunmak için kullanılır. Derleme zamanı hatası, sözdizimi hatası veya programın başarıyla derlenmesini engelleyen eksik dosya başvurusu gibi bir sorundur. Derleyici derleme zamanı hataları üretir ve genellikle kaynak kodun hangi satırının soruna neden olduğunu gösterir.

Bir programın kaynak kodu zaten yürütülebilir bir programda derlenmişse, program çalışırken ortaya çıkan hatalar olabilir. Örnek olarak çalışmayan özellikler, beklenmedik program davranışları veya program çökmeleri verilebilir. Bu tür sorunlara çalışma zamanında oluştuğu için çalışma zamanı hataları denir.

Referans


0

IMHO çok karmaşık bir konu olduğu için Runtime vs Derleme zamanı arasındaki fark hakkında bir fikir edinmek için birçok bağlantı, kaynak okumak gerekir. Aşağıda tavsiye ettiğim bu fotoğrafların / bağlantıların bir listesi var.

Yukarıda söylenenlerden ayrı olarak, bazen 1000 kelimeye değer bir resim eklemek istiyorum:

  1. Bu ikisinin sırası: önce derleme zamanıdır ve sonra çalıştırırsınız Derlenmiş bir program kullanıcı tarafından açılıp çalıştırılabilir. Bir uygulama çalışırken, çalışma zamanı olarak adlandırılır: derleme zamanı ve ardından çalışma zamanı1 derleme zamanı ve çalışma zamanı1;

CLR_diag derleme zamanı ve ardından runtime2  CLR_diag derleme zamanı ve ardından runtime2

 from Wiki  

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

Çalışma zamanı, çalışma zamanı veya çalışma zamanı şunlara atıfta bulunabilir:

Bilgi işlem

Çalışma süresi (program yaşam döngüsü aşaması)Bir bilgisayar programının yürütüldüğü dönem

Çalışma zamanı kütüphanesi , programlama dilinde yerleşik fonksiyonları uygulamak için tasarlanmış bir program kütüphanesi

Çalışma sistemi , bilgisayar programlarının yürütülmesini desteklemek için tasarlanmış yazılım

Yazılım yürütme, çalışma süresi boyunca talimatları tek tek gerçekleştirme işlemi

resim açıklamasını buraya girin resim açıklamasını buraya girin

resim açıklamasını buraya girin resim açıklamasını buraya girin resim açıklamasını buraya girin resim açıklamasını buraya girin resim açıklamasını buraya girin Derleyicilerin listesi https://en.wikipedia.org/wiki/List_of_compilersresim açıklamasını buraya girin resim açıklamasını buraya girin

  • Google'da arama yapın ve çalışma zamanı hatalarını derleme hatalarıyla karşılaştırın:

çalışma zamanı hataları

hataları derle ;

  1. Bence çok önemli bir şey var: 3.1 build vs compile ve Build Lifecycle arasındaki fark https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

3.2 Bu 3 şey arasındaki fark: compile vs build vs runtime

https://www.quora.com/What-is-the-difference-between-build-run-and-compile Fernando Padoan, Dil tasarımı için biraz meraklı bir geliştirici Cevaplandı Şub 23 diğer cevaplara:

çalışan bazı ikili yürütülebilir (veya yorumlanmış diller için bir komut dosyası), iyi… bilgisayarda yeni bir işlem olarak yürütülüyor; derleme, bazı üst düzey dillerde yazılmış bir programı (makine koduna kıyasla daha yüksek) ayrıştırma, sözdizimini, anlambilimi, kütüphaneleri bağlama, belki de bir miktar optimizasyon yapma, ardından çıktı olarak ikili yürütülebilir bir program oluşturma işlemidir. Bu yürütülebilir dosya, makine kodu veya bir çeşit bayt kodu biçiminde olabilir - yani, bir tür sanal makineyi hedefleyen talimatlar; bina genellikle bağımlılıkları kontrol etmeyi ve sağlamayı, kodu incelemeyi, kodu ikili dosyaya derlemeyi, otomatik testler çalıştırmayı ve ortaya çıkan ikili dosyaları ve diğer varlıkları (resimler, yapılandırma dosyaları, kütüphaneler, vb.) konuşlandırılabilir dosyanın belirli bir formatına paketlemeyi içerir. Çoğu işlemin isteğe bağlı olduğunu ve bazılarının sizin için oluşturduğunuz hedeflenen platforma bağlı olduğunu unutmayın. Örnek olarak, Tomcat için bir Java uygulaması paketlendiğinde bir .war dosyası çıkacaktır. C ++ kodundan bir Win32 yürütülebilir dosyası oluşturmak yalnızca .exe programının çıktısını alabilir veya ayrıca bir .msi yükleyicisinin içinde paketleyebilir.


0

Bu örneğe bakın:

public class Test {

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

Yukarıdaki kod başarıyla derlendi, sözdizimi hatası yok, mükemmel bir şekilde geçerli. Ama çalışma zamanında, aşağıdaki hatayı atar.

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

Derleme zamanında olduğu gibi, belirli durumlar kontrol edildiğinde, bu çalışma süresinden sonra, program tüm koşulları yerine getirdikten sonra belirli durumlar kontrol edilir. Aksi takdirde, derleme zamanı veya çalışma zamanı hatası alırsınız.


0

public class 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{

}


0

Kod derleme yapısını gerçek kodu okuyarak anlayabilirsiniz. Kullanılan deseni anlamadığınız sürece çalışma zamanı yapısı net değildir.


-1

SO için iyi bir soru değil (belirli bir programlama sorusu değil), ancak genel olarak kötü bir soru değil.

Önemsiz olduğunu düşünüyorsanız: okuma zamanı ile derleme zamanı arasındaki fark nedir ve ne zaman bu yararlı bir ayrımdır? Derleyicinin çalışma zamanında kullanılabildiği diller ne olacak? Guy Steele (kukla yok, o) CLTL2'de EVAL-WHEN hakkında CL sayfalarının bunu kontrol etmek için kullanabileceği 7 sayfa yazdı. Kendisi bir açıklamadan çok kısa olan bir tanım için 2 cümle yeterli değildir .

Genel olarak, dil tasarımcılarının kaçınmaya çalıştığı zor bir problem. Sık sık "işte derleyici, derleme zamanı işleri yapar; bundan sonraki her şey çalışma zamanıdır, eğlenir" derler. C, hesaplama için en esnek ortam değil, uygulanması kolay olacak şekilde tasarlanmıştır. Derleyicinin çalışma zamanında bulunmadığı veya bir ifadenin ne zaman değerlendirildiğini kolayca denetleyemediğinizde, makroların yaygın kullanımlarını taklit etmek için dilde hack'lerle sonuçlanırsınız veya kullanıcılar simüle etmek için Tasarım Desenleri bulurlar daha güçlü yapılara sahip. Uygulaması kolay bir dil kesinlikle faydalı bir hedef olabilir, ancak bu, programlama dili tasarımının hepsinin sonu olduğu anlamına gelmez. (EVAL-WHEN'i çok kullanmıyorum, ama onsuz hayatı hayal edemiyorum.)

Ve derleme zamanı ve çalışma zamanı etrafındaki problem alanı çok büyük ve hala büyük ölçüde keşfedilmemiş. Bu, SO'nun tartışma için doğru yer olduğu anlamına gelmez, ancak insanları bu bölgeyi daha fazla keşfetmeye, özellikle ne olması gerektiği konusunda önceden düşünülmüş fikirlere sahip olmayanlara teşvik ediyorum. Soru ne basit ne de aptalca ve en azından araştırmacıyı doğru yöne yönlendirebiliriz.

Ne yazık ki, bu konuda iyi bir referans bilmiyorum. CLTL2 biraz konuşur, ancak bunu öğrenmek için harika değildir.


4
dostum size iyi bir programlama sorusu olmayan şey göreceli. Bunun mükemmel bir soru olduğunu ve hakkında daha fazla bilgi edinmek istediğim bir şey olduğunu düşündüm. Evet genel "kavram" ı ve derleme zamanı ve çalışma zamanının ne olduğunu biliyorum ama derleme zamanı ve çalışma zamanında gerçekleşen entrikaları bilmek istiyorum. Programladığınızda ve farkında olmanız gereken önemli entrikalar. Çok somut değil, bu yüzden soruyor. İnsanlar burada oturup bu tür genel soruların değersiz olduğunu söylerken nefret ediyorum, herhangi bir geliştirici için kavraması gereken en önemli sorulardan bazıları.
PositiveGuy

1
Bir soruda değer görmüyorsanız, bu sizin probleminizdir. Eğer genelse, bunun bir nedeni var. Genel soruları sevmemeniz, dünyanın yararlı olduğunu düşündüğünüz şeylerin etrafında dönmesi anlamına gelmez. Bunu sorma konusunda belirli bir amacı var ve her ikisini de daha iyi anlamak ve tanımlamak için bir dizi cevap istiyor. Anla?
PositiveGuy
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.