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ạn đang xem: So sánh thông dịch và biên dịch – khác và giống thế nào?
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.
Hôm nọ, một anh tester qua chỗ mình và hỏi:
“Anh ơi? Em nghe về biên dịch và thông dịch về ngôn ngữ? Vậy Python thuộc loại nào anh?”
Câu hỏi này thực sự mình không biết, vì mình đâu có chuyên về python, nhưng sĩ diện, mình cảm thấy ai cũng nói python nhanh, nên mình nghĩ đại nói ngay là “Python là ngôn ngữ biên dịch em”. Hồi hộp quá, chờ nó đi mình search Google ngay. Bạn biết câu trả lời đúng là sao không?
Sau khi search Google xong thì kết luận rằng:
Hoá ra về Python là một ngôn ngữ thông dịch điển hình, vì vậy việc chạy các chương trình Python cần sự hỗ trợ của trình thông dịch. Chỉ cần bạn cài đặt các trình thông dịch khác nhau trên các nền tảng khác nhau, mã của bạn có thể chạy bất cứ lúc nào mà không cần lo lắng về bất kỳ vấn đề tương thích nào. Viết, chạy ở mọi nơi “.
Python hỗ trợ hầu hết các nền tảng phổ biến, chẳng hạn như Linux, Windows, Mac OS, Android , FreeBSD, Solaris, PocketPC, v.v. MãPython bạn viết có thể chạy chính xác trên các nền tảng này mà không cần sửa đổi. Nói cách khác, tính di động của Python rất mạnh.
Đến đây tôi tự hỏi, như vậy thì khoảng cách giữa ngôn ngữ biên dịch và thông dịch không còn xa, nếu như Python đã làm được điều này.
Xem thêm : Trứng gà ta bao nhiêu calo và ăn có mập không?
Ngoài ra theo tìm hiểu của tôi thì java hay c# trước giờ cữ chắc chắn là ngôn ngữ biên dịch, nhưng sự thật éo phải thế.
Java và C# 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; C# là người đi sau, nhưng C# 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ị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 .exe 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à:
1) Các chương trình thực thi không được đa nền tảng
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 windows và linux đượ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.
2) Mã nguồn không được đa nền tảng
Cácfunction,kiểu,biến, 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à Sleep () 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 sleep () là giây và đơn vị là khác nhau.
Xem thêm : [REVIEW] Mặt nạ yến mạch sữa chua, sữa tươi, mật ong, bột nghệ trắng da, trị mụn
Thế đấy, bạn chỉ cần hiểu hai vấn đề đó cho ngôn ngữ biên dịch thôi.
Đố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ưjavascript 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ô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 😀
Ngôn ngữ biên dịch
Ngôn ngữ thông dịch
Bài viết được sự hỗ trợ nhiều bài viết trên internet như:
freecodecamp
geeksforgeeks
Nguồn: https://luatduonggia.edu.vn
Danh mục: Tổng hợp
This post was last modified on 19/04/2024 15:22
Vận mệnh người tuổi Mùi theo cung hoàng đạo: Bạn có dễ thăng tiến không?
Hé lộ vận mệnh 12 con giáp tháng 12/2024: Những rủi ro nào đang rình…
Cẩm nang may mắn năm 2025 cho người tuổi Tý: Cơ hội đổi đời trong…
Tử vi hôm nay 4 con giáp ngày 26/11/2024 gặp nhiều may mắn, vận may…
Con số may mắn hôm nay 26/11/2024 theo tuổi sinh: Hãy chọn SỐ ĐÚNG để…
Tử vi thứ ba ngày 26/11/2024 của 12 con giáp: Tý xui xẻo, Mùi an…