1950년말 특정 프로세서 아키텍처에 독립적인 고 수준 프로그래밍 언어가 개발됨
- 고수준 언어를 쓰면 사람이 표현하는 방식에 가까운 용어로 계산 과정을 작성 가능
- 고수준 언어로 작성된 코드는 번역기 프로그램을 통해 대상 프로세서의 어셈블리 언어로 된 명령어로 변환 됨
- 변한 된 명령어는 어셈블러에 의해 비트로 변환되어 메모리에 로드되고 실행 됨
- 번역기 프로그램은 보통 컴파일러(Compiler)라고 불림
일반적인 고수준 언어에서는 두 수 X와 Y를 더하고 결과를 Z에 저장하는 계산이 다음과 같음
Z = X + Y
- 이는 'X와 Y라는 메모리 위치에서 갑승ㄹ 가져와, 두 값을 더하고, Z라는 메모리 위치에 결과를 저장하라' 라는 뜻
- 연산자 '='는 '같다'가 아니라 '대체하다' 또는 '저장하다'라는 뜻으로 쓰임
명령어는 컴파일러에 따라서 다른 명령어로 변환 됨
- 각 어셈블러는 각자의 어셈블리 언어 명령어를 실제 명령어의 비트 패턴으로 변환함
- 또한 변수 X,Y,Z를 저장할 메모리 위치를 확보
컴파일러는 내부적으로 하나의 '프런트엔드(전단부)'와 몇 개의 '백엔드(후단부)'로 나뉠 가능성이 있음
- 프런트엔드는 고수준 프로그래밍 언어로 작성된 프로그램을 처리해 어떤 중간 형태로 만듬
- 각 백엔드는 공통된 중간 표현을 특정 아키텍처에 맞는 어셈블리 언어로 변환
- 이 구조는 독립적인 여러 개의 컴파일러를 이용하는 것보다 단순함
고수준 언어는 어셈블리 언어에 비해 큰 이점을 가짐
- 사람들이 생각하는 방식에 더 가까워 배우고 사용하기 쉬움
- 고수준 언어에서는 프로그램을 효율적으로 짜기 위해 특정 프로세서의 명령어 레퍼토리를 알아야 할 필요가 없음
고수준 언어로 작성된 프로그램은 특정 아키텍처에 종속되지 않음
- 같은 프로그램이 여러 아키텍처상에서 실행 될 수 있음
- 보통은 코드를 변경할 필요 없으며 한번 작성시 다양한 컴퓨터에서 실행 할 수 있음
컴파일 단계는 몇 가지 명백한 에러를 미리 점검하게 해줌
- 철자 오류, 괄호 불일치와 같은 구문 오류
- 정의되지 않은 변수에 대한 연산 등
- 어셈블러는 명령어의 실행 순서까지는 상관하지 않아서 에러를 검출 하기 어려움