การเปิดตัวภาษาการเขียนโปรแกรม Python 3.12

หลังจากหนึ่งปีของการพัฒนา ภาษาการเขียนโปรแกรม Python 3.12 รุ่นสำคัญก็ได้รับการเผยแพร่ สาขาใหม่จะได้รับการสนับสนุนเป็นเวลาหนึ่งปีครึ่ง หลังจากนั้นอีกสามปีครึ่ง จะมีการสร้างการแก้ไขเพื่อขจัดช่องโหว่

ในเวลาเดียวกัน การทดสอบอัลฟ่าของสาขา Python 3.13 ได้เริ่มต้นขึ้น ซึ่งแนะนำโหมดการสร้าง CPython โดยไม่มีการล็อคล่ามส่วนกลาง (GIL, Global Interpreter Lock) สาขา Python 3.13 จะเป็นรุ่นอัลฟ่าเป็นเวลาเจ็ดเดือน ในระหว่างนั้นจะมีการเพิ่มคุณสมบัติใหม่และแก้ไขข้อบกพร่อง (ตามกำหนดการพัฒนาใหม่ การทำงานในสาขาใหม่จะเริ่มต้นห้าเดือนก่อนการเปิดตัวสาขาก่อนหน้าและภายใน เวลาของการเปิดตัวครั้งต่อไปจะถึงขั้นตอนการทดสอบอัลฟ่า) หลังจากนี้ เวอร์ชันเบต้าจะได้รับการทดสอบเป็นเวลาสามเดือน ในระหว่างนี้จะมีการห้ามการเพิ่มคุณสมบัติใหม่ๆ และเราจะให้ความสนใจทั้งหมดเพื่อแก้ไขข้อบกพร่อง ในช่วงสองเดือนที่ผ่านมาก่อนการเปิดตัว สาขาจะอยู่ในขั้นตอนการเปิดตัวซึ่งจะดำเนินการรักษาเสถียรภาพขั้นสุดท้าย

สิ่งที่เพิ่มเติมใหม่ใน Python 3.12 ได้แก่:

  • ความยืดหยุ่นในการแยกวิเคราะห์ f-strings (ตัวอักษรที่จัดรูปแบบด้วยคำนำหน้า 'f') เพิ่มขึ้น ช่วยให้เรากำจัดข้อจำกัดมากมายได้ ตัวอย่างเช่น f-strings สามารถมีนิพจน์ที่ถูกต้องของ Python ได้แล้ว รวมถึงนิพจน์หลายบรรทัด ความคิดเห็น แบ็กสแลช และลำดับหลีก Unicode นอกจากนี้ สตริงด้านในยังอนุญาตให้ใช้เครื่องหมายคำพูดเดิมซ้ำเป็น f-string ล้อมรอบได้ (นั่นคือ สามารถใช้เครื่องหมายคำพูดคู่ภายในได้โดยไม่ต้องสลับไปใช้เครื่องหมายคำพูดเดี่ยว) เนื้อหาข้อมูลของข้อความแสดงข้อผิดพลาดใน f-lines เพิ่มขึ้น ซึ่งขณะนี้ระบุตำแหน่งที่แน่นอนในบรรทัดที่ทำให้เกิดข้อผิดพลาดแล้ว

    ตัวอย่างเช่น ใน Python 3.12 อนุญาตให้ใช้โครงสร้างต่อไปนี้: print(f"นี่คือเพลย์ลิสต์: {"\n".join(songs)}") print(f"นี่คือเพลย์ลิสต์: {"\N{BLACK HEART SUIT}". join(songs)}") print(f"นี่คือเพลย์ลิสต์: {", ".join([ … 'Take me back to Eden', # ฉัน ของฉัน ดวงตาเหล่านั้นเหมือนไฟ … 'อัลคาไลน์' , # ไม่เป็นกรดหรือด่าง … 'Ascensionism' # ไปสู่ท้องฟ้าที่แตกสลายในที่สุด … ])}")

  • เพื่อเพิ่มประสิทธิภาพการใช้ทรัพยากรบนระบบมัลติคอร์ จึงมีการนำการสนับสนุนล่ามย่อยแบบแยกและการล็อคโกลบอลแยกกัน (GIL, Global Interpreter Lock) สำหรับล่ามที่แตกต่างกันภายในกระบวนการ (CPython อนุญาตให้คุณเรียกใช้ล่ามหลายตัวพร้อมกันใน กระบวนการหนึ่ง) ในรูปแบบปัจจุบัน คุณลักษณะนี้มีให้บริการผ่าน C-API เท่านั้น (การสนับสนุน Python API จะปรากฏในสาขาสำคัญถัดไป)
  • เพิ่มความสามารถในการใช้โปรโตคอลบัฟเฟอร์ลงในโค้ด Python แล้ว คลาสที่มีเมธอด "__buffer__()" สามารถใช้เป็นประเภทที่ดำเนินการกับข้อมูลไบนารี่ในหน่วยความจำได้โดยตรง
  • โมดูล sys.monitoring ได้รับการเสนอสำหรับการดีบักและการทำโปรไฟล์ ซึ่งช่วยให้คุณตรวจสอบเหตุการณ์ใน CPython เช่น การเรียกใช้ การส่งคืนฟังก์ชัน การดำเนินการบรรทัดโค้ดที่กำหนดเอง ข้อยกเว้นและการเปลี่ยนโดยมีค่าใช้จ่ายน้อยที่สุด
  • ตัวแปลภาษาจะให้การสนับสนุนสำหรับระบบย่อยเคอร์เนล Linux perf เป็นเครื่องมือที่ช่วยให้คุณระบุชื่อของฟังก์ชัน Python เมื่อทำการวิเคราะห์ประสิทธิภาพโดยใช้ยูทิลิตี้ perf (ก่อนหน้านี้ สามารถระบุได้เฉพาะชื่อของฟังก์ชัน C ในการติดตามเท่านั้น)
  • เนื้อหาข้อมูลของข้อความแสดงข้อผิดพลาดได้รับการเพิ่มขึ้น และขอบเขตของข้อยกเว้นได้ขยายออกไป โดยเสนอคำแนะนำในการขจัดการพิมพ์ผิด ตัวอย่างเช่น คำแนะนำสำหรับการนำเข้าโมดูลที่ถูกลืมของไลบรารีมาตรฐานจะแสดงขึ้น และคำแนะนำในการเพิ่มคำนำหน้า "self" จะปรากฏขึ้น ในวิธีการต่างๆ การเขียน "import x from y" ถูกกำหนดแทน "from y import x" เป็นต้น sys.version_info NameError: ชื่อ 'sys' ไม่ได้ถูกกำหนดไว้ คุณลืมนำเข้า 'sys' หรือไม่? somethin = blech NameError: ไม่ได้กำหนดชื่อ 'blech' คุณหมายถึง: 'self.blech'? import ayz จาก byz SyntaxError: คุณหมายถึงใช้ 'จาก … นำเข้า …' แทนหรือไม่ จากคอลเลกชันนำเข้า chainmap ImportError: ไม่สามารถนำเข้าชื่อ 'chainmap' จาก 'collections' คุณหมายถึง: 'ChainMap'?
  • ทำงานอย่างต่อเนื่องเพื่อเพิ่มประสิทธิภาพการทำงาน ประสิทธิภาพโดยรวมที่เพิ่มขึ้นอันเป็นผลมาจากการเพิ่มประสิทธิภาพที่เพิ่มเข้ามานั้นประมาณไว้ที่ 5%
    • มีการเพิ่มการสนับสนุนการทดลองสำหรับเครื่องมือเพิ่มประสิทธิภาพไบนารี BOLT ในกระบวนการสร้าง ซึ่งเพิ่มประสิทธิภาพได้ 1-5%
    • การใช้งานการรวมรายการแบบอินไลน์ (ความเข้าใจ) ได้ถูกนำมาใช้ ซึ่งช่วยเร่งการทำงานกับการรวมรายการได้ถึงสองเท่า (สำหรับโค้ดที่ใช้การรวมรายการอย่างแข็งขัน การทดสอบพบว่าประสิทธิภาพโดยรวมเพิ่มขึ้น 11%)
    • ขนาดของวัตถุ Unicode ลดลง 8-16 ไบต์
    • การดำเนินการกับนิพจน์ทั่วไป re.sub(), re.subn() และ re.Pattern ได้รับการเร่งให้เร็วขึ้น
    • การดำเนินการตรวจสอบ isinstance() สำหรับบางโปรโตคอลได้รับการเร่งจาก 2 เป็น 20 ครั้ง
    • ประสิทธิภาพของแพ็คเกจ asyncio ได้รับการปรับปรุงอย่างมีนัยสำคัญ (การทดสอบบางอย่างแสดงการเร่งความเร็ว 75%)
    • การสร้างคลาส asyncio.Task ได้รับการเร่งแล้ว
    • อย่างมีนัยสำคัญ (ในการทดสอบบางอย่างถึง 64%) ฟังก์ชัน tokenize.tokenize() และ tokenize.generate_tokens() ได้รับการเร่งอย่างมีนัยสำคัญ
    • การโหลดแอตทริบิวต์และการเรียกใช้เมธอด super() ได้รับการเร่งความเร็วแล้ว
  • มีการเสนอไวยากรณ์คำอธิบายประกอบชนิดใหม่ที่กะทัดรัดยิ่งขึ้นสำหรับคลาสและฟังก์ชันทั่วไป def สูงสุด [T] (args: Iterable [T]) -> T: ... รายการคลาส [T]: def __getitem__ (ตนเอง, ดัชนี: int, /) -> T: ... def ผนวก (ตนเอง, องค์ประกอบ : T) - >ไม่มี: ...
  • ให้วิธีใหม่ในการกำหนดนามแฝงประเภทโดยใช้นิพจน์ "ประเภท" ประเภท Point = tuple[float, float] ประเภท Point[T] = tuple[T, T]
  • มีการเพิ่ม @override มัณฑนากรใหม่ลงในโมดูลการพิมพ์เพื่อแจ้งให้ระบบการตรวจสอบประเภททราบว่าวิธีการในคลาสย่อยมีจุดประสงค์เพื่อแทนที่วิธีการหรือคุณลักษณะในซูเปอร์คลาส มัณฑนากรสามารถใช้เพื่อตรวจจับข้อผิดพลาดที่เกิดจากวิธีการที่ตั้งใจจะแทนที่โดยไม่ดำเนินการใดๆ class Base: def log_status(self) -> ไม่มี: … class Sub(Base): @override def log_status(self) -> None: # ตกลง แทนที่ Base.log_status … @override def เสร็จแล้ว (self) -> ไม่มี: # ระบบตรวจสอบประเภทจะตรวจจับข้อผิดพลาด...
  • เพื่อเพิ่มความปลอดภัย การใช้งานในตัวของอัลกอริธึม SHA1, SHA3, SHA2-384, SHA2-512 และ MD5 ใน hashlib ได้ถูกแทนที่ด้วยตัวเลือกที่ได้รับการตรวจสอบอย่างเป็นทางการจากโครงการ HACL* (การใช้งานในตัวจะใช้เท่านั้น หากไม่มี OpenSSL)
  • Python มีการป้องกันสแต็กล้น
  • คลาส pathlib.Path รองรับคลาสย่อย
  • โมดูลระบบปฏิบัติการได้ขยายการรองรับแพลตฟอร์มแล้ว Windowsตัวอย่างเช่น เมื่อทำงานใน Windows เพิ่มการรองรับสำหรับเมธอด os.listdrives(), os.listvolumes() และ os.listmounts() และปรับปรุงความแม่นยำของ os.stat() และ os.lstat()
  • เพิ่มอินเทอร์เฟซบรรทัดคำสั่งให้กับโมดูล sqlite3 และ uuid (“python -m sqlite3” และ “python -m uuid”)
  • C-API ได้เพิ่มการสนับสนุนสำหรับวัตถุ "อมตะ" ซึ่งไม่ได้ใช้การนับอ้างอิง
  • แนวคิดของระดับ C API ที่ไม่เสถียรได้ถูกนำไปใช้แล้ว โดยมีจุดประสงค์เพื่อใช้ในดีบักเกอร์ คอมไพเลอร์ JIT และเครื่องมือระดับต่ำอื่นๆ
  • ทำความสะอาดคุณสมบัติที่ล้าสมัย
    • โมดูล asynchat, asyncore, smtpd, imp และ distutils ได้ถูกลบออกแล้ว (สามารถใช้โมดูล distutils จากแพ็คเกจ setuptools)
    • คุณสมบัติ wstr และ wstr_length ถูกลบออกจากการใช้งาน C ของอ็อบเจ็กต์ Unicode
    • ลบวิธีการที่เลิกใช้แล้วในโมดูล unittest
    • ลบฟังก์ชัน คลาส และเมธอดที่ล้าสมัยหรือไม่สามารถใช้งานได้แล้ว รวมถึง locale.format() และ io.OpenWrapper ด้วย SSL.RAND_pseudo_bytes(), ElementTree.Element.copy(), hashlib.pbkdf2_hmac(), gzip.GzipFile, เป็นต้น
    • โมดูลเว็บเบราว์เซอร์ไม่รองรับเบราว์เซอร์รุ่นเก่าอีกต่อไป รวมถึง Grail, Mosaic, Netscape, Galeon, Skipstone, Iceape, Firebird และ Firefox จนถึงเวอร์ชัน 36
    • เพื่อเตรียมพร้อมสำหรับการปรับให้เหมาะสมในอนาคต การแสดงจำนวนเต็มภายในมีการเปลี่ยนแปลง

ที่มา: opennet.ru

ซื้อโฮสติ้งที่เชื่อถือได้สำหรับไซต์ที่มีการป้องกัน DDoS เซิร์ฟเวอร์ VPS VDS 🔥 ซื้อบริการเว็บโฮสติ้งที่เชื่อถือได้ พร้อมระบบป้องกัน DDoS และเซิร์ฟเวอร์ VPS/VDS | ProHoster