นักพัฒนา Rust ถกเถียงเรื่องเวลาการคอมไพล์ขณะที่ derive-deftly นำเสนอการสร้างแมโครแบบง่าย

ทีมชุมชน BigGo
นักพัฒนา Rust ถกเถียงเรื่องเวลาการคอมไพล์ขณะที่ derive-deftly นำเสนอการสร้างแมโครแบบง่าย

ชุมชนนักพัฒนา Rust กำลังมีการถกเถียงกันอย่างเข้มข้นเกี่ยวกับประสิทธิภาพการคอมไพล์แมโครหลังจากการเปิดตัว derive-deftly ซึ่งเป็น crate ใหม่ที่ออกแบบมาเพื่อทำให้การสร้างแมโคร custom derive ง่ายขึ้น แม้ว่าเครื่องมือนี้จะสัญญาว่าจะทำให้การพัฒนาแมโครเข้าถึงได้ง่ายขึ้น แต่นักพัฒนากำลังแสดงความกังวลเกี่ยวกับผลกระทบที่กว้างขึ้นของการใช้แมโครต่อเวลาการ build และประสิทธิภาพการทำงาน

คุณสมบัติหลักของ derive-deftly:

  • ไวยากรณ์ที่เรียบง่ายสำหรับการสร้าง custom derive macros โดยไม่ต้องใช้ความซับซ้อนของ procedural macro
  • รองรับ structs, enums และ unions
  • แนวทางแบบ template-based พร้อมโครงสร้างการควบคุม
  • ไม่สามารถแก้ไขนิยามประเภทข้อมูลเดิมได้ (เหมือนกับ standard derive macros)
  • ต้องใช้ไวยากรณ์ [derive(Deftly)] และ [derive_deftly(TemplateName)]

ความไม่พอใจที่เพิ่มขึ้นต่อประสิทธิภาพการคอมไพล์แมโคร

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

เรากำลังค่อยๆ ห้ามการใช้แมโครจาก Rust monorepo ของเรา dependency ที่ใช้แมโครหนักก็จะถูกตัดออกในที่สุด

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

ความกังวลของชุมชน:

  • ประสิทธิภาพการคอมไพล์: โค้ดเบสที่ใช้ macro มากเกินไปทำให้เวลาในการ build เพิ่มขึ้นอย่างมีนัยสำคัญ
  • การรวมระบบ IDE: ไวยากรณ์ macro ที่ซับซ้อนทำให้เกิดปัญหาในสภาพแวดล้อมการพัฒนา
  • การจัดการ Dependency: ทีมงานกำลังพิจารณาการลบ dependency ที่ใช้ macro มากเกินไป
  • ช่องว่างของเครื่องมือ: ความต้องการเมตริกเวลาการคอมไพล์ใน package repository

ชุมชนเรียกร้องให้มีเครื่องมือและเมตริกที่ดีขึ้น

การอภิปรายนี้ได้จุดประกายให้เกิดการเรียกร้องเครื่องมือที่ดีขึ้นเพื่อช่วยให้นักพัฒนาตัดสินใจอย่างมีข้อมูลเกี่ยวกับการใช้แมโคร นักพัฒนากำลังขอให้ package repository ให้เมตริกเวลาการคอมไพล์และสถิติการใช้แมโครสำหรับ dependency ต่างๆ สิ่งนี้จะช่วยให้ทีมงานประเมินต้นทุนประสิทธิภาพของการเพิ่ม dependency ใหม่ก่อนที่จะส่งผลกระทบต่อ build pipeline ของพวกเขา

จังหวะเวลาของความกังวลเหล่านี้มีความเกี่ยวข้องโดยเฉพาะเมื่อ Rust ยังคงพัฒนาระบบแมโครของตัวเอง สมาชิกชุมชนบางคนชี้ไปที่ฟีเจอร์ภาษาที่กำลังจะมาถึงซึ่งอาจแก้ไขข้อจำกัดปัจจุบันในการกำหนด declarative macro สำหรับ derive และ attribute macro

การสร้างสมดุลระหว่างพลังและความซับซ้อนในการออกแบบแมโคร

แม้จะมีความกังวลเรื่องประสิทธิภาพ แต่ก็มีการยอมรับว่าเครื่องมืออย่าง derive-deftly มีจุดประสงค์ที่สำคัญในระบบนิเวศ crate นี้มีจุดมุ่งหมายที่จะเชื่อมช่องว่างระหว่างพลังของ procedural macro กับอุปสรรคความซับซ้อนที่ป้องกันไม่ให้นักพัฒนาหลายคนสร้างฟังก์ชัน custom derive

การถกเถียงที่กำลังดำเนินอยู่เน้นย้ำถึงความท้าทายพื้นฐานในการเขียนโปรแกรมสมัยใหม่: จะให้ abstraction ที่ทรงพลังโดยไม่เสียสละลักษณะประสิทธิภาพที่นักพัฒนาพึ่งพาสำหรับ workflow ที่มีประสิทธิภาพได้อย่างไร ขณะที่ระบบนิเวศ Rust ยังคงเติบโตขึ้น การหาสมดุลที่เหมาะสมระหว่างการแสดงออกและประสิทธิภาพยังคงเป็นลำดับความสำคัญหลักสำหรับทั้งผู้สร้างเครื่องมือและผู้ใช้

อ้างอิง: Introduction: Using derive-deftly for easy derive macros.