นักพัฒนา Python สร้างแพ็กเกจแกะ Dict แบบแปลกใหม่ด้วยการแฮ็ก File Encoding ที่ถูกถกเถียง

ทีมชุมชน BigGo
นักพัฒนา Python สร้างแพ็กเกจแกะ Dict แบบแปลกใหม่ด้วยการแฮ็ก File Encoding ที่ถูกถกเถียง

นักพัฒนา Python คนหนึ่งได้ปล่อยแพ็กเกจที่ถูกถกเถียงชื่อ dict-unpacking-at-home ที่ช่วยให้สามารถแกะ dictionary แบบ JavaScript ใน Python ได้ผ่านการแฮ็ก file encoding แบบแปลกใหม่ แพ็กเกจนี้ได้จุดประกายการถกเถียงอย่างรุนแรงในชุมชนเกี่ยวกับฟีเจอร์ที่ Python ขาดหายไปและการแก้ปัญหาแบบสร้างสรรค์

การใช้ระบบ Encoding ของ Python อย่างสร้างสรรค์

แพ็กเกจนี้ทำงานโดยการลงทะเบียน custom file encoding format ที่ประมวลผล Python source code ล่วงหน้าก่อนการรัน ผู้ใช้เพิ่มคอมเมนต์พิเศษ # -*- coding: dict-unpacking-at-home -*- ลงในไฟล์ของตน ซึ่งจะเรียกใช้การแปลงข้อมูล สิ่งนี้ทำให้สามารถใช้ syntax เช่น {greeting, thing} = dct เพื่อดึงค่า dictionary ออกมาใส่ในตัวแปรโดยตรง คล้ายกับ destructuring assignment ของ JavaScript

การใช้งานนี้แสดงถึงการใช้ระบบ text encoding ของ Python อย่างชาญฉลาดแต่ผิดวัตถุประสงค์ ซึ่งปกติจะจัดการกับการแปลงตัวอักษรเช่น UTF-8 แทนที่จะแปลงระหว่าง character encodings แพ็กเกจนี้แปลงโครงสร้าง source code จริงก่อนที่ parser ของ Python จะเห็น

File encoding: ระบบของ Python สำหรับแปลงข้อมูล byte เป็นตัวอักษรข้อความที่ interpreter สามารถเข้าใจได้

ขั้นตอนการติดตั้งแพ็กเกจ:

  • ติดตั้งผ่าน pip install dict-unpacking-at-home
  • เพิ่ม -*- coding: dict-unpacking-at-home -*- ลงในส่วนหัวของไฟล์
  • ใช้ไวยากรณ์: {greeting, thing} = dct สำหรับการแยกข้อมูล

ปฏิกิริยาจากชุมชนมีตั้งแต่ความกระตือรือร้นจนถึงความกังวล

ชุมชน Python แสดงปฏิกิริยาแบบผสมผสานต่อแพ็กเกจทดลองนี้ นักพัฒนาบางคนแสดงความหงุดหงิดอย่างแท้จริงต่อข้อจำกัดปัจจุบันของ Python โดยสมาชิกชุมชนคนหนึ่งระบุว่าจะบริจาค 500 ดอลลาร์สหรัฐ ให้ Python Software Foundation หากฟีเจอร์นี้ถูกเพิ่มอย่างเป็นทางการ โดยเรียกการขาดฟีเจอร์นี้ว่าเป็นความเจ็บปวดประจำวัน

อย่างไรก็ตาม ผู้เขียนแพ็กเกจเตือนอย่างชัดเจนไม่ให้ใช้ในการผลิต โดยอ้างอิงประสบการณ์ก่อนหน้านี้กับ joke packages ที่กลายเป็น critical infrastructure โดยไม่คาดคิด แพ็กเกจนี้มีการดาวน์โหลดเกือบหนึ่งล้านครั้งต่อเดือนแล้ว ซึ่งเน้นย้ำว่าเครื่องมือทดลองสามารถได้รับการยอมรับอย่างแพร่หลายในระบบนิเวศ Python ได้เร็วเพียงใด

วิธีแก้ปัญหาทางเลือกใน Python :

  • คำสั่ง Match-case (PEP 636): การจับคู่รูปแบบสำหรับ dictionary
  • ตัวดำเนินการ union ของ dictionary ( Python 3.9+ ): new_dict = old_dict | update_dict
  • In-place union: the_dict |= update_dict
  • การแตก dictionary: new_dict = {**old_dict,**updates}

ข้อจำกัดทางเทคนิคและทางเลือกอื่น

การใช้งานปัจจุบันมีข้อเสียที่สำคัญ รวมถึงหมายเลขบรรทัดที่เสียหายในข้อความแสดงข้อผิดพลาด ซึ่งทำให้การ debug ซับซ้อนขึ้น แม้ว่าจะมีการแก้ไขอยู่ แต่ก็มาพร้อมกับต้นทุนด้านประสิทธิภาพเพิ่มเติมที่ทำให้โซลูชันนี้ไม่เหมาะสมสำหรับการใช้งานจริงมากยิ่งขึ้น

สมาชิกชุมชนได้ชี้ให้เห็นทางเลือกอื่นที่มีอยู่ในฟีเจอร์มาตรฐานของ Python คำสั่ง match-case ใหม่ที่แนะนำใน PEP 636 ให้ความสามารถในการแกะ dictionary ที่คล้ายกันในรูปแบบที่มีโครงสร้างมากกว่า นอกจากนี้ syntax การรวม dictionary ที่มีอยู่ของ Python โดยใช้ union operator (|) ใน Python 3.9+ ขึ้นไปให้โซลูชันที่สะอาดกว่าสำหรับงานจัดการ dictionary ทั่วไปหลายอย่าง

แพ็กเกจนี้แสดงให้เห็นทั้งความคิดสร้างสรรค์ของนักพัฒนา Python และความปรารถนาอย่างต่อเนื่องสำหรับ syntax การจัดการ dictionary ที่สะดวกกว่าในภาษานี้ แม้ว่าจะไม่เหมาะสำหรับการใช้งานจริง แต่ก็เป็น proof of concept ที่น่าสนใจสำหรับฟีเจอร์ภาษาที่อาจมีในอนาคต

PEP 636: Python Enhancement Proposal ที่แนะนำ pattern matching ด้วยคำสั่ง match-case

Reference: dict-unpacking-at-home