Managed 언어
Managed 언어란 특정 런타임 환경 내에서, 프로그램을 생성하도록 설계된 언어를 의미한다.
이러한 언어들은 대부분 인터프리터나, VM(Virtual Machine)을 지원하고, 프로그램의 코드가 이 위에서 동작하도록 설계되어 있다. 소스코드를 컴파일하는 과정은 VM 위에서 이루어지고, 실행파일 또한 VM 위에서 동작하게 된다.
추가로 VM은 메모리 관리(Garbage Collector .. ), 운영체제 차원의 보안성을 위한 관리 등의 역할을 수행한다.
Python, JavaScript, Java, C# 등등의 언어가 managed 언어에 속한다.
Unmanaged 언어
따로 VM과 같은 런타임 환경의 관리를 받지 않는 모든 언어는 unmanaged 언어라고 할 수 있다.
우리가 아는 일반적인 컴파일을 수행하고, 컴파일을 통해 bytecode를 생성하고, 실행파일을 생성한다.
C, C++ 과 같은 언어가 이에 해당한다.
언어별 컴파일 과정
C, C++
소스코드 -> 전처리기 -> 컴파일러 (정적 컴파일) -> 링커 -> 실행파일 -> 실행
컴파일 타임 런타임
Java
JVM(Java Virtual Machine)
소스코드 -> 컴파일러 (정적 컴파일) -> .class files (중간파일) ->
컴파일 타임
실행 (JVM 동작) -> Just-In Compiler (동적 컴파일) -> NativeCode
런타임
C#
CLR(Common Language Runtime)
소스코드 -> Language Compiler (정적 컴파일) -> MSIL Code, Metadata (중간파일) ->
컴파일 타임
실행 (CLR 동작) -> Just-In Compiler (동적 컴파일) -> NativeCode
런타임
Python
Python Interpreter(CPython, PyPy)
소스코드 -> Python Interpreter (동적 컴파일, 인터프리팅) -> 실행
JavaScript
JavaScript Engine(V8)
참고
www.guru99.com/java-virtual-machine-jvm.html
www.c-sharpcorner.com/UploadFile/puranindia/interview-question-on-net-framework-or-clr/
'프로그래밍 > CS 개념' 카테고리의 다른 글
[CS] 메모리 구조 (0) | 2021.04.17 |
---|---|
[CS 기초] 정적타입 언어 vs 동적타입 언어 (0) | 2021.04.16 |