Hướng dẫn is there virtual machine in python? - có máy ảo trong python không?

Trượt 1

Hướng dẫn is there virtual machine in python? - có máy ảo trong python không?

Chương trình chuyên nghiệp theo định hướng công việc đáng tin cậy nhất

Chuyên gia được chứng nhận DevOps (DCP)

Thực hiện bước đầu tiên của bạn vào thế giới của DevOps với khóa học này, điều này sẽ giúp bạn tìm hiểu về các phương pháp và công cụ được sử dụng để phát triển, triển khai và vận hành phần mềm chất lượng cao.

Trượt 2

Hướng dẫn is there virtual machine in python? - có máy ảo trong python không?

DevOps to DevSecops - Tìm hiểu sự tiến hóa

DevSecops Chứng nhận Chuyên nghiệp (DSOCP)

Học cách tự động hóa bảo mật vào môi trường DevOps có nhịp độ nhanh bằng các công cụ và tập lệnh nguồn mở khác nhau.

Trượt 2

Hướng dẫn is there virtual machine in python? - có máy ảo trong python không?

DevOps to DevSecops - Tìm hiểu sự tiến hóa

DevSecops Chứng nhận Chuyên nghiệp (DSOCP)

Học cách tự động hóa bảo mật vào môi trường DevOps có nhịp độ nhanh bằng các công cụ và tập lệnh nguồn mở khác nhau.

Trượt 2

Hướng dẫn is there virtual machine in python? - có máy ảo trong python không?

DevOps to DevSecops - Tìm hiểu sự tiến hóa

DevSecops Chứng nhận Chuyên nghiệp (DSOCP)

Trượt 2

Hướng dẫn is there virtual machine in python? - có máy ảo trong python không?

DevOps to DevSecops - Tìm hiểu sự tiến hóa

DevSecops Chứng nhận Chuyên nghiệp (DSOCP)

Học cách tự động hóa bảo mật vào môi trường DevOps có nhịp độ nhanh bằng các công cụ và tập lệnh nguồn mở khác nhau.

Được chứng nhận về kỹ năng công nghệ mới để cai trị ngành công nghiệp

Hướng dẫn is there virtual machine in python? - có máy ảo trong python không?

Kỹ thuật độ tin cậy trang web (SRE) Chứng nhận Chuyên nghiệp

Một phương pháp đo lường và đạt được độ tin cậy thông qua công việc kỹ thuật và hoạt động - được phát triển bởi Google để quản lý dịch vụ.

Thạc sĩ về Kỹ thuật DevOps (MDE)
Interpreter converts the byte code into machine code and sends that machine code to the computer processor for execution.

Hướng dẫn is there virtual machine in python? - có máy ảo trong python không?

Hướng dẫn is there virtual machine in python? - có máy ảo trong python không?

Được ghi danh cho khóa học nâng cao nhất và duy nhất trên thế giới có thể khiến bạn trở thành một chuyên gia và kiến ​​trúc sư thành thạo trong các nguyên tắc của DevOps, DevSecops và trang web Kỹ thuật độ tin cậy (SRE) cùng nhau.

Hướng dẫn is there virtual machine in python? - có máy ảo trong python không?

Có được chuyên môn và chứng nhận bản thân

  • Chuyên gia giải pháp Azure DevOps
  • Tìm hiểu về các dịch vụ DevOps có sẵn trên Azure và cách bạn có thể sử dụng chúng để làm cho quy trình làm việc của bạn hiệu quả hơn.

Hướng dẫn is there virtual machine in python? - có máy ảo trong python không?

Để cung cấp một câu trả lời sâu sắc cho câu hỏi "tại sao máy ảo Java, nhưng thông dịch viên Python?" Chúng ta hãy cố gắng quay lại lĩnh vực lý thuyết tổng hợp về điểm khởi đầu của cuộc thảo luận.

Quy trình tổng hợp chương trình điển hình bao gồm các bước tiếp theo:

  1. Phân tích từ vựng. Chia văn bản chương trình thành các "từ" có ý nghĩa được gọi là mã thông báo (như một phần của quy trình tất cả các bình luận, không gian, dòng mới, v.v. được xóa, vì chúng không ảnh hưởng đến hành vi của chương trình). Kết quả là một luồng mã thông báo được đặt hàng.tokens (as part of the process all comments, spaces, new-lines etc. are removed, because they do not affect program behavior). The result is an ordered stream of tokens.
  2. Phân tích cú pháp. Xây dựng cái gọi là cây cú pháp trừu tượng (AST) từ dòng mã thông báo. AST thiết lập mối quan hệ giữa các mã thông báo và, do đó, xác định một thứ tự đánh giá chương trình.Abstract Syntax Tree (AST) from the stream of tokens. AST establish relations between tokens and, as a consequence, defines an order of evaluation of the program.
  3. Phân tích ngữ nghĩa. Xác minh tính đúng ngữ nghĩa của AST bằng cách sử dụng thông tin về các loại và một tập hợp các quy tắc ngữ nghĩa của ngôn ngữ lập trình. .
  4. Tạo mã trung gian. Tuần tự hóa AST vào luồng hoạt động "nguyên thủy" độc lập của máy. Trong thực tế, trình tạo mã đi qua AST và ghi lại thứ tự các bước đánh giá. Kết quả là, từ biểu diễn giống như cây của chương trình, chúng tôi đạt được đại diện giống như danh sách đơn giản hơn nhiều trong đó thứ tự đánh giá chương trình được bảo tồn.
  5. Tạo mã máy. Chương trình dưới dạng mã byte "nguyên thủy" độc lập của máy được dịch thành mã máy của kiến ​​trúc bộ xử lý cụ thể.

Được. Bây giờ hãy xác định các điều khoản.

Thông dịch viên, theo nghĩa cổ điển của từ đó, giả định thực thi dựa trên đánh giá chương trình dựa trên AST được sản xuất trực tiếp từ văn bản chương trình. Trong trường hợp đó, một chương trình được phân phối dưới dạng mã nguồn và trình thông dịch được cung cấp bằng văn bản chương trình, thường xuyên theo cách động (từng câu lệnh hoặc từng dòng). Đối với mỗi câu lệnh đầu vào, trình thông dịch xây dựng AST của mình và đánh giá ngay lập tức thay đổi "trạng thái" của chương trình. Đây là một hành vi điển hình được thể hiện bằng các ngôn ngữ kịch bản. Hãy xem xét ví dụ bash, windows cmd, vv về mặt khái niệm, Python cũng theo cách này., in the classical meaning of that word, assumes execution based on the program evaluation based on AST produced directly from the program text. In that case, a program is distributed in the form of source code and the interpreter is fed by program text, frequently in a dynamic way (statement-by-statement or line-by-line). For each input statement, interpreter builds its AST and immediately evaluates it changing the "state" of the program. This is a typical behavior demonstrated by scripting languages. Consider for example Bash, Windows CMD etc. Conceptually, Python takes this way too.

Nếu chúng ta thay thế bước thực hiện dựa trên AST trên việc tạo ra bước Bytecode nhị phân độc lập với máy trung gian trong trình thông dịch, chúng ta sẽ chia toàn bộ quá trình thực hiện chương trình thành hai giai đoạn riêng biệt: tổng hợp và thực thi. Trong trường hợp đó, những gì trước đây là một trình thông dịch sẽ trở thành trình biên dịch mã byte, điều này sẽ chuyển đổi chương trình từ dạng văn bản thành một dạng nhị phân. Sau đó, chương trình được phân phối ở dạng nhị phân đó, nhưng không ở dạng mã nguồn. Trên máy người dùng, mã byte được đưa vào một thực thể mới - máy ảo, trên thực tế giải thích mã byte đó. Do đó, các máy ảo cũng được gọi là thông dịch viên byte. Nhưng đặt sự chú ý của bạn ở đây! Một trình thông dịch cổ điển là một trình thông dịch văn bản, nhưng một máy ảo là một trình thông dịch nhị phân! Đây là một cách tiếp cận được thực hiện bởi Java và C#.text into some binary form. Then the program is distributed in that binary form, but not in the form of source code. On the user machine, that bytecode is fed into a new entity -- virtual machine, which in fact interpret that bytecode. Due to this, virtual machines are also called bytecode interpreter. But put your attention here! A classical interpreter is a text interpreter, but a virtual machine is a binary interpreter! This is an approach taken by Java and C#.

Cuối cùng, nếu chúng ta thêm trình tạo mã máy vào trình biên dịch byte mà chúng ta đạt được kết quả là cái mà chúng ta gọi là trình biên dịch cổ điển. Trình biên dịch cổ điển chuyển đổi mã nguồn chương trình thành mã máy của một bộ xử lý cụ thể. Mã máy đó sau đó có thể được thực thi trực tiếp trên bộ xử lý đích mà không cần bất kỳ hòa giải bổ sung nào (mà không có bất kỳ loại phiên dịch phiên dịch văn bản nào không phải trình thông dịch nhị phân).compiler. A classical compiler converts the program source code into the machine code of a particular processor. That machine code then can be directly executed on the target processor without any additional mediation (without any kind of interpreter neither text interpreter nor binary interpreter).

Bây giờ hãy quay lại câu hỏi ban đầu và xem xét Java vs Python.

Java ban đầu được thiết kế để có ít phụ thuộc triển khai nhất có thể. Thiết kế của nó dựa trên nguyên tắc "Viết một lần, chạy bất cứ nơi nào" (Wora). Để thực hiện nó, Java ban đầu được thiết kế như một ngôn ngữ lập trình biên dịch thành mã byte nhị phân độc lập với máy, sau đó có thể được thực thi trên tất cả các nền tảng hỗ trợ Java mà không cần phải sắp xếp lại. Bạn có thể nghĩ về Java như về C ++ dựa trên Wora. Trên thực tế, Java gần với C ++ hơn so với các ngôn ngữ kịch bản như Python. Nhưng trái ngược với C ++, Java được thiết kế để biên dịch thành mã byte nhị phân sau đó được thực thi trong môi trường của máy ảo, trong khi C ++ được thiết kế để được biên dịch trong mã máy và sau đó được thực hiện trực tiếp bởi bộ xử lý đích.binary bytecode, which then can be executed on all platforms that support Java without the need for its recompilation. You can think about Java like about WORA-based C++. Actually, Java is closer to C++ than to the scripting languages like Python. But in contrast to C++, Java was designed to be compiled into binary bytecode which then is executed in the environment of the virtual machine, while C++ was designed to be compiled in machine code and then directly executed by the target processor.

Python ban đầu được thiết kế như một loại ngôn ngữ lập trình tập lệnh diễn giải các tập lệnh (các chương trình dưới dạng văn bản được viết theo các quy tắc ngôn ngữ lập trình). Do đó, Python ban đầu đã hỗ trợ giải thích động các lệnh hoặc câu lệnh một dòng, như Bash hoặc Windows CMD làm. Vì lý do tương tự, việc triển khai ban đầu của Python không có bất kỳ loại trình biên dịch byte và máy ảo nào để thực hiện mã byte đó bên trong, nhưng ngay từ đầu, Python đã yêu cầu thông dịch viên có khả năng hiểu và đánh giá văn bản chương trình Python.text written in accordance with the programming language rules). Due to this, Python has initially supported a dynamic interpretation of one-line commands or statements, as the Bash or Windows CMD do. For the same reason, initial implementations of Python had not any kind of bytecode compilers and virtual machines for execution of such bytecode inside, but from the start Python had required interpreter which is capable to understand and evaluate Python program text.

Do đó, trong lịch sử, các nhà phát triển Java có xu hướng nói về máy ảo Java (bởi vì ban đầu, Java đã đến như gói trình biên dịch mã byte và người phiên dịch byte - JVM), và các nhà phát triển Python có xu hướng nói về trình thông dịch Python (vì Python ban đầu có Python có Không phải bất kỳ máy ảo nào và là một loại trình thông dịch văn bản cổ điển thực hiện trực tiếp văn bản chương trình mà không có bất kỳ loại biên dịch hoặc chuyển đổi nào thành bất kỳ dạng mã nhị phân nào).Java Virtual Machine (because initially, Java has come as package of Java bytecode compiler and bytecode interpreter -- JVM), and Python developers tended to talk about Python interpreter (because initially Python has not any virtual machine and was a kind of classical text interpreter that executes program text directly without any sort of compilation or transformation into any form of binary code).

Hiện tại, Python cũng có máy ảo dưới mui xe và có thể biên dịch và giải thích mã python byte. Và thực tế đó thực hiện một khoản đầu tư bổ sung vào sự nhầm lẫn "Tại sao máy ảo Java, nhưng trình thông dịch Python?", Bởi vì dường như việc triển khai cả hai ngôn ngữ chứa các máy ảo. Nhưng mà! Ngay cả trong thời điểm giải thích hiện tại của văn bản chương trình là một cách chính để thực hiện các chương trình Python. Việc triển khai Python khai thác các máy ảo dưới mui xe độc ​​quyền như một kỹ thuật tối ưu hóa. Giải thích mã byte nhị phân trong máy ảo hiệu quả hơn nhiều so với cách giải thích trực tiếp của văn bản chương trình gốc. Đồng thời, sự hiện diện của máy ảo trong Python hoàn toàn minh bạch cho cả nhà thiết kế ngôn ngữ Python và các nhà phát triển chương trình Python. Ngôn ngữ tương tự có thể được thực hiện trong các phiên dịch viên có và không có máy ảo. Theo cách tương tự, cùng một chương trình có thể được thực thi trong các phiên dịch viên có và không có máy ảo và các chương trình đó sẽ chứng minh chính xác hành vi tương tự và tạo ra cùng một đầu ra từ đầu vào bằng nhau. Sự khác biệt duy nhất có thể quan sát được sẽ là tốc độ thực hiện chương trình và lượng bộ nhớ được thông dịch tiêu thụ. Do đó, máy ảo trong Python không phải là một phần không thể tránh khỏi của thiết kế ngôn ngữ, mà chỉ là một phần mở rộng tùy chọn của trình thông dịch Python chính.

Java có thể được xem xét theo cách tương tự. Java dưới mui xe có trình biên dịch JIT và có thể biên dịch một cách chọn lọc các phương thức của lớp Java vào mã máy của nền tảng đích và sau đó thực hiện trực tiếp. Nhưng mà! Java vẫn sử dụng giải thích mã byte như một cách chính của việc thực hiện chương trình Java. Giống như các triển khai Python khai thác các máy ảo dưới mui xe độc ​​quyền như một kỹ thuật tối ưu hóa, các máy ảo Java sử dụng các trình biên dịch chỉ trong thời gian dành riêng cho mục đích tối ưu hóa. Tương tự, chỉ vì thực tế là thực hiện trực tiếp mã máy nhanh hơn ít nhất mười lần so với việc giải thích mã byte Java. Và giống như trong trường hợp của Python, sự hiện diện của trình biên dịch JIT dưới mui xe của JVM hoàn toàn minh bạch cho cả nhà thiết kế ngôn ngữ Java và nhà phát triển chương trình Java. Ngôn ngữ lập trình Java tương tự có thể được JVM thực hiện có và không có trình biên dịch JIT. Và theo cùng một cách, cùng một chương trình có thể được thực hiện trong JVM có và không có JIT bên trong, và cùng một chương trình sẽ chứng minh chính xác hành vi tương tự và tạo ra cùng một đầu ra từ đầu vào bằng nhau trên cả JVM (có và không có JIT). Và giống như trong trường hợp của Python, sự khác biệt duy nhất có thể quan sát được giữa chúng, sẽ ở tốc độ thực hiện và số lượng bộ nhớ được JVM tiêu thụ. Và cuối cùng, giống như trong trường hợp của Python, JIT trong Java cũng không phải là một phần không thể tránh khỏi của thiết kế ngôn ngữ, mà chỉ là một phần mở rộng tùy chọn của các triển khai JVM lớn.

Từ quan điểm của thiết kế và thực hiện các máy ảo của Java và Python, chúng khác nhau đáng kể, trong khi (sự chú ý!) Cả hai vẫn giữ các máy ảo. JVM là một ví dụ về máy ảo cấp thấp với các hoạt động cơ bản đơn giản và chi phí công văn hướng dẫn cao. Python đến lượt nó là một máy ảo cấp cao, trong đó các hướng dẫn thể hiện hành vi phức tạp và chi phí điều phối hướng dẫn không quá đáng kể. Java hoạt động với mức độ trừu tượng rất thấp. JVM hoạt động trên tập hợp các loại nguyên thủy được xác định rõ ràng và có sự tương ứng rất chặt chẽ (thường là một đến một) giữa các hướng dẫn mã byte và hướng dẫn mã máy gốc. Ngược lại, máy ảo Python hoạt động ở mức trừu tượng cao, nó hoạt động với các loại dữ liệu (đối tượng) phức tạp và hỗ trợ đa hình đặc biệt, trong khi các hướng dẫn bytecode phơi bày hành vi phức tạp, có thể được biểu thị bằng một loạt nhiều hướng dẫn mã máy gốc. Ví dụ, Python hỗ trợ toán học phạm vi không giới hạn. Do đó, Python VM buộc phải khai thác các số học dài cho các số nguyên có khả năng lớn mà kết quả của hoạt động có thể vượt qua từ máy. Do đó, một hướng dẫn mã byte cho arithmetics trong Python có thể đưa vào cuộc gọi hàm bên trong Python VM, trong khi trong hoạt động số học của JVM sẽ đưa vào hoạt động đơn giản được thể hiện bằng một hoặc một vài hướng dẫn máy gốc.

Kết quả là, chúng ta có thể rút ra kết luận tiếp theo. Máy ảo Java nhưng trình thông dịch Python là vì:

  1. Thuật ngữ của máy ảo giả định giải thích mã byte nhị phân, trong khi thuật ngữ phiên dịch giả định giải thích văn bản chương trình.
  2. Trong lịch sử, Java được thiết kế và triển khai để giải thích mã byte nhị phân và Python ban đầu được thiết kế và triển khai để giải thích văn bản chương trình. Do đó, thuật ngữ "Máy ảo Java" là lịch sử và được thiết lập tốt trong cộng đồng Java. Và tương tự, thuật ngữ "thông dịch viên Python" là lịch sử và được thiết lập tốt trong cộng đồng Python. Các dân tộc có xu hướng kéo dài truyền thống và sử dụng các thuật ngữ tương tự đã được sử dụng từ lâu trước đó.
  3. Cuối cùng, hiện tại, đối với Java, giải thích mã byte nhị phân là cách thực hiện chính của chương trình, trong khi việc tổng hợp JIT chỉ là một tối ưu hóa tùy chọn và minh bạch. Và đối với Python, hiện tại, việc giải thích văn bản chương trình là một cách chính để thực hiện các chương trình Python, trong khi việc biên dịch thành mã byte Python VM chỉ là một tối ưu hóa tùy chọn và minh bạch.

Do đó, cả Java và Python đều có máy ảo là các phiên dịch mã byte nhị phân, có thể dẫn đến sự nhầm lẫn như "Tại sao máy ảo Java, nhưng trình thông dịch Python?". Điểm mấu chốt ở đây là đối với Python, một máy ảo không phải là phương tiện thực thi chương trình chính hoặc cần thiết; Nó chỉ là một phần mở rộng tùy chọn của trình thông dịch văn bản cổ điển. Mặt khác, một máy ảo là một phần cốt lõi và không thể tránh khỏi của hệ sinh thái thực hiện chương trình Java. Lựa chọn gõ tĩnh hoặc động cho thiết kế ngôn ngữ lập trình chỉ ảnh hưởng chủ yếu đến mức độ trừu tượng của máy ảo, nhưng không ra lệnh cho dù có cần máy ảo hay không. Các ngôn ngữ sử dụng cả hai hệ thống gõ có thể được thiết kế để biên dịch, giải thích hoặc thực hiện trong môi trường của máy ảo, tùy thuộc vào mô hình thực thi mong muốn của chúng.

Python có máy ảo như Java không?

Java có một thông dịch viên cũng như một máy ảo và Python có một máy ảo cũng như một trình thông dịch.Python has a virtual machine as well as an interpreter.

Tại sao Python sử dụng một máy ảo?

Máy ảo Python (PVM) là một chương trình cung cấp môi trường lập trình.Vai trò của PVM là chuyển đổi hướng dẫn mã byte thành mã máy để máy tính có thể thực hiện các hướng dẫn mã máy đó và hiển thị đầu ra.to convert the byte code instructions into machine code so the computer can execute those machine code instructions and display the output.

VM Python được viết trong là gì?

Trình thông dịch Python được gọi là Cpython, và nó được viết bằng ngôn ngữ lập trình C.Đây là triển khai mặc định cho Python.C programming language. This is the default implementation for Python.

JVM có nhanh hơn Python không?

Tốc độ, vận tốc.Về tốc độ, Java nhanh hơn Python vì nó là ngôn ngữ được biên dịch.Phải mất ít thời gian hơn để thực thi một mã.Python là một ngôn ngữ được giải thích và nó xác định loại dữ liệu tại thời điểm chạy khiến nó chậm hơn.Java is faster than Python as it is a compiled language. It takes less time to execute a code. Python is an interpreted language and it determines the type of data at run time which makes it slower comparatively.