2016-08-30 69 views
29

Trong TypeScript repository on GitHub và theo GitHub, kho chỉ bao gồm 100,0% nguyên cảo (.ts file)TypeScript 100.0% được viết bằng TypeScript như thế nào?

enter image description here

Làm thế nào nó hoạt động? và làm thế nào TypeScript có thể biên dịch chính nó thành JavaScript chỉ bằng chính nó?

+12

Vâng, sau phiên bản đầu tiên, bạn có một trình biên dịch và có thể sử dụng nó để biên dịch trình biên dịch tiếp theo, v.v. – ssube

+0

Đây là cách một lập trình viên hỏi: "Điều gì đến trước, gà hay trứng?" – series0ne

Trả lời

32

Điều này được gọi là compiler bootstrapping và phổ biến vì một số lý do, ít nhất là ngôn ngữ bạn đang viết thường là ngôn ngữ phù hợp nhất để hiểu các khái niệm bạn đang triển khai bằng ngôn ngữ bạn đang viết ...

Nếu bạn xem qua bài viết, hầu hết các ngôn ngữ chính đều có trình biên dịch tự lưu trữ (C, C++). Làm như vậy có nghĩa là bạn đang chạy một lượng lớn mã thông qua trình biên dịch mới của bạn, đó là một thử nghiệm tốt về chức năng. Trong trường hợp thông thường, bạn đang viết trình biên dịch vì bạn muốn có một ngôn ngữ mới với một số lợi ích so với ngôn ngữ hiện tại của bạn, vì vậy có thể tận dụng lợi thế của những lợi ích đó trong khi viết trình biên dịch có ý nghĩa tốt.

Vượt qua đầu tiên sẽ phải được viết bằng ngôn ngữ hiện có, nhưng khi bạn có trình biên dịch, bạn có thể sử dụng nó để biên dịch bản sửa đổi tiếp theo v.v. Rõ ràng điều này giới hạn trình biên dịch của bạn chỉ sử dụng các tính năng từ bản sửa đổi n-1, nhưng vì bạn kiểm soát trình biên dịch nên là một vấn đề nhỏ. Trích dẫn Wikipedia:

Các phần chính của trình biên dịch C++ được viết bằng một tập hợp con của C++ có thể được biên dịch bằng cả g ++ và Microsoft Visual C++.

Vì TypeScript là một siêu của JavaScript, trình biên dịch có thể được viết bằng cú pháp chia sẻ và biên dịch theo một trong hai. Tôi không tin đó là trường hợp ở đây, nhưng mối quan hệ không cung cấp cho bạn một ngôn ngữ bắt đầu tốt cho trình biên dịch ban đầu.

+0

Nhưng, theo bài viết, nó vẫn cần một số ngôn ngữ bản địa (ở đây là JavaScript) để biên dịch một phần của phần siêu của JavaScript (typeScript). Và trong Github cũng có một số tệp js ... – M98

+0

@Kermani nhưng kể từ khi Typescript là một siêu của JavaScript, bạn có thể viết một chương trình JS hợp lệ trong TS, biên dịch nó, sau đó sử dụng nó để biên dịch chương trình TS sử dụng nhiều tính năng ngôn ngữ, và vân vân. Về mặt kỹ thuật, nó có thể là TS tất cả các con đường xuống. Hầu hết các transpilers khác không phải là các siêu dữ liệu nghiêm ngặt (nghĩ về C và C++), vì vậy chúng không thể tận dụng được điều đó khá nhiều. – ssube

13

Loại bản ghi là tự lưu trữ và duy trì phiên bản Last-Known-Good (LKG) của chính nó để biên dịch phiên bản tiếp theo. Hiện tại (30/08/2016) phiên bản đó nằm trong thư mục lib.