ข้ามไปยังเนื้อหาหลัก

กลยุทธ์เวอร์ชัน Qiskit SDK

หมายเลขเวอร์ชัน Qiskit ปฏิบัติตาม Semantic Versioning หมายเลขเวอร์ชันประกอบด้วยสามส่วนหลัก: เวอร์ชัน major, minor และ patch ตัวอย่างเช่น ในหมายเลขเวอร์ชัน X.Y.Z, X คือเวอร์ชัน major, Y คือเวอร์ชัน minor และ Z คือเวอร์ชัน patch

การเปลี่ยนแปลง API ที่ทำให้ใช้ไม่ได้กับของเดิมสงวนไว้สำหรับการ release เวอร์ชัน major ระยะเวลา ขั้นต่ำ ระหว่างการ release major version คือหนึ่งปี Minor versions เพิ่ม ฟีเจอร์ใหม่และแก้ไขบั๊กโดยไม่ทำลายความเข้ากันได้ของ API และ เผยแพร่เป็นระยะ (ปัจจุบันทุกสามเดือน) สำหรับ เฉพาะ major version ปัจจุบัน Patch versions ให้การแก้ไขบั๊กที่พบใน minor version ล่าสุดของแต่ละ release series ที่ยังรองรับอยู่ (นั่นคือ major version) เรารองรับ release series ได้สูงสุดสองชุดในคราวเดียว ซึ่งเกิดขึ้น เฉพาะช่วงที่ทับซ้อนกันหลังจาก release major version ใหม่ ดังที่อธิบายโดยละเอียดด้านล่าง

ตารางเวลาการ release

ตารางเวลาการ release โดยประมาณแสดงไว้ด้านล่าง:

ตารางเวลาการ release Qiskit โดยประมาณ

สำหรับตารางเวลาการ release ที่เป็นปัจจุบัน ดูที่ รายการ milestones ของ Qiskit GitHub project ซึ่งจะมีแผน release ปัจจุบันเสมอ

เมื่อ release major version ใหม่, major version ก่อนหน้าจะได้รับการสนับสนุน อย่างน้อยหกเดือนด้วยการแก้ไขบั๊กเท่านั้น และหนึ่งปีสำหรับการแก้ไขความปลอดภัย ในช่วงเวลานี้ มีการเผยแพร่เฉพาะ patch releases สำหรับ major version นี้ patch version สุดท้ายจะเผยแพร่เมื่อสิ้นสุดการสนับสนุน และ release นั้น ยังบันทึกการสิ้นสุดการสนับสนุนสำหรับ major version series นั้นด้วย จำเป็นต้องมีช่วงเวลา สนับสนุนที่ยาวนานกว่าสำหรับ major version ก่อนหน้า เพื่อให้ผู้ใช้งาน Qiskit downstream และผู้ใช้ของพวกเขามีโอกาสย้ายโค้ด libraries downstream ที่ พึ่งพา Qiskit ไม่ควรยกระดับ minimum required Qiskit version เป็น major version ใหม่ทันทีหลัง release เพราะ user base ของ library ต้องการเวลา เพื่อย้ายไปใช้การเปลี่ยนแปลง API ใหม่ การมีช่วงเวลาสนับสนุนที่ขยายออก สำหรับ Qiskit major version ก่อนหน้าให้เวลาโปรเจกต์ downstream เพื่อให้แน่ใจว่า เข้ากันได้กับ major version ถัดไป โปรเจกต์ downstream สามารถรองรับ release series สองชุดในคราวเดียวเพื่อให้ผู้ใช้มีเส้นทางในการย้าย

สำหรับ semantic versioning, Qiskit public API คือ module, class, function หรือ method ที่มีเอกสารซึ่งไม่ถูกทำเครื่องหมายว่าเป็น private (ด้วยคำนำหน้าขีดล่าง _) อย่างไรก็ตาม อาจมีข้อยกเว้นชัดเจนสำหรับ API เฉพาะบางอย่าง ในกรณีดังกล่าว API เหล่านี้จะบันทึกอย่างชัดเจน ว่ายังไม่ถือว่าเป็น stable interfaces และจะมีการแสดงคำเตือนที่ผู้ใช้มองเห็น อยู่เสมอเมื่อใช้งาน unstable interfaces เหล่านี้ นอกจากนี้ ในบางกรณี interface ที่ถูกทำเครื่องหมายว่า private ถือเป็นส่วนหนึ่งของ public API โดยทั่วไปเกิดขึ้นในสองกรณีเท่านั้น: ทั้งการกำหนด abstract interface ที่ subclasses ตั้งใจจะ override/implement private method เป็นส่วนหนึ่งของการกำหนด implementation ของ interface, หรือเมธอด low-level สำหรับการใช้งานขั้นสูงที่มี stable interfaces แต่ไม่ถือว่าปลอดภัยสำหรับใช้งาน เพราะผู้ใช้ต้องรับผิดชอบ class/safety invariants เอง (ตัวอย่าง canonical คือเมธอด QuantumCircuit._append)

Python versions ที่รองรับ, minimum supported Rust version (สำหรับ build Qiskit จาก source) และ Python package dependencies ใด ๆ (รวมถึง minimum supported versions ของ dependencies) ที่ Qiskit ใช้ไม่ได้เป็นส่วนหนึ่งของ การรับประกันความเข้ากันได้แบบย้อนหลังและอาจเปลี่ยนแปลงในทุก release เฉพาะ minor หรือ major version releases เท่านั้นที่จะยกระดับ minimum requirements สำหรับการใช้หรือ build Qiskit (รวมถึงการเพิ่ม dependencies ใหม่) แต่ patch fixes อาจรวมการสนับสนุน Python versions ใหม่หรือ dependencies อื่น ๆ โดยปกติ minimum version ของ dependency จะเพิ่มขึ้นเมื่อ dependency versions เก่าไม่ได้รับการสนับสนุนแล้ว หรือ เมื่อไม่สามารถรักษาความเข้ากันได้กับ release ล่าสุดของ dependency และ version เก่า

กลยุทธ์การอัปเกรด

เมื่อ release major version ใหม่ เส้นทางการอัปเกรดที่แนะนำ คือก่อนอื่นอัปเกรดเป็น minor version ล่าสุดบน major version ก่อนหน้า ไม่นานก่อน major version ใหม่ จะมีการเผยแพร่ final minor version final minor version release X.Y+1.0.0 นี้เทียบเท่ากับ X.Y.0 แต่มีคำเตือนและ deprecations สำหรับการเปลี่ยนแปลง API ที่เกิดขึ้น บน major version series ใหม่

ตัวอย่างเช่น ก่อน release 1.0.0 ทันที จะมีการเผยแพร่ release 0.46.0 Release 0.46.0 จะเทียบเท่ากับ release 0.45.0 แต่มี deprecation warnings เพิ่มเติมที่บันทึกการเปลี่ยนแปลง API ที่เกิดขึ้น เป็นส่วนหนึ่งของ release 1.0.0 รูปแบบนี้จะใช้สำหรับ major version releases ในอนาคต

ผู้ใช้ Qiskit ควรอัปเกรดเป็น final minor version นี้ก่อน เพื่อดู deprecation warnings และปรับการใช้งาน Qiskit ก่อนลองใช้ release ที่อาจมีการเปลี่ยนแปลง major version ก่อนหน้า จะได้รับการสนับสนุนอย่างน้อยหกเดือนเพื่อให้เวลาอัปเกรดเพียงพอ รูปแบบทั่วไปในการจัดการนี้คือการ pin maximum version เพื่อ หลีกเลี่ยงการใช้ major release series ถัดไปจนกว่าจะมั่นใจว่าเข้ากันได้ ตัวอย่างเช่น การระบุ qiskit<2 ในไฟล์ requirements เมื่อ Qiskit major version ปัจจุบันคือ 1 ทำให้มั่นใจว่า คุณใช้ Qiskit version ที่ไม่มีการเปลี่ยนแปลง API ที่ทำให้ใช้ไม่ได้

การ cap version ให้น้อยกว่า major version ถัดไป ทำให้มั่นใจว่าคุณเห็น deprecation warnings ก่อน major version release หากไม่มี cap, pip ติดตั้ง version ล่าสุดที่มีอยู่ตามค่าเริ่มต้น

รูปแบบการ serialize QPY เข้ากันได้แบบย้อนหลัง เพื่อให้ Qiskit release ใหม่สามารถโหลดไฟล์ QPY ที่สร้างด้วย Qiskit release เก่าได้เสมอ อย่างไรก็ตาม รูปแบบไม่ได้เข้ากันได้แบบไปข้างหน้า ดังนั้นในหลักการแล้ว ไม่สามารถ โหลดไฟล์ QPY ที่สร้างด้วย Qiskit version ใหม่โดยใช้ release เก่าได้ เพื่ออำนวยความสะดวกในการย้ายผู้ใช้ข้าม major version releases, ฟังก์ชัน qiskit.qpy.dump() จะรองรับ overlapping version อย่างน้อยหนึ่งชุดระหว่าง release X.0.0 และ X-1.Y.0 เสมอ (โดยที่ Y คือ minor version สุดท้ายของ series นั้น) พารามิเตอร์ qiskit.qpy.dump(..., version=...) จะเปิดใช้การบันทึกไฟล์ QPY format ที่โหลดได้จาก major version ทั้งคู่จาก release ที่ใหม่กว่า ดูรายละเอียดเพิ่มเติมใน RFC 0020

Pre-releases

สำหรับ minor และ major version release แต่ละครั้ง Qiskit เผยแพร่ pre-releases ที่ เข้ากันได้กับ PEP440 โดยทั่วไป เหล่านี้คือ release candidates ในรูปแบบ X.Y.0rc1 release rc จะมี API surface ที่ finalized แล้วและใช้สำหรับทดสอบ release ที่วางแผนไว้

โปรดทราบว่าเมื่อเผยแพร่ PEP440 pre-release suffixes (เช่น a, b หรือ pre) จะไม่มีการรับประกันเหมือนกับ rc release และเป็นเพียง preview release เท่านั้น API อาจเปลี่ยนแปลงระหว่าง pre-releases เหล่านี้ และ final release ที่มีหมายเลขเวอร์ชันนั้น ตัวอย่างเช่น 1.0.0pre1 อาจมี final API ที่แตกต่างจาก 1.0.0

Post-releases

หากมีปัญหากับ packaging ของ release อาจมีการออก post-release เพื่อแก้ไข เหล่านี้จะอยู่ในรูปแบบ X.Y.Z.1 โดยที่เลขที่สี่ ระบุว่าเป็น post-release แรกของ release X.Y.Z ตัวอย่างเช่น qiskit-terra (ชื่อ package เดิมของ Qiskit) release 0.25.2 มีปัญหาบางอย่างกับการเผยแพร่ sdist package และมีการเผยแพร่ post-release 0.25.2.1 ที่แก้ไขปัญหานั้น โค้ดเหมือนกันทุกประการ และ 0.25.2.1 แก้ไขเพียงปัญหา packaging ของ release เท่านั้น

วิธีที่ผู้มีส่วนร่วมสามารถทำเครื่องหมาย deprecations

ดู deprecation guide ใน Qiskit SDK repository สำหรับคำแนะนำในการเพิ่ม deprecations ลงในซอร์สโค้ด

Source: IBM Quantum docs — updated 29 ต.ค. 2568
English version on doQumentation — updated 7 พ.ค. 2569
This translation based on the English version of 11 มี.ค. 2569