Tại sao python được giải thích và java được biên dịch?

Xin chào Jhon, bạn đã hỏi

"là ngôn ngữ biên dịch python hay ngôn ngữ thông dịch"

Câu trả lời ngắn. Cả hai. Đó là một trình thông dịch với trình biên dịch. Nhưng nếu
bạn chỉ có thể đưa ra một câu trả lời, đó là một ngôn ngữ được giải thích hơn là
một ngôn ngữ được biên dịch

câu trả lời dài hơn

Khi mọi người nói về "ngôn ngữ biên dịch", họ thường nghĩ về
các ngôn ngữ như C. Trong C, quá trình chạy một chương trình trông giống như
như thế này [đơn giản hóa]

  • bạn viết mã nguồn;

  • bạn sử dụng một trình biên dịch để biến mã nguồn của bạn thành
    ngôn ngữ máy mà CPU của máy tính của bạn hiểu được;

  • mỗi dòng CPU khác nhau sử dụng một ngôn ngữ máy khác nhau,
    vì vậy kiến ​​trúc máy tính [e. g. Windows so với Mac] cần một
    trình biên dịch khác nhau;

  • nhưng một khi bạn đã có ngôn ngữ máy được biên dịch, bạn không cần nữa
    mã nguồn hoặc trình biên dịch;

  • mặt khác, mã được biên dịch sẽ chỉ chạy trên một họ
    của máy, vì vậy bạn cần có phiên bản Windows và Mac riêng biệt của
    chương trình của bạn

Khi mọi người nói về “ngôn ngữ được giải thích”, họ thường
nghĩ về một cái gì đó như thế này

  • bạn viết mã nguồn;

  • bạn sử dụng một trình thông dịch để xem mã nguồn và
    thực thi trực tiếp các câu lệnh mà không cần biên dịch nó thành
    ngôn ngữ máy đầu tiên;

  • vì vậy để chạy mã bằng ngôn ngữ được giải thích, bạn phải có cả hai
    mã nguồn và trình thông dịch;

  • và một chương trình duy nhất [mã nguồn] sẽ chạy trên bất kỳ máy nào
    với thông dịch viên phù hợp

Python, giống như hầu hết các ngôn ngữ trong, ồ, khoảng bốn mươi năm, kết hợp
yếu tố của cả hai

  • bạn viết mã nguồn;

  • khi bạn sử dụng trình thông dịch, trước tiên nó sẽ biên dịch nguồn
    mã thành “mã byte”;

  • không giống như mã máy, mã dành riêng cho một họ CPU và
    kiến trúc máy, mã byte không phụ thuộc vào loại nào
    của máy bạn đang sử dụng;

  • trình thông dịch sau đó có một "máy ảo" biết cách
    chạy mã byte;

  • giống như các ngôn ngữ được biên dịch, có một dạng trung gian [byte
    mã] giữa những gì bạn viết [mã nguồn] và những gì được chạy bởi
    CPU thực tế;

  • để bạn có thể biên dịch mã Python thành một. pyc và sau đó chạy nó
    biên dịch phiên bản thay vì mã nguồn;

  • nhưng giống như các ngôn ngữ thông dịch, mã byte không chạy trực tiếp
    trên CPU của máy tính của bạn;
    chạy mã byte;

  • điều đó có nghĩa là giống nhau. py hoặc. tập tin pyc có thể được sử dụng trên bất kỳ
    máy có phiên dịch phù hợp;

  • một số trình thông dịch Python, như PyPy, bao gồm “Just In Time”
    trình biên dịch biến các phần của mã byte thành ngôn ngữ máy
    khi cần thiết, để có thêm tốc độ, mà không làm mất đi những lợi thế của
    có thông dịch viên

Ngày nay, hầu hết các ngôn ngữ hiện đại đều có các yếu tố của cả hai. Thông dịch viên
hầu như luôn có một dạng biên dịch trung gian chạy trong ảo
cỗ máy;

Mã bạn viết bằng python được trình thông dịch python chuyển thành mã máy mà không cần biên dịch vật lý. Điều tôi muốn nói khi biên dịch vật lý là bạn không cần phải biên dịch mã python như bạn đang làm trong Java, C hoặc C++, để nhận đầu ra. Nhưng chờ đã, vì điều đó bạn không thể đơn giản nói python hoàn toàn là một ngôn ngữ thông dịch mà không hiểu kiến ​​trúc bên trong về cách nó được xây dựng và cách nó thực sự hoạt động. Vì vậy, trong bài viết này, chúng ta sẽ thảo luận về python và kiến ​​trúc bên trong của nó và python được diễn giải, biên dịch hay cả hai?

Ngôn ngữ được giải thích và biên dịch là gì?

Mọi ngôn ngữ lập trình cấp thấp hoặc cấp cao đều cần một trình dịch để chuyển đổi mã nguồn bạn đã viết trong IDE thành mã máy, trình thông dịch và trình biên dịch là những trình dịch ngôn ngữ chuyển đổi mã nguồn của bạn thành mã nhị phân mà một trình biên dịch có thể hiểu được. . Sự khác biệt cơ bản giữa ngôn ngữ được thông dịch và ngôn ngữ được biên dịch là cách chúng được chuyển đổi sang ngôn ngữ máy gốc, Trình thông dịch chuyển đổi và thực thi từng câu lệnh được viết trong mã nguồn theo từng dòng trong khi trình biên dịch chuyển đổi toàn bộ mã nguồn thành mã máy tại một thời điểm. . Vì vậy, ngôn ngữ lập trình được biên dịch nhanh hơn nhiều so với ngôn ngữ lập trình được giải thích

Hoạt động bên trong của python

Khi bạn chạy một mã python đơn giản để in "Xin chào thế giới", bạn sẽ nhận được đầu ra ngay lập tức, nhưng có một số quy trình nhất định xảy ra đằng sau, bất kể chương trình đơn giản hay phức tạp, trước tiên mã nguồn bạn đã viết sẽ được biên dịch bởi . Bytecode là mã trung gian khác với mã máy thực tế và đang được chạy trên máy ảo chứ không phải máy vật lý. Sau đó, mã byte đang được giải thích trong máy ảo để cung cấp cho đầu ra thực tế. Máy ảo được sử dụng để chạy các chương trình python được gọi là PVM [Python Virtual Machine].  


Dưới đây là các bước để nhận mã thực thi từ mã nguồn

  1. Chương trình được biên dịch bởi trình biên dịch python và kiểm tra lỗi, nếu trình biên dịch tìm thấy lỗi, nó sẽ đưa ra một thông báo lỗi tới bàn điều khiển
  2. Nếu không có lỗi và mã nguồn được định dạng tốt, trình biên dịch sẽ chuyển đổi mã nguồn thành Bytecode
  3. Mã byte sau đó được xử lý bên trong Máy ảo Python [PVM] và đang được diễn giải để cung cấp mã máy thực
  4. Mã máy sau đó được CPU thực thi để trả về đầu ra

Tại sao máy ảo?

Trong một số ngôn ngữ lập trình như C hoặc C++, nó có thể được biên dịch trực tiếp để cung cấp mã thực thi có thể chạy trên máy vật lý. Nhưng tại sao python có kiến ​​trúc phức tạp như vậy để chuyển đổi thành mã byte và sau đó chạy trên máy ảo? . Nhưng tính di động là gì? . Các hệ thống khác nhau có kiến ​​trúc CPU khác nhau, vì vậy mã mà bạn đã viết trong máy của mình có thể không hoạt động trên bất kỳ máy nào khác, vì vậy tốt hơn là chuyển đổi mã nguồn thành mã byte và thực thi nó trên máy ảo. Sau đó, máy ảo chạy mã byte để cung cấp mã máy thực mà CPU có thể thực thi trực tiếp

Các triển khai khác nhau của python

Python thực chất là một ngôn ngữ có cú pháp và ngữ nghĩa với một số quy tắc nhất định, tuy nhiên việc triển khai python có thể thực hiện theo cách khác. Việc triển khai python mặc định và được sử dụng rộng rãi nhất là CPython. CPython là triển khai python bằng ngôn ngữ lập trình C. Vì vậy, mã python bạn viết được biên dịch bởi CPython để lấy mã byte và sau đó nó được chạy trên PVM để lấy mã máy


Dưới đây là một số triển khai khác của python


Jython - Đây là một triển khai của python bằng ngôn ngữ Java. Nó biên dịch mã nguồn Python thành mã byte Java và sau đó thực thi nó,


IronPython - Nó là. NET triển khai python của Microsoft


PyPy - Đây là một triển khai thay thế khác cho ngôn ngữ python so với CPython. Mặc dù nó nhanh hơn CPython

Phần kết luận

Vì vậy, python được giải thích, biên dịch hay cả hai? . Đó là những gì tôi đã đề cập trong phần giới thiệu, ngay cả khi bạn không thực sự biên dịch mã python thì nó vẫn thực sự xảy ra khi bạn chạy nó

Cả Python và Java đều được giải thích?

Python là ngôn ngữ được thông dịch, trong khi Java chủ yếu được gọi là ngôn ngữ được biên dịch, mặc dù đôi khi nó được coi là vừa được biên dịch vừa được thông dịch vì mã nguồn của nó trước tiên được biên dịch thành byte nhị phân . Ngôn ngữ thông dịch đã từng được coi là chậm hơn ngôn ngữ biên dịch.

Python có thể được biên dịch thay vì giải thích không?

Python vừa được biên dịch vừa là ngôn ngữ được giải thích , có nghĩa là khi chúng tôi chạy mã python, trước tiên, mã này được biên dịch và sau đó được giải thích từng dòng một. Phần biên dịch sẽ bị xóa ngay khi mã được thực thi trong Python để lập trình viên không gặp phải sự phức tạp không cần thiết.

Tại sao Python không cần biên dịch?

Python không cần trình biên dịch vì nó dựa vào một ứng dụng [được gọi là trình thông dịch] để biên dịch và chạy mã mà không cần lưu trữ mã máy được tạo ở dạng mà bạn có thể . .

Tại sao Python là ngôn ngữ thông dịch *?

Python là ngôn ngữ được thông dịch vì nó triển khai trình thông dịch để biến mã của bạn thành ngôn ngữ mà bộ xử lý máy tính của bạn có thể hiểu được . Một trong những tính năng hấp dẫn nhất của các ngôn ngữ thông dịch là chúng là nền tảng bất khả tri.

Chủ Đề