Có mấy loại chương trình dịch so sánh năm 2024
- Trình biên dịch duyệt, kiểm tra, phát hiện lỗi, xác định chương trình nguồn có dịch được không. Dịch toàn bộ chương trình nguồn thành một chương trình đích có thể thực hiện trên máy và có thể lưu trữ lại để sử dụng về sau khi cần thiết. Trình thông dịch lần lượt dịch từng câu lệnh ra ngôn ngữ máy rồi thực hiện ngay câu lệnh vừa dịch được hoặc thông báo lỗi nếu không dịch được. 100% lập trình viên đều đã nghe nói đến ngôn ngữ biên dịch và thông dịch, trong 100% đó có đến 60% hiểu nôm na là biên dịch nhanh hơn thông dịch, điều đó không bàn cãi. Nhưng chỉ có 10% hiểu chính xác về sự giống nhau của thông dịch và biên dịch, nhưng chỉ có 2% là có thể giải thích một cách cặn kẽ về những điều dưới đây. Tôi thuộc 60%, chính vì thế tôi đã tìm hiểu và đưa ra bài viết này. Bài viết này ngoài vấn đề giải thích và so sánh giữa biên dịch và thông dịch thì có nhiều vấn đề mà tôi mới nhận ra, hy vọng có những bạn có những suy nghĩa sai lầm như mình có sự điều chỉnh lại. Ngoài sự giống nhau giữa biên dịch và thông dịch, thì có sự khác nhau về biên dịch và thông dịch. Hoàn cảnh bài viếtHôm nọ, một anh "Anh ơi? Em nghe về biên dịch và thông dịch về ngôn ngữ? Vậy Câu hỏi này thực sự mình không biết, vì mình đâu có chuyên về Python là thông dịch hay biên dịch?Sau khi search Google xong thì kết luận rằng: Hoá ra về Python hỗ trợ hầu hết các nền tảng phổ biến, chẳng hạn như Đến đây tôi tự hỏi, như vậy thì Ngoài ra theo tìm hiểu của tôi thì `Python`1 và `Python`2 là một dạng tồn tại kỳ lạ, chúng là ngôn ngữ bán biên dịch và bán thông dịch. Mã nguồn cần được chuyển đổi thành tệp trung gian (tệp bytecode), sau đó tệp trung gian được thực thi trong máy ảo. Java dẫn đầu xu hướng này. Mục đích ban đầu của nó là tính đến hiệu quả thực thi trong khi là đa nền tảng; `Python`2 là người đi sau, nhưng `Python`2 luôn dừng lại trên nền tảng Windows và ít ảnh hưởng đến các nền tảng khác. Ngôn ngữ biên dịchNgôn ngữ biên dịch là gì? Đối với các ngôn ngữ biên dịch, sau khi phát triển xong, tất cả các mã nguồn cần được chuyển đổi thành các chương trình thực thi, chẳng hạn như các tệp `Python`5 trong Windows. Miễn là chúng ta có một chương trình thực thi, chúng ta có thể chạy nó bất cứ lúc nào mà không cần biên dịch lại, tức là "biên dịch một lần, chạy không giới hạn số lần". Bạn không cần hiểu kỹ, chỉ cần nhớ hai điều này khi nói về biên dịch đó là:
Bạn không thể sử dụng một chương trình thực thi bởi Ngôn ngữ biên dịch có thể hạy trên `Python`6 và `Python`7 được. Bạn phải chọn 1 trong 2. Ngoài ra, các phiên bản khác nhau của cùng một hệ điều hành không nhất thiết phải tương thích. Ví dụ: không thể chạy chương trình x64 (chương trình Windows 64-bit) trên nền x86 (nền tảng Windows 32-bit). Nhưng điều ngược thì khả năng được.
Các`Python`8,`Python`9,`python`0, v.v. được hỗ trợ bởi các nền tảng khác nhau có thể khác nhau và mã nguồn được viết trên một nền tảng nói chung không thể được biên dịch dưới nền tảng khác. Hãy lấy ngôn ngữ C làm ví dụ. Ví dụ: Trong ngôn ngữ C, nếu bạn muốn tạm dừng chương trình, bạn có thể sử dụng hàm "sleep". Hàm này là `python`1 trên nền Windows và sleep () trên nền Linux. Chữ cái đầu tiên là khác nhau. Thứ hai, tham số của Sleep () là mili giây, tham số của `python`2 là giây và đơn vị là khác nhau. Thế đấy, bạn chỉ cần hiểu hai vấn đề đó cho ngôn ngữ biên dịch thôi. Ngôn ngữ thông dịchĐối với ngôn ngữ thông dịch, mỗi khi chương trình được thực thi, nó cần được chuyển đổi và thực thi, mã nguồn được chuyển đổi thành mã máy nếu nó được sử dụng, và không có quá trình xử lý nào được thực hiện trên mã nguồn không sử dụng. Các chức năng khác nhau có thể được sử dụng mỗi khi chương trình được thực thi và mã nguồn cần được chuyển đổi sẽ khác nhau tại thời điểm này. Bởi vì mã nguồn cần được chuyển đổi lại mỗi khi chương trình được thực thi, hiệu quả thực thi của các ngôn ngữ thông dịch vốn đã thấp hơn so với các ngôn ngữ biên dịch, và thậm chí còn có khoảng cách về độ lớn. Ngôn ngữ thông dịch chỉ được sử dụng ở cấp ứng dụng (chẳng hạn như phát triển trang web, v.v.) Ví dụ như`python`3 nhé, V8 sẽ giúp biên dịch JavaScript trực tiếp sang mã máy trước khi thự thi nó, thay vì các kỹ thuật truyền thống khác như giải mã thông dịch bytecode hoặc biên dịch toàn bộ chương trình sang mã máy và thực thi nó từ một hệ thống tập tin. Mã đã biên dịch được tối ưu hóa bổ sung (và được tối ưu hóa lại) một cách linh động trong thời gian thực thi, dựa trên các chẩn đoán của hồ sơ thực thi của mã. Tóm lạiĐể tôi tóm tắt lại một lần nữa cho các bạn nếu như các bạn thấy bài viết của tôi quá dài, mà thời gian các bạn quý hơn vàng. Còn tôi thì không :D |