Trình phân tích cú pháp bytecode python

Mã byte (còn được gọi là mã di động hoặc mã p[cần dẫn nguồn]) là một dạng tập lệnh được thiết kế để thực thi hiệu quả bởi trình thông dịch phần mềm. Không giống như mã nguồn [1] mà con người có thể đọc được, mã byte là mã số nhỏ gọn, hằng số và tham chiếu (thường là địa chỉ số) mã hóa kết quả phân tích cú pháp của trình biên dịch và thực hiện phân tích ngữ nghĩa của những thứ như loại, phạm vi và độ sâu lồng nhau của các đối tượng chương trình

Tên mã byte bắt nguồn từ các tập lệnh có mã lệnh một byte theo sau là các tham số tùy chọn. Các biểu diễn trung gian như mã byte có thể được xuất ra bằng cách triển khai ngôn ngữ lập trình để dễ hiểu hoặc nó có thể được sử dụng để giảm sự phụ thuộc vào phần cứng và hệ điều hành bằng cách cho phép cùng một mã chạy đa nền tảng, trên các thiết bị khác nhau. Mã byte thường có thể được thực thi trực tiếp trên máy ảo (máy p-code, i. e. , trình thông dịch) hoặc nó có thể được biên dịch thêm thành mã máy để có hiệu suất tốt hơn

Vì các hướng dẫn mã byte được xử lý bằng phần mềm, nên chúng có thể phức tạp tùy ý, nhưng dù sao thì chúng cũng giống với các hướng dẫn phần cứng truyền thống. máy ngăn xếp ảo là phổ biến nhất, nhưng máy đăng ký ảo cũng đã được xây dựng. [2][3] Các phần khác nhau thường có thể được lưu trữ trong các tệp riêng biệt, tương tự như các mô-đun đối tượng, nhưng được tải động trong quá trình thực thi

Thi hành[sửa]

Một chương trình mã byte có thể được thực thi bằng cách phân tích cú pháp và thực hiện trực tiếp các lệnh, từng lệnh một. Loại trình thông dịch bytecode này rất di động. Một số hệ thống, được gọi là trình dịch động hoặc trình biên dịch đúng lúc (JIT), dịch mã byte thành mã máy khi cần thiết trong thời gian chạy. Điều này làm cho máy ảo dành riêng cho phần cứng nhưng không làm mất tính di động của mã byte. Ví dụ: mã Java và Smalltalk thường được lưu trữ ở định dạng mã byte, sau đó thường được JIT biên dịch để dịch mã byte thành mã máy trước khi thực thi. Điều này tạo ra độ trễ trước khi chương trình được chạy, khi mã byte được biên dịch thành mã máy gốc, nhưng cải thiện đáng kể tốc độ thực thi so với việc diễn giải mã nguồn trực tiếp, thường là khoảng một bậc độ lớn (10x). [4]

Do lợi thế về hiệu suất của nó, ngày nay, nhiều triển khai ngôn ngữ thực hiện một chương trình theo hai giai đoạn, đầu tiên biên dịch mã nguồn thành mã byte, sau đó chuyển mã byte sang máy ảo. Có các máy ảo dựa trên mã byte thuộc loại này dành cho Java, Raku, Python, PHP,[a] Tcl, mawk và Forth (tuy nhiên, Forth hiếm khi được biên dịch qua mã byte theo cách này và thay vào đó, máy ảo của nó chung chung hơn). Việc triển khai Perl và Ruby 1. 8 thay vào đó hoạt động bằng cách đi bộ một biểu diễn cây cú pháp trừu tượng bắt nguồn từ mã nguồn

Gần đây hơn, các tác giả của V8[1] và Dart[7] đã thách thức quan điểm rằng mã byte trung gian là cần thiết để triển khai VM nhanh chóng và hiệu quả. Cả hai triển khai ngôn ngữ này hiện đang thực hiện biên dịch JIT trực tiếp từ mã nguồn sang mã máy mà không có trung gian mã byte. [số 8]

Các ví dụ[sửa]

(disassemble '(lambda (x) (print x)))
; disassembly for (LAMBDA (X))
; 2436F6DF:       850500000F22     TEST EAX, [#x220F0000]     ; no-arg-parsing entry point
;       E5:       8BD6             MOV EDX, ESI
;       E7:       8B05A8F63624     MOV EAX, [#x2436F6A8]      ; #
;       ED:       B904000000       MOV ECX, 4
;       F2:       FF7504           PUSH DWORD PTR [EBP+4]
;       F5:       FF6005           JMP DWORD PTR [EAX+5]
;       F8:       CC0A             BREAK 10                   ; error trap
;       FA:       02               BYTE #X02
;       FB:       18               BYTE #X18                  ; INVALID-ARG-COUNT-ERROR
;       FC:       4F               BYTE #X4F                  ; ECX

Mã được biên dịch có thể được phân tích và điều tra bằng công cụ tích hợp để gỡ lỗi mã byte cấp thấp. Công cụ này có thể được khởi tạo từ trình bao, ví dụ

Hướng dẫn thủ công này tồn tại để cung cấp cho cả nhà phát triển Python mới làm quen và chuyên gia một cuốn sổ tay thực hành tốt nhất để cài đặt, cấu hình và sử dụng Python hàng ngày

Hướng dẫn này được đưa ra ý kiến ​​theo cách gần như, nhưng không hoàn toàn, hoàn toàn không giống với tài liệu chính thức của Python. Bạn sẽ không tìm thấy danh sách mọi khung web Python có sẵn tại đây. Thay vào đó, bạn sẽ tìm thấy một danh sách ngắn gọn đẹp mắt về các tùy chọn được đề xuất cao

Ghi chú

Việc sử dụng Python 3 được khuyến nghị cao hơn Python 2. Cân nhắc nâng cấp các ứng dụng và cơ sở hạ tầng của bạn nếu bạn thấy mình vẫn đang sử dụng Python 2 trong phiên bản sản xuất hiện nay. Nếu bạn đang sử dụng Python 3, xin chúc mừng — bạn thực sự là một người có gu thẩm mỹ tuyệt vời. —Kenneth Reitz

Bắt đầu nào. Nhưng trước tiên, hãy đảm bảo rằng bạn biết chiếc khăn của mình ở đâu

Bắt đầu với Python¶

Bạn mới sử dụng Python?

  • Chọn một Trình thông dịch Python (3 so với 2)
    • Trạng thái của Python (3 & 2)
    • khuyến nghị
    • Vì thế…. 3?
    • Triển khai

  • Cài đặt Python đúng cách trên hệ thống của bạn

  • Cài đặt Python đúng cách
  • Cài đặt Python 3 trên Mac OS X
  • Cài đặt Python 3 trên Windows
  • Cài đặt Python 3 trên Linux
  • Cài đặt Python 2 trên Mac OS X
  • Cài đặt Python 2 trên Windows
  • Cài đặt Python 2 trên Linux

  • Sử dụng Virtualenv với Pipenv

  • Pipenv & Môi trường ảo
    • Đảm bảo bạn có Python & pip
    • Cài đặt Pipenv
    • Cài đặt các gói cho dự án của bạn
    • Sử dụng các gói đã cài đặt
    • Bước tiếp theo
  • Mức độ thấp hơn. ảoenv
    • Sử dụng cơ bản
    • Ghi chú khác
    • virtualenvwrapper
    • virtualenv-burrito
    • direnv

Môi trường phát triển Python¶

Phần này của hướng dẫn tập trung vào môi trường phát triển Python và các công cụ thực hành tốt nhất hiện có để viết mã Python

  • Môi trường phát triển của bạn
    • soạn thảo văn bản
    • IDE
    • Công cụ phiên dịch
    • Các công cụ khác
  • Pipenv & Môi trường ảo
    • Đảm bảo bạn có Python & pip
    • Cài đặt Pipenv
    • Cài đặt các gói cho dự án của bạn
    • Sử dụng các gói đã cài đặt
    • Bước tiếp theo
  • Mức độ thấp hơn. ảoenv
    • Sử dụng cơ bản
    • Ghi chú khác
    • virtualenvwrapper
    • virtualenv-burrito
    • direnv
  • Cấu hình thêm của pip và Virtualenv
    • Yêu cầu một môi trường ảo đang hoạt động cho pip
    • Gói bộ nhớ đệm để sử dụng trong tương lai

Viết mã Python tuyệt vời¶

Phần này của hướng dẫn tập trung vào các phương pháp hay nhất để viết mã Python

  • Cấu trúc dự án của bạn
    • Cấu trúc của Kho lưu trữ
    • Cấu trúc mã là chìa khóa
    • mô-đun
    • gói
    • Lập trình hướng đối tượng
    • người trang trí
    • Trình quản lý bối cảnh
    • gõ động
    • Các loại có thể thay đổi và không thay đổi
    • Phụ thuộc nhà cung cấp
    • người chạy
    • Đọc thêm
  • Kiểu mã
    • Khái niệm chung
    • thành ngữ
    • Thiền của Python
    • PEP 8
    • quy ước
  • Đọc mật mã tuyệt vời
  • Tài liệu
    • Tài liệu dự án
    • Công bố dự án
    • Tư vấn tài liệu mã
    • Các công cụ khác
  • Kiểm tra mã của bạn
    • Những thứ cơ bản
    • Công cụ
  • ghi nhật ký
    • … hay In?
    • Đăng nhập vào một thư viện
    • Đăng nhập vào một ứng dụng
  • Gotcha thông thường
    • Đối số mặc định có thể thay đổi
    • Đóng ràng buộc muộn
    • Mã byte (. pyc) Tệp ở mọi nơi
  • Chọn giấy phép

Hướng dẫn kịch bản cho các ứng dụng Python¶

Phần này của hướng dẫn tập trung vào lời khuyên về công cụ và mô-đun dựa trên các tình huống khác nhau

  • Ứng dụng mạng
    • HTTP
    • Hệ thống phân phối
  • Ứng dụng web và Framework
    • Định nghĩa bài văn
    • khung
    • máy chủ web
    • Máy chủ WSGI
    • Các phương pháp hay nhất về máy chủ
    • lưu trữ
    • tạo khuôn mẫu
  • Quét HTML
    • Rút trích nội dung trang web
    • lxml và Yêu cầu
  • Ứng dụng dòng lệnh
    • Nhấp chuột
    • tài liệu
    • Đặt
    • vách đá
    • Xi măng
    • Trăn lửa
  • Ứng dụng GUI
    • lạc đà
    • Ca cao
    • GTk
    • PyGObject hay còn gọi là (PyGi)
    • kivy
    • PyObjC
    • PySide
    • PyQt
    • Pyjs Desktop (trước đây là Pyjama Desktop)
    • Qt
    • PySimpleGUI
    • toga
    • TK
    • wxPython
  • cơ sở dữ liệu
    • DB-API
    • Thuật giả kim SQL
    • Hồ sơ
    • PugQuery
    • Django ORM
    • đi tiểu
    • ngựaORM
    • đối tượng SQL
  • mạng
    • xoắn
    • PyZMQ
    • sự kiện
  • Quản trị hệ thống
    • Sợi vải
    • Muối ăn
    • psutil
    • ansible
    • đầu bếp
    • con rối
    • Bản vẽ thiết kế
    • Xây dựng ra
    • Shinken
  • Hội nhập liên tục
    • Tại sao?
    • Jenkins
    • Buildbot
    • chất độc
    • Travis-CI
  • Tốc độ
    • Định nghĩa bài văn
    • Phần mở rộng C
    • đồng thời
  • Ứng dụng khoa học
    • Định nghĩa bài văn
    • Công cụ
    • thư viện
    • Tài nguyên
  • Thao tác hình ảnh
    • Thư viện hình ảnh Python
    • Thị giác máy tính mã nguồn mở
  • Tuần tự hóa dữ liệu
    • Tuần tự hóa dữ liệu là gì?
    • phẳng so với. Dữ liệu lồng nhau
    • Nối tiếp văn bản
    • nhị phân
    • nguyên mẫu
  • phân tích cú pháp XML
    • gỡ rối
    • xmltodict
    • lược đồ xml
  • JSON
    • Phân tích cú pháp JSON
  • mật mã
    • mật mã
    • ràng buộc GPGME
  • Học máy
    • ngăn xếp khoa học
    • scikit-học
  • Giao diện với thư viện C/C++
    • C Giao diện chức năng nước ngoài
    • ctypes
    • SWIG
    • Tăng. con trăn

Vận chuyển Great Python Code¶

Phần này của hướng dẫn tập trung vào việc chia sẻ và triển khai mã Python của bạn

  • Xuất bản mã của bạn
    • Tạo Repo dự án trên GitHub
    • Khi dự án của bạn phát triển
  • Đóng gói mã của bạn
    • Lựa chọn thay thế cho bao bì
    • Dành cho nhà phát triển Python
    • Đối với bản phân phối Linux
  • Đóng băng mã của bạn
    • Các lựa chọn thay thế cho đóng băng
    • So sánh các công cụ cấp đông
    • các cửa sổ
    • hệ điều hành X
    • Linux

Ghi chú bổ sung¶

Phần này của hướng dẫn, chủ yếu là văn xuôi, bắt đầu với một số thông tin cơ bản về Python, sau đó tập trung vào các bước tiếp theo

  • Giới thiệu
    • về sự hướng dẫn này
  • Cộng đồng
    • BDFL
    • Quỹ phần mềm Python
    • PEP
    • Hội nghị Python
    • Nhóm người dùng Python
    • Cộng đồng trực tuyến
    • Bảng công việc Python
  • Học Python
    • Người bắt đầu
    • Trung gian
    • Nâng cao
    • Dành cho kỹ sư và nhà khoa học
    • chủ đề khác
    • Người giới thiệu
  • Tài liệu
    • Tài liệu chính thức
    • Đọc tài liệu
    • pydoc
  • Tin tức
    • Tuần của PyCoder
    • Trăn thật
    • Hành tinh Python
    • /r/trăn
    • Nói về Python Podcast
    • Python Byte Podcast
    • Python hàng tuần
    • Tin tức Python
    • Nhập Python hàng tuần
    • Bản tin Python tuyệt vời

Ghi chú

Các nốt được xác định trong tất cả các thang âm diatonic và chromatic đã bị loại trừ có chủ ý khỏi danh sách các nốt bổ sung này. Ngoài ra, lưu ý này