Python là ngôn ngữ được biên dịch đúng hay sai
Một câu hỏi phổ biến. “Python được phiên dịch hay biên dịch?” Show 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 chứa đầ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 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ữ “đã 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à 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, 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ồiBình luận 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 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 giả định 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. 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. 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 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?” . Şə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. " 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 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 đề 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 Tối đa 4. 17 giờ sáng ngày 24 tháng 2 năm 2019 Cảm ơn bạn 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 Animesh 6. 25h ngày 28/04/2020 Vì vậy, 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. " 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 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ể Szymon Przedwojski 6. 48h ngày 7/6/2020 Bài viết tuyệt vời, cảm ơn Ned 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? 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/ 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 các ngôn ngữ cấp cao như Python hoặc 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. 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 so với 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 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? 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) 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? 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? Người ơi 1. 49 giờ tối ngày 21 tháng 2 năm 2021 Xin chào Ned, Đá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 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 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étTên 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ó sử dụng trình biên dịch Đúng Sai không?Phần lớn, Python là ngôn ngữ được thông dịch chứ không phải ngôn ngữ được biên dịch , mặc dù biên dịch là một bước. Mã Python, được viết bằng. py trước tiên được biên dịch thành mã byte (được thảo luận chi tiết hơn) được lưu trữ với một. pyc hoặc.
Tại sao Python không phải là ngôn ngữ 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ể . . |