2016-08-30 39 views

Odpowiedz

32

To się nazywa compiler bootstrapping i jest powszechne z wielu powodów, z których niejednokrotnie język, który piszesz, jest często najlepiej dopasowanym językiem do zrozumienia pojęć, które wprowadzasz w języku, który piszesz ...

Jeśli przyjrzeć się artykułowi, większość głównych języków ma własne kompilatory (C, C++). Oznacza to, że używasz dużej ilości kodu za pomocą nowego kompilatora, co jest dobrym sprawdzianem funkcjonalności. W zwykłym przypadku piszesz kompilator, ponieważ chcesz nowego języka z pewną przewagą nad twoim aktualnym językiem, więc możliwość skorzystania z tych korzyści podczas pisania kompilatora ma sens.

Pierwsze podanie będzie musiało być napisane w istniejącym języku, ale gdy już masz kompilator, możesz użyć go do skompilowania następnej wersji i tak dalej. Oczywiście ogranicza to twój kompilator do używania tylko funkcji z wersji n-1, ale ponieważ kontrolujesz kompilator, który powinien być drobnym problemem. Cytowanie Wikipedii:

Główne części kompilatora języka C++ zostały napisane w podgrupie C++, które mogą być kompilowane zarówno przez g ++ jak i Microsoft Visual C++.

Ponieważ TypeScript jest nadzbiorem JavaScript, kompilator mógłby (teoretycznie) zostać napisany we współużytkowanej składni i skompilowany pod jednym z nich. Nie wierzę, że tak jest w tym przypadku, ale związek daje dobry język wyjściowy dla początkowego kompilatora.

+0

Ale, zgodnie z artykułem, nadal potrzebuje niektórych języków ojczystych (tutaj JavaScript), aby skompilować jakąś część nadzbioru JavaScript (typeScript). A w Githubie są też pliki js ... – M98

+0

@Kermani, ale ponieważ Maszynka do pisania jest nadzbiorem JavaScript, możesz napisać poprawny program JS w TS, skompilować go, a następnie użyć go do kompilacji programu TS używając więcej funkcji językowych, i tak dalej. Technicznie rzecz biorąc, może to być TS w dół. Większość innych transpilerów nie jest ścisłymi supersetami (myślę o C i C++), więc nie mogą tego wykorzystać tak bardzo. – ssube

13

Maszynka do pisania sam się hostuje i zachowuje swoją ostatnią znaną dobrą (LKG) wersję, aby skompilować następną wersję. Obecnie (30.08.2016) ta wersja znajduje się w katalogu lib.