php게시판에는 맞지 않는 질문같지만 따로 카테고리가 없어 질문 남깁니다.
본문
안녕하세요, 우선 저는 비전공자이며 프로그래밍언어에 관한 지식이 부족함을 미리 알립니다.
인터넷을 통하여 언어에대해 공부하던 중 이런 의문이 들었습니다.
흔히 컴퓨터와 더 가까운 언어를 저레벨 언어 사람과 더 가까운 언어를 고레벨 언어라고하잖아요.
간단히 도식화하면
컴퓨터 < --------------------------------------> 사람
c/c++ java/c# php/python JS html/CSS
이런 식으로요. 그런데 이번에 스크립트 언어/ 컴파일 언어라는 구분을 또 알게 되었는데요.
그 분류에따르면 C같이 코드를 기계어로 번역이 필요한 언어를 컴파일 언어
JS같이 런타임으로 실행하며 바로 동작하는 언어를 스크립트 언어라고 하던데요.
그럼 왜 기계와 더 친숙한 C나JAVA는 컴파일이라는 기계어로 번역하는 작업을 거치고
오히려 사람과 더 가까운 JS는 런타임으로 번역과정 없이 바로 실행되는 건가요?
이렇게 보면 오히려 번역이 필요없으니 JS가 기계와 더 친숙한 것 아닌가요?
이게 기술적인 문제나 이런건 아닌데 참 궁금해서요. 잘 아시는 분은 답변 부탁드립니다!
답변 4
우리가 실제 외국어를 통역을 한다고 했을때
대본이 있는 외국어 번역은 쉽게 번역합니다. 하지만 그렇지 못한 것은 아무래도 좀 힘들죠.
크게 컴파일러와 인터프리터의 차이점만 알고계시면 됩니다.
컴파일은 정적인 반면에 인터프리터는 동적인 성격이 강하죠.
인터프리터는 row단위로 즉시해석을 하기 때문에 실행 속도가 느리고,
컴파일러는 미리 변환하여 실행하기 때문에 빠른거죠.
또한 컴파일러 방식은 대부분 os 레벨에서 종속적이기 때문에 실행 이점은 인터프리터 방식보다 빠릅니다.
이렇게 말씀 드린것은 학교에서 배운 전통적인 방식입니다만,
우리나라에서는 php보다 java를 선호하지만, 2021년도 기준으로 북미에서는 php laravel이 java spring boot보다 앞도적으로 사용자들이 많습니다.
( https://www.parrolabs.com/blog/2021-07-29-top-5-popular-backend-frameworks-in-2021 )
그 이유는 php로 개발이 만들어 진것은 서비스 운영시 대응이 빠르다는 겁니다. 이 것은 파이썬 장고도 마찬가지 입니다. 컴파일러로 구현된 서비스 보다는 스크립트형으로 구현된 언어가 운영하기 편합니다.
컴파일러 기반의 언어로 구현하여 운영을 하면 실행속도는 빠를수 있지만 서비스에 반영을 하려면
재컴파일하고 다시 올려야 하기 때문에 복잡하고 서비스를 즉각 대응하기 힘듭니다.
이러한 문제점을 해결을 한 것이 golang이라는 언어입니다. 컴파일러 언어이지만 인터프리터 언어의 장점을 가지고 있기 때문에 많은 사랑을 받고 있죠.
이러한 부분을 공부를 해보시려면 php 코어 부분이랑 golang 코어 부분을 인터넷에서 서치하셔서
공부하시면 많은 도움이 되실겁니다.
런타임 언어나 컴파일언어나 컴퓨터가 읽을 수 있는 기계어 형태로 변환하여 읽어들이는건 똑같습니다.
다만 컴파일 언어의 경우 미리 빌드해서 컴퓨터가 읽을 수 있는 파일형태로 저장해서 실행하는것이고
런타임 언어의 경우 실행을 할 때마다 컴퓨터가 한줄한줄 변환하여 읽는 것입니다.
파일의 용량이 크고 실행이 무겁다면, 컴파일 언어를 주로 사용하게 됩니다.
상대적으로 프로그램이 가벼운 경우,실행속도에 크게 체감을 주지 않고, 수정이 용이해야한다면 런타임 언어를 사용하는것입니다.
둘다 컴퓨터가 읽을 수 있는 것으로 변환하는것은 똑같습니다.
변환을 미리 해놓고 해당 파일로 실행하느냐, 아니면 요청이 들어올때 하느냐의 차이일뿐입니다
그냥 제가 들은것과 제 생각으로는
c, java 등도 고급언어인거같은데, 저 그림에서 일단 html/css 는 빼구요
아마 이게 맞지않을지
컴퓨터 < -- 기계어 -- (컴파일) -- 고급어(c, java, php 등등) -- > 사람
그 기계언어라는게 어떤 프로그래밍 언어를 말하는게 아니라 진짜
사람이 보면 절대로 못알아먹을 그런 @#$dsfwe234 이런 코드를 말하는걸껄요 ㅋㅋ
모든 프로그램은 기계어로 되어 있어야 실행이 가능합니다.
런타임이란 뜻은 그 때 그때 기계어로 번역한다는 뜻입니다.
더 정확하게는
스크립트 언어는 일종의 데이터가 되고(런타임)
이 데이터를 읽고 실행하는 것이 따로 있습니다.(c 언어 등으로 컴파일 된 것)