공부/기타

c++, c#, java, python 언어들의 컴파일 과정과 특징들

Lero God 2023. 5. 23. 11:54

c++ 과 c# 의 특징과 장단점

-> c++ 은 메모리 할당과 해제를 직접 관리 할 수 있어서 메모리가 한정적인 시스템에서 유리하다.

c# 은 메모리를 가비지 콜렉터를 통해서 자동으로 해제를 해주기 때문에 편리하다.

하지만 c++ 에도 스마트 포인터가 생겨서 편리하게 메모리 해제를 맡길 수 있다.

c# 은 가비지 콜렉터가 돌아가면 느려진다.

c# 은 중간언어인 CIL(common intermeditate languate) 인 바이트코드 형식으로 변경 후 clr(common language runtime)이라는 환경에서 각 환경에 맞는 기계어로 컴파일 됩니다.

어떤 언어든지 clr 에서 돌아가는 언어인 cil 로 변경되는 과정을 거칩니다.

clr 은 닷넷 프레임워크의 가상 머신입니다. clr 에서 컴파일 되는 과정을 jit(just in time) 이라고 합니다.

jit 컴파일이란 매번 실행될 때마다 실시간으로 컴파일 한다는 의미입니다.

 

java 의 특징과 장단점

java 도 c# 이랑 똑같이 중간 언어인 바이트코드로 변경되고 jvm 환경에서 기계어로 컴파일 후 실행된다.

c++ 은 메모리 할당/해제를 new/delete 로 운영체제에 직접 요청한다.

java 는 는 메모리 할당/해제를 jvm 에게 요청하고 jvm 이 관리하게 된다. (그래서 운영체제 독립적으로 동작할 수 있는 건가보다)

jvm 은 플랫폼에 맞게 중간 언어를 기계어로 변경하는 작업을 하기 때문에 플랫폼 종속적이다. jvm 을 설치할 때 windows, mac 용이 따로 있다.

하지만 java 언어는 플랫폼 독립적으로 동작한다. (jvm 덕분에)

 

 

python 언어의 특징과 장단점

-> 문법이 간편해 쓰기 쉽다

c++ 은 컴파일, 어셈블러, 링킹 과정을 거쳐서 실행 파일을 만든다. 그 이후에 실행 파일을 실행하면 코드를 실행한다.

python 은 위 과정을 프로그램을 실행 하면서 진행한다. 별도의 실행 파일 없이 스크립트를 한 줄 씩 읽으면서 실행 된다.

별도의 빌드 과정과 컴파일 과정이 없기 때문에 실행 시작에 걸리는 시간이 빠르다. 하지만 실행 이후의 시간이 느리다.

c++ 은 실행 시작에 걸리는 시간이 길지만 실행 시작 후에는 빠르다. 그리고 소스 파일이 바뀌지 않는 이상 다시 컴파일 할 필요가 없어 빠르다. 그러나 소스 파일이 변경되면 컴파일 하는 시간이 다시 소요된다.

c++ 은 실행 파일이 플랫폼 의존적이기 때문에 윈도우용 실행 파일은 맥에서 구동이 안 된다

python

컴파일된 실행 파일은 소스 파일을 볼 수 없으나 인터프리터 방식은 소스 파일이 보이기 때문에 보안 작업(난독화)이 필요하다.

그래서 테스트 케이스나 로직을 바꿔서 빠르게 테스트 해보기 위해 python 이 머신러닝/AI 에 많이 쓰이나? 

 

결론

c++ - 컴파일

java, c# - 컴파일 + 인터프리터

python - 인터프리터

 

참고

python 의 인터프리터와 c++ 의 컴파일 과정 - https://vlsi.kr/what_is_a_computer_language/

인터프리터 언어와 컴파일 언어의 차이점 - https://st-lab.tistory.com/176

c++, java 언어의 특징 - https://breakcoding.tistory.com/2