Co to jest „środowisko wykonawcze”?

403

Słyszałem o takich rzeczach jak „C Runtime”, „Visual C ++ 2008 Runtime”, „.NET Common Language Runtime” itp.

  • Czym dokładnie jest „ środowisko wykonawcze ”?
  • Z czego to jest zrobione?
  • Jak współdziała z moim kodem? A może ściślej, w jaki sposób kontrolowany jest mój kod?

Podczas kodowania języka asemblera w systemie Linux mogłem użyć instrukcji INT do wywołania systemu. Czy więc środowisko wykonawcze jest niczym więcej niż tylko fabrycznie przygotowanymi funkcjami, które otaczają funkcję niskiego poziomu w bardziej abstrakcyjne i funkcje wysokiego poziomu? Ale czy to nie wydaje się bardziej podobne do definicji biblioteki, a nie środowiska wykonawczego?

Czy „środowisko wykonawcze” i „ biblioteka środowiska wykonawczego ” to dwie różne rzeczy?

DODAJ 1

Obecnie myślę, że może Runtime ma coś wspólnego z tak zwaną maszyną wirtualną , taką jak JVM. Oto cytat, który prowadzi do takiej myśli:

Ten proces kompilacji jest wystarczająco skomplikowany, aby można go było podzielić na kilka warstw abstrakcji, i zwykle wymagają one trzech tłumaczy: kompilatora, implementacji maszyny wirtualnej i asemblera. --- Elementy systemów komputerowych (wprowadzenie, droga do krainy sprzętu)

DODAJ 2

Książka Expert C Programming: Deep C Secrets . Rozdział 6 Struktury danych środowiska wykonawczego jest użytecznym odniesieniem do tego pytania.

smwikipedia
źródło
Środowisko wykonawcze zawiera runtime libraryplus trochę kodu sterującego i trochę stanu (dostarczone przez system operacyjny).
Martin York,
43
Świetne pytanie, zawsze to kwestionowałem.
contactmatt
Nie nazwałbym INT funkcją. Więcej informacji można znaleźć na stronie stackoverflow.com/questions/1817577/ ...
Koray Tugay
2
Znalazłem inny post na siostrzanej stronie, który może być przydatny: programmers.stackexchange.com/questions/294346/…
CloudyTrees
Zawsze przypominam piaskownicę do infrastruktury niższego poziomu. Masz zestaw Menedżera zadań lub procesów na zestawie Unix, wszystkie biblioteki GUI niskiego poziomu itp. Wszystko to jest częścią środowiska wykonawczego. Podstawy, na których zbudowane są rzeczy.
JGFMK

Odpowiedzi:

262

Środowisko wykonawcze opisuje oprogramowanie / instrukcje, które są wykonywane podczas działania programu, szczególnie te, których nie napisałeś wyraźnie, ale są niezbędne do poprawnego wykonania kodu.

Języki niskiego poziomu, takie jak C, mają bardzo małe (jeśli w ogóle) środowisko wykonawcze. Bardziej złożone języki, takie jak Objective-C, które pozwalają na dynamiczne przekazywanie wiadomości, mają znacznie szerszy czas działania.

Masz rację, że kod środowiska wykonawczego jest kodem biblioteki, ale kod biblioteki jest bardziej ogólnym terminem opisującym kod wygenerowany przez dowolną bibliotekę. Kod środowiska wykonawczego to w szczególności kod wymagany do implementacji funkcji samego języka.

e.James
źródło
103

Środowisko wykonawcze to ogólny termin odnoszący się do dowolnej biblioteki, frameworka lub platformy, na której działa Twój kod.

Środowiska wykonawcze C i C ++ są kolekcjami funkcji.

Środowisko wykonawcze .NET zawiera interpreter języka pośredniego , moduł wyrzucający elementy bezużyteczne i inne.

SLaks
źródło
4
Standardowa biblioteka C ++ zawiera nie tylko funkcje i odnosząc się do Matt Ball, „środowisko uruchomieniowe” C i C ++ są bibliotekami wykonawczymi, środowisko uruchomieniowe .NET to biblioteka wykonawcza i system wykonawczy.
smerlin,
1
Moje pytanie brzmi, że biblioteki statyczne też są środowiskiem uruchomieniowym? Myślę, że termin ten jest używany głównie w odniesieniu do wspólnych obiektów, prawda? rozważ libc w systemie Linux. A co z platformami i frameworkami? oni też są podzieleni na biblioteki?
Amir Zadeh
3
Ale w jaki sposób mój kod może faktycznie działać na dowolnej „ bibliotece, frameworku lub platformie ”? Powinien działać na CPU lub innej jednostce przetwarzającej. Czy możesz podać dodatkowy poziom szczegółowości w celu uzyskania dodatkowych wyjaśnień?
n611x007
Środowiska wykonawcze C i C ++ są kolekcjami funkcji. -> Jakie funkcje?
Koray Tugay
3
@KorayTugay: Funkcje w standardowej bibliotece, takie jak coutlub printf.
SLaks,
80

Zgodnie z Wikipedią: biblioteka uruchomieniowa / system wykonawczy .

W programowaniu komputerowym biblioteka wykonawcza jest specjalną biblioteką programową używaną przez kompilator do implementacji funkcji wbudowanych w język programowania podczas wykonywania (wykonywania) programu komputerowego. Często obejmuje to funkcje wejścia i wyjścia lub zarządzania pamięcią.


System wykonawczy (zwany także systemem wykonawczym lub po prostu środowiskiem wykonawczym) to oprogramowanie zaprojektowane do obsługi wykonywania programów komputerowych napisanych w pewnym języku komputerowym. System wykonawczy zawiera implementacje podstawowych poleceń niskiego poziomu, może także implementować polecenia wyższego poziomu i może obsługiwać sprawdzanie typów, debugowanie, a nawet generowanie i optymalizację kodu. Niektóre usługi systemu wykonawczego są dostępne dla programisty za pośrednictwem interfejsu programowania aplikacji, ale inne usługi (takie jak planowanie zadań i zarządzanie zasobami) mogą być niedostępne.


Re: Twoja edycja , „środowisko wykonawcze” i „biblioteka środowiska wykonawczego” to dwie różne nazwy dla tej samej rzeczy.

Matt Ball
źródło
69
Wikipedia nie jest dobrym źródłem cytatów. Jest to dobra lokalizacja, aby zacząć szukać autorytatywnych źródeł, ale sama w sobie nie powinna być uznawana za autorytatywną i dlatego cytowanie z niej nie jest wiarygodne. (Zgodnie z oświadczeniami pana Walii, twórcy Wikipedii).
Martin York,
5
Do czego odnosi się „podczas wykonywania” w pierwszym cytacie (podobno o bibliotece wykonawczej)? Łatwa [błędna] interpretacja może wyglądać następująco: „podczas wykonywania programu, kompilator równolegle korzysta z biblioteki (dla siebie) do implementacji (tj. Generowania dodatkowego kodu w czasie wykonywania)„ obiecane ”(według specyfikacji języka ) funkcje programu ”. Może to być fałszywe i / lub łatwe do wygięcia z def. Systemu wykonawczego.
n611x007
2
Aby kontynuować skąd Loki lewo, zwłaszcza gdy żaden z artykułów zapewniają żadnego odniesienia (to nie cytat, to po prostu coś, myślałem, że lepiej powiedzieć)
arsaKasra
1
@MartinYork, encyklopedia nie tylko nie jest autorytatywna, ale także skupia się na dokumentacji, a nie na wyjaśnieniach. Mogą być bardzo różne.
Roy Prins,
59

Środowisko wykonawcze lub wykonawcze jest częścią implementacji języka, która wykonuje kod i jest obecna w czasie wykonywania ; kompilacji częścią wdrożenia jest nazywany środowisko tłumaczenie w standardzie C.

Przykłady:

  • środowisko wykonawcze Java składa się z maszyny wirtualnej i standardowej biblioteki

  • wspólny środowisko wykonawcze C składa się z modułu ładującego (który jest częścią systemu operacyjnego) i biblioteki wykonawczej, która implementuje części języka C, które nie są wbudowane w plik wykonywalny kompilatora; w środowiskach hostowanych obejmuje to większość części standardowej biblioteki

Christoph
źródło
2
Dzięki, myślę, że to najlepsza odpowiedź w tym temacie.
Koray Tugay
1
Doceniam nadanie nazwy „środowisku wykonawczemu”, ale myślę, że używanie tylko „środowiska wykonawczego” jako aliasu dla tego pierwszego jest złym pomysłem (co wynika z moich obserwacji, co robi wielu programistów), „środowisko wykonawcze” jest bardziej dokładne. Zgadzam się z @ MichałTrybus, że „środowisko wykonawcze” oznacza „czas uruchomienia programu”.
WloHu
32

W moim rozumieniu środowisko wykonawcze jest dokładnie tym, co oznacza - czas uruchomienia programu. Możesz powiedzieć, że coś się dzieje w czasie wykonywania / wykonywania lub w czasie kompilacji.

Myślę, że środowisko uruchomieniowe i biblioteka środowiska wykonawczego powinny (jeśli nie są) dwie odrębne rzeczy. Wydaje mi się, że „środowisko uruchomieniowe C” nie jest właściwe. Nazywam to „biblioteką wykonawczą C”.

Odpowiedzi na inne pytania: Myślę, że termin środowisko wykonawcze można rozszerzyć o środowisko i kontekst programu podczas jego uruchamiania, więc:

  • składa się ze wszystkiego, co można nazwać „środowiskiem” w czasie działania programu, na przykład innych procesów, stanu systemu operacyjnego i używanych bibliotek, stanu innych procesów itp.
  • nie wchodzi w interakcje z twoim kodem w ogólnym sensie, po prostu określa, w jakich okolicznościach twój kod działa, co jest dostępne podczas wykonywania.

Ta odpowiedź jest w pewnym stopniu tylko moją opinią, a nie faktem ani definicją.

Michał Trybus
źródło
29

Matt Ball odpowiedział poprawnie. Powiedziałbym o tym na przykładach.

Rozważ uruchomienie programu skompilowanego w kompilatorze Turbo-Borland C / C ++ (wersja 3.1 z 1991 roku) i pozwól mu działać pod 32-bitową wersją systemu Windows, takiego jak Win 98/2000 itp.

To 16-bitowy kompilator. I zobaczysz, że wszystkie twoje programy mają 16-bitowe wskaźniki. Dlaczego tak jest, gdy Twój system operacyjny jest 32-bitowy? Ponieważ Twój kompilator skonfigurował środowisko wykonawcze 16-bitowe, a 32-bitowa wersja systemu operacyjnego go obsługuje.

To, co jest powszechnie nazywane JRE (Java Runtime Environment), zapewnia programowi Java wszystkie zasoby, których może potrzebować do uruchomienia.

W rzeczywistości środowisko wykonawcze jest produktem mózgowym idei maszyn wirtualnych. Maszyna wirtualna implementuje surowy interfejs między sprzętem a tym, co program może potrzebować do wykonania. Środowisko wykonawcze przyjmuje te interfejsy i przedstawia je do użytku programistom. Twórca kompilatora potrzebowałby tych ułatwień, aby zapewnić środowisko wykonawcze dla swoich programów.

ostateczna przyczyna
źródło
Maszyna wirtualna implementuje „surowy” interfejs między sprzętem a tym, co program może potrzebować do wykonania. -> Nie jestem tego pewien.
Koray Tugay
7

Wykonuj czas dokładnie tam, gdzie powstaje Twój kod i możesz zobaczyć wiele ważnych rzeczy, które robi Twój kod.

Środowisko wykonawcze jest odpowiedzialne za przydzielanie pamięci, zwalnianie pamięci, korzystanie z podsystemu systemu operacyjnego, takiego jak (Usługi plików, Usługi IO .. Usługi sieciowe itp.)

Twój kod będzie się nazywał „PRACA W TEORII”, dopóki praktycznie go nie uruchomisz. a Runtime jest przyjacielem, który pomaga to osiągnąć.

TalentTuner
źródło
3

środowisko wykonawcze może oznaczać bieżącą fazę życia programu (środowisko wykonawcze / czas kompilacji / czas ładowania / czas łącza) lub może oznaczać bibliotekę wykonawczą, która tworzy podstawowe działania niskiego poziomu, które są powiązane ze środowiskiem wykonawczym. lub może to oznaczać system wykonawczy, który jest taki sam jak środowisko wykonawcze.

w przypadku programów typu C środowisko wykonawcze to kod ustawiający stos, stertę itp., czego wymaga środowisko C. zasadniczo tworzy środowisko obiecane przez język. (może mieć komponent biblioteki wykonawczej, crt0.lib lub coś takiego w przypadku C)

alvin
źródło
3

Odkryłem, że następująca struktura folderów stanowi bardzo wnikliwy kontekst dla zrozumienia, co runtimeto jest:

Środowiska wykonawcze Mozilla XulRunner

Widać, że istnieje „ źródło ”, jest „ SDK ” lub „Software Development Kit”, a potem jest Runtimenp. rzeczy uruchamiane - w czasie wykonywania. Jego zawartość jest jak:

zawartość folderów wykonawczych

Plik win32 zip zawiera .exe -s i .dll -s.

Więc np. środowiskiem wykonawczym C byłyby pliki takie jak ten - biblioteki wykonawcze C, .so-s lub .dll -s - działasz w środowisku uruchomieniowym, specjalnie przez ich (lub ich zawartość lub cele) uwzględnienie w definicji Język C (na „papierze”), a następnie implementowany przez wybraną implementację C. A następnie otrzymujesz środowisko wykonawcze tej implementacji, aby z niego korzystać i budować na nim.

Oznacza to, że z niewielką polaryzacją pliki uruchomieniowe, których potrzebują użytkownicy nowego programu w języku C. Jako twórca programu opartego na języku C, ty też, ale potrzebujesz kompilatora C i nagłówków biblioteki C; użytkownicy ich nie potrzebują.

n611x007
źródło
1
innym, który kontekstualizuje środowisko uruchomieniowe, jest ten niepowiązany artykuł mit mitów python 6, w którym widać rozróżnienie między środowiskiem uruchomieniowym a językiem programowania , w pierwszym akapicie mitu 6.
n611x007
3

Środowisko wykonawcze w zasadzie oznacza, gdy program wchodzi w interakcje ze sprzętem i systemem operacyjnym komputera. C nie ma własnego środowiska wykonawczego, ale zamiast tego żąda środowiska wykonawczego od systemu operacyjnego (który jest w zasadzie częścią pamięci RAM), aby sam się wykonał.

Shrey Mittal
źródło
1

Jeśli moje rozumienie po przeczytaniu powyższych odpowiedzi jest poprawne, środowisko wykonawcze jest w zasadzie „procesami w tle”, takimi jak wyrzucanie elementów bezużytecznych, alokacja pamięci, w zasadzie wszelkie procesy wywoływane pośrednio przez biblioteki / frameworki, w których napisany jest kod, a w szczególności te procesy zachodzące po kompilacji podczas działania aplikacji.

modularmoon
źródło
-1

Poniższe sekcje dokumentacji MSDN dotyczą większości pytań: http://msdn.microsoft.com/en-us/library/8bs2ecf4(VS.71).aspx

Mam nadzieję, że to pomoże.

Dzięki, Damian

Damian Schenkelman
źródło
3
W rzeczywistości tak nie jest; nie tylko pyta o .Net.
SLaks,
@Matt: Znowu w prawo. Jednak 2/3 jego środowisk uruchomieniowych było wspieranych przez .Net, 1/2 jego tagów radzi sobie z .Net i pomyślałem, że linki będą przydatne.
Damian Schenkelman,
Powiedziałbym, że „3/4 języków obsługuje .NET”. .NET nie obsługuje zbyt wiele, jest zaprojektowany, aby utrzymać szczelinę między Unixem a Windows na poziomie oprogramowania pośredniego.
Matt Joiner,
@MattJoiner - To może być prawda w 2010 roku, ale dziś jest to monumentalnie nieprawda w przypadku .NET Standard i implementacji typu open source, takich jak .NET Core itp.
rory.ap
-2

Czas działania to instancja, w której nie wiesz, jaki typ obiektów tworzy podczas jego wykonywania, tworzenie obiektów opiera się na określonych warunkach lub pewnej pracy obliczeniowej. Przeciwnie, czas kompilacji jest instancją, w której wymagane obiekty są definiowane przez użytkownika przed jego wykonaniem.

Chethan
źródło
-3

Środowisko wykonawcze jest nieco przeciwne do czasu projektowania i czasu kompilacji / łącza. Historycznie pochodzi z wolnego środowiska mainframe, w którym czas pracy maszyny był drogi.


źródło
1
To nie odpowiada na pytanie i dodatkowo je komplikuje.
cglotr