• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Transpilator vs kompilator vs interpreter

VPS Starter Arubacloud
0 głosów
1,555 wizyt
pytanie zadane 2 lipca 2020 w Systemy operacyjne, programy przez mb-dir Mądrala (6,710 p.)
edycja 2 lipca 2020 przez mb-dir
Witam,

Mam wrażenie, że w wielu artykułach sformułowania "transpilacja/interpretacja/kompilacja", "transpilator/interpreter/kompilator" są używanie wymiennie i w sumie ciężko połapać się co jest czym. Z tego całego nazewniczego chaosu wywnioskowałem, że:

Transpilator jest to narzędzie które transpiluje("przepisuje") kod na kod o podobnym poziome abstrakcji - czyli np narzędzie Babel jest takim transpilatorem

Kompilator jest to narzędzie które kompiluje("przepisuje") kod zrozumiały dla programisty do kodu który jest zrozumiały dla maszyny oraz wykonuje ten kod

No i jest jeszcze interpreter - program przypominający swoim działaniem kompilator(też przepisuje kod zrozumiały dla programisty na kod zrozumiały dla maszyny i go wykonuje) z tym że kod wykonywany jest na bieżąco - linia po linii(nie ma tak jak w przypadku kompilatora sprawdzenia np funkcji, zmiennych czy nie występuje tam żaden błąd) i ponad to nie otrzymujemy żadnego wynikowego pliku

Powyższe definicje są okey? Czy pomieszałem gdzieś jakieś fakty?

I na koniec pytanie do webdeveloperów używających np SASS'a, czy kod SASS jest transpilowany? SASS jest "przepisywany" do CSS'a czyli de facto z czegoś o wyższym poziome abstrakcji(bo ma listy/mapy itp) do czegoś o nieco niższym poziome abstrakcji więc ja bym powiedział, że jest transpilowany, jednak w jednym z kursów, który przerabiam,  prowadzący używa sformułowań kompilacja/kompilator - stąd moje dociekania.

Pozdrawiam
komentarz 2 lipca 2020 przez sunzi Bywalec (2,000 p.)

Transpilator jest to narzędzie które transpiluje("przepisuje") kod na kod o podobnym poziome abstrakcji - czyli np narzędzie Babel jest takim transpilatorem

 

SASS jest "przepisywany" CSS'a czyli de facto z czegoś o wyższym poziome abstrakcji(bo ma listy/mapy itp) do czegoś o nieco niższym poziome abstrakcji więc ja bym powiedział, że jest transpilowany

Wydaje mi się, że w podanych fragmentach jest sprzeczność, to w końcu transpiler transluje X->Y gdzie X i Y są na podobnych czy na różnych poziomach abstrakcji? Dobrze by było gdybyś sprecyzował co masz na myśli smiley

komentarz 2 lipca 2020 przez mb-dir Mądrala (6,710 p.)

Wydaje mi się, że w podanych fragmentach jest sprzeczność, to w końcu transpiler transluje X->Y gdzie X i Y są na podobnych czy na różnych poziomach abstrakcji

No właśnie na tym polega moje pytanie czy zmianę z SASS'a do CSS'a traktować jako kompilacje czy transpilacje. Tak jak napisałem według mnie jako transpilacje ponieważ jest to "przepisanie" na kod o podobnym poziome abstrakcji(w orginalnym pytaniu użyłem sformułowania "do czegoś o nieco niższym poziome abstrakcji", ponieważ nie chciałem kolejny raz powtarzać "podobny poziom abstrakcji" - myślałem, że będzie to jasne, ale okazało się inaczej także sory za tę niejasność). I ogólnie cały mój post nie jest stwierdzeniem tylko pytaniem, nie stwierdzam, że kompilator to coś, transpilator to coś. Pytam, czy moje zrozumienie danych zagadnień jest poprawne.

 

1
komentarz 2 lipca 2020 przez Dorion300 Szeryf (90,250 p.)

Kompilator jest to narzędzie które kompiluje("przepisuje") kod zrozumiały dla programisty do kodu który jest zrozumiały dla maszyny oraz wykonuje ten kod

Nie do końca.

Ogólnie proces kompilacji oznacza proces translacji z kodu źródłowego na kod w innym języku. (kod wynikowy)

A więc Transpilator też jest kompilatorem.

https://en.wikipedia.org/wiki/Compiler

2 odpowiedzi

+1 głos
odpowiedź 2 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)
Cześć, z tego co wiem i z tego co przeanalizowałem definicje znalezione w internecie to Twoje definicje są dość sporym uproszczeniem, ale są poprawne.Nie jestem tylko pewien, czy zwróciłeś uwagę na to, że kompilator nie wykonuje programu - odpowiedzialny jest za to interpreter

Co do drugiego pytania, również na podstawie własnej wiedzy oraz zasobów internetu wnioskuję, że SASS jest językiem kompilacyjnym.
komentarz 2 lipca 2020 przez mb-dir Mądrala (6,710 p.)
Dzięki za odpowiedź, mógłbyś podać linki do źródeł z których sprawdzałeś poszczególne definicje? Poczytałbym z chęcią.
komentarz 2 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)

Jasne, interpreter,  transpilator i kompilator

Wszystkie te programy mają też definicję na Wikipedii

+1 głos
odpowiedź 2 lipca 2020 przez sunzi Bywalec (2,000 p.)
edycja 2 lipca 2020 przez sunzi

Translacja X->Y:

transpiler: X i Y są na podobmym poziomie abstrakcji (np: java -> c#)

kompilator: X jest na wyższym a Y na niższym (np: c -> kod maszynowy)

źródło (pierwszy akapit bardzo dobrze wyjaśnia): https://en.wikipedia.org/wiki/Source-to-source_compiler

Natomiast interpreter raczej dobrze opisałeś.
 

Więc generalnie masz dobrą intuicję. SASS wydaje mi się, że jest na mniej więcej tym samym poziomie abstrakcji co CSS więc bym go nazwał transpilerem a nie kompilatorem - jeśli już mamy być super dokładni i szczegółowi. Śliskim tematem jest natomiast określenie co jest na tym samym lub podobnym poziomie abstrakcji a co nie i wydaje mi się, że być może autor zna tak dobrze SASS i CSS, że dla niego to są dwie różne bajki i dwa zupełnie różne poziomy abstrakcji. Stąd też bym nie trzymał się tak kurczowo tych definicji, bo najprawdopodobniej w kursie o którym wspomniałeś nie to jest najważniejsze Na pewno dobrze jest znać te definicje i rozumieć, aby wiedzieć kiedy którego określenia używać, ale ja bym śmiertelnie do tego nie podchodził jeśli chodzi o szczegóły, bo tak naprawdę jeśli nie piszemy kompilatora/transpilera to różnica między nimi nie jest aż tak wielka jak nam się wydaje wink

 

Ale widzę, że np wikipedia SASSa nazywa skryptowym językiem interpretowanym lub kompilowanym. I osobiście bym się trzymał tej definicji (zakładam, że artykuł pisał ekspert).

Źródło: https://en.wikipedia.org/wiki/Sass_(stylesheet_language)

Ale jednocześnie w świecie gdzie sami nie piszemy kompilatorów/transpilerów to bym zaakceptował jeśli ktoś by nazwał Sassa transpilerem czy kompilatorem i tak naprawdę moim zdaniem można obu tych terminów używać zamiennie w stosunku do Sassa. Chyba, że zwyczajowo i powszechnie przyjęło się określenie "kompilator" to wtedy bym używał tylko określenia "kompilator" kiedy mówimy o Sassie.

 

Podobne pytania

0 głosów
1 odpowiedź 1,262 wizyt
0 głosów
2 odpowiedzi 115 wizyt
pytanie zadane 8 czerwca w JavaScript przez niezalogowany
0 głosów
0 odpowiedzi 90 wizyt
pytanie zadane 7 czerwca w JavaScript przez niezalogowany

92,843 zapytań

141,783 odpowiedzi

320,858 komentarzy

62,175 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...