문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 컴파일러 (문단 편집) == 종류 == 컴파일러는 다음과 같은 네 분류로 나뉜다. * 원시 코드를 바로 [[기계어]]로 변환하는 정적 컴파일(Static Compilation) * 원시 코드를 [[바이트코드]]로 변환하는 바이트코드 컴파일(Bytecode Compilation) * [[바이트코드]] 등의 중간 코드를 기계어로 변환하는 AOT 컴파일(Ahead-Of-Time Compilation) * 실행시 최초 한 번에 한해 컴파일을 거치는 [[JIT]] 컴파일(Just-In-Time Compilation) 요즘 컴파일러들은 기계가 프로그램을 빠르게 돌릴 수 있도록 적절한 최적화 작업을 하고 프로그래머가 실수할만한 부분을 경고하는데다 편집기와 연동하여 패턴 학습/코드 추천 등 갈수록 똑똑해지는 추세이다. [[프로그래머]]가 할 수 있는 어렵다고 알려진 작업이 컴파일러, [[운영체제|OS]], [[게임 엔진]], [[웹 브라우저]] 엔진, [[텐서플로|딥러닝 프레임워크]] 제작이다.[* [[웹 브라우저]] 엔진도 2010년대 오면서 OS급의 복잡성을 자랑하게 되었지만 엔진이 대부분 [[오픈 소스]]인 고로 자체개발이 목적이 아니면 그냥 끌리는 거 하나 퍼서 쓰면 된다(...).] 컴파일러는 [[컴퓨터과학]] 학부과정 커리큘럼의 3, 4학년에 있는 과목이다. 컴파일러를 제작하려면 [[컴퓨터구조]]와 소프트웨어를 전부 이해하고 있어야 하고 [[자료구조]]와 [[알고리즘]]에 대한 심도 깊은 이해와 함께 [[이산수학]]에도 능해야 한다. 컴파일러를 제작하고 [[LLVM]]같은 오픈 소스에 기여할 수 있을 정도의 실력이라면 글로벌 탑티어 IT 기업에 쉽게 들어갈 정도의 실력이 된다. 거기서 더 나간 스킬 트리로는 [[프로그램 최적화]]가 있는데 이건 컴파일러의 보조 스킬. --물론 [[BrainFuck]]류의 [[난해한 프로그래밍 언어]]의 컴파일러는 간단한 편-- -- 이런 종류의 컴파일러는 만들기 쉬운데 이걸로 고급 프로그래밍을 하기가 컴파일러 제작급 난이도-- 기계어를 다시 프로그래밍 언어로 바꾸는 디컴파일이라는 용어도 있다. 사실 컴파일 과정에서 소스 코드의 일부 정보를 지워버리기 때문에 완전한 디컴파일은 불가능하다. 대체로 [[Java]]/[[C\#]] 등 VM기반 언어는 디컴파일시 손실되는 정보가 적은 편[* 컴파일 프로필에 따라 완전한 소스 코드 복구까지 가능할 정도.]이고 [[C언어|C]]/[[C++]]의 경우 컴파일 프로필이 '릴리즈' 모드일 경우 거의 모든 인터페이스 정보가 손실된다. 이를 디컴파일하는 것은 사실상 어셈블리를 분석하여 그에 맞는 C/C++ 코드를 역산하는 [[리버스 엔지니어링]]을 인공지능으로 하는 것에 가깝다. 간혹 프로필을 '디버그'로 둔 채 그대로 릴리즈해버린 경우가 있는데 이 경우에는 디컴파일시 꽤 많은 정보가 보존되어 나온다. 하지만 대개 지역변수 이름 같이 지역성이 명백하고 기계에게 필요없는 정보는 날아가는 편이다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기