“Çalışma zamanı” nedir?


404

"C Çalışma Zamanı", "Visual C ++ 2008 Çalışma Zamanı", ".NET Ortak Dil Çalışma Zamanı" vb.

  • "Çalışma zamanı " tam olarak nedir?
  • Ne yapılır?
  • Kodumla nasıl etkileşime giriyor? Ya da daha doğrusu, kodum tarafından nasıl kontrol edilir?

Linux'ta montaj dilini kodlarken, sistem çağrısı yapmak için INT talimatını kullanabilirim. Peki, çalışma zamanı, düşük düzey işlevini daha soyut ve yüksek düzey işlevlere saran önceden hazırlanmış işlevlerden başka bir şey değil mi? Ancak bu, çalışma zamanı için değil, kitaplığın tanımı gibi görünmüyor mu?

"Çalışma zamanı" ve " çalışma zamanı kitaplığı " iki farklı şey midir?

1 EKLE

Bugünlerde, Runtime'ın JVM gibi Sanal Makine ile ortak bir yönü olduğunu düşünüyorum. İşte böyle bir düşünceye yol açan alıntı:

Bu derleme işlemi, birkaç soyutlama katmanına bölünmek için yeterince karmaşıktır ve bunlar genellikle üç çevirmen içerir: bir derleyici, sanal makine uygulaması ve bir montajcı. --- Hesaplama Sistemlerinin Elemanları (Giriş, Donanım Alanına Giden Yol)

2 EKLE

Uzman C Programlama: Derin C Sırları kitabı . Bölüm 6 Çalışma Zamanı Veri Yapıları bu soruya faydalı bir referanstır.


Çalışma zamanı, runtime libraryartı bazı kontrol kodlarını ve ve bazı durumları (işletim sistemi tarafından sağlanır) içerir.
Martin York

43
Harika soru, hep bunu sorguladı.
contactmatt

INT işlevini çağırmazdım. Daha fazla bilgi için lütfen stackoverflow.com/questions/1817577/… adresine bakın .
Koray Tugay

2
Kardeş bir sitede yararlı olabilecek başka bir yazı buldum: programmers.stackexchange.com/questions/294346/…
CloudyTrees

Ben her zaman daha düşük seviyeli altyapı için bir sanal alan gibi bir şey. Unix kitinde, tüm düşük seviyeli GUI kütüphanelerinde vb. Görev Yöneticisi / Veya işlemleriniz var. Tüm bunlar çalışma zamanının bir parçasıdır. Şeylerin üzerine inşa edildiği temeller.
JGFMK

Yanıtlar:


262

Çalışma zamanı, programınız çalışırken yürütülen yazılımları / talimatları , özellikle de açıkça yazmadığınız, ancak kodunuzun düzgün bir şekilde yürütülmesi için gerekli olan talimatları açıklar.

C gibi düşük düzeyli diller çok küçük (varsa) çalışma süresine sahiptir. Dinamik mesaj geçişine izin veren Objective-C gibi daha karmaşık diller çok daha kapsamlı bir çalışma süresine sahiptir.

Çalışma zamanı kodunun kütüphane kodu olduğu doğrudur, ancak kütüphane kodu herhangi bir kütüphane tarafından üretilen kodu açıklayan daha genel bir terimdir . Çalışma zamanı kodu, özellikle dilin özelliklerini uygulamak için gereken koddur.


103

Çalışma zamanı, kodunuzun üzerinde çalıştığı tüm kitaplıkları, çerçeveleri veya platformları ifade eden genel bir terimdir.

C ve C ++ çalışma zamanları işlev koleksiyonlarıdır.

.NET çalışma zamanı, bir ara dil yorumlayıcısı, çöp toplayıcı ve daha fazlasını içerir.


4
C ++ standart kitaplığı yalnızca işlevler içermez ve Matt Ball'a atfen, C ve C ++ "çalışma zamanı" çalışma zamanı kitaplıklarıdır. .NET çalışma zamanı bir çalışma zamanı kitaplığı ve çalışma zamanı sistemidir.
smerlin

1
Benim sorum statik kütüphaneler de çalışma zamanı? sanırım terim çoğunlukla paylaşılan nesneler için kullanılıyor, değil mi? Linux'ta libc düşünün. Peki ya platformlar ve çerçeveler? onlar da kütüphanelere ayrılıyor mu?
Amir Zadeh

3
Ancak kodum aslında herhangi bir " kütüphane, çerçeve veya platform " üzerinde nasıl çalışabilir ? CPU veya başka bir işlem biriminde çalışmalıdır. Daha fazla açıklama için ek bir ayrıntı düzeyi sağlayabilir misiniz?
n611x007

C ve C ++ çalışma zamanları işlev koleksiyonlarıdır. -> Hangi işlevler?
Koray Tugay

3
@KorayTugay: Standart kitaplıktaki coutveya gibi işlevler printf.
SLaks

80

Wikipedia'ya göre: çalışma zamanı kitaplığı / çalışma zamanı sistemi .

Bilgisayar programlamasında, çalışma zamanı kitaplığı, bir bilgisayar programının çalışma zamanı (yürütme) sırasında bir programlama diline yerleşik işlevleri uygulamak için bir derleyici tarafından kullanılan özel bir program kitaplığıdır. Bu genellikle giriş ve çıkış veya bellek yönetimi işlevlerini içerir.


Bir çalışma zamanı sistemi (çalışma zamanı sistemi veya sadece çalışma zamanı olarak da adlandırılır), bazı bilgisayar dillerinde yazılan bilgisayar programlarının yürütülmesini desteklemek için tasarlanmış bir yazılımdır. Çalışma zamanı sistemi, temel düşük düzeyli komutların uygulamalarını içerir ve ayrıca daha yüksek düzeydeki komutları uygulayabilir ve tür denetimi, hata ayıklama ve hatta kod oluşturma ve optimizasyonunu destekleyebilir. Çalışma zamanı sisteminin bazı hizmetlerine programcı tarafından bir uygulama programlama arabirimi aracılığıyla erişilebilir, ancak diğer hizmetlere (görev zamanlaması ve kaynak yönetimi gibi) erişilemeyebilir.


Re: düzenleme , "çalışma zamanı" ve "çalışma zamanı kitaplığı" aynı şey için iki farklı isimdir.


69
Wikipedia teklifler için iyi bir kaynak değildir. Yetkili kaynaklar aramaya başlamak için iyi bir yerdir, ancak kendisi yetkili olarak kabul edilmemelidir ve bu nedenle alıntı yapmak güvenilir değildir. (Vikipedi'nin yaratıcısı Bay Wales'in ifadelerine göre).
Martin York

5
İlk alıntıdaki "çalışma zamanı sırasında" (sözde çalışma zamanı kitaplığı hakkında) ne anlama gelir? Kolay [yanlış] bir yorum şu olabilir: "program yürütülürken, derleyici paralel olarak," vaat edilen "(dil spesifikasyonuna göre) uygulamak (yani kendi başına ek kod üretmek) için bir kütüphane kullanır. msgstr ") program fonksiyonları. Bu yanlış olabilir ve / veya bir çalışma zamanı sisteminin def ile kolayca bükülebilir.
n611x007

2
Loki'nin kaldığı yerden devam etmek için, özellikle makalelerin hiçbiri referans vermediğinde (bu bir teklif değil, sadece daha iyi söyleyebileceğimi düşündüğüm bir şey)
arsaKasra

1
@MartinYork, sadece bir ansiklopedi değil, aynı zamanda açıklamaya değil belgelere de odaklanır. Bunlar çok farklı olabilir.
Roy Prins

59

Çalışma zamanı veya yürütme ortamı , kodu çalıştıran ve çalışma zamanında mevcut olan bir dil uygulamasının parçasıdır ; uygulamanın derleme zamanı kısmına C standardında çeviri ortamı denir .

Örnekler:

  • Java çalışma zamanı sanal makineden ve standart kitaplıktan oluşur

  • ortak bir C çalışma zamanı, yükleyici (işletim sisteminin bir parçası olan) ve C dilinin derleyici tarafından yürütülebilir dosyaya yerleştirilmemiş bölümlerini uygulayan çalışma zamanı kitaplığından oluşur; barındırılan ortamlarda, bu standart kitaplığın çoğunu içerir


2
Teşekkürler, bence bu konudaki en iyi cevap bu.
Koray Tugay

1
Ben "yürütme ortamı" adlandırma takdir ama sadece "çalışma zamanı" eski için takma ad olarak kullanmak kötü bir fikir (ki benim gözlemlerimden birçok programcı ne yapar), "çalışma zamanı ortamı" daha doğru olduğunu düşünüyorum. @ MichałTrybus'a katılıyorum, "çalışma zamanı" "programın çalıştığı zaman" anlamına geliyor.
WloHu

32

Anladığım kadarıyla, çalışma zamanı tam olarak ne anlama geliyor - programın çalıştığı zaman. Bir şeyin çalışma zamanında / çalışma zamanında veya derleme zamanında olduğunu söyleyebilirsiniz .

Çalışma zamanı ve çalışma zamanı kitaplığı (eğer değilse) iki ayrı şey olmalı bence . "C çalışma zamanı" bana doğru gelmiyor. Ben buna "C runtime library" diyorum.

Diğer sorularınızın cevapları: Çalışma zamanı terimi, çalışma sırasında ortam ve programın içeriğini de içerecek şekilde genişletilebileceğini düşünüyorum , bu yüzden:

  • programın çalıştırıldığı sırada "ortam" olarak adlandırılabilecek her şeyden, örneğin diğer işlemler, işletim sisteminin durumu ve kullanılan kitaplıklar, diğer işlemlerin durumu, vb.
  • kodunuzla genel anlamda etkileşime girmez, yalnızca kodunuzun hangi koşullarda çalıştığını, yürütme sırasında neyin kullanılabileceğini tanımlar.

Bu cevap, bir gerçeği veya tanımı değil, sadece benim fikrimi uzatmaktır.


29

Matt Ball doğru cevap verdi. Bunu örneklerle söyleyebilirim.

Turbo-Borland C / C ++ (1991 yılından itibaren sürüm 3.1) derleyicisinde derlenmiş bir program çalıştırmayı ve Win 98/2000 vb.Gibi pencerelerin 32 bit sürümü altında çalışmasına izin vermeyi düşünün.

16 bit derleyici. Ve tüm programlarınızın 16 bit işaretçileri olduğunu göreceksiniz. İşletim sisteminiz 32bit olduğunda neden böyle? Derleyiciniz 16 bit yürütme ortamını ayarladığından ve işletim sisteminin 32 bit sürümü desteklediğinden.

Genellikle JRE (Java Runtime Environment) olarak adlandırılan program, yürütmesi gereken tüm kaynakları içeren bir Java programı sağlar.

Aslında, çalışma zamanı ortamı Sanal Makineler fikrinin beyin ürünüdür. Sanal bir makine ham donanım ile programın yürütmesi gerekenler arasındaki arabirimi . Çalışma zamanı ortamı bu arayüzleri benimser ve bunları programcının kullanımına sunar. Bir derleyici geliştiricisi, programlarına bir yürütme ortamı sağlamak için bu olanaklara ihtiyaç duyacaktır.


Sanal makine, donanım ile bir programın yürütmesi gerekenler arasında "ham" arabirimi uygular. -> Bundan emin değilim.
Koray Tugay

7

Tam olarak kodunuzun hayata geçtiği yerde çalışma süresi ve kodunuzun yaptığı birçok önemli şeyi görebilirsiniz.

Çalışma zamanı, bellek ayırma, bellek boşaltma, işletim sisteminin alt sistemini (Dosya Hizmetleri, IO Hizmetleri .. Ağ Hizmetleri vb.)

Kodunuzu pratik olarak çalıştırmadan önce kodunuz "TEORİDE ÇALIŞMA" olarak adlandırılacaktır. ve Runtime bunu başarmaya yardımcı olan bir arkadaş.


3

bir çalışma zamanı, program ömrünün geçerli aşamasını (çalışma zamanı / derleme zamanı / yükleme süresi / bağlantı süresi) gösterebilir veya yürütme ortamıyla arabirim oluşturan temel düşük düzey eylemleri oluşturan bir çalışma zamanı kitaplığı anlamına gelebilir. veya yürütme ortamıyla aynı olan bir çalışma zamanı sistemi anlamına gelebilir.

C programlarında, çalışma zamanı, C ortamı tarafından beklenen bir gereksinim olan yığını, yığını vb. temelde dilin vaat ettiği ortamı kurar. (bir çalışma zamanı kitaplığı bileşeni, crt0.lib veya C durumunda böyle bir şeye sahip olabilir)


3

Aşağıdaki klasör yapısının ne runtimeolduğunu anlamak için çok anlayışlı bir bağlam oluşturduğunu gördüm :

Mozilla XulRunner'ın çalışma zamanları

' Kaynak ' olduğunu, ' SDK ' veya 'Yazılım Geliştirme Kiti' olduğunu ve sonra Runtimeörneğin. çalıştırılan şeyler - çalışma zamanında. İçeriği şöyledir:

runtimes 'klasör içeriği

Win32 zip .exe -s ve .dll -s içerir.

Örneğin; C çalışma zamanı, bu tür dosyalar olacaktır - C çalışma zamanı kitaplıkları, .so-s veya .dll -s - çalışma zamanında çalıştırırsınız, ( C dili ('kağıt üzerinde'), daha sonra C seçim uygulamanız tarafından uygulanır. Ve sonra o uygulamanın çalışma zamanını alırsınız, onu kullanır ve üzerine inşa edersiniz.

Yani, küçük bir polarizasyonla, yeni C tabanlı programınızın kullanıcılarının ihtiyaç duyacağı çalıştırılabilir dosyalar. C tabanlı bir programın geliştiricisi olarak siz de öyle, ancak C derleyicisine ve C kitaplığı başlıklarına da ihtiyacınız var; kullanıcıların bunlara ihtiyacı yoktur.


1
çalışma zamanını bağlamsallaştırmak için başka bir şey, bu ilişkisiz makale python mitlerinin bölüm efsanesi 6'dır, burada çalışma zamanı ve programlama dili arasındaki farkı , mit 6'nın ilk paragrafında görebilirsiniz.
n611x007

3

Çalışma zamanı temel olarak programın bir makinenin donanımı ve işletim sistemi ile etkileşime girdiği anlamına gelir. C'nin kendi çalışma zamanı yoktur, ancak bunun yerine, kendini çalıştırmak için bir işletim sisteminden (temel olarak ram'ın bir parçası olan) çalışma zamanını ister.


1

Yukarıdaki cevapları okuduğumdaki anlayış doğruysa, Çalışma Zamanı temelde çöp toplama, bellek ayırma, temel olarak dolaylı olarak çağrılan tüm işlemler, kodunuzun yazıldığı kütüphaneler / çerçeveler ve özellikle de derleme sonrasında, uygulama çalışırken oluşan işlemler.


-1

MSDN belgelerinin bu bölümleri sorularınızın çoğuyla ilgilidir: http://msdn.microsoft.com/en-us/library/8bs2ecf4(VS.71).aspx

Umarım bu yardımcı olur.

Teşekkürler Damian


3
Aslında öyle değil; sadece .Net hakkında sormuyor.
SLaks

@Matt: Tekrar. Ancak çalışma sürelerinin 2 / 3'ü .Net tarafından desteklendi, etiketlerinin 1 / 2'si .Net ile uğraştı ve sadece bağlantıların yararlı olacağını düşündüm.
Damian Schenkelman

Ben "dillerin 3 / 4'ü .NET destekliyor" ifade ediyorum. .NET çok fazla destek yapmaz, orta katman düzeyinde unix ve pencereler arasındaki geçişi güçlü tutmak için tasarlanmıştır.
Matt Joiner

@MattJoiner - Bu 2010'da doğru olabilirdi, ancak bugün .NET Standard ve .NET Core gibi açık kaynaklı uygulamalar ile anıtsal olarak doğru değil
rory.ap

-2

Çalışma süresi, nesnelerin yürütülmesi sırasında ne tür nesneler oluşturduğunu bilmediğiniz örnektir, nesne oluşturma belirli koşullara veya bazı hesaplama çalışmalarına dayanır. Aksine, derleme zamanı, gerekli nesnelerin yürütülmesinden önce sizin tarafınızdan tanımlandığı örnektir.


-3

Çalışma zamanı, tasarım zamanı ve derleme zamanı / bağlantı zamanının tersidir. Tarihsel olarak, makine zamanının pahalı olduğu yavaş ana bilgisayar ortamından geliyor.


1
Bu soruya cevap vermez ve daha da karmaşık hale getirir.
cglotr
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.