Complie, Compiler, Complie language
컴파일이란 고수준 언어로 작성된 소스 코드(컴퓨터 프로그램)을 기계어 코드(명령어)로 변환하는 과정을 뜻합니다. 컴파일러는 컴파일 과정을 수행하는 번역기(컴퓨터 프로그램)입니다.
컴파일 언어는 코드가 실행되기 전 컴파일러를 거쳐 기계어로 모두 변환된 뒤 실행되는 프로그래밍 언어입니다.(컴파일 환경 존재)이 언어는 컴파일 시간 동안 모두 번역되어 빠른 경향이 있습니다. 왜냐하면 이와 반대되는 인터프리터 언어는 런타임 시간 동안 번역 프로세스가 진행되고, 그에 따른 오버헤드가 발생할 수 있기 때문입니다. (그러나 just in time 컴파일과 같은 최신 기술과 번역 프로세스가 개선되어 이 차이는 점차 좁혀지고 있습니다.) 또한 직접 기계어로 변환되어 실행되기 때문에 개발자가 메모리 관리나 CPU사용과 같은 하드웨적인 측면에서 더 많은 제어를 할 수 있습니다. 컴파일 언어는 '빌드' 과정이 필요합니다. 코드를 수정한다면 그때마다 '재빌드' 해야 합니다.
Interpreter language
인터프리터 언어는 런타임 환경에서(프로그램이 실행되는 동안) 한 줄 한 줄 실행하고 각 명령을 실행합니다. (컴파일 언어와 다르게)명령어가 다른 프로그램(가상 머신)에서 실행되고, 별도의 실행 파일이 존재하지 않습니다. 컴파일 언어보다 더 느렸지만, just-in-time 컴파일 이후로 그 격차가 줄어들고 있습니다.
Just-in-tme compilation(JIT)
dynamic translation or run-time compilations : 동적 변환 혹은 런타임 컴파일
실행 전이 아닌, 프로그램 실행 중(런타임)에 source code를 컴파일하는 것을 뜻합니다. 동적 컴파일의 한 형태입니다. 프로그램을 실행하는 시점에 바이트 코드를 기계어로 변역합니다. 정적 컴파일(compilation)과 인터프리터 방식의 중간 단계로 생각할 수 있습니다.
>> Javascript 관점에서 JIT 사용 관련 분석 필요(향후 포스팅)
Type System
타입 시스템은 프로그램의 일관성(Consistency)를 체크하기 위해 사용되는 규칙 모음입니다. 타입 오류로 인한 프로그램의 버그를 줄이기 위해 사용합니다. 타입 시스템을 통해 컴파일러는 타입 별로 필요한 알고리즘을 최적화하여 사용할 수 있습니다.
Typing :: Static & Dynamic
Static Typing 정적 타입 언어
변수의 타입이 컴파일 시간에 결정되는 언어를 뜻합니다. 프로그램이 실행되기 전 (컴파일 과정을 통해) 모든 타입 체크가 완료되기 때문입니다. 컴파일 시간 중 타입 오류를 발견하기 때문에 이와 관련된 일관성을 지킬 수 있으며 관련 오류를 방지하여 안정성이 높습니다.
Dynamic Typing 동적 타입 언어
변수의 타입이 실행시간(런타임)에 결정되는 언어를 뜻합니다. 따라서 코드 작성 시 명시적으로 타입을 선언할 필요가 없으며 변수에 다른 타입의 값을 할당할 수 있다는 유연성을 제공합니다. 그러나 런타임 시 이와 관련된 오류가 생길 수 있어 안정성이 낮습니다.
Reference
https://developer.mozilla.org/en-US/docs/Glossary/Compile
https://en.wikipedia.org/wiki/Compiled_language
Type Systems for Programming Languages( BC Pierce 저술)
https://en.wikipedia.org/wiki/Type_system
https://www.geeksforgeeks.org/difference-between-compiled-and-interpreted-language/
https://en.wikipedia.org/wiki/Interpreter_(computing)
(읽어보면 좋을 포스트): 컴파일러-인터프리터-가상머신
이미지 포함 출처: Difference between Compiled and Interpreted Language
https://www.bairesdev.com/blog/static-vs-dynamic-typing/
https://www.linkedin.com/pulse/dynamic-vs-static-typing-dev-agrawal
https://en.wikipedia.org/wiki/Just-in-time_compilation
'공부기록 > CS' 카테고리의 다른 글
[TIL][CS 기초] CPU vs GPU | SSD, HDD (0) | 2024.03.11 |
---|---|
[TIL][CS 기초] 32 Bit vs 64 Bit | 2's complement, 1's complement | 실수 표현법 (0) | 2024.03.07 |
[TIL][Fri][CSAPP] ch 6. The memory hierachy (0) | 2023.11.10 |
[TIL][Tue] [CSAPP/CH.3] Machine Programming 1: Basics (0) | 2023.10.31 |
[TIL][CS 기초] Memory structure : Stack, Heap | Garbage Collect (0) | 2023.10.23 |