Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[1주차] JavaScript는 인터프리터 언어일까? 컴파일러 언어일까? #3

Open
hoongding opened this issue Feb 27, 2024 · 1 comment

Comments

@hoongding
Copy link
Contributor

hoongding commented Feb 27, 2024

주제

JavaScript는 인터프리터 언어일까? 컴파일러 언어일까?

선정 이유

저번 스터디에서도 Babel에 대한 주제로 Babel이 트랜스파일러 인지 컴파일러인지 에 대한 스터디를 했다.
YDKJSY 책에서는 JS가 인터프리터 언어인지 컴파일러 언어인지에 대한 내용이 적혀 있었다.
결국 JS는 스크립트 언어이지만 그 내부의 속사정은 훨씬 복잡하다.

그 속사정에 대해 함께 다시 되짚어보고, 토론해보고자 한다.

책 내용 (p44)

@hoongding
Copy link
Contributor Author

  1. Script언어에 대한 정의?
    • 소스코드를 별도의 컴파일 과정없이 직접 실행할수 있는 언어를 스크립트 언어라고 한다.
    • 빠른 개발과 실행시간에 중점을 둔 언어
    • JS, Python, Ruby, PHP 같은게 스크립트 언어라고 한다.
  2. 스크립트언어 | 인터프리터 | 컴파일러
    1. 스크립트언어 인터프리터언어 를 동시에 만족할 수 있는가?
    2. A 교 B = 공집합
    3. A 교 C = 공집합

[44p] JS가 인터프리터 언어? 컴파일러 언어? JS는 어떻게 오류를 처리?

결론은 JS는 Script 언어 라는 것!

[ 인터프리터 언어 ]

  • 위에서 아래로 한 줄씩 코드가 실행되는 방식
  • 실행이 시작되기 전에 거치는 사전단계가 없다.

[ 파싱을 거치는 언어 vs 컴파일을 거치는 언어 ]

공통점

  1. 모든 컴파일 언어가 파싱을 거친다.
  2. AST를 컴퓨터가 실행할 수 있는 형태로 바꿔주는 작업이 파싱 다음에 이루어짐.

→ 파싱을 거치는 언어 == 파싱에서 끝나는게 아닌, 실행 가능한 코드를 생성하는 작업까지 수행

→ 이런 이유로, 파싱을 거치는 언어 === 컴파일 언어 라고 한다!

[ JS 가 실행 될때까지 어떤 과정을 거칠까? ]

  1. 바벨이 트랜스파일링, 번들러(웹팩) 을 거쳐 번들링, JS엔진에 코드가 전달됨.
  2. JS엔진은 전달받은 코드를 파싱해서 AST로 바꾼다.
    Abstract Syntax Tree
    ( = 컴퓨터가 이해할 수 있도록 언어를 트리 구조로 나타낸 것 )
  3. JS엔진은 **AST → 이진 바이트 코드**로 변환 이 과정에서 JIT 컴파일러가 작동하며 최적화가 함께 진행됨
  4. JS 가상 머신이 프로그램을 실행

[ 결론 ]

  • 결국 JS는 컴파일 언어라고 필자는 생각
    • JS는 실행하기 전, AST를 만들기에 이상한 문법을 입력하는 것을 사전에 잡아낸다.
    • 따라서 컴파일 언어와 더 유사하지 않나 생각함!!

[ JS가 인터프리터 언어라고 주장하는 사람들의 논리는? ]

poiemaweb

자바스크립트는 개발자가 별도의 컴파일 작업을 수행하지 않는 인터프리터언어(Interpreter language)이다. 대부분의 모던 자바스크립트 엔진(Chrome의 V8, FireFox의 Spidermonkey, Safari의 JavaScriptCore, Microsoft Edge의 Chakra 등)은 인터프리터와 컴파일러의 장점을 결합하여 비교적 처리 속도가 느린 인터프리터의 단점을 해결했다. 인터프리터는 소스코드를 즉시 실행하고 컴파일러는 빠르게 동작하는 머신 코드를 생성하고 최적화한다. 이를 통해 컴파일 단계에서 추가적인 시간이 필요함에도 불구하고 보다 빠른 코드의 실행이 가능하다.

@hoongding hoongding changed the title JavaScript는 인터프리터 언어일까? 컴파일러 언어일까? [1주차] JavaScript는 인터프리터 언어일까? 컴파일러 언어일까? Feb 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants