Phát hành ngôn ngữ lập trình Python 3.8

Sau một năm rưỡi phát triển trình bày phát hành ngôn ngữ lập trình chính Python 3.8. Bản cập nhật khắc phục cho nhánh Python 3.8 đã lên kế hoạch phát hành trong vòng 18 tháng. Các lỗ hổng nghiêm trọng sẽ được khắc phục trong 5 năm cho đến tháng 2024 năm 3.8. Các bản cập nhật sửa lỗi cho nhánh 3.8.1 sẽ được phát hành hai tháng một lần, với bản phát hành sửa lỗi đầu tiên của Python XNUMX dự kiến ​​vào tháng XNUMX.

Trong số những thứ được thêm vào đổi mới:

  • Hỗ trợ phép gán trong các biểu thức phức tạp. Với toán tử “:=” mới, có thể thực hiện các thao tác gán giá trị bên trong các biểu thức khác, chẳng hạn như để tránh các lệnh gọi hàm kép trong câu lệnh điều kiện và khi xác định vòng lặp:

    nếu (n := len(a)) > 10:
    ...

    while (chặn := f.read(256)) != ":
    ...

  • Hỗ trợ cú pháp mới để xác định các đối số của hàm. Khi liệt kê các đối số trong khi định nghĩa hàm, giờ đây bạn có thể chỉ định dấu "/" để phân tách các đối số chỉ có thể được gán giá trị dựa trên thứ tự liệt kê các giá trị trong lệnh gọi hàm, khỏi các đối số có thể được gán theo bất kỳ thứ tự nào (cú pháp biến=giá trị) ). Về mặt thực tế, tính năng mới cho phép các hàm trong Python mô phỏng hoàn toàn hành vi của các hàm hiện có trong C và cũng để tránh bị ràng buộc với các tên cụ thể, chẳng hạn như nếu tên tham số được lên kế hoạch thay đổi trong tương lai.

    Cờ “/” bổ sung cho cờ “*” đã thêm trước đó, tách các biến mà chỉ áp dụng phép gán ở dạng “biến=giá trị”. Ví dụ: trong hàm “def f(a, b, /, c, d, *, e, f):” các biến “a” và “b” chỉ có thể được gán theo thứ tự các giá trị được liệt kê ,
    các biến “e” và “f”, chỉ thông qua phép gán “biến=giá trị” và các biến “c” và “d” theo bất kỳ cách nào sau đây:

    f(10, 20, 30, 40, e=50, f=60)
    f(10, 20, s=30, d=40, e=50, f=60)

  • Thêm API C mới
    để cấu hình các tham số khởi tạo Python, cho phép kiểm soát hoàn toàn tất cả cấu hình và cung cấp các phương tiện xử lý lỗi tiên tiến. API được đề xuất giúp dễ dàng nhúng chức năng trình thông dịch Python vào các ứng dụng C khác;

  • thực hiện giao thức Vectorcall mới để truy cập nhanh hơn vào các đối tượng được viết bằng ngôn ngữ C. Trong CPython 3.8, quyền truy cập vào Vectorcall vẫn bị giới hạn ở mức sử dụng nội bộ; việc chuyển sang danh mục API có thể truy cập công khai đã được lên kế hoạch trong CPython 3.9;
  • Thêm gọi tới Runtime Audit Hooks, cung cấp cho các ứng dụng và khung trong Python quyền truy cập vào thông tin cấp thấp về tiến trình của tập lệnh để kiểm tra các hành động được thực hiện (ví dụ: bạn có thể theo dõi quá trình nhập mô-đun, mở tệp, sử dụng dấu vết, truy cập các ổ cắm mạng, chạy mã thông qua exec, eval và run_mod);
  • Trong mô-đun dưa chua bảo đảm hỗ trợ giao thức Pickle 5, được sử dụng để tuần tự hóa và giải tuần tự hóa các đối tượng. Pickle cho phép bạn tối ưu hóa việc truyền lượng lớn dữ liệu giữa các tiến trình Python trong cấu hình đa lõi và đa nút bằng cách giảm số lượng thao tác sao chép bộ nhớ và áp dụng các kỹ thuật tối ưu hóa bổ sung như sử dụng thuật toán nén dành riêng cho dữ liệu. Phiên bản thứ năm của giao thức đáng chú ý là có thêm chế độ truyền ngoài băng tần, trong đó dữ liệu có thể được truyền tách biệt khỏi luồng dữ liệu chính.
  • Theo mặc định, phiên bản thứ tư của giao thức Pickle được kích hoạt, so với phiên bản thứ ba được cung cấp theo mặc định trước đó, cho phép đạt hiệu suất cao hơn và giảm kích thước dữ liệu được truyền;
  • Trong mô-đun Một số tính năng mới được giới thiệu:
    • lớp đã gõDict đối với các mảng kết hợp trong đó thông tin loại được chỉ định rõ ràng cho dữ liệu được liên kết với các khóa (“TypedDict('Point2D', x=int, y=int, label=str)”).
    • Loại Nghĩa đen, cho phép bạn giới hạn một tham số hoặc giá trị trả về ở một số giá trị được xác định trước ("Literal['connected', 'disconnected']").
    • Thiết kế "Cuối cùng", giúp xác định các giá trị của biến, hàm, phương thức và lớp không thể thay đổi hoặc gán lại ("pi: Final[float] = 3.1415926536").
  • Đã thêm khả năng chỉ định bộ nhớ đệm cho các tệp đã biên dịch bằng mã byte, được lưu trong cây FS riêng biệt và tách biệt khỏi các thư mục có mã. Đường dẫn lưu file bằng bytecode được đặt thông qua một biến TIỀN TỆ PYTHONPYCACHE hoặc tùy chọn "-X pycache_prefix";
  • thực hiện khả năng tạo các bản dựng gỡ lỗi của Python sử dụng ABI giống hệt với bản phát hành, cho phép bạn tải các tiện ích mở rộng được viết bằng ngôn ngữ SI, được biên dịch cho các bản phát hành ổn định, trong các bản dựng gỡ lỗi;
  • Chuỗi f (chuỗi được định dạng có tiền tố 'f') cung cấp hỗ trợ cho toán tử = (ví dụ: "f'{expr=}'"), cho phép bạn chuyển đổi biểu thức thành văn bản để gỡ lỗi dễ dàng hơn. Ví dụ:

    >>>>người dùng = 'eric_idle'
    >>>>thành viên_since = ngày(1975, 7, 31)
    >>>>>> f'{user=} {member_since=}'
    "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Sự biểu lộ "tiếp tục» được phép sử dụng bên trong một khối cuối cùng;
  • Đã thêm một mô-đun mới đa xử lý.shared_memory, cho phép sử dụng các phân đoạn bộ nhớ dùng chung trong cấu hình đa xử lý;
  • Trên nền tảng Windows, việc triển khai asyncio đã được chuyển sang sử dụng lớp ProactorSự kiệnVòng lặp;
  • Hiệu suất của lệnh LOAD_GLOBAL đã tăng lên khoảng 40% do sử dụng cơ chế bộ nhớ đệm mã đối tượng mới.

Nguồn: opennet.ru

Thêm một lời nhận xét