Rilis bahasa pemrograman Python 3.8

Setelah satu setengah tahun pembangunan disajikan rilis bahasa pemrograman utama Python 3.8. Pembaruan korektif untuk cabang Python 3.8 sudah direncanakan rilis dalam waktu 18 bulan. Kerentanan kritis akan diperbaiki selama 5 tahun hingga Oktober 2024. Pembaruan korektif untuk cabang 3.8 akan dirilis setiap dua bulan, dengan rilis korektif pertama Python 3.8.1 dijadwalkan pada bulan Desember.

Di antara yang ditambahkan inovasi:

  • Dukungan operasi penugasan dalam ekspresi kompleks. Dengan operator “:=” yang baru, operasi penetapan nilai dapat dilakukan di dalam ekspresi lain, misalnya, untuk menghindari pemanggilan fungsi ganda dalam pernyataan kondisional dan saat mendefinisikan loop:

    jika (n := len(a)) > 10:
    ...

    while (blok := f.read(256)) != ":
    ...

  • Dukungan sintaks baru untuk menentukan argumen fungsi. Saat menghitung argumen selama definisi fungsi, Anda sekarang dapat menentukan "/" untuk memisahkan argumen yang hanya dapat diberi nilai berdasarkan urutan penghitungan nilai selama pemanggilan fungsi, dari argumen yang dapat ditetapkan dalam urutan apa pun (variabel=nilai sintaksis) ). Di sisi praktis, fitur baru ini memungkinkan fungsi di Python untuk sepenuhnya meniru perilaku fungsi yang ada di C, dan juga menghindari pengikatan ke nama tertentu, misalnya, jika nama parameter direncanakan akan diubah di masa mendatang.

    Tanda “/” melengkapi tanda “*” yang ditambahkan sebelumnya, memisahkan variabel yang hanya dapat diterapkan penugasan dalam bentuk “variabel=nilai”. Misalnya, dalam fungsi "def f(a, b, /, c, d, *, e, f):" variabel "a" dan "b" hanya dapat ditetapkan sesuai urutan nilai yang dicantumkan ,
    variabel “e” dan “f”, hanya melalui penetapan “variabel=nilai”, dan variabel “c” dan “d” dengan salah satu cara berikut:

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

  • Ditambahkan API C baru
    untuk mengonfigurasi parameter inisialisasi Python, memungkinkan kontrol penuh atas semuanya konfigurasi dan menyediakan fasilitas penanganan kesalahan tingkat lanjut. API yang diusulkan memudahkan untuk menyematkan fungsionalitas juru bahasa Python ke dalam aplikasi C lainnya;

  • Diimplementasikan protokol Vectorcall baru untuk akses lebih cepat ke objek yang ditulis dalam bahasa C. Di CPython 3.8, akses ke Vectorcall masih terbatas pada penggunaan internal; transfer ke kategori API yang dapat diakses publik direncanakan di CPython 3.9;
  • Ditambahkan panggilan ke Runtime Audit Hooks, yang menyediakan aplikasi dan kerangka kerja dengan Python dengan akses ke informasi tingkat rendah tentang kemajuan skrip untuk mengaudit tindakan yang dilakukan (misalnya, Anda dapat melacak impor modul, membuka file, menggunakan jejak, mengakses soket jaringan, menjalankan kode melalui exec, eval dan run_mod);
  • Di dalam modul acar dijamin dukungan untuk protokol Pickle 5, digunakan untuk membuat serialisasi dan deserialisasi objek. Pickle memungkinkan Anda mengoptimalkan transfer data dalam jumlah besar antara proses Python dalam konfigurasi multi-core dan multi-node dengan mengurangi jumlah operasi penyalinan memori dan menerapkan teknik pengoptimalan tambahan seperti menggunakan algoritma kompresi khusus data. Versi kelima dari protokol ini terkenal karena penambahan mode transmisi out-of-band, di mana data dapat ditransmisikan secara terpisah dari aliran acar utama.
  • Secara default, versi keempat dari protokol Pickle diaktifkan, yang, dibandingkan dengan versi ketiga yang ditawarkan sebelumnya secara default, memungkinkan kinerja yang lebih tinggi dan pengurangan ukuran data yang dikirimkan;
  • Di dalam modul mengetik Beberapa fitur baru diperkenalkan:
    • Kelas DiketikDict untuk array asosiatif yang informasi tipenya ditentukan secara eksplisit untuk data yang terkait dengan kunci (“TypedDict('Point2D', x=int, y=int, label=str)”).
    • Jenis Secara harfiah, yang memungkinkan Anda membatasi parameter atau mengembalikan nilai ke beberapa nilai yang telah ditentukan sebelumnya (“Literal['connected', 'disconnected']”).
    • Konstruksi "Terakhir", yang memungkinkan untuk menentukan nilai variabel, fungsi, metode, dan kelas yang tidak dapat diubah atau ditetapkan ulang ("pi: Final[float] = 3.1415926536").
  • Menambahkan kemampuan untuk menetapkan cache untuk file yang dikompilasi dengan bytecode, disimpan dalam pohon FS terpisah dan dipisahkan dari direktori dengan kode. Jalur untuk menyimpan file dengan bytecode diatur melalui variabel PYTHONPYCACHEPREFIX atau opsi "-X pycache_prefix";
  • Diimplementasikan kemampuan untuk membuat build debug Python yang menggunakan ABI yang identik dengan rilis, yang memungkinkan Anda memuat ekstensi yang ditulis dalam bahasa SI, dikompilasi untuk rilis stabil, dalam build debug;
  • f-string (literal berformat yang diawali dengan 'f') memberikan dukungan untuk operator = (misalnya, "f'{expr=}'"), yang memungkinkan Anda mengonversi ekspresi menjadi teks untuk memudahkan proses debug. Misalnya:

    ››› pengguna = 'eric_idle'
    ››› member_sejak = tanggal(1975, 7, 31)
    ››› f'{pengguna=} {member_since=}'
    "pengguna='eric_idle' member_since=tanggalwaktu.tanggal(1975, 7, 31)"

  • ekspresi "terus» diperbolehkan untuk digunakan di dalam blok akhirnya;
  • Modul baru ditambahkan multiprosesing.shared_memory, memungkinkan penggunaan segmen memori bersama dalam konfigurasi multiproses;
  • Pada platform Windows, implementasi asyncio telah dipindahkan untuk menggunakan kelas tersebut ProactorEventLoop;
  • Kinerja instruksi LOAD_GLOBAL telah meningkat sekitar 40% karena penggunaan mekanisme caching kode objek baru.

Sumber: opennet.ru

Tambah komentar