티스토리 뷰
핵심 정리
저급 언어 | - 기계어(0·1 비트열)와 어셈블리어(기계어를 사람이 읽기 쉬운 Mnemonic 으로 치환)로 구성- “컴퓨터가 곧바로 실행 가능” |
고급 언어 | - 인간 친화적 구문(C, C++, Java, Python 등)- 실행 전 반드시 저급 언어로 변환해야 함 |
컴파일 방식 | - 컴파일 → 목적코드 → 링크 → 실행 파일 순서로 한 번만 변환- 실행 단계는 곧바로 네이티브 코드라 속도↑ |
인터프리터 방식 | - 실행 때마다 한 줄씩 해석·실행 → 별도 실행 파일 없음- 수정·테스트 즉시 반영되지만 속도↓ |
“둘은 배타적” 오개념 경계 | - Java · Python처럼 컴파일+인터프리터+JIT 혼합 모델이 보편 |
더 깊게 들어가기 — 6가지 학습 포인트
주제 보충 설명 예시
1. 프로그래밍 언어 세대(Generation) | 1세대 = 순수 기계어, 2세대 = 어셈블리, 3세대 = C·Java 같은 절차/객체 지향, 4세대 = SQL 등 DSL, 5세대 = 논리/AI 지향( Prolog) | |
2. 컴파일 파이프라인 | Lexing → Parsing → IR 생성 → 최적화 → 코드 생성 → 링크 IR(Intermediate Representation)이면 LLVM IR·bytecode 등 아키텍처 독립 포맷 | |
3. JIT & AOT | • JIT(Just-In-Time): 바이트코드를 런타임에 네이티브로 동적 컴파일 → Java HotSpot, V8 엔진 (Just-in-time compilation) • AOT(Ahead-Of-Time): 미리 네이티브로 고정 컴파일 → Android NDK, Go 1.20의 go build -buildmode=pie | |
4. 하이브리드 실행계층 | 소스 → 바이트코드(컴파일) → 인터프리트 + JIT VM → 네이티브. 덕분에 이식성(bytecode)과 성능(JIT) 동시 확보 | |
5. 링크 방식 | • 정적 링크: 모든 라이브러리를 실행 파일에 묶음—배포 단순·용량↑ • 동적 링크: OS가 필요한 DLL/SO를 런타임에 연결—메모리 공유·업데이트 용이 | |
6. 트랜스파일러·크로스컴파일러 | 타입스크립트→자바스크립트, Emscripten(C/C++→WebAssembly)처럼 “A 언어 → B 언어” 소스-to-소스 변환도 현대 워크플로의 일상 |
실전 감각 — 짧은 코드 흐름 비교
/* C (컴파일 언어) */
#include <stdio.h>
int main(){ printf("Hello\\n"); }
$ gcc hello.c -o hello ← Compile+Link
$ ./hello ← 즉시 네이티브 실행
# Python (인터프리터+바이트코드+JIT 가능)
print("Hello")
$ python hello.py ← .py ⟶ .pyc(bytecode) ⟶ 해석(JIT 가능)
공부 로드맵 & 참고자료
- 서적
- 《컴파일러 : 원리·기술·도구(드래곤북)》— 어휘·구문·IR 전체
- 《프로그램 실행과 저수준 프로그래밍》— ASM↔C 관계 (Low-level programming language)
- 실습 제안
- 같은 알고리즘을 C·Python 양쪽으로 작성 → time 명령으로 실행 시간 비교
- javap -c 로 Java 바이트코드 열람, python -m dis 로 CPython 바이트코드 열람
- LLVM clang -S -emit-llvm 으로 IR 관찰 후 llc → 네이티브 코드로 내려보기
- 심화 키워드 : Inline Assembly, Garbage Collection(Stop-the-World vs GC Pause), Dynamic Typing vs Static Typing, WebAssembly (AOT+JIT 혼합).
한 문장으로 압축
저급↔고급 언어 구분은 “하드웨어 추상화 수준”, 컴파일↔인터프리트 구분은 “언제·어떻게 저급 코드로 바꾸느냐”의 차이이며, 현대 언어 실행 엔진은 컴파일·인터프리트·JIT 를 자유롭게 조합해 이식성·개발 편의·성능 세 토끼를 동시에 쫓는다.
'다시 정리하는 CS 이론 > 컴퓨터구조론' 카테고리의 다른 글
[컴구론] 명령어의 구조 (0) | 2025.05.01 |
---|---|
[컴구론] C++ 실습 : 정적 링크 VS 동적 링크 (0) | 2025.05.01 |
[컴구론] FDEW 가속 (0) | 2025.05.01 |
[컴구론] 컴퓨터 구성요소 (2) | 2025.05.01 |
[컴구론] 컴퓨터 구조론 정의 정리 (0) | 2025.05.01 |
Comments
최근에 올라온 글