Szukając różnicy, natrafiłem na te definicje:
Kompilacja to ogólny termin oznaczający pobieranie kodu źródłowego napisanego w jednym języku i przekształcanie go w inny.
Transpiling to specyficzny termin oznaczający pobieranie kodu źródłowego napisanego w jednym języku i przekształcanie go w inny język o podobnym poziomie abstrakcji.
Rozumiem, czym jest abstrakcja.
Ale co oznacza „podobny poziom abstrakcji” w powyższej definicji? A jak znaleźć poziom abstrakcji w języku?
compiler-construction
abstraction
transpiler
Nishi Mahto
źródło
źródło
Odpowiedzi:
Definicja, którą przytoczyłeś powyżej, jest zbyt ogólna, aby początkujący mógł ją całkowicie zrozumieć, więc pozwól mi tylko uprościć ją do czegoś, co widzimy praktycznie.
Kompilator: to ogólny termin opisujący program, który pobiera kod źródłowy napisany w jednym języku i tworzy (lub wiele) plik wyjściowy w innym języku. W praktyce używamy tego terminu głównie do opisania kompilatora, takiego jak gcc, który pobiera kod C jako dane wejściowe i generuje binarny plik wykonywalny (kod maszynowy) jako wyjście.
Transpilery są również znane jako kompilatory od źródła do źródła. W istocie są to podzbiór kompilatorów, które pobierają plik kodu źródłowego i konwertują go na inny plik kodu źródłowego w innym języku lub w innej wersji tego samego języka. Wynik jest ogólnie zrozumiały dla człowieka. To wyjście nadal musi przejść przez kompilator lub interpreter, aby można było uruchomić na komputerze.
Kilka przykładów transpilerów:
A teraz, co mają na myśli przez „podobny poziom abstrakcji”: jak powiedziałem, że kompiluje / transpiluje do pliku źródłowego, można argumentować, że asembler jest również plikiem źródłowym, a zatem gcc jest również transpilerem. Tak więc ten argument jest tym, co ten podobny poziom abstrakcji powoduje.
Pojęcie kategoryzacji języków na niższy, średni i wyższy poziom opiera się na poziomie abstrakcji, jaki zapewniają one w stosunku do rzeczywistego działania maszyny / architektury.
Języki niższego poziomu, takie jak asembler, są bardzo zbliżone do architektury procesora, tj. Mają różne instrukcje dla różnych procesorów. Podczas gdy C / C ++ / Java / JavaScript, odejmij to wszystko, zapewniając więcej abstrakcji.
Tak więc transpiler kompiluje się do języka, który jest bliższy językowi, od którego zacząłeś w zakresie tej abstrakcji (lub jest bliżej poziomu tego języka w drabinie językowej niższy-średni-wyższy poziom).
Mam nadzieję że to pomoże!
źródło
Oto opisowy sposób odpowiedzi
Jeśli pomyślisz o warstwach abstrakcji jako o tym przykładzie:
Kompilator przechodzi na niższy poziom (niższy numer). Transpiler przełącza się z jednego języka (lub wersji języka) na inny pod tym samym numerem.
źródło
javac
kompilatorem czy nie.W większości zgadzam się z tapananem i odpowiedzią, ale ...
definicja
Słowa są „stworzone”, więc służą celowi. I to też się zmienia z czasem.
Obecnie mamy tendencję do używania transpilera do określenia kompilatora, który tłumaczy kod na inny kod „bardziej podobny” do kodu źródłowego, co może zrobić kompilator. I jest używany do rozróżniania obu, głównie wtedy, gdy oba są wymienione w tym samym kontekście (znowu głównie oznacza to, że język transpile będzie musiał zostać skompilowany co najmniej raz jeszcze)
przykłady
Więc wszystko jest bardzo subiektywne. W chwili pisania tego tekstu:
fazit
Tak więc transpile jest obecnie bardzo rzadko używany i tylko w celu odróżnienia dwóch kompilatorów.
Prawdopodobnie zniknie jako koncepcja, ponieważ kompilacja jest znacznie bardziej skomplikowana (ten sam / wyższy / niższy język, wersja itp.), A słowo nie wydaje się już być przydatne („transpilery” są teraz wszechobecne)
źródło
Na przykład: TypeScript (nadzbiór języka JavaScript firmy Microsoft z funkcją bezpiecznego sprawdzania typów) transponuje do kodu JavaScript, który może działać w różnych typach przeglądarek.
https://en.wikipedia.org/wiki/Microsoft_TypeScript "Microsoft TypeScript to język programowania typu open source opracowany i utrzymywany przez firmę Microsoft. Jest to ścisły nadzbiór składni JavaScript i dodaje opcjonalne statyczne pisanie do języka.
TypeScript jest przeznaczony do tworzenia dużych aplikacji i transkompilacji do JavaScript. [5] Ponieważ TypeScript jest nadzbiorem języka JavaScript, istniejące programy JavaScript są również prawidłowymi programami TypeScript. TypeScript może służyć do tworzenia aplikacji JavaScript do wykonywania zarówno po stronie klienta, jak i po stronie serwera (Node.js). "
źródło