Чем отличается компиляция (tsc) от транспиляции?
Когда речь заходит о TypeScript, часто употребляются два термина — компиляция и транспиляция. На первый взгляд они кажутся синонимами, так как в обоих случаях происходит преобразование кода. Однако между ними есть принципиальные различия, которые важно понимать, особенно в контексте работы с tsc — стандартным компилятором TypeScript.
Что такое компиляция
Компиляция — это процесс преобразования исходного кода, написанного на одном языке программирования, в код на другом, более низкоуровневом языке. Классический пример — перевод кода на C или C++ в машинные инструкции. Цель компиляции — сделать код исполняемым процессором или виртуальной машиной.
В случае TypeScript компиляция означает анализ исходного кода на наличие ошибок и преобразование его в JavaScript. Несмотря на то что результатом является не машинный код, а код на другом языке высокого уровня, сам процесс все равно называется компиляцией, потому что происходит проверка типов, анализ структуры программы и применение правил языка.
Что такое транспиляция
Транспиляция — это частный случай компиляции, когда исходный код на одном языке высокого уровня переводится в эквивалентный код на другом языке высокого уровня. Главное отличие от традиционной компиляции — сохраняется уровень абстракции: сложность и структура кода остаются примерно одинаковыми, но меняется синтаксис.
Пример транспиляции — перевод TypeScript в JavaScript. Здесь не происходит понижения уровня кода до машинного представления, вместо этого создается код, который можно выполнить в среде исполнения JavaScript, например, в браузере или Node.js.
Как работает tsc
Инструмент tsc выполняет одновременно и компиляцию, и транспиляцию.
-
С одной стороны, он компилирует код, потому что проверяет правильность типов, соответствие синтаксису и выявляет потенциальные ошибки еще до выполнения программы.
-
С другой стороны, он транспилирует код, так как конечный результат работы компилятора — это JavaScript, который имеет аналогичный уровень абстракции и может быть выполнен в стандартных JS-движках.
Принципиальное различие
-
Компиляция — это процесс анализа и преобразования кода в более низкоуровневое представление с проверкой типов и строгим контролем.
-
Транспиляция — это преобразование кода в другой язык высокого уровня без значительной потери абстракции.
В контексте TypeScript можно сказать, что tsc сначала компилирует код, выполняя проверки и анализ, а затем транспилирует его в JavaScript, чтобы этот код можно было запускать в привычных средах.