컴파일러
보이기
컴파일러(Compiler)란 넓은 의미로는 하나의 프로그래밍 언어로 짜인 코드를 다른 프로그래밍 언어를 사용한 코드로 바꿔 주는 프로그램이나 보통은 협소한 의미로 고수준 프로그래밍 언어로 작성한 소스 코드를 기계어로 번역하는 프로그램을 말한다.
프로그램 소스 코드 전체를 한번에 기계가 알아들을 수 있도록 변환하는 컴파일 과정 때문에 코드 한 줄 실행할 때마다 변환을 하는 인터프리터보다 훨씬 빠르다.
대신 역방향으로 기계어나 바이트 코드에서 프로그래밍 언어 소스 코드로 변환해야 한다면 인터프리터가 더 정확한 결과를 내놓는 경우가 많다. 왜냐하면 컴파일러는 컴파일 과정 중 발생하는 코드 최적화 단계에서 원래 코드의 구조가 박살나기 때문이다.[1]
- gcc 및 g++: 리눅스 환경 중심으로 컴파일하는 것을 상정한 C언어 및 C++ 언어용 오픈 소스 컴파일러이다. 그러나 MS 윈도우와 같은 다른 환경에도 Cygwin 같은 프로그램으로 포팅되어 있다.
- MSVC: 비주얼 스튜디오에 포함된 C++ 언어 컴파일러다. 이쪽은 클로즈드 소스 컴파일러다.
- Turbo C/Turbo C++: 볼랜드가 개발했던 컴파일러다. 표준 C언어의 변화를 잘 반영하지만 실무용으로는 gcc에 다소 밀린다. 현재는 개발사 엠바카데로[2]가 개발을 포기하고 C++ 빌더 개발로 넘어간 상황이라 더 이상 쓰지 않는다.
상기한 것들은 C/C++ 언어에 대한 컴파일러를 다루지만 파스칼이나 Go 등의 다른 몇몇 프로그래밍 언어도 컴파일러가 있다.
파이썬, 자바, lua, 자바스크립트 같은 스크립트 언어들은 인터프리터를 사용한다.
- 한 데스크탑 운영체제/자원 및 환경(호스트 시스템) 상에서 소스 코드를 컴파일한 뒤 전혀 다른 운영체제/자원 및 환경(타겟 시스템)을 가진 기기에서 실행되도록 몇 가지 변경 옵션을 주어 컴파일한 경우 해당 컴파일러를 '크로스 컴파일러'라고 한다. 보통 스마트폰 앱 개발/임베디드 기기 펌웨어 개발에 크로스 컴파일러를 만들어 활용한다.
- 바이너리 코드와 트리형 자료구조를 만들 수 있는 언어의 경우 컴파일러가 자기 자신의 소스 코드를 컴파일할 수 있다!
- 컴파일러의 경우 하드웨어와 소프트웨어 특성, 프로그래밍을 포함한 컴퓨터공학 이론에 모두 통달해야 제작 가능하기 때문에 운영체제와 더불어 가장 만들기 어렵다는 프로그램으로 평가된다.