차이점을 검색하는 동안 다음과 같은 정의를 발견했습니다.
컴파일 은 한 언어로 작성된 소스 코드를 다른 언어로 변환하는 일반적인 용어입니다.
트랜스 파일링 은 한 언어로 작성된 소스 코드를 비슷한 수준의 추상화를 가진 다른 언어로 변환하는 특정 용어입니다.
추상화가 무엇인지 이해합니다.
그러나 위의 정의에서 "유사한 추상화 수준"은 무엇을 의미합니까? 그리고 언어의 추상화 수준을 어떻게 찾을 수 있습니까?
차이점을 검색하는 동안 다음과 같은 정의를 발견했습니다.
컴파일 은 한 언어로 작성된 소스 코드를 다른 언어로 변환하는 일반적인 용어입니다.
트랜스 파일링 은 한 언어로 작성된 소스 코드를 비슷한 수준의 추상화를 가진 다른 언어로 변환하는 특정 용어입니다.
추상화가 무엇인지 이해합니다.
그러나 위의 정의에서 "유사한 추상화 수준"은 무엇을 의미합니까? 그리고 언어의 추상화 수준을 어떻게 찾을 수 있습니까?
답변:
위에서 인용 한 정의는 초보자가 완전히 이해하기에는 너무 일반적이므로 실제로 볼 수있는 것으로 단순화하겠습니다.
컴파일러 : 한 언어로 작성된 소스 코드를 다른 언어로 (또는 여러 개) 생성하는 프로그램을 설명하는 포괄적 인 용어입니다. 실제로 우리는 주로이 용어를 사용하여 C 코드를 입력으로 받아 바이너리 실행 파일 (머신 코드)을 출력으로 생성하는 gcc와 같은 컴파일러를 설명합니다.
트랜스 파일러 는 소스 간 컴파일러라고도합니다. 따라서 본질적으로 소스 코드 파일을 가져 와서 다른 소스 코드 파일 로 변환하는 컴파일러의 하위 집합입니다. 다른 언어의 이나 동일한 언어의 다른 버전으로 . 출력은 일반적으로 사람이 이해할 수 있습니다. 이 출력은 여전히 컴파일러 나 인터프리터를 거쳐야 머신에서 실행될 수 있습니다.
트랜스 파일러의 몇 가지 예 :
이제 "유사한 추상화 수준"이란 무엇을 의미합니까? 내가 소스 파일로 컴파일 / 트랜스 파일한다고 말했듯이 어셈블리 언어도 소스 파일이므로 gcc도 트랜스 파일러라고 주장 할 수 있습니다. 그래서,이 주장은 이와 유사한 추상화 수준이 공허하는 것입니다.
언어를 하위, 중간 및 상위 수준으로 분류한다는 개념은 기계 / 아키텍처의 실제 작업에서 제공하는 추상화 수준을 기반으로합니다.
어셈블리와 같은 하위 수준의 언어는 프로세서 아키텍처에 매우 가깝습니다. 즉, 프로세서마다 다른 명령이 있습니다. C / C ++ / Java / JavaScript는이 모든 것을 추상화하여 더 많은 추상화를 제공합니다.
따라서 트랜스 파일러는이 추상화 측면에서 시작한 언어에 더 가까운 언어로 컴파일됩니다 (또는 중하 위 수준의 언어 래더에서 해당 언어 수준에 더 가까운).
도움이 되었기를 바랍니다!
여기에 대답하는 일종의 설명적인 방법이 있습니다.
추상화 계층을이 예제로 생각하면 :
(1) CPU-level (actual logic gates on the CPU)
(2)machine code
(3)assembly code
(4)[C/C++, JVM/bytecode]
(5)[JavaScript, Python]
컴파일러는 더 낮은 수준 (더 낮은 숫자)으로 이동합니다. 트랜스 파일러는 같은 번호의 한 언어 (또는 언어 버전)에서 다른 언어로 전환합니다.
javac
컴파일러인지 아닌지.
나는 타파 나와 대답에 거의 동의하지만 ...
단어는 "만들어진"것이므로 목적이 있습니다. 그리고 이것은 또한 시간에 따라 변합니다.
우리는 이제 코드를 소스 코드와 "더 유사한"다른 코드로 변환하는 컴파일러를 지정하기 위해 트랜스 파일러를 사용하는 경향이 있습니다. 그리고 둘 다 같은 맥락에서 언급 될 때 대부분을 구별하는 데 사용됩니다 (다시 말하지만 대부분 트랜스 파일 언어가 적어도 한 번 더 컴파일되어야 함을 의미 함)
그래서 모든 것이 매우 주관적입니다. 이 글을 쓰는 시점 :
따라서 transpile 은 현재 더 이상 거의 사용되지 않으며 두 컴파일러를 구분하기 위해서만 사용됩니다.
컴파일이 그것보다 훨씬 더 복잡하고 (동일 / 고 / 저 / 저 언어, 버전 등) 단어가 더 이상 유용하지 않은 것 같기 때문에 아마도 개념으로 사라질 것입니다 ( "transpilers"는 이제 유비쿼터스입니다).
예 : TypeScript (유형 안전 검사 기능이있는 JavaScript의 Microsoft 상위 집합)는 다른 유형의 브라우저에서 실행할 수있는 JavaScript 코드로 변환됩니다.
https://en.wikipedia.org/wiki/Microsoft_TypeScript "Microsoft TypeScript는 Microsoft에서 개발 및 유지 관리하는 오픈 소스 프로그래밍 언어입니다. JavaScript의 엄격한 구문 상위 집합이며 선택적 정적 타이핑을 언어에 추가합니다.
TypeScript는 대규모 애플리케이션 개발을 위해 설계되었으며 JavaScript로 트랜스 컴파일됩니다. [5] TypeScript는 JavaScript의 상위 집합이므로 기존 JavaScript 프로그램도 유효한 TypeScript 프로그램입니다. TypeScript는 클라이언트 측 및 서버 측 (Node.js) 실행을위한 JavaScript 애플리케이션을 개발하는 데 사용될 수 있습니다. "