01/10/2018, 09:25

Python có "biên dịch" không?

Em được biết Python là một ngôn ngữ thông dịch? Vậy nên em hiểu là nó không hề biên dịch. Nhưng lại vô tình được được bài này

Python is not compiled?

While not requiring a separate compiler toolchain like C++, Python is in fact compiled to bytecode, much like Java and many other compiled languages. Further compilation steps, if any, are at the discretion of the runtime, be it CPython, PyPy, Jython/JVM, IronPython/CLR, or some other process virtual machine.

Vậy thì một chương trình Python cũng được biên dịch giống Java phải không ạ? Thế thì sao lại nói nó là ngôn ngữ thông dịch được ạ?

Tao Không Ngu. viết 11:33 ngày 01/10/2018

Hi tutu.
Tất nhiên bạn phải chuyển file text mã nguồn thành một dạng dữ liệu khác tối ưu hơn cho việc thực thi. Thường thì các file này được giữ lại để chạy cho lần sau như .class của java.
Tại sao nói nó là thông dich vì đầu vào cho máy ảo thực thi là file text còn java là file .class.

tutu viết 11:30 ngày 01/10/2018

Về Java thì em đã hiểu rồi. Java phải biên dịch thành bytecode rồi JVM mới thông dịch. Nhưng còn Python cơ ạ. Em nghe nói nó là ngôn ngữ thông dịch. Thế tại sao bài viết này lại còn nói nó được biên dịch thành bytecode nữa? Đó là cái em thắc mắc.

Tao Không Ngu. viết 11:26 ngày 01/10/2018

Hi tutu.
Khi load file text vào thì bạn cần phải tạo nơi lưu trữ biến stack gọi hàm class v.v.v…

Tech Talk – 5 Apr 17

Viết ngôn ngữ lập trình – Ai cũng làm được? | Tech Talk

Trong vòng 6 tháng vừa qua, tôi đang phát triển một ngôn ngữ lập trình gọi là Pinecone. Sẽ còn là quá sớm để kết luận rằng nó đã hoàn hảo, nhưng Pinecone đã có nhiều tính năng hoạt động hiệu quả cho việc lập trình, bao gồm: Variables Functions User...


Để khỏi mất công tạo các dữ liệu đó thì lưu file đấy lại dùng lại sau.

Trần Ngọc Khoa viết 11:34 ngày 01/10/2018

Python là một ngôn ngữ lập trình. Nó là các quy tắc để một người lập trình biểu diễn các thuật toán, giải pháp cho bài toán của mình.
Mã nguồn được biên dịch hay thông dịch sẽ dựa vào phần mềm mà bạn sử dụng để có thể chạy mã nguồn của bạn.
Với Python, các biến được khai báo mà không cần kiểu, như vậy, kiểu của biến được gán theo ngữ cảnh. Việc thông dịch sẽ dễ hơn biên dịch.

tutu viết 11:34 ngày 01/10/2018

Em chỉ hỏi là Python có được biên dịch không? Và nếu như đúng bài viết kia nói thì sau khi được biên dịch thành bytecode. Cái gì sẽ thông dịch Python sang ngôn ngữ máy? Như ở Java là JVM ấy ạ? Ở Python là gì?

Khoa NTA viết 11:29 ngày 01/10/2018

Những anh ở trên đã trả lời rồi. Mình chỉ nhắc lại thôi. (với CPython).
Bạn có thử vào thư mục chứa thư viện của Python không? Bạn có thấy các file dạng *.pyc (hay *.pyo) không? Nó là bytecode sau khi biên dịch của Python và dĩ nhiên càng không phải ngôn ngữ máy nên không có chuyện “thông dịch sang ngôn ngữ máy”.
Lúc nào Python nạp 1 file nào thì nó đều được compile trước việc các file được compile là để tăng tốc nạp thư viện vào thôi
Bạn cũng nên phân biệt interpretervirtual machine tụi nó không giống nhau. Và câu hỏi này rất dễ để tìm đáp án Google (miễn là từ khóa tiếng anh).

KYN viết 11:42 ngày 01/10/2018
Thành Phạm viết 11:38 ngày 01/10/2018

Bạn đọc mấy link này xem , nói chung có mấy ý quan trọng là:

  • Ngôn ngữ Python khác với Python implementation, 1 ngôn ngữ thì không có khái niệm compiled hay interpreted mà implementation của ngôn ngữ đó mới có 2 khái niệm đó.
  • Ngôn ngữ python là cái trong file .py, còn python implementation là CPython ( cái hầu hết mọi người dùng), Jython, IronPython, PyPy.
  • CPython compile Python code ra bytecode rồi interpreted bytecode ra mã máy
  • CPython và Cython là 2 cái khác nhau
stackoverflow.com
Pankaj Upadhyay

Is Python interpreted, or compiled, or both?

python, interpreted-language
asked by Pankaj Upadhyay on 01:31PM - 31 Jul 11
softwareengineering.stackexchange.com
crodjer

Is Python Interpreted or Compiled?

programming-languages, python, compiler, efficiency
asked by crodjer on 07:28AM - 08 Dec 10
stackoverflow.com
K DawG

Python vs Cpython

python, cpython
asked by K DawG on 07:00AM - 16 Jun 13
Bài liên quan
0