Rilis bahasa pemrograman Python 3.11

Setelah satu tahun pengembangan, rilis signifikan bahasa pemrograman Python 3.11 telah diterbitkan. Cabang baru akan didukung selama satu setengah tahun, setelah itu selama tiga setengah tahun berikutnya, perbaikan akan dilakukan untuk menghilangkan kerentanan.

Pada saat yang sama, pengujian alfa cabang Python 3.12 dimulai (sesuai dengan jadwal pengembangan baru, pengerjaan cabang baru dimulai lima bulan sebelum rilis cabang sebelumnya dan mencapai tahap pengujian alfa pada saat rilis berikutnya. ). Cabang Python 3.12 akan berada dalam rilis alfa selama tujuh bulan, di mana fitur-fitur baru akan ditambahkan dan bug diperbaiki. Setelah ini, versi beta akan diuji selama tiga bulan, di mana penambahan fitur baru akan dilarang dan semua perhatian akan diberikan untuk memperbaiki bug. Selama dua bulan terakhir sebelum rilis, cabang akan berada pada tahap kandidat rilis, di mana stabilisasi akhir akan dilakukan.

Tambahan baru pada Python 3.11 meliputi:

  • Pekerjaan signifikan telah dilakukan untuk mengoptimalkan kinerja. Cabang baru mencakup perubahan yang terkait dengan akselerasi dan penerapan panggilan fungsi sebaris, penggunaan penerjemah cepat operasi standar (x+x, x*x, xx, a[i], a[i] = z, f(arg) C( arg), o.method(), o.attr = z, *seq), serta optimasi yang disiapkan oleh proyek Cinder dan HotPy. Tergantung pada jenis pemuatannya, ada peningkatan kecepatan eksekusi kode sebesar 10-60%. Rata-rata, performa pada rangkaian pengujian pyperformance meningkat sebesar 25%.

    Mekanisme cache bytecode telah didesain ulang, yang mengurangi waktu startup interpreter sebesar 10-15%. Objek dengan kode dan bytecode sekarang dialokasikan secara statis oleh penerjemah, yang memungkinkan untuk menghilangkan tahapan unmarshalling bytecode yang diekstraksi dari cache dan mengkonversi objek dengan kode untuk ditempatkan dalam memori dinamis.

  • Saat menampilkan jejak panggilan dalam pesan diagnostik, sekarang dimungkinkan untuk menampilkan informasi tentang ekspresi yang menyebabkan kesalahan (sebelumnya, hanya baris yang disorot tanpa merinci bagian baris mana yang menyebabkan kesalahan). Informasi jejak yang diperluas juga dapat diperoleh melalui API dan digunakan untuk memetakan instruksi bytecode individual ke posisi tertentu dalam kode sumber menggunakan metode codeobject.co_positions() atau fungsi C API PyCode_Addr2Location(). Perubahan ini mempermudah proses debug masalah dengan objek kamus bertumpuk, pemanggilan beberapa fungsi, dan ekspresi aritmatika kompleks. Traceback (panggilan terakhir terakhir): File "calculation.py", baris 54, hasilnya = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: pembagian dengan nol
  • Menambahkan dukungan untuk grup pengecualian, memberikan program kemampuan untuk menghasilkan dan memproses beberapa pengecualian berbeda sekaligus. Untuk mengelompokkan beberapa pengecualian dan menyatukannya, jenis pengecualian baru ExceptionGroup dan BaseExceptionGroup telah diusulkan, dan ekspresi β€œkecuali*” telah ditambahkan untuk menyorot pengecualian individual dari suatu grup.
  • Metode add_note() telah ditambahkan ke kelas BaseException, memungkinkan Anda melampirkan catatan teks ke pengecualian, misalnya, menambahkan informasi kontekstual yang tidak tersedia saat pengecualian dilempar.
  • Menambahkan tipe Self khusus untuk mewakili kelas privat saat ini. Self dapat digunakan untuk memberi anotasi pada metode yang mengembalikan instance kelasnya dengan cara yang lebih sederhana daripada menggunakan TypeVar. kelas MyLock: def __enter__(self) -> Self: self.lock() kembalikan diri
  • Menambahkan tipe LiteralString khusus yang hanya dapat menyertakan string literal yang kompatibel dengan tipe LiteralString (yaitu, string telanjang dan LiteralString, tetapi bukan string str yang sewenang-wenang atau gabungan). Tipe LiteralString dapat digunakan untuk membatasi penerusan argumen string ke fungsi, penggantian bagian string secara sewenang-wenang yang dapat menyebabkan kerentanan, misalnya, saat membuat string untuk kueri SQL atau perintah shell. def run_query(sql: LiteralString) -> ... ... def pemanggil( arbitrer_string: str, query_string: LiteralString, nama_tabel: LiteralString, ) -> Tidak ada: run_query("PILIH * DARI siswa") # ok run_query(literal_string) # ok run_query( "PILIH * FROM" + literal_string) # ok run_query(arbitrary_string) # Kesalahan run_query( # Kesalahan f"SELECT * FROM siswa WHERE nama = {arbitrary_string}" )
  • Tipe TypeVarTuple telah ditambahkan, memungkinkan penggunaan variabel generik, tidak seperti TypeVar, yang tidak mencakup satu tipe, tetapi sejumlah tipe yang berubah-ubah.
  • Pustaka standar menyertakan modul tomllib dengan fungsi untuk mengurai format TOML.
  • Dimungkinkan untuk menandai masing-masing elemen kamus yang diketik (TypedDict) dengan label Wajib dan Tidak Diperlukan untuk menentukan bidang wajib dan opsional (secara default, semua bidang yang dideklarasikan wajib diisi jika parameter total tidak disetel ke False). kelas Film(TypedDict): judul: str tahun: Tidak Diperlukan[int] m1: Film = {"title": "Black Panther", "tahun": 2018} # OK m2: Film = {"title": "Star Wars" } # OK (kolom tahun opsional) m3: Film = {β€œtahun”: 2022} # Error, kolom judul yang wajib diisi tidak diisi)
  • Kelas TaskGroup telah ditambahkan ke modul asyncio dengan implementasi manajer konteks asinkron yang menunggu penyelesaian sekelompok tugas. Menambahkan tugas ke grup dilakukan menggunakan metode create_task(). async def main(): async dengan asyncio.TaskGroup() sebagai tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(another_coro(...)) print("Kedua tugas telah selesai sekarang .")
  • Menambahkan dekorator @dataclass_transform untuk kelas, metode, dan fungsi, ketika ditentukan, sistem pemeriksaan tipe statis memperlakukan objek seolah-olah menggunakan dekorator @dataclasses.dataclass. Pada contoh di bawah, kelas CustomerModel, saat memeriksa tipe, akan diproses serupa dengan kelas dengan dekorator @dataclasses.dataclass, yaitu. memiliki metode __init__ yang menerima variabel id dan nama. @dataclass_transform() kelas ModelBase: ... kelas CustomerModel(ModelBase): id: int nama: str
  • Dalam ekspresi reguler, kemampuan untuk menggunakan pengelompokan atom ((?>...)) dan bilangan posesif (*+, ++, ?+, {m,n}+) telah ditambahkan.
  • Menambahkan opsi baris perintah "-P" dan variabel lingkungan PYTHONSAFEPATH untuk menonaktifkan lampiran otomatis jalur file yang berpotensi tidak aman ke sys.path.
  • Utilitas py.exe untuk platform Windows telah ditingkatkan secara signifikan, menambahkan dukungan untuk sintaks β€œ-V:”. / " sebagai tambahan "- . "
  • Banyak makro di C API diubah menjadi fungsi inline reguler atau statis.
  • Modul uu, cgi, pipa, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev, dan sunau sudah tidak digunakan lagi dan akan dihapus dengan Python rilis 3.13. Menghapus fungsi PyUnicode_Encode*.

Sumber: opennet.ru

Tambah komentar