컴파일된 언어와 통역된 언어의 차이점은 무엇입니까?
이 주제에 관한 자료를 읽은 후에도 컴파일된 언어와 통역된 언어의 차이가 무엇인지 아직 잘 모르겠습니다.이것이 자바와 자바스크립트의 차이점 중 하나라고 들었습니다.누가 이해를 좀 해줄래요?
컴파일된 언어와 통역된 언어의 차이점은 무엇입니까?
차이점은 언어에 있는 것이 아니라 구현에 있습니다.
내 머릿속에서 그것을 없앤 후, 다음과 같은 답이 있다.
컴파일된 실장에서는 원래의 프로그램이 네이티브 머신 명령으로 변환되어 하드웨어에 의해 직접 실행됩니다.
해석된 구현에서는 원래 프로그램이 다른 것으로 변환됩니다.'인터프리터'라고 불리는 또 다른 프로그램은 '다른 것'을 검사하고 필요한 모든 작업을 수행합니다.언어와 그 구현에 따라 다양한 형태의 "다른 것"이 있습니다.더 인기 있는 것에서 덜 인기 있는 것으로, "다른 것"은
Lua, Python, Ruby, Smalltalk 및 기타 많은 시스템에서 실행되는 가상 머신의 바이너리 명령(이 접근법은 1970년대에 UCSD P-system 및 UCSD Pascal에 의해 보급되었습니다)
많은 프로토타입 또는 교육용 인터프리터에게 적용되는 추상 구문 트리와 같은 원본 프로그램의 트리 같은 표현
Tcl과 유사한 소스 프로그램의 토큰화된 표현
소스 프로그램의 캐릭터(MINT 및 TRAC에서 수행
이 문제를 복잡하게 만드는 한 가지는 바이트 코드를 네이티브 머신 명령으로 변환할 수 있다는 것입니다.따라서 성공적으로 도입된 구현은 결국 컴파일러를 획득할 수 있습니다.컴파일러가 백그라운드에서 동적으로 실행되는 경우 JIT 컴파일러 또는 JIT 컴파일러라고 불립니다.JIT는 Java, JavaScript, Lua, 그리고 다른 많은 언어들을 위해 개발되었습니다.이 시점에서 일부 코드가 해석되고 일부 코드가 컴파일되는 하이브리드 구현을 수행할 수 있습니다.
Java와 JavaScript는 이 차이를
, because both are interpreted languages
보여주는 매우 나쁜 예입니다.Java 및 C(또는 C++)가 더 나은 예입니다.
왜 줄 그은 텍스트야?이 답변이 정확하게 지적하고 있듯이 해석/편찬은 언어 그 자체가 아니라 언어의 구체적인 구현에 관한 것입니다."C는 컴파일된 언어"와 같은 진술은 일반적으로 사실이지만, 누군가가 C 언어 통역사를 쓰는 것을 막을 수 있는 것은 아무것도 없습니다.사실 C의 통역사는 존재합니다.
기본적으로 컴파일된 코드는 컴퓨터의 CPU로 직접 실행할 수 있습니다.즉, 실행 가능한 코드는 CPU의 "원어민" 언어(어셈블리 언어)로 지정됩니다.
단, 인터프리터 언어의 코드는 런타임에 모든 포맷에서 CPU 머신의 명령어로 번역해야 합니다.이 번역은 통역사가 합니다.
즉, 프로그램 실행 중에 해석된 코드를 기계 명령어로 단계적으로 변환하고 컴파일된 코드를 프로그램 실행 전에 변환하는 것입니다.
컴파일러와 인터프리터 언어의 기본적인 차이를 다음에 나타냅니다.
컴파일러 언어
- 전체 프로그램을 단일 입력으로 받아 파일에 저장된 개체 코드로 변환합니다.
- 중간 개체 코드가 생성되었습니다.
- 예: C, C++
- 컴파일된 프로그램은 실행 전에 컴파일되므로 실행 속도가 빨라집니다.
- 메모리 요건은 오브젝트 코드 작성에 의한 것입니다.
- 전체 프로그램이 컴파일된 후 오류가 표시됩니다.
- 소스 코드 ---컴파일러 ---기계 코드 ---출력
인터프리터 언어:
- 단일 명령을 단일 입력으로 사용하고 명령을 실행합니다.
- 중간 개체 코드가 생성되지 않았습니다.
- 예: Perl, Python, Matlab
- 컴파일과 실행이 동시에 이루어지기 때문에 인터프리터된 프로그램의 실행 속도가 느려집니다.
- 메모리 요건이 적습니다.
- 각 명령마다 오류가 표시됩니다.
- 소스 코드 ---인터프리터 ---출력
컴파일러는 일반적으로 상위 수준의 언어 컴퓨터 코드를 읽고 이를 p-코드 또는 네이티브 기계 코드로 변환합니다.인터프리터는 p-code 또는 Basic 또는 Lisp 등의 인터프리터 코드로부터 직접 실행됩니다.일반적으로 컴파일된 코드는 훨씬 빠르게 실행되며 더 컴팩트하며 구문 오류와 잘못된 참조 오류를 모두 이미 발견했습니다.해석된 코드는 응용 프로그램이 영향을 받는 코드를 해석하려고 시도한 후에만 이러한 오류를 찾습니다.해석된 코드는 종종 한 번만 또는 최대 두 번 사용할 수 있는 단순한 애플리케이션이나 프로토타이핑에 적합합니다.컴파일된 코드는 심각한 응용 프로그램에 적합합니다.컴파일러는 먼저 전체 프로그램을 가져와 오류를 확인하고 컴파일한 다음 실행합니다.반면 인터프리터는 이 작업을 한 줄씩 수행하므로 한 줄씩 수행하고 오류를 확인한 후 실행합니다.
자세한 내용은 Google에서 "컴파일러와 인터프리터의 차이"를 참조하십시오.
이것은 매우 애매한 구별이며, 사실 일반적으로 언어 자체의 속성이 아니라 해당 언어로 코드를 실행하기 위해 사용하는 프로그램의 특성입니다.
그러나 대부분의 언어는 주로 어떤 형태로든 사용되며, 자바 스크립트는 기본적으로 항상 컴파일되며, 자바스크립트는 기본적으로 항상 해석됩니다.
소스 코드를 컴파일하는 것은 실행 시 소스에 의해 정의된 동작을 갖는 바이너리 실행 파일을 생성하는 프로그램을 실행하는 것입니다.예를 들어 javac은 인간이 읽기 쉬운 .java 파일을 기계가 읽을 수 있는 .class 파일로 컴파일합니다.
소스 코드를 해석하려면 중간 파일을 생성하지 않고 정의된 동작을 즉시 생성하는 프로그램을 실행합니다.예를 들어 웹 브라우저가 stackoverflow.com를 로드하면 다수의 javascript(페이지 소스를 보고 확인할 수 있음)가 해석되어 이러한 페이지의 많은 훌륭한 효과를 얻을 수 있습니다.예를 들어, 업 투표나 맨 위에 있는 작은 알림 바 등이 있습니다.
인터프리터 언어는 셸 스크립팅과 같은 명령에 따라 실행되며 컴파일된 언어는 c++와 같이 컴파일(CPU가 인식할 수 있는 어셈블리 언어로 변경)된 후 실행됩니다.
다른 사람이 말했듯이 컴파일 및 해석은 프로그래밍 언어의 구현에 특화되어 있으며 언어 고유의 것이 아닙니다.예를 들어 C 인터프리터가 있습니다.
다만, 가장 일반적인(때로는 표준적인) 실장에 근거해 프로그래밍 언어를 분류할 수 있습니다.예를 들어 C가 컴파일되어 있다고 합시다.
우선, 애매한 인터프리터와 컴파일러를 정의해야 합니다.
언어 X의 인터프리터는 언어 X로 작성된 프로그램 p를 실행하고 X의 사양에 따라 결과를 평가하도록 실행하는 프로그램(또는 기계 또는 일반적인 메커니즘)이다.
X에서 Y로의 컴파일러는 어떤 프로그램 p를 어떤 언어 X에서 어떤 의미론적으로 동등한 프로그램 p'로 번역하는 프로그램(또는 기계, 또는 일반적인 메커니즘)이다.이를 통해 Y에 대한 인터프리터와 p'를 해석하는 것은 같은 결과를 낳고 int를 사용하여 p'를 해석하는 것과 같은 효과를 가져온다.X의 에러 프리터.
프로그래머의 관점에서 CPU는 각각의 네이티브 머신 언어의 머신 인터프리터입니다.
가장 일반적인 구현에 따라 프로그래밍 언어를 3가지 범주로 잠정 분류할 수 있습니다.
- 하드 컴파일 언어:프로그램이 완전히 기계어로 컴파일된 경우.사용되는 인터프리터는 CPU뿐입니다.예:보통 C에서 프로그램을 실행하기 위해 소스코드는 기계어로 컴파일되고 CPU에 의해 실행됩니다.
- 통역 언어:원래 프로그램의 어떤 부분도 기계어로 컴파일하지 않은 경우.즉, 새로운 머신 코드는 생성되지 않고 기존 머신 코드만 실행됩니다.CPU 이외의 인터프리터(통상 프로그램)도 사용할 필요가 있습니다.예:Python의 정식 구현에서는 소스 코드가 먼저 Python 바이트 코드로 컴파일되고 그 바이트 코드가 Python 바이트 코드의 인터프리터 프로그램인 CPython에 의해 실행됩니다.
- 소프트 컴파일 언어:CPU 이외의 인터프리터를 사용하는 경우, 원래의 프로그램의 일부도 기계어로 컴파일 할 수 있습니다.이것은 Java의 경우입니다.이 경우 소스 코드가 먼저 바이트 코드로 컴파일되고 다음으로 바이트 코드가 Java 인터프리터에 의해 해석되거나 JIT 컴파일러에 의해 컴파일될 수 있습니다.
때로는 소프트 및 하드 컴파일 언어를 단순 컴파일 언어라고 부르기도 합니다.따라서 C#, Java, C, C++는 컴파일 언어라고 불립니다.
이 분류에서 JavaScript는 해석된 언어였지만, 그것은 수년 전이었다.현재는 대부분의 주요 JavaScript 구현에서 네이티브 머신 언어로 JIT 컴파일되어 있기 때문에 소프트 컴파일 언어로 분류됩니다.
언급URL : https://stackoverflow.com/questions/2657268/whats-the-difference-between-compiled-and-interpreted-language
'source' 카테고리의 다른 글
MySQL 루트 비밀번호 변경 (0) | 2022.10.27 |
---|---|
Maria db에서 값이 null인 경우 null이 아닌 열에 기본값을 삽입하는 방법 (0) | 2022.10.27 |
SQL(MySQL) vs NoSQL(CouchDB) (0) | 2022.10.23 |
배열을 함수 인수 목록으로 변환 (0) | 2022.10.23 |
Guava 라이브러리:가장 유용한 기능 및/또는 숨겨진 기능은 무엇입니까? (0) | 2022.10.23 |