2020. 2. 17. 13:30ㆍ프로그래밍-Science/운영체제
정말 익숙하고도 간단해보이는 단어들이지만
개발업무를 진행하다 보면 혼용하는 경우가 많다
그래서 간단히 정리!
1. 컴파일
개발자들은 '소스코드'를 작성한다
근데 멍청한 컴퓨터들은 소스코드를 읽을 수 없다
사람의 언어이기때문!
그래서 '컴파일'이라는 작업을 통해(컴파일러가 이 역할을 진행한다)
소스코드를 컴퓨터가 읽을 수 있는 바이너리 코드로 전환한다
그렇기때문에 컴파일을 하고나면 항상 목적파일이 뚝 떨어진다
자바같은 경우는 JVM이라는 자바가상머신에서 클래스 파일을 뚝 떨어뜨린다
내가 자주쓰는 JavaScript의 경우는 조금 더 특이하다
이놈은 토크나이징-파싱-코드생성이라는 세가지 단계를 거친다
'스캐너'의 경우 코드를 토큰(Token)으로 만드는 작업이다.
var a = 2;라는 코드가 있다면, var/a/=/2/; 요렇게 말이다
'파싱'은 문법구조를 고려하여 얘를 트리라는 자료구조 형태로 만드는 과정
얘를 가리켜 AST(추상 구문 트리) 라고 한다
예를 들자면 요런식
문법구문을 하나씩 체크하여 트리형태로 설명을 쭉 적어내려간다
이렇게 하고 컴퓨터가 이해할 수 있는 코드를 생성하면 끝!
2. 빌드
그렇다면 빌드는?
이를 이해하려면 링크(LINK)에 대해 알아야 한다
링크는 하나의 소스파일을 컴파일 한 후, 해당 소스파일에서 불러야 하는 함수가 다른 소스파일에 있다면 그것을 연결시켜주는 것을 이야기한다.
동적링크/정적링크로 나뉘지만 그건 나중에 얘기하기로 하고..
무튼 빌드는 컴파일과 링크이다
그러니까 빌드=컴파일+링크가 된다
사전적인 정의로 풀어보면, 소스코드를 실행할 수 있게끔 바꾸는 것을 빌드라고 한다
그래서 일반적으로 빌드툴에는 테스트나 배포 같은 것들도 포함한다
MAVEN이 대표적인 툴
요새는 Dev-Ops(개발자가 개발하면서 운영자에게 바로 피드백 받는 프로세스)가 대세이기 때문에
자동빌드가 필수
+ 한 가지만 더
그럼 컴파일러와 인터프리터의 차이는 뭘까?
둘 다 하이레벨의 언어를 기계어로 변환한다는 점에선 같으나 작동 기재의 차이가 있다
컴파일러는 소스코드 전체를 한 번 훑고 바로 기계어로 변환하지만,
인터프리터는 하이레벨 언어를 중간언어로 일단 변화시키고 각 행마다 다시 체크한다
물론 체크하다가 에러가 나면 그 뒤의 행은 안본다
'프로그래밍-Science > 운영체제' 카테고리의 다른 글
[운영체제 개정 3판] 4) 프로세스와 스레드 (0) | 2021.01.07 |
---|---|
[운영체제 개정3판] 2) 컴퓨터 시스템의 동작 (0) | 2021.01.07 |
[운영체제 개정3판] 1) 컴퓨터 하드웨어의 구성 (0) | 2021.01.07 |
[전산공부] 프로세스 vs 쓰레드 (0) | 2020.02.23 |