2008-10-14 12 views
9

Jest to prawdopodobnie bardzo proste pytanie, ale jaki jest termin techniczny dla tej klasy języka?Jaki jest termin techniczny dla języków C# lub Java?

Używają oni "pośredniego" języka zestawu, który jest wysyłany za pośrednictwem JVM lub CLR. Obie są zorientowane obiektowo i oba zależą od pośrednika, takiego jak wirtualna maszyna języka Java lub środowisko wykonawcze Common Language, aby skompilować je w natywną maszynę.

W przeciwieństwie do Asm/C/C++ nie kompilują się bezpośrednio do natywnego języka maszyny i wymagają intensywnej wiedzy o przydzielaniu pamięci. Oboje korzystają z funkcji zbierania śmieci.

Czy istnieje termin techniczny, który oddziela Javę i C# od C++?

Odpowiedz

27

Kluczową różnicą między C++ i .NET/Java jest automatyczne odzyskiwanie pamięci, które nie jest już wymagane. Jest to znane jako zbieranie śmieci. W przypadku tej usługi są one znane jako platformy zarządzane.

Zarówno Java/.NET opóźniają kompilację kodu bajtowego do natywnego kodu do ostatniej chwili. W przypadku tej właściwości są one znane jako JIT-compiled (Just In Time).

Języki C#/Java/C++ są określane mianem jako imperatywne, zorientowane obiektowo języki:.

System typów zarówno w środowisku .NET, jak i Java pozwala tylko na weryfikowalne wywoływanie metod. Dla tej właściwości są one znane jako statycznie wpisane.

C#/Java/C++ to Turing kompletny, co oznacza, że ​​w praktyce mogą wykonywać dowolne obliczenia.

+0

Można też powiedzieć, że są [http://en.wikipedia.org/wiki/ALGOL](http://en.wikipedia .org/wiki/ALGOL), ponieważ jest to rodzina, z której pochodzą. –

+0

Do zarządzanego kodu jest znacznie więcej niż odśmiecanie; automatyczne sprawdzanie poprawności i tym samym udowodnić, że kod nie może zachowywać się w niedozwolony sposób, na przykład. Platformy zebrane na śmieci są tylko nazywane platformami zbierającymi śmieci :) – Calum

+0

Calum ma rację: "zarządzany" nie dotyczy tak naprawdę zarządzania pamięcią. –

1

"Zarządzane" lub "zarządzanie pamięcią" lub "śmieci zebrane" to akceptowalne warunki dla rozróżnienia ich pod względem sposobu alokowania/gromadzenia pamięci, choć pierwsza z nich jest prawdopodobnie najbardziej popularna w dzisiejszych czasach.

Jeśli chodzi o kompilowanie do języka pośredniego (IL), zależy to od tego, jak maszyna wirtualna (VM) działa w trybie pracy. W .NET VM kompilacji języka wspólnego (CLR) kompiluje IL do kodu maszynowego tuż przed jego wykonaniem, który jest znany jako kompilacja "w czasie" lub "kompilacja JIT". Inne środowiska w rzeczywistości nie kompilują kodu do kodu maszynowego, ale po prostu je interpretują, co jest znacznie wolniejsze i jest to znane jako język "zinterpretowany".

4

Pośrednia reprezentacja jest bardziej właściwością systemu uruchomieniowego niż samego języka. Tego typu systemy są często nazywane systemami Bytecode.

+0

Widziałem również termin "pseudo-kompilowany" –

+0

Zgadzam się z twoim punktem. Jest to szczególnie łatwe do zauważenia w środowisku .NET, gdzie środowisko wykonawcze i języki, których można używać do kierowania na to RT, są wyraźnie różne. –

1

Uważam, że byłyby to języki zarządzane.

5

Języki te są powszechnie nazywane językami "zarządzanymi".

3

Od kiedy Microsoft wyszedł z .NET, zaczęli używać słowa "managed", aby odróżnić języki, które logicznie przynajmniej działają na maszynie wirtualnej i te, które działają na surowym metalu. Termin został w większości przyłapany.

0

To zależy od tego, czy mówimy o tym, że działają na maszynie wirtualnej, to są one traktowane jako skompilowane przez JIT (Just-In-Time) lub kod bajtowy (logicznie 1/2 skompilowane i 1/2 zinterpretowane).

Jeśli mówisz o zbieraniu śmieci, są one po prostu określane jako śmieci zebrane.

Kluczowym punktem jest to, że dwa atrybuty są oddzielne, język zbierania śmieci nie musi mieć maszyny wirtualnej, a język oparty na maszynie wirtualnej nie musi być zbierany.

Jako przykład Python jest językiem interpretowanym, który ma garbage collection, ale jest interpretowany jako przeciwieństwo działania na maszynie wirtualnej.

4

Są one czasami nazywane statycznie zarządzanymi językami programowania.

0

Pośrednia reprezentacja "bytecode" to tylko szczegół implementacji. C++ można skompilować do, powiedzmy, ANDF (Architecture Neutral Distribution Format). P-code był bardzo popularny. Z drugiej strony karty JavaCards są generalnie dystrybuowane bez możliwości uruchamiania pośredniej formy, a istnieją bezpośrednie kompilatory kodu Java dla maszyn.

C++ może zawierać śmieci. To powinno być bardziej wyraźne w C++ 0x. Java w czasie rzeczywistym ograniczyła wykorzystanie pamięci dla wątków w czasie rzeczywistym.

Pojęcie języka Java/C#: dialekty Java.

(Java jest znakiem towarowym firmy Sun Microsystems, więc jest JavaScript.)

Powiązane problemy