Визначення, яке ви цитували вище, є надто загальним, щоб новачок не міг його повністю зрозуміти, і тому дозвольте мені просто спростити його до того, що ми бачимо практично.
Компілятор: загальний термін, що описує програму, яка бере вихідний код, написаний однією мовою, і створює (або багато) вихідний файл якоюсь іншою мовою. На практиці ми в основному використовуємо цей термін для опису компілятора, такого як gcc, який приймає код С як вхідний сигнал і створює двійковий виконуваний файл (машинний код) як вихід.
Транспілятори також відомі як компілятори від джерела до джерела. Отже, по суті вони є підмножиною компіляторів, які беруть файл вихідного коду і перетворюють його в інший файл вихідного коду якоюсь іншою мовою або іншою версією тієї ж мови. Витік загалом зрозумілий людині. Цей результат все одно повинен пройти через компілятор або інтерпретатор, щоб мати можливість працювати на машині.
Кілька прикладів перекладачів:
- Emscripten : Транспілює C / C ++ у JavaScript
- Babel : Транспілює код ES6 + у ES5 (ES6 та ES5 - це різні версії або покоління мови JavaScript)
Тепер, що вони мають на увазі під "подібним рівнем абстракції": Як я вже говорив, він компілює / транспілює до вихідного файлу, можна стверджувати, що мова асемблер - це також вихідний файл, і, отже, gcc також є транслятором. Отже, цей аргумент і є тим, що втрачає цей подібний рівень абстракції.
Поняття класифікації мов на нижчий, середній та вищий рівень базується на рівні абстракції, яку вони забезпечують від фактичної роботи машини / архітектури.
Мови нижчого рівня, такі як складання, дуже близькі до архітектури процесора, тобто мають різні інструкції для різних процесорів. Хоча C / C ++ / Java / JavaScript, абстрагуйте все це, надаючи більше абстракції.
Отже, компілятор компілює до мови, яка ближча до мови, з якої ви починали в умовах цієї абстракції (або ближче до рівня цієї мови в мовній драбині нижчого-середнього та вищого рівнів).
Сподіваюся, це допомагає!