Yanıtlar:
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
Yanlış giden şey çalışma zamanı hatalarıdır :
Ayrıca, programın kendisi tarafından algılanan hatalar olabilir:
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
.app
uzantıda ilk kez derlendiğinde derleme zamanı mı ? veya kullanıcı uygulamayı her başlattığında lansman sonrasında olur ?
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ı?
int x = 3/0
ancak 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?
( 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
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):
İ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)):
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).
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.
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.
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.
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.
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 int
olarak 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
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ı.
Ö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.
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
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.
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.
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.
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) ).
İş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 :
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.
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.
Çalışma zamanı ve derleme zamanı arasındaki en büyük fark:
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ı.
ç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.
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:
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
Derleyicilerin listesi https://en.wikipedia.org/wiki/List_of_compilers
;
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.
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.
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{
}
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.