Đăng ký nhận bản tin của tôi và không bao giờ bỏ lỡ các bài viết sắp tới của tôi
Giới thiệu
Là người mới bắt đầu ngôn ngữ lập trình JavaScript, tôi đã phải đối mặt với câu hỏi này rất nhiều lần:
Liệu JavaScript diễn giải mã nguồn, hoặc nó thực sự biên dịch?
Nhiều câu trả lời mà tôi tìm thấy trên internet đã khiến tôi bối rối như,
Rất ít bài viết trực tuyến khác, thảo luận, blog đã làm sáng tỏ một số ánh sáng rực rỡ về nó. Tôi nghĩ rằng sẽ tốt hơn nếu đặt nó một cách ngắn gọn và dễ hiểu ở đây.
Đây là bài đầu tiên của bộ truyện, JavaScript: bẻ khóa các đai ốc. Tôi hy vọng bạn thích đọc nó.
JavaScript được giải thích hoặc biên soạn?
Nói chung, JavaScript được phân loại là ngôn ngữ năng động hoặc được giải thích. Có rất nhiều hiểu lầm về thực tế này. Chúng ta cần hỏi và tìm câu trả lời của,
- Có hoàn toàn công bằng khi nói, JavaScript là một ngôn ngữ được giải thích?
- Sự khác biệt giữa trình thông dịch và trình biên dịch là gì?
Như đã đề cập trong Wikipedia,
Trình thông dịch là một chương trình máy tính thực hiện trực tiếp các hướng dẫn được viết bằng ngôn ngữ lập trình hoặc kịch bản mà không yêu cầu chúng trước đây phải được biên dịch thành một chương trình ngôn ngữ máy. Nó dịch một tuyên bố tại một thời điểm.
Whereas,
Trình biên dịch là phần mềm máy tính chuyển đổi mã máy tính được viết bằng một ngôn ngữ lập trình [ngôn ngữ nguồn, như JavaScript, v.v.] thành ngôn ngữ lập trình khác [ngôn ngữ đích, như mã máy].
Điều đầu tiên cần hiểu, máy tính không hiểu trực tiếp các ngôn ngữ lập trình. Mỗi ngôn ngữ lập trình đều có cú pháp, ngữ pháp và cấu trúc riêng. Bất kể ngôn ngữ lập trình nào [JavaScript, Python, Java, v.v.] đang viết mã với, nó phải được dịch thành một cái gì đó mà máy [máy tính] hiểu.
Thực tế quan trọng nhất ở đây là, làm thế nào để mã nguồn JavaScript trải qua hành trình trở thành ngôn ngữ có thể hiểu được bằng máy? Công cụ JavaScript thực hiện nhiều bước [trên thực tế, những cách sạch hơn và tinh vi hơn] mà một trình biên dịch điển hình sẽ thực hiện trong việc biên dịch mã nguồn.
Trong JavaScript, mã nguồn thường trải qua các giai đoạn sau khi nó được thực thi,
- Tokenizing: Chia một chuỗi mã nguồn thành các khối có ý nghĩa được gọi là,
Tokens
. Ví dụ: mã nguồn VAR Age = 7; có thể được mã hóa như, var, tuổi, =, 7 và,;.: Breaking up a source code string into meaningful chunks called,Tokens
. For example, the source code var age = 7; can be tokenize as, var, age, =, 7 and, ;. - Phân tích cú pháp: Phân tích cú pháp là một phương pháp để lấy mảng mã thông báo làm đầu vào và biến nó thành một cây các yếu tố lồng nhau được hiểu bởi ngữ pháp của ngôn ngữ lập trình. Cây này được gọi là cây cú pháp trừu tượng [AST].: Parsing is a methodology to take the array of Tokens as input and turn it into a tree of nested elements understood by the grammar of the programming language. This tree is called Abstract Syntax Tree[AST].
- Tạo mã: Trong giai đoạn này, AST được sử dụng làm đầu vào và mã byte có thể thực thi được tạo ra được hiểu bởi môi trường [hoặc nền tảng] nơi mã thực thi sẽ chạy. Mã byte có thể thực thi sau đó được tinh chỉnh/chuyển đổi hơn nữa bằng trình biên dịch JIT [chỉ trong thời gian] tối ưu hóa.: In this phase, the AST is used as input, and an executable byte-code is generated that is understood by the environment[or platform] where the executable code will be running. The executable byte-code is then refined/converted even further by the optimizing JIT [Just-In-Time] compiler.
"Một bức tranh trị giá ngàn từ". Dưới đây là một đại diện hình ảnh về cách ba giai đoạn này diễn ra:
Bạn có thể sử dụng công cụ AST Explorer để xem cách mã được viết bởi bạn được phân tích cú pháp vào một cây cú pháp trừu tượng [AST].
Sự kết luận
Để kết luận, mã JavaScript thực sự được biên soạn. Nó gần hơn để được biên soạn hơn là giải thích. Nó được biên soạn mỗi lần. Lần tới, nếu ai đó đặt câu hỏi, JavaScript có thực sự biên dịch không? Câu trả lời là một tiếng ồn ào. Sau quá trình compilation
tạo ra mã byte nhị phân, JS virtual machine
đã thực thi nó.Does JavaScript really Compiles? The answer is a loud YES. After the compilation
process produces a binary byte code, the JS virtual machine
executes it.
Không giống như các ngôn ngữ lập trình khác như Java, việc biên dịch không diễn ra tại thời điểm xây dựng. Ba giai đoạn được mô tả ở trên không phải là điều duy nhất xảy ra để biên dịch mã nguồn JavaScript. Công cụ JavaScript cần thực hiện nhiều bước tối ưu hóa để giải quyết các vấn đề về hiệu suất.
Là một nhà phát triển, chúng tôi được trừu tượng hóa khỏi tất cả những điều này. Chúng ta sẽ thấy nhiều chủ đề chuyên sâu hơn về JavaScript Engine
trong bài đăng trong tương lai của bộ truyện.
Đến lúc rồi. Hãy gọi nó ra, JS là ngôn ngữ được biên dịch.JS is a Compiled Language.
Nguồn
Tài nguyên tôi đề xuất cho chủ đề này là,
- Bạn chưa biết JS, Chương 1
Đây là một bài đọc tuyệt vời nếu bạn đang tìm kiếm giải thích chi tiết hơn. Bạn có thể bắt đầu đọc trực tiếp từ phần này. Phần yêu thích của tôi từ bài đọc này là,
Vì vậy, các ngôn ngữ "phân tích cú pháp" có điểm chung với các ngôn ngữ "được biên dịch"? Đầu tiên, tất cả các ngôn ngữ biên dịch đều được phân tích cú pháp. Vì vậy, một ngôn ngữ được phân tích phân tích là một cách khá lớn để được biên soạn. Trong lý thuyết tổng hợp cổ điển, bước cuối cùng còn lại sau khi phân tích cú pháp là tạo mã: tạo ra một hình thức thực thi.
Tín dụng
- Hình ảnh bìa được sử dụng trong bài đăng này được chỉnh sửa trên đầu hình ảnh này từ Freepik
Tôi hy vọng bạn tìm thấy bài viết hữu ích. Hãy thích/chia sẻ để nó cũng tiếp cận người khác. Nếu bạn thích bài viết này hoặc thấy nó hữu ích, hãy kết nối. Bạn có thể tìm thấy tôi trên Twitter [@tapasadhikary] chia sẻ suy nghĩ, mẹo và thực hành mã.
Để nhận thông báo e-mail trên các bài đăng mới nhất của tôi, vui lòng đăng ký vào blog của tôi bằng cách nhấn nút Đăng ký ở đầu trang.Subscribe button at the top of the page.
Trong bài đăng tiếp theo của loạt bài, tôi sẽ giải thích một khái niệm cơ bản khác có tên, bối cảnh thực hiện JavaScript, hơn bao giờ hết! Giữ nguyên.