ผู้จัดการแพ็คเกจ Linux จะจัดการกับโมดูล C ++ 20 อย่างไร


12

เราอยู่ในปี 2020 และ C ++ 20 กำลังจะมาพร้อมกับคุณสมบัติโมดูล C ++ ที่รอคอยมานาน แต่หลังจากดูการพูดคุยกับ CppCon ไม่กี่ครั้งฉันพบว่าโมดูล C ++ อยู่ในสถานที่แปลก ๆ โดยเฉพาะอย่างยิ่งสำหรับผู้จัดการแพ็คเกจ Linux (pacman, apt, โผล่ออกมา ฯลฯ )

จากสิ่งที่ฉันได้เรียนรู้โมดูล C ++ คือ

  1. คอมไพเลอร์ขึ้นอยู่กับ
    • คุณไม่สามารถใช้โมดูลที่สร้างโดย GCC ใน Clang
    • โมดูล GCC 9.1 จะไม่ทำงานบน GCC 9.2
  2. คุณสามารถมีโมดูลเดียวกันหลายรุ่น
    • ตราบใดที่ยังไม่ถูกส่งออกไปยังขอบเขตเดียวกัน
  3. คุณต้องสร้างโมดูลขึ้นใหม่หากการพึ่งพาของมันอัพเดต

ปัญหาของฉันคือในการรวบรวม distros คอมไพเลอร์ทั้งหมดได้รับการปรับปรุงตลอดเวลาและผู้ใช้อาจมีการสร้างคอมไพเลอร์ของตัวเอง ในปัจจุบันสามารถอัพเดตคอมไพเลอร์หรืออัพเดตlibstdc++ได้ แต่ด้วยโมดูลดูเหมือนว่าจะแนะนำให้libstdc++มีการปรับปรุงเมื่อคอมไพเลอร์ปรับปรุง

ตัวจัดการแพ็กเกจจะจัดการกับการอัพเดตอย่างไรเช่น STL เมื่อคอมไพเลอร์อัพเดต ฉันไม่คิดว่าการสร้างโมดูล STL ทุกรุ่นสำหรับคอมไพเลอร์ทุกเวอร์ชั่นเป็นไปได้ หรือผู้ใช้ไม่ต้องสร้างโมดูล STL ของตนเองเป็นความคิดที่ดี


1
" คุณไม่สามารถใช้โมดูลที่สร้างโดย GCC ใน Clang " คุณไม่สามารถใช้ผลลัพธ์ที่รวบรวมได้ของโมดูลที่สร้างโดย GCC ใน Clang
Nicol Bolas

1
ฉันจับปัญหาไม่ได้ เป็นไปได้ที่จะกระจายไฟล์โมดูลที่คอมไพล์แล้ว แต่ไม่จำเป็นต้องทำ ผู้ใช้ทุกคนสามารถรวบรวมได้ครั้งเดียวสำหรับทุกคอมไพเลอร์ / รุ่นและทั้งหมดเป็นเรื่องปกติ หากแพ็กเกจ distro ส่งไฟล์ที่คอมไพล์แล้วนั้นจะบันทึกเฉพาะคอมไพล์เดียวที่เราทำในทุกคอมไพล์ในปัจจุบัน ประโยชน์ที่จะส่งมอบโมดูลที่คอมไพล์แล้วอยู่ที่ไหน การดาวน์โหลด / ติดตั้งอาจใช้เวลานานขึ้นในการรวบรวมหนึ่งครั้ง
Klaus

คุณคิดว่า Anawer แบบไหนที่ไม่เป็นการเก็งกำไรที่บริสุทธิ์?
n คำสรรพนาม 'm

@ Klaus แน่นอนว่าไม่มีประโยชน์ แต่แอพพลิเคชั่นส่วนใหญ่จะแบ่งออกเป็น 2 ส่วน อินเตอร์เฟสและ core lib เพื่อให้ผู้คนสามารถโต้ตอบกับฟังก์ชั่นหลักได้โดยตรง ยกตัวอย่างเช่น yosys มันถูกแยกออกเป็น libyosys และ yosys หาก libyosys ตัดสินใจที่จะใช้โมดูลสำหรับการสร้างที่เร็วขึ้น libyosys จะต้องสร้างโดยผู้ใช้แต่ละคน เปลี่ยนผู้จัดการทุกแพ็คเกจให้เป็น AUR หรือโผล่ออกมาอย่างมีประสิทธิภาพ
แมรี่ชาง

@ n.'pronouns'm ฉันหวังว่านักพัฒนาตัวจัดการแพคเกจจะเห็นคำถามและอธิบายว่าพวกเขาแก้ปัญหาอย่างไร
แมรี่ชาง

คำตอบ:


1

สำหรับตอนนี้ (Jan / 10/2020) ระบบโมดูลจะพิจารณาคุณสมบัติภายในโครงการมากกว่าการแทนที่การกระจายส่วนหัว / lib ตามที่คนในชุมชน Clang แนะนำแม้ว่าจะมีข้อเสนอในการสร้างรูปแบบ AST ที่เป็นอิสระของคอมไพเลอร์ แต่ Clang หรือ Gcc และ Microsoft ก็ไม่มีแผนที่จะทำเช่นนี้ ดังนั้นคุณเดา

คุณสามารถมีโมดูลเดียวกันหลายรุ่น

ถูกต้องและจะยังคงอยู่พักหนึ่ง

ในฐานะที่เป็นส่วนหนึ่งของแพลตฟอร์มการจัดการบรรจุภัณฑ์ความละเอียดยังไม่เป็นที่ทราบ แต่เนื่องจากระบบโมดูลเป็นคุณลักษณะภายในโครงการมากกว่ากรณีที่แย่ที่สุดคือวิธี "header / lib" จะยังคงเกิดขึ้น

PS ผมคิดว่า StackOverflow ไม่ได้เป็นสถานที่ที่ดีสำหรับคำถามเช่นนี้หากคุณต้องการคำตอบจริงๆขอให้นี้รายชื่ออีเมล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.