Python có thể được biên dịch thành mã gốc không?

Một câu hỏi phổ biến. “Python được giải thích hay biên dịch?”

Trong mô hình đơn giản của thế giới, “biên dịch” có nghĩa là chuyển đổi một chương trình bằng ngôn ngữ cấp cao thành mã máy thực thi nhị phân có đầy đủ mã máy (chỉ lệnh CPU). Khi bạn biên dịch chương trình C, đây là điều sẽ xảy ra. Kết quả là một tệp mà hệ điều hành của bạn có thể chạy cho bạn

Theo định nghĩa đơn giản của “được diễn giải”, việc thực thi một chương trình có nghĩa là đọc mã nguồn từng dòng một và thực hiện những gì chương trình yêu cầu. Đây là cách một số shell hoạt động

Nhưng thế giới thực không bị giới hạn như vậy. Làm cho các ngôn ngữ lập trình thực sự trở nên hữu ích và mạnh mẽ bao gồm nhiều khả năng hơn về cách chúng hoạt động. Biên dịch là một ý tưởng tổng quát hơn. lấy một chương trình bằng một ngôn ngữ (hoặc biểu mẫu) và chuyển đổi nó sang ngôn ngữ hoặc biểu mẫu khác. Thông thường biểu mẫu nguồn là ngôn ngữ cấp cao hơn biểu mẫu đích, chẳng hạn như khi chuyển đổi từ C sang mã máy. Nhưng chuyển đổi từ JavaScript 8 sang JavaScript 5 cũng là một kiểu biên dịch

Trong Python, mã nguồn được biên dịch thành một dạng đơn giản hơn nhiều gọi là bytecode. Đây là những hướng dẫn về tinh thần tương tự như hướng dẫn của CPU, nhưng thay vì được thực thi bởi CPU, chúng được thực thi bởi phần mềm gọi là máy ảo. (Đây không phải là VM mô phỏng toàn bộ hệ điều hành, chỉ là một môi trường thực thi CPU đơn giản hóa. )

Đây là một ví dụ về hàm Python ngắn và mã byte của nó

>>> import dis
>>> def example(x):
...     for i in range(x):
...         print(2 * i)
...
>>> dis.dis(example)
  2           0 SETUP_LOOP              28 (to 30)
              2 LOAD_GLOBAL              0 (range)
              4 LOAD_FAST                0 (x)
              6 CALL_FUNCTION            1
              8 GET_ITER
        >>   10 FOR_ITER                16 (to 28)
             12 STORE_FAST               1 (i)

  3          14 LOAD_GLOBAL              1 (print)
             16 LOAD_CONST               1 (2)
             18 LOAD_FAST                1 (i)
             20 BINARY_MULTIPLY
             22 CALL_FUNCTION            1
             24 POP_TOP
             26 JUMP_ABSOLUTE           10
        >>   28 POP_BLOCK
        >>   30 LOAD_CONST               0 (None)
             32 RETURN_VALUE
>>>

Mô-đun dis trong thư viện chuẩn Python là trình dịch ngược có thể hiển thị cho bạn mã byte của Python. Đây cũng là tài liệu tốt nhất (nhưng không tuyệt vời) cho chính bytecode. Nếu bạn muốn biết thêm về cách bytecode của Python hoạt động, có rất nhiều hội thảo nói về bytecode. Phần mềm thực thi mã byte có thể được viết bằng bất kỳ ngôn ngữ nào. byterun là một triển khai trong Python (. ), chỉ hữu ích như một bài tập giáo dục

Một khía cạnh quan trọng của quá trình biên dịch mã byte của Python là nó hoàn toàn ẩn. Bạn không bao giờ gọi một trình biên dịch, bạn chỉ cần chạy một. tập tin py. Việc triển khai Python biên dịch các tệp khi cần. Ví dụ, điều này khác với Java, nơi bạn phải chạy trình biên dịch Java để biến mã nguồn Java thành các tệp lớp được biên dịch. Vì lý do này, Java thường được gọi là ngôn ngữ biên dịch, trong khi Python được gọi là ngôn ngữ thông dịch. Nhưng cả hai đều biên dịch thành mã byte và sau đó cả hai đều thực thi mã byte bằng phần mềm triển khai máy ảo

Một tính năng quan trọng khác của Python là dấu nhắc tương tác của nó. Bạn có thể nhập các câu lệnh Python và thực thi chúng ngay lập tức. Tính tương tác này thường không có trong các ngôn ngữ “được biên dịch”, nhưng ngay cả ở dấu nhắc tương tác Python, Python của bạn được biên dịch thành mã byte và sau đó mã byte được thực thi. Việc thực thi ngay lập tức này và việc Python không có bước biên dịch rõ ràng là lý do tại sao mọi người gọi Python có thể thực thi được là “trình thông dịch Python. ”

Nhân tiện, thậm chí đây là một mô tả đơn giản về cách các ngôn ngữ này có thể hoạt động. Các ngôn ngữ “được biên dịch” như Java và C có thể có các lời nhắc tương tác, nhưng chúng không phải là trung tâm của những thế giới đó giống như cách của Python. Ban đầu, Java luôn được biên dịch thành mã byte, nhưng sau đó, nó đã đi tiên phong trong các kỹ thuật JIT (Just-in-time) để biên dịch thành mã máy trong thời gian chạy và hiện tại, đôi khi Java được biên dịch hoàn toàn thành mã máy, theo kiểu C

Điều này cho thấy các từ “được giải thích” và “được biên dịch” có thể mỏng manh đến mức nào. Giống như hầu hết các tính từ được áp dụng cho các ngôn ngữ lập trình, chúng được sử dụng xung quanh như thể chúng là sự phân biệt trắng đen, nhưng thực tế thì tinh vi và phức tạp hơn nhiều

Cuối cùng, cách chương trình của bạn được thực thi hoàn toàn không phải là đặc điểm của ngôn ngữ. đó là về việc thực hiện ngôn ngữ. Tôi đã nói ở đây về Python, nhưng đây thực sự là một mô tả về CPython, cách triển khai thông thường của Python, được đặt tên như vậy vì nó được viết bằng C. PyPy là một triển khai khác, sử dụng trình biên dịch JIT để chạy mã nhanh hơn nhiều so với CPython có thể

Vì thế. Python có được biên dịch không? . Python có được giải thích không? . Xin lỗi, thế giới thật phức tạp

#java #ngôn ngữ lập trình #python» 29 lượt phản hồi

Bình luận

Python có thể được biên dịch thành mã gốc không?

NITIN GEORGE CHERIAN 3. 58 giờ sáng ngày 30 tháng 3 năm 2018

Rất nhiều thông tin và rõ ràng, Ned

Python có thể được biên dịch thành mã gốc không?

MJ 10. 04 giờ sáng ngày 30/03/2018

Gần đây, tôi mới biết rằng PyPy nhanh hơn và tôi đã có sự tôn trọng mới dành cho PyPy sau khi đã mãi mãi cho rằng đó chỉ là một dự án dẫn đến việc những người đi trước đã tôn sùng ngôn ngữ này.

Bây giờ tôi muốn biết liệu tôi có thể sử dụng nó trong Gunicorn để Django và Wagtail phản hồi nhanh hơn không - với hy vọng rằng tốc độ xử lý chậm của trang web của tôi không phải do độ trễ mạng do có máy chủ được quản lý hợp lý hơn.

Toàn bộ cuộc trò chuyện này nhắc tôi nhớ lại tôi đã bất mãn như thế nào khi tôi vẫn còn là một fan hâm mộ cuồng nhiệt của C++ và ghê tởm Java và bắt gặp một nghiên cứu cho thấy mã máy Java đánh bại C++ trong một tiêu chuẩn, rõ ràng là vì rác. .

Python có thể được biên dịch thành mã gốc không?

Peter Morris 10. 23 giờ sáng ngày 3 tháng 4 năm 2018

Ned, bạn đã đưa ra câu trả lời chính xác và chi tiết cho câu hỏi này. Tuy nhiên, bạn không nhất thiết phải mô tả một trong những lợi ích tiềm năng của mã byte.

Nếu chúng tôi sử dụng tên khác cho định dạng này (mã di động hoặc mã p–code), thì rõ ràng hơn là định dạng trung gian này sau đó có thể được sử dụng trên bất kỳ kiến ​​trúc CPU nào với điều kiện là có một máy ảo được tạo sẵn. Bytecode là nền tảng bất khả tri và điều đó có khả năng rất hữu ích.

Vì vậy, (về lý thuyết) chúng tôi có thể phân phối mã bytecode/p–code, mặc dù chúng tôi vẫn thích phân phối mã nguồn hơn và do đó, tôi đoán rằng tôi vừa nói về lợi ích mà tôi đã bắt đầu mô tả

Python có thể được biên dịch thành mã gốc không?

MJ 9. 48 giờ sáng ngày 4 tháng 4 năm 2018

khói thánh. Kiểm tra các bài kiểm tra điểm chuẩn. https. //hackernoon. com/ which-is-the-fastest-version-of-python-2ae7c61a6b2b

Python có thể được biên dịch thành mã gốc không?

Bartek 9. 44 giờ sáng ngày 17 tháng 4 năm 2018

“Python có được giải thích hoặc biên dịch không?” .
Giả sử người này biết các ngôn ngữ khác (giả sử C và Java), câu hỏi đơn giản này có thể được diễn đạt lại thành Python được bộ xử lý thực thi tự nhiên hay có trình thông dịch thực thi luồng điều khiển của chương trình. Và đó là một câu trả lời dễ dàng, nó được giải thích.
Bất kỳ câu trả lời "phức tạp" nào khác cũng có thể được áp dụng cho các ngôn ngữ khác, (e. g. C với Docker, Java với JIT), nhưng không trả lời câu hỏi cơ bản.

Nếu không thì bạn đã đọc rất hay và có cái nhìn tổng quan tốt, cảm ơn bạn.

Python có thể được biên dịch thành mã gốc không?

Şəhriyar 6. 59 giờ tối ngày 12 tháng 5 năm 2018

"Vậy. Python có được biên dịch không? . Python có được giải thích không? . Xin lỗi, thế giới thật phức tạp. "

Ý kiến ​​hay đấy, Ned.

Tôi nghĩ nó cũng áp dụng cho logic Aristotle của máy móc, nó phải được thay đổi.

Python có thể được biên dịch thành mã gốc không?

Jeetendra D 10. 43 giờ sáng ngày 22 tháng 8 năm 2018

một lời giải thích đơn giản và ngắn gọn, cảm ơn bạn rất nhiều

Python có thể được biên dịch thành mã gốc không?

chắc 6. 21h ngày 10/09/2018

Ned đưa ra một lập luận tuyệt vời, nhưng Bartek truyền đạt bằng câu cách ngôn Pythonic và đi thẳng vào vấn đề

Python có thể được biên dịch thành mã gốc không?

eric 3. 25 giờ sáng ngày 21 tháng 1 năm 2019

điều này thật tuyệt vời, cảm ơn

Python có thể được biên dịch thành mã gốc không?

Tối đa 4. 17 giờ sáng ngày 24 tháng 2 năm 2019

Cảm ơn bạn

Python có thể được biên dịch thành mã gốc không?

ananthi Ramaswamy 7. 29 giờ sáng ngày 30 tháng 5 năm 2019

Cảm ơn bạn rất nhiều vì một lời giải thích có giá trị như vậy. Tôi đã suy nghĩ rất nhiều, và cuối cùng kết thúc với bài viết của bạn. Cảm ơn rất nhiều

Python có thể được biên dịch thành mã gốc không?

Animesh 6. 25h ngày 28/04/2020

Vì vậy,
Python chuyển đổi mã thành mã byte; .
Python has a VM; so does java

Can i assume that on a higher level we call python as an interpreter just because it executes in an interactive shell by generating byte code for each command?

Also, If I create a high level code using Python and Java wouldn't it be a same way of execution for both as both generates the byte code for the respective VMs which then generates the final code for the downstream arch?

Please take a moment to answer my doubts, I really am looking for an answer as I am starting to learn python and this is really bugging me!

Python có thể được biên dịch thành mã gốc không?

Ned Batchelder 12. 03 giờ sáng ngày 29 tháng 4 năm 2020

Tôi đã đề cập đến điều này một chút trong phần này, nhưng tôi nghĩ Python được gọi là "thông dịch" vì nó không có bước biên dịch rõ ràng và nó có dấu nhắc tương tác. Java yêu cầu bạn chạy trình biên dịch trước khi bạn có thể chạy chương trình của mình và không có lời nhắc tương tác. Vì vậy, Python bị gắn nhãn sai là "diễn giải" và Java bị gắn nhãn sai là "biên dịch. "

Python có thể được biên dịch thành mã gốc không?

Animesh 1. 41 giờ sáng ngày 29 tháng 4 năm 2020

Cảm ơn Ned nhiều. Tôi thực sự thích bài viết và giải thích của bạn

Python có thể được biên dịch thành mã gốc không?

Vaishnavi Singh 8. 11 giờ sáng ngày 29 tháng 5 năm 2020

Cảm ơn rất nhiều. nó xóa tan nghi ngờ của tôi rất tốt mà các trang web khác không thể

Python có thể được biên dịch thành mã gốc không?

Szymon Przedwojski 6. 48h ngày 7/6/2020

Bài viết tuyệt vời, cảm ơn Ned

Python có thể được biên dịch thành mã gốc không?

trăn 6. 32 giờ chiều ngày 14 tháng 10 năm 2020

Máy ảo python có gửi mã máy tới CPU để xử lý hay liều lượng PVM thực thi mã byte và chỉ gửi kết quả tới CPU không?

Python có thể được biên dịch thành mã gốc không?

Adil Abbasi 2. 34 giờ chiều ngày 20 tháng 10 năm 2020

Nguồn. https. //www. con trăn. org/doc/essays/blurb/

Python là ngôn ngữ lập trình cấp cao, hướng đối tượng, thông dịch với ngữ nghĩa động.
.
.

Trình thông dịch Python và thư viện chuẩn mở rộng có sẵn ở dạng nguồn hoặc nhị phân miễn phí cho tất cả các nền tảng chính và có thể được phân phối miễn phí.

Python có thể được biên dịch thành mã gốc không?

Adil Abbasi 2. 38 giờ chiều ngày 20 tháng 10 năm 2020

Nhiều trình dịch khác nhau cho phép lập trình viên viết bằng ngôn ngữ cấp cao như Python hoặc
JavaScript và những trình dịch này chuyển đổi chương trình sang ngôn ngữ máy để
thực thi thực tế .

Sách -> Python cho mọi người của Dr. Charles R. thôi việc

Python có thể được biên dịch thành mã gốc không?

Ned Batchelder 1. 07 giờ tối ngày 21 tháng 10 năm 2020

@Adil. hai trích dẫn này cho thấy thật khó để bao gồm tất cả các chi tiết, đặc biệt là khi viết tài liệu giới thiệu.

Guido đang sử dụng "được thông dịch" có nghĩa là "không tạo tệp thực thi bằng ngôn ngữ máy", đó là ý nghĩa của nhiều người khi họ nói "được thông dịch". (Mặc dù không ai gọi Java được giải thích. ?)

Tiến sĩ. Severance đang nói rất rộng về quá trình thực thi Python. Trình thông dịch mã byte của Python dẫn đến một luồng hướng dẫn máy, các hướng dẫn mà nó thực thi khi nó đang diễn giải mã byte. Chúng không được lưu trữ ở bất cứ đâu trước khi thực hiện.

Python có thể được biên dịch thành mã gốc không?

Thử thách DasGupta 1. 08 giờ tối ngày 2 tháng 11 năm 2020

Bartek đặt câu hỏi đúng. Trình biên dịch thời gian thực trực tuyến về cơ bản là một trình thông dịch. Tất nhiên, mọi thứ cuối cùng được chuyển đổi thành mã thực thi cho tập lệnh mà nền tảng hỗ trợ. Ned hoàn toàn đúng khi biên dịch và giải thích là vấn đề về triển khai chứ không phải vấn đề về ngôn ngữ. Nhưng một số người trong chúng ta vẫn muốn biết một ngôn ngữ được biên dịch nguyên bản (một lần) hoặc được biên dịch trong thời gian thực mỗi khi mã chạy

Python có thể được biên dịch thành mã gốc không?

Taneli Härkönen 9. 53 giờ sáng ngày 3 tháng 11 năm 2020

Đây là một bài báo tuyệt vời. Có quá nhiều sự nhầm lẫn ngoài kia. Vẫn còn một số câu hỏi ngu ngốc dai dẳng phát sinh. Mã byte Python có giống với mã byte Java không?

Python có thể được biên dịch thành mã gốc không?

Ned Batchelder 11. 49 giờ sáng ngày 3 tháng 11 năm 2020

@taneli. Mã byte Python và mã byte Java khác nhau. Mã byte của Python thậm chí có thể thay đổi giữa các phiên bản (3. 6 -> 3. 7)

Python có thể được biên dịch thành mã gốc không?

Gee Dee 12. 09 giờ sáng ngày 26 tháng 11 năm 2020

TÁC GIẢ đang cố hết sức để trở nên ngầu bằng một câu trả lời phức tạp ("tôi không thông minh", xu hướng hipster ngày nay). Nó đơn giản như thế này. đầu ra cuối cùng có THỰC HIỆN trực tiếp trên CPU theo mã máy gốc của nó (được thực thi bởi máy siêu nhỏ hw) không? . một cái khác là. nó có thể thay đổi hoạt động bằng cách tự sửa đổi mã nguồn không?

Python có thể được biên dịch thành mã gốc không?

Ned Batchelder 1. 29 giờ tối ngày 26 tháng 11 năm 2020

@Gee Dee. định nghĩa của bạn chắc chắn là đơn giản. Vì vậy, Java là một ngôn ngữ thông dịch?

Python có thể được biên dịch thành mã gốc không?

Người ơi 1. 49 giờ tối ngày 21 tháng 2 năm 2021

Xin chào Ned,
cảm ơn vì điều đó. Rực rỡ hơn bao giờ hết. Điều quan trọng cần biết là Mã nguồn Python được biên dịch thành Mã byte trong bước đầu tiên, chỉ để hiểu sự khác biệt giữa Lỗi cú pháp (xuất hiện trong bước biên dịch) và các ngoại lệ xuất hiện trong thời gian chạy. Tôi cố gắng dạy học sinh của mình khá sớm trong các khóa học.

Python có thể được biên dịch thành mã gốc không?

Đánh dấu L 12. 47 giờ sáng ngày 7 tháng 11 năm 2021

Xin lỗi, nhưng tôi là trường học cũ. Nếu mã không thể chạy tự nhiên trên CPU, thì mã đó không được biên dịch. Vâng, thế giới rất phức tạp, nhưng khi bạn hiểu nó về những điều cơ bản, một chương trình đã biên dịch có thể chạy trên hệ thống đích mà không cần thông qua lớp phần mềm khác

Python có thể được biên dịch thành mã gốc không?

Xin chào 4. 55 giờ chiều ngày 10 tháng 11 năm 2021

Xin chào Mark, các đồng nghiệp Java hàng xóm của tôi sẽ phát hoảng khi tôi nói với họ rằng Java rốt cuộc là một ngôn ngữ được thông dịch. Nhưng tôi nghĩ, vấn đề trong cuộc tranh luận này là, nó không chỉ có trắng và đen. Nó không chỉ là BIÊN SOẠN so với GIẢI THÍCH có hay không, bản thân câu hỏi hoàn toàn sai. nó không phải là đơn giản

Python có thể được biên dịch thành mã gốc không?

Ochse 6. 25 giờ chiều ngày 30 tháng 5 năm 2022

nhập dis

chắc chắn fn(). x = z

dis. không (fn)

thêm nhận xét

Tên

E-mail

Bỏ qua điều này.

Để trống cái này.

Trang mạng

Tên là bắt buộc. Cần có email hoặc web. Email sẽ không được hiển thị và tôi sẽ không spam bạn. Trang web của bạn sẽ không được lập chỉ mục bởi các công cụ tìm kiếm

Python có thể được biên dịch thành bản địa không?

Người ta có thể viết trình biên dịch Python-to-native. Chúng không thú vị lắm vì chúng không thực sự cải thiện hiệu suất ở bất kỳ biên độ đáng kể nào, trừ khi chúng thực sự triển khai một ngôn ngữ trông giống như Python nhưng bị hạn chế hơn nhiều. Trước đây tôi đã giải thích ở nơi khác tại sao

Mã Python có thể được biên dịch thành C không?

Mã Python có thể gọi trực tiếp vào các mô-đun C . Các mô-đun C đó có thể là thư viện C chung hoặc thư viện được xây dựng riêng để hoạt động với Python. Cython tạo ra loại mô-đun thứ hai. Các thư viện C nói chuyện với nội bộ của Python và có thể được gói cùng với mã Python hiện có.

Tại sao chúng ta không biên dịch Python?

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ể . .

Python có thể nhanh như C không?

Mặc dù C vẫn là bậc thầy về tốc độ nói chung, PyPy có thể đánh bại C trong một số trường hợp . “Nếu bạn muốn mã của mình chạy nhanh hơn một cách kỳ diệu, có lẽ bạn chỉ nên sử dụng PyPy. ”