เจาะประเด็น
Python
Python 3.15 มาแล้วพร้อมฟีเจอร์เด็ด และได้เวลาบอกลาเวอร์ชันเก่าทีละก้าว
สำรวจของใหม่ใน Python 3.15 ตั้งแต่ lazy import ยันตัวโปรไฟล์โค้ด พร้อมผลกระทบต่อสายโอเพนซอร์ส
ทีมข่าว เอไอไทย.com
⏱ อ่าน 4 นาที
การมาถึงของเวอร์ชันใหม่ไม่ได้หมายความแค่ฟีเจอร์เจ๋งๆ แต่คือสัญญาณบอกลาเวอร์ชันเก่าที่นักพัฒนาสายโอเพนซอร์สต้องปรับตัว
ปython 3.15 คลอดออกมาเป็นที่เรียบร้อยแล้ว โดยมี ไซมอน วิลลิสัน (Simon Willison) นักพัฒนาสายโอเพนซอร์สตัวยงได้ออกมาแชร์ประสบการณ์ตรงหลังได้ลองของใหม่ และสำหรับคนทำเครื่องมือแจกจ่ายสาธารณะ การอัปเดตครั้งนี้ทำให้เขาได้เวลาบอกลา Python 3.10 ที่หมดซัพพอร์ตทางการไปเสียที และขยับขึ้นมาใช้ของดีในเวอร์ชัน 3.11 เป็นขั้นต่ำแทน
ไฮไลต์แรกที่น่ากรี๊ดมากสำหรับคนทำเครื่องมือ CLI คือ Explicit lazy imports ตาม PEP 810 ที่เปิดทางให้เราเขียนโค้ดโหลดโมดูลแบบขี้เกียจได้ เช่น lazy import json หรือ lazy from pathlib import Path ซึ่งตัวระบบจะยอมโหลดจริงๆ ก็ต่อเมื่อมีการเรียกใช้สัญลักษณ์นั้นในโค้ดจริงๆ เท่านั้น
เรื่องนี้ตอบโจทย์คนทำเครื่องมืออย่างเช่น LLM CLI tool ของไซมอนที่มีระบบปลั๊กอินสุดๆ เพราะถ้าปลั๊กอินไหนเผลอไปพึ่งพาไลบรารีหนักๆ อย่าง sentence_transformers มันเคยทำเอาคำสั่งรันช้าลงไปหลายวินาทีแบบน่าหงุดหงิด การมี lazy imports เข้ามาช่วยแก้ปัญหาต้นทุนตอนเริ่มต้นทำงาน (startup cost) ตรงจุดนี้ได้โคตรดี
นอกจากนี้ยังมีเรื่องการแกะ unpacking ใน comprehensions ตาม PEP 798 ที่ทำให้เราเขียนยุบรายการซ้อนกันได้เนียนตาขึ้น ไม่ว่าจะเป็นลิสต์ เซ็ต หรือดิกชันนารี รูปแบบการเขียนสั้นลงและเข้าใจง่ายขึ้นเยอะเมื่อเทียบกับวิธีเดิมๆ ที่เคยทำกันมา
อีกหนึ่งของเล่นใหม่ที่โคตรมีประโยชน์คือการเพิ่ม sampling profiler ตัวใหม่ที่มีชื่อว่า Tachyon หรือ profiling.sampling เข้ามาประกบคู่กับตัวเดิม ตัวนี้ทำงานด้วยการแคปเจอร์สเตซต์เทรซเป็นระยะเพื่อคำนวณว่าฟังก์ชันไหนกินเวลาชีวิตเรามากที่สุด โดยที่มี overhead ต่ำมากๆ แถมติดมาให้ในสแตนดาร์ดไลบรารีเลย ไม่ต้องไปลงเครื่องมือแยกแบบเมื่อก่อนอีกต่อไป
ในแง่ความเร็วนั้น มิเกล กรินเบิร์ก ได้ลองเทสประสิทธิภาพของเวอร์ชัน 3.15 ดูกับตัว 3.15.0rc3 แล้วพบว่าความเร็วโดยรวมแทบไม่ต่างจาก 3.14 เลย ยกเว้นก็แต่ตัว JIT แบบทดลองที่ดันความเร็วขึ้นมาได้ประมาณ 1.2 เท่าในชุดทดสอบฟิโบนักชี ซึ่งก็นับเป็นนิมิตหมายที่ดีที่ได้เห็น JIT เริ่มมีผลงานเป็นชิ้นเป็นอันบ้าง
ส่วนใครที่ใช้เครื่องมือจัดการอย่าง uv การอัปเกรดขึ้นไปรัน 3.15 บนแมคก็ทำได้ง่ายโคตรๆ แค่อัปเดตตัว uv สั่งติดตั้งเวอร์ชันใหม่ แล้วปักหมุดให้เป็นค่าเริ่มต้นทั่วเครื่อง ก็พร้อมลุยต่อได้ทันทีโดยไม่ต้องมานั่งปวดหัวเรื่องจัดการเวอร์ชันเอง
การมาถึงของ 3.15 แปลว่า Python 3.10 ที่เปิดตัวไปตั้งแต่ปี 2021 ได้เวลาพักผ่อนอย่างเป็นทางการแล้ว สำหรับคนดูแลโปรเจกต์โอเพนซอร์ส นี่คือจังหวะเวลาที่ยอดเยี่ยมในการสะบัดบ็อบใส่เวอร์ชันเก่า แล้วกระโดดมาใช้ฟีเจอร์เด็ดๆ ของ 3.11 ที่รออยู่ เช่น การมาถึงของ tomllib, TaskGroup ใน asyncio รวมถึง datetime.UTC ที่เข้ามาแทนที่ตัวยาวๆ แบบเดิม
นอกจากนี้ ฝั่ง SQLite ใน Python 3.11 ก็ได้อัปเกรดชุดใหญ่ ไม่ว่าจะเป็น setlimit(), create_window_function() หรือ blobopen() ที่ช่วยให้จัดการข้อมูลก้อนโตได้มีประสิทธิภาพขึ้น รวมถึงการเรียก set_authorizer(None) ได้โดยตรง ทำให้โปรเจกต์อย่าง Datasette ไม่ต้องมานั่งเขียนโค้ดแก้ขัด (workaround) อีกต่อไป
การอัปเดตเวอร์ชันไพธอนรอบนี้ไม่ใช่แค่เรื่องของความเร็วที่เพิ่มขึ้น แต่เป็นเรื่องของเครื่องมือใหม่ๆ และการกล้าตัดใจทิ้งเวอร์ชันเก่าเพื่อโค้ดที่คลีนและทรงพลังกว่าเดิม
ที่มา: Simon Willison's Weblog — อ่านต้นฉบับ
ความคิดเห็น 1
กำลังโหลดความคิดเห็น...