javascript - Ako je TypeScript 100,0 % napísaný v TypeScripte?


V repozitári TypeScript na GitHub a podľa GitHub, repozitár obsahoval len 100,0 % TypeScript (.ts súbory)

Ako to funguje? A ako môže TypeScript sám seba preložiť do JavaScriptu len sám od seba?

Odpoveď č. 1

Toto sa nazýva bootstrapping kompilátora a je bežné z niekoľkých dôvodov, nielen preto, že jazyk, v ktorom píšete, je často najvhodnejším jazykom na pochopenie konceptov, ktoré implementujete v jazyku, v ktorom píšete...

Ak sa pozriete na článok, väčšina hlavných jazykov má kompilátory, ktoré sa spúšťajú samy (C, C++). To znamená, že spúšťate veľké množstvo kódu cez váš nový kompilátor, čo je dobrý test funkčnosti. V bežnom prípade píšete kompilátor, pretože chcete nový jazyk s nejakým prínosom oproti vášmu súčasnému jazyku, takže schopnosť využívať tieto výhody počas písania kompilátora dáva zmysel.

Prvá prekladová verzia bude musieť byť napísaná v existujúcom jazyku, ale keď budete mať kompilátor, môžete ho použiť na kompiláciu ďalšej revízie a tak ďalej. Samozrejme, toto obmedzuje váš kompilátor na používanie len funkcií z n-1 revízie, ale keďže máte kontrolu nad kompilátorom, malo by to byť len malým problémom. Citujúc Wikipédiu:

Hlavné časti C++ kompilátora clang boli napísané v podmnožine C++, ktorú môžu kompilovať aj g++ aj Microsoft Visual C++.

Keďže TypeScript je nadmnožina JavaScriptu, kompilátor by mohol (teoreticky) byť napísaný v spoločnej syntaxi a kompilovať pod ktorýmkoľvek z nich. Nemyslím si, že je to tu tento prípad, ale vzťah vám dáva dobrý východiskový jazyk pre počiatočný kompilátor.

Odpoveď č. 2

Chcem len pridať niečo, čo si myslím, že je zaujímavé.

V gite môžete mať súbor s názvom .gitattributes. GitHub má projekt s názvom Linguist, ktorý môže tento súbor využiť pre sekciu podrobností o jazyku v každom repozitári. V repozitári TypeScript je súbor .gitattributes, ktorý obsahuje nasledujúci obsah:

*.js linguist-language=TypeScript
* -text

Môžete si forkovať repozitár TypeScript, odstrániť ten súbor, commitnúť na GitHub a počkať istý čas, kým sa dokončí analýza ich repozitára a jazykový graf sa zmení.

Odpoveď č. 3

Typescript je samo-hostujúci a udržiava poslednú-známu-dobrú (LKG) verziu seba samého na kompilovanie nasledujúcej verzie. V súčasnosti (30.08.2016) je táto verzia v priečinku lib.

Súvisiace články