Hướng dẫn what does python get compiled into? - python được biên dịch thành gì?

Đó là một sự nhầm lẫn lớn đối với những người mới bắt đầu làm việc ở Python và câu trả lời ở đây có một chút khó hiểu nên tôi sẽ làm cho nó dễ dàng hơn.

Khi chúng tôi hướng dẫn Python chạy kịch bản của chúng tôi, có một vài bước mà Python thực hiện trước khi mã của chúng tôi thực sự bắt đầu khủng hoảng:

  • Nó được tổng hợp thành mã byte.
  • Sau đó, nó được chuyển đến máy ảo.

Khi chúng tôi thực thi một số mã nguồn, Python biên dịch nó vào mã byte. Biên dịch là một bước dịch và mã byte là một đại diện độc lập nền tảng thấp của mã nguồn.

Lưu ý rằng mã byte python không phải là mã máy nhị phân [ví dụ: hướng dẫn cho chip intel].

Trên thực tế, Python dịch từng câu lệnh của mã nguồn thành các hướng dẫn mã byte bằng cách phân tách chúng thành các bước riêng lẻ. Bản dịch mã byte được thực hiện để thực hiện tốc độ. Mã byte có thể được chạy nhanh hơn nhiều so với các câu lệnh mã nguồn gốc. Nó có tiện ích mở rộng và nó sẽ được viết nếu nó có thể viết vào máy của chúng tôi.

Vì vậy, lần tới khi chúng tôi chạy cùng một chương trình, Python sẽ tải tệp .pyc và bỏ qua bước biên dịch trừ khi nó được thay đổi. Python tự động kiểm tra dấu thời gian của các tệp mã nguồn và byte để biết khi nào nó phải được biên dịch lại. Nếu chúng ta định lại mã nguồn, mã byte sẽ tự động tạo lại vào lần tiếp theo chương trình được chạy.

Nếu Python không thể viết các tệp mã byte vào máy của chúng tôi, chương trình của chúng tôi vẫn hoạt động. Mã byte được tạo trong bộ nhớ và chỉ cần loại bỏ trên lối ra chương trình. Nhưng bởi vì thời gian khởi động tốc độ .PYC, chúng tôi có thể muốn đảm bảo rằng nó đã được viết cho các chương trình lớn hơn.

Hãy tóm tắt những gì xảy ra đằng sau hậu trường. Khi Python thực hiện một chương trình, Python đọc .Py vào bộ nhớ và phân tích cú pháp nó để có được mã byte, sau đó tiếp tục thực thi. Đối với mỗi mô -đun được chương trình nhập, Python trước tiên kiểm tra xem liệu có phiên bản Bytecode được biên dịch trước, trong .Pyo hoặc .pyc, có dấu thời gian tương ứng với tệp .py của nó. Python sử dụng phiên bản bytecode nếu có. Mặt khác, nó phân tích tệp .py của mô -đun, lưu nó vào tệp .pyc và sử dụng mã byte mà nó vừa tạo. When Python executes a program, Python reads the .py into memory, and parses it in order to get a bytecode, then goes on to execute. For each module that is imported by the program, Python first checks to see whether there is a precompiled bytecode version, in a .pyo or .pyc, that has a timestamp which corresponds to its .py file. Python uses the bytecode version if any. Otherwise, it parses the module's .py file, saves it into a .pyc file, and uses the bytecode it just created.

Các tập tin mã byte cũng là một cách vận chuyển mã Python. Python vẫn sẽ chạy một chương trình nếu tất cả những gì nó có thể tìm thấy là các tệp.pyc, ngay cả khi các tệp nguồn .Py gốc không có ở đó.

Máy ảo Python [PVM]

Khi chương trình của chúng tôi đã được biên dịch thành mã byte, nó sẽ được chuyển đến để thực hiện vào máy ảo Python [PVM]. PVM không phải là một chương trình riêng biệt. Nó không cần phải được cài đặt bởi chính nó. Trên thực tế, PVM chỉ là một vòng lặp lớn mà lặp lại thông qua hướng dẫn mã byte của chúng tôi, từng người một, để thực hiện các hoạt động của họ. PVM là động cơ thời gian chạy của Python. Nó luôn luôn có mặt như là một phần của hệ thống Python. Đó là thành phần thực sự chạy các tập lệnh của chúng tôi. Về mặt kỹ thuật, nó chỉ là bước cuối cùng của những gì được gọi là phiên dịch Python.

Thứ năm ngày 29 tháng 3 năm 2018

Một câu hỏi phổ biến: Có phải Python được giải thích hay biên soạn không? Thông thường, người hỏi có một mô hình đơn giản của thế giới trong tâm trí, và như điển hình, thế giới phức tạp hơn.

Trong mô hình đơn giản của thế giới, việc 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ột thực thi nhị phân đầy đủ mã máy [hướng dẫn CPU]. Khi bạn biên dịch một chương trình C, đây là những gì 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.

Trong định nghĩa đơn giản của người được giải thích, việc thực hiện một chương trình có nghĩa là đọc mã nguồn một dòng tại một thời điểm và làm những gì nó nói. Đây là cách một số vỏ hoạt động.

Nhưng thế giới thực không quá hạn chế. Làm cho các ngôn ngữ lập trình thực sự hữu ích và mạnh mẽ liên quan đến một loạt các khả năng về cách chúng hoạt động. Biên dịch là một ý tưởng chung hơn: Lấy một chương trình bằng một ngôn ngữ [hoặc hình thức] và chuyển đổi nó thành ngôn ngữ hoặc hình thức 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 thành JavaScript 5 cũng là một loại 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 được gọi là mã byte. Đây là các hướng dẫn tương tự về tinh thần với các hướng dẫn CPU, nhưng thay vì được thực thi bởi CPU, chúng được thực thi bởi phần mềm được 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ôi trường thực hiện CPU đơn giản hóa.]

Dưới đây, một ví dụ về chức năng 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 tiêu chuẩn Python là bộ phân tách có thể hiển thị cho bạn mã byte Python. Nó cũng là tài liệu tốt nhất [nhưng không tuyệt vời] cho chính mã byte. Nếu bạn muốn biết thêm về cách thức hoạt động của mã byte Python, có rất nhiều cuộc nói chuyện hội nghị về mã byte. 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 & nbsp; [!], 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 việc tổng hợp Python, đối với mã byte là nó hoàn toàn tiềm ẩ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 .py. Việc triển khai Python biên dịch các tệp khi cần thiết. Điều này khác với Java, ví dụ, 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ữ được biên dịch, trong khi Python được gọi là ngôn ngữ được giải thích. Nhưng cả hai biên dịch theo mã byte, và sau đó cả hai thực thi mã byte với việc triển khai phần mềm của một máy ảo.

Một tính năng Python quan trọng khác là lời nhắc tương tác của nó. Bạn có thể nhập các câu lệnh Python và để chúng được thực thi ngay lập tức. Tính tương tác này thường bị thiếu trong các ngôn ngữ được biên dịch trên mạng, nhưng ngay cả tại 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 hiện ngay lập tức này, và Python, thiếu một 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à người phiên dịch Python.

Nhân tiện, ngay cả đây là một mô tả đơn giản hóa về cách các ngôn ngữ này có thể hoạt động. Các ngôn ngữ đã biên dịch các ngôn ngữ của người Viking như Java và C có thể có những 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 mà Python. Java ban đầu luôn được biên dịch thành mã byte, nhưng sau đó, nó đã tiên phong trong thời gian [JIT] để biên dịch với mã máy vào thời gian chạy, và bây giờ Java đôi khi được biên dịch hoàn toàn với mã máy, theo kiểu C.

Điều này cho thấy sự mỏng manh của các từ đã diễn giải và đã được biên soạn. 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 bị ném xung quanh như thể chúng là sự phân biệt đen trắng, nhưng thực tế là sự tinh tế và phức tạp hơn nhiều.

Cuối cùng, làm thế nào chương trình của bạn được thực hiện không phải là một đặ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, việc triển khai Python thông thường, được đặt tên 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ậy: Python có được biên soạn không? Đúng. Python có được giải thích không? Đúng. Xin lỗi, thế giới rất phức tạp ...

Python biên dịch thành gì?

Python là một ngôn ngữ được giải thích, có nghĩa là mã nguồn của chương trình Python được chuyển đổi thành mã byte sau đó được thực hiện bởi máy ảo Python.interpreted language, which means the source code of a Python program is converted into bytecode that is then executed by the Python virtual machine.

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

Biên dịch mã Python với C Python có thể thực hiện các cuộc gọi trực tiếp vào các mô -đun C.Các mô -đun C này có thể là thư viện C chung hoặc thư viện được xây dựng đặc biệt để 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 với mã Python hiện có.Python code can make calls directly into C modules. Those C modules can be either generic C libraries or libraries built specifically to work with Python. Cython generates the second kind of module: C libraries that talk to Python's internals, and that can be bundled with existing Python code.

Python có được biên dịch cho mã máy không?

Python không chuyển đổi mã của nó thành mã máy, thứ mà phần cứng có thể hiểu được.Nó thực sự chuyển đổi nó thành một thứ gọi là mã byte.Vì vậy, trong Python, việc biên dịch xảy ra, nhưng nó không phải là ngôn ngữ máy.Nó được vào mã byte [., something that hardware can understand. It actually converts it into something called byte code. So within python, compilation happens, but it's just not into a machine language. It is into byte code [.

Làm thế nào tệp python được biên dịch?

Các tệp PYC được tạo bởi trình thông dịch Python khi một tệp .py được nhập.Chúng chứa "mã byte được biên dịch" của mô -đun/chương trình được nhập để "dịch" từ mã nguồn sang mã byte [chỉ cần thực hiện một lần] có thể được bỏ qua trên các lần nhập tiếp theo nếu.PYC mới hơn so với tương ứng. py file is imported. They contain the "compiled bytecode" of the imported module/program so that the "translation" from source code to bytecode [which only needs to be done once] can be skipped on subsequent imports if the . pyc is newer than the corresponding .

Bài Viết Liên Quan

Chủ Đề