В поисках разницы я наткнулся на следующие определения:
Компиляция - это общий термин для преобразования исходного кода, написанного на одном языке, в другой.
Транспилирование - это особый термин для преобразования исходного кода, написанного на одном языке, в другой язык, имеющий аналогичный уровень абстракции.
Я понимаю, что такое абстракция.
Но что означает «подобный уровень абстракции» в приведенном выше определении? И как мы можем определить уровень абстракции в языке?
compiler-construction
abstraction
transpiler
Ниси Махто
источник
источник
Ответы:
Приведенное вами определение слишком общее, чтобы новичок мог его полностью понять, поэтому позвольте мне просто упростить его до того, что мы видим на практике.
Компилятор: это общий термин для описания программы, которая берет исходный код, написанный на одном языке, и создает (или несколько) выходных файлов на другом языке. На практике мы в основном используем этот термин для описания компилятора, такого как gcc, который принимает код C в качестве входных данных и создает двоичный исполняемый файл (машинный код) в качестве выходных данных.
Транспилеры также известны как компиляторы исходного кода. Таким образом, по сути, они представляют собой подмножество компиляторов, которые принимают файл исходного кода и конвертируют его в другой файл исходного кода на каком-то другом языке или в другую версию того же языка. Вывод обычно понятен человеку. Этот вывод по-прежнему должен пройти через компилятор или интерпретатор, чтобы его можно было запустить на машине.
Некоторые примеры транспилеров:
Теперь, что они подразумевают под «аналогичным уровнем абстракции»: как я уже сказал, он компилирует / переносит в исходный файл, можно утверждать, что язык ассемблера также является исходным файлом и, следовательно, gcc также является транспилятором. Итак, этот аргумент - то, что пустота подобного уровня абстракции.
Идея разделения языков на нижний, средний и высший уровень основана на уровне абстракции, которую они обеспечивают от фактической работы машины / архитектуры.
Языки более низкого уровня, такие как ассемблер, очень близки к архитектуре процессора, т.е. имеют разные инструкции для разных процессоров. В то время как C / C ++ / Java / JavaScript, абстрагируйте все это, предоставляя больше абстракции.
Итак, транспилятор компилируется в язык, который ближе к языку, с которого вы начали в терминах этой абстракции (или ближе к уровню этого языка в языковой лестнице нижнего-среднего-высшего уровня).
Надеюсь это поможет!
источник
Вот своего рода описательный способ ответить
Если вы думаете об уровнях абстракции как о следующем примере:
Компилятор переходит на более низкий уровень (меньшее число). Транспилер переключается с одного языка (или версии языка) на другой под тем же номером.
источник
javac
компилятор или нет.Я в основном согласен с тапананом и ответом, но ...
определение
Слова «сделаны», поэтому они служат определенной цели. И это тоже со временем меняется.
Теперь мы склонны использовать транспилятор, чтобы указать компилятор, который переводит код в другой код, «более похожий» на исходный, чем то, что может делать компилятор. И используется для различения обоих в основном, когда они оба упоминаются в одном и том же контексте (опять же в основном подразумевая, что транспильный язык должен быть скомпилирован как минимум еще раз)
Примеры
Так что все очень субъективно. На момент написания:
фазит
Так транспилировать в настоящее время используется очень редко, и только для различения двух компиляторов.
Это, вероятно, исчезнет как концепция, поскольку компиляция намного сложнее (тот же / более высокий / более низкий язык, версия и т. Д.), И это слово больше не кажется полезным («транспиляторы» теперь повсеместны)
источник
Пример: TypeScript (надмножество Microsoft JavaScript с проверкой типов) транслируется в код JavaScript, который может работать в разных типах браузеров.
https://en.wikipedia.org/wiki/Microsoft_TypeScript «Microsoft TypeScript - это язык программирования с открытым исходным кодом, разработанный и поддерживаемый корпорацией Майкрософт. Это строгий синтаксический надмножество JavaScript, который добавляет в язык дополнительную статическую типизацию.
TypeScript предназначен для разработки больших приложений и транскомпилируется в JavaScript. [5] Поскольку TypeScript является надмножеством JavaScript, существующие программы JavaScript также являются допустимыми программами TypeScript. TypeScript может использоваться для разработки приложений JavaScript как для выполнения на стороне клиента, так и на стороне сервера (Node.js) ".
источник