티스토리 뷰
TL;DR
어느 시점에 source code에서 machine code로 compile 되는지에 따라 다르다.
- interpreter : runtime
- compiler(AOT) : runtime 전
실행속도 | 이식성 | 컴파일 시간 | 종류 |
빠름 | 별로 | 느림 | go, rust, Haskel |
느림 | 좋음 | 빠름(bytecode) | python, ruby |
보통(JIT 구현에 따라 차이) | 좋음 | 빠름(bytecode) | pypy, java |
Compiler VS Interpreter
Compiler : 번역기
컴파일러(compiler, 순화 용어: 해석기, 번역기)는 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램을 말한다.
- 특정 언어에서 특정 언어로 바꿔 주는 것
- 원시 코드 -> 목적 코드
- 원시 코드: 원래의 문서, 소스코드
- 목적 코드: 주로 하드웨어가 처리하기에 용이한 형태
Compliation
컴파일 과정에는 Tokenization, Parsing 등의 작업이 포함된다.
- Lexer: 소스 코드(컴퓨터 입장에서는 문자)를 입력받아 여러 개의 토큰으로 변경시킨다.
- Parser: 토큰을 분석하여 분석 트리(AST)를 구성한다.
- Code Generator: 기계어 생성
Interpreter : 해석기
인터프리터(interpreter, 문화어: 해석기)는 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다.
- 아래 기능 중 적어도 한 가지 기능을 가진 프로그램
- 소스 코드를 직접 실행한다.
- 소스 코드를 효율적인 다른 중간 코드로 변환하고, 변환한 것을 바로 실행한다
- 인터프리터 시스템의 일부인 컴파일러가 만든, 미리 컴파일된 저장 코드의 실행을 호출한다. 1
Notes
프로그래밍 언어 목적
Compiled 언어, Interpreted 언어 모두 사람이 읽을 수 있는 Source coded에서 CPU가 실행할 수 있게 Machine code로 바꾸는 것
많은 프로그래밍 언어는 Compiler와 Interpreter를 둘 다 사용한다
- Source code에서 직접 해석하면서 실행시키는 건 매우 느리기 때문
- bytecode를 중간에 만들어 놓고 bytecode를 실행시키는 구조
Fully Interpreted Languaes
온전히 바로 Interpreted 되는 언어는 Javascript가 있다.
- network로 바로 전송이 가능하고 유저의 browser에서 바로 실행이 가능한 이점이 있다.
JIT(Just-In-Time)
- Hybrid 방식(실행 시점에 인터프리터 방식으로 기계어 코드 생성하여 캐싱)
- 아직 compile이 되지 않으면 느리지만 compile 되면 빠르다는 장점이 있다.
- Implementations: java, c#, pypy, v8..
Python Interpreter
python의 interpreter안에서 compiler가 pyc파일(byte code)을 만들고 python의 runtime engine인 PVM(python virtual machine)에 byte code를 전달한다
- pyc는 py파일이 import 될 때 생성된다.
Python Compliation
- Source Code -> Parse Tree
- Parse Tree -> AST(Abstract Syntax Tree)
- AST -> 제어 흐름 그래프(Control FlowGraph)
- CFG -> Byte Code
Other python implementations
Reference
- youtube.com/watch?v=QXjU9qTsYCc
- finematics.com/compiled-vs-interpreted-programming-languages/
- ko.wikipedia.org/wiki/컴파일러
- ko.wikipedia.org/wiki/인터프리터
- thebook.io/006950/ch11/01/02/
- velog.io/@doondoony/How-Python-works
- medium.com/@thelukaswils/understanding-compilers-for-humans-ba970e045877
- ichi.pro/ko/paisseon-baiteukodeu-ihaehagi-255007960625997
- towardsdatascience.com/understanding-compilers-for-humans-version-2-157f0edb02dd
- www.slideshare.net/Chun92/abstract-syntax-semantic-analyze
- gracefulprograming.tistory.com/16
- 이 관점으로 CPU도 machine instructions의 interpreter로 볼 수 있다 [본문으로]
반응형
'CS' 카테고리의 다른 글
[Network] HTTP/0.9 ~ 1.1 (0) | 2022.01.03 |
---|---|
[Network/OS] Network Socket(IP Socket, WebSocket) (0) | 2021.12.27 |
[DB]Transaction(Race condition, Isolate level (0) | 2021.11.16 |
[Network]기본 개념 (0) | 2021.10.30 |
[Network]Cloud 종류 (0) | 2021.10.25 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- pytest
- database
- user-agent
- HTTP/3
- Isolate level
- 원티드
- Complier
- GitHub
- gitignore
- web_server
- QUIC
- 창업
- http
- docker-compose
- Git
- thetextbook
- 프리온보딩
- inflearn
- cka
- Network
- direnv
- 위코드
- buildkit
- MSA
- no-op
- HTTP/2
- Python
- 덕타이핑
- go
- k8s
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함