เหตุใดนักพัฒนาเกม C ++ จึงไม่ใช้ห้องสมุดเพิ่ม [ปิด]


81

ดังนั้นหากคุณใช้เวลาในการดู / ตอบคำถามมากกว่าในStack Overflowภายใต้แท็ก C ++ คุณจะสังเกตเห็นได้อย่างรวดเร็วว่าทุกคนใช้ห้องสมุดเพิ่ม บางคนอาจบอกว่าถ้าคุณไม่ได้ใช้งานคุณไม่ได้เขียน C ++ ของจริง (ฉันไม่เห็นด้วย แต่นั่นไม่ใช่ประเด็น)

แต่มีอุตสาหกรรมเกมซึ่งเป็นที่รู้จักกันดีในการใช้ C ++ และไม่ใช้การเพิ่ม ฉันอดไม่ได้ที่จะสงสัยว่าทำไม ฉันไม่สนใจที่จะใช้การเพิ่มพลังเพราะฉันเขียนเกม (ตอนนี้) เป็นงานอดิเรกและส่วนหนึ่งของงานอดิเรกนั้นก็คือการนำสิ่งที่ฉันต้องการเมื่อฉันสามารถและใช้ห้องสมุดที่ไม่ได้วางจำหน่ายตอนที่ฉันทำไม่ได้ แต่นั่นเป็นเพียงฉัน

ทำไมโดยทั่วไปนักพัฒนาเกมไม่ใช้ไลบรารีเพิ่มหรือไม่ มันเกี่ยวกับประสิทธิภาพหรือหน่วยความจำหรือไม่? รูปแบบ? อื่น ๆ อีก?

ฉันกำลังจะถามคำถามนี้เกี่ยวกับการล้นสแต็ก แต่ฉันคิดว่าคำถามจะถามดีกว่าที่นี่

แก้ไข:

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

อนุญาตให้ฉันแก้ไขคำถามของฉันถามด้วยถ้าคุณใช้การเพิ่มทำไมคุณถึงเลือกที่จะใช้


3
เกี่ยวข้อง: gamedev.stackexchange.com/questions/268/…
Tetrad

2
มันจะยุติธรรมหรือไม่ที่จะบอกว่า "Boost" นั้นใหญ่เกินกว่าจะเป็นชุดของห้องสมุดที่จะทำให้ "ใช้ boost" หรือ "ไม่ใช้ Boost" เป็นตัวเลือกที่เหมาะสม? แม้แต่ Google ก็ จำกัด ให้ "เพิ่ม" ส่วนย่อยในมาตรฐานของพวกเขาฉันเชื่อว่า
Dan Olson

ไบนารีเกมมีขนาดใหญ่พออยู่แล้ว
กองพัน

3
@ Tetrad STL ไม่เพิ่มและ STL ถูกใช้อย่างมากใน gamedev
rootlocus

7
ฉันไม่เห็นว่าคำถามนี้คือ "ไม่สร้างสรรค์" สิ่งนี้จะต้องอธิบาย
v.oddou

คำตอบ:


42

นักพัฒนาบางคนทำนักพัฒนาบางคนไม่ (ในเกมและที่อื่น ๆ ) ขึ้นอยู่กับความต้องการ / ข้อกำหนดของนักพัฒนาเหล่านั้นและเทคโนโลยีที่มีอยู่ที่พวกเขาต้องใช้ประโยชน์

ห้องสมุดมาตรฐาน C ++ 'มักจะได้รับการรักษาเดียวกันและผู้คนมักจะสงสัยในสิ่งเดียวกันที่คุณกำลังสงสัยเกี่ยวกับมันมากเกินไป เหตุผลส่วนใหญ่คล้ายกันตัวอย่างเช่น:

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

  • นักพัฒนาอาจทำงานบนแพลตฟอร์มที่รองรับคอมไพเลอร์สำหรับเทคนิค C ++ ขั้นสูงซึ่งใช้ประโยชน์จาก Boost ไม่ได้รับการสนับสนุนอย่างดีเช่นนั้นรหัส Boost ไม่คอมไพล์เลยหรือทำงานได้ไม่ดีนัก สิ่งนี้นำไปใช้กับไลบรารีมาตรฐานเช่นกันแม้ว่าจะน้อยกว่านี้ในทุกวันนี้

  • Boost และไลบรารี่มาตรฐานของภาษานั้นมีวัตถุประสงค์ทั่วไปและในขณะที่มันดีและดีสำหรับแอพพลิเคชั่นส่วนใหญ่บางครั้งนักพัฒนามีความต้องการเฉพาะที่สามารถแก้ไขได้ดีกว่าโดยคอนเทนเนอร์พิเศษ

ฉันคิดว่าข้างต้นเป็นสองเหตุผลที่สมเหตุสมผลแม้ว่าจะมีเหตุผลอื่น ๆ คุณต้องระวังด้วยเหตุผลหลายประการในการหลีกเลี่ยง Boost, ไลบรารีมาตรฐานหรืออะไรก็ตามที่ทำให้เกิดอาการ "ไม่ได้คิดค้นขึ้นที่นี่" ซึ่งอาจเป็นเครื่องบ่งชี้ได้ว่าเหตุผลนั้นไม่ได้มีพื้นฐานมาจากความเป็นจริงในทางปฏิบัติ

ยังจำได้ว่าความต้องการของสตูดิโอขนาดใหญ่มักแตกต่างจากความต้องการของนักพัฒนารายบุคคล ตัวอย่างเช่นผู้พัฒนาแต่ละรายอาจมีรหัสดั้งเดิมน้อยกว่าที่ลอยอยู่รอบ ๆ เพื่อรักษาและบางทีการย้ายจาก Boost หรือการทำงานของไลบรารี่มาตรฐานรุ่นโฮมเมดจะไม่เป็นเรื่องใหญ่และจะช่วยให้นักพัฒนาไม่ต้องบำรุงรักษา รหัสนั้นครอบคลุมอย่างกว้างขวางในอนาคต - ทำให้การใช้สัญลักษณ์แสดงหัวข้อย่อยแรกของฉันไม่ถูกต้อง

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


2
อีกจุดหนึ่ง - บาง บริษัท ไม่ใช้ Boost เนื่องจากเป็นผลกระทบทางลบต่อความเร็วในการรวบรวมในสภาพแวดล้อมการพัฒนาที่รวดเร็ว
สตีเวน

27

แก้ไขกลับมาที่คำถามนี้หลังจากไม่กี่ปีที่
มีการใช้งานบูสเตอร์เพิ่มมากขึ้นเรื่อย ๆ ฉันคิดว่าฉันจะอัปเดตคำถามนี้เพื่อให้เป็นกรณีที่ชัดเจนว่าทำไมคุณควรใช้บูสเตอร์เมื่อรายละเอียดของผลิตภัณฑ์ตรงกับการทำงานที่คุณต้องการ สิ่งนี้จะโน้มน้าวแม้แต่คนที่ไม่พูด ดาวน์โหลด openSSL ลองสร้างไคลเอนต์และแอพพลิเคชันเซิร์ฟเวอร์ด้วย ตอนนี้ลองใช้งานได้กับทุกแพลตฟอร์ม จากนั้นดาวน์โหลดและใช้ boost :: asio :: ssl เพื่อสร้างแอปพลิเคชันเดียวกัน หากคุณไม่มั่นใจว่าการเพิ่มประสิทธิภาพนั้นเป็นสถานที่ที่เหมาะสมในการมองหาโค้ดที่สะอาดและดีที่สุดที่ได้รับการตรวจสอบและดีเยี่ยมซึ่งเป็นแบบข้ามแพลตฟอร์มการออกกำลังกายอย่างง่ายนี้จะแปลงคุณ

Tl; dr เวอร์ชั่น:

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

เวอร์ชั่น Winded ที่ยาวมาก:

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

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

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

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

ฉันเข้าสู่การแก้ไขด้วยการเพิ่มรอบ ๆ เวอร์ชัน 1.45 และตอนนี้ก็เป็นรุ่น 1.52 / 1.53 เท่านั้นที่ฉันรู้สึกสบายใจพอที่จะใช้ในการผลิต มีหลายสิ่งที่จะทำให้คุ้นเคยและจดจำได้แม้กระทั่งสิ่งง่าย ๆ เช่นวิธีที่คุณกำหนดค่าการเพิ่มและการจดจำการกำหนดค่านั้นเพราะวิธีการสร้างห้องสมุดและฟังก์ชั่นอาจแตกต่างกันไปตามความต้องการของคุณในเวลารวบรวม เป็น

อย่างไรก็ตาม , ทำให้ไม่มีข้อผิดพลาดเมื่อคุณสามารถควงเพิ่มคุณได้รับอาวุธที่มีประสิทธิภาพสำหรับการสร้างอย่างรวดเร็วโปรแกรมของแข็งข้ามแพลตฟอร์ม เพียงแค่ใช้เวลาboost::asioตัวอย่างเช่น คุณสามารถเขียนเว็บเซิร์ฟเวอร์แบบอะซิงโครนัสที่ทรงพลังทรงพลังสามารถปรับขนาดได้และโยกได้เพียงสองร้อยบรรทัด ฉันเขียนไคลเอนต์เซิร์ฟเวอร์พร็อกซี่และอื่น ๆ หลายครั้งในช่วงหลายปีที่ผ่านมาโดยมีโค้ดเพียงไม่กี่ร้อยบรรทัดที่ยังไม่ทำให้ฉันล้มเหลว

ตามที่คนอื่น ๆ ชี้ให้เห็น บริษัท ขนาดใหญ่มักจะติดอยู่กับสิ่งที่เป็นมรดกหรือชอบที่จะม้วนของตัวเองซึ่งฉันเข้าใจอย่างสมบูรณ์ นอกจากนี้ยังมีสิ่งที่โง่จริง ๆ ที่ฉันเคยได้ยินและพบว่าผู้นำ dev และหรือผู้จัดการโครงการห้ามใช้การส่งเสริมเพราะมัน "ใหญ่เกินไป" ฉันเดาว่าพวกเขาเชื่อว่าเพิ่มเป็น 1 ห้องสมุดเดียวหรือพวกเขาไม่เคยได้ยินBCP

สำหรับเหตุผลที่ฉันเลือกที่จะใช้เพิ่ม

ฉันจะบอกว่าฉันใช้เพราะเพราะคุณบ่งบอกถึงคำถามของคุณมันคือ "ห้องสมุด C ++" Boost ถูกมองในโลก C ++ ในฐานะที่เป็นมีดทหารของสิ่งต่าง ๆ ที่ในที่สุดคุณจะต้องใช้ ดังนั้นแนวคิดก็คือหากมีความต้องการควรมีรุ่นที่มีประสิทธิภาพสูงและมีรุ่นพกพาเพิ่มขึ้น บริษัท บิ๊กนำไปสู่การเพิ่ม , คนมีการศึกษามากกับการดำเนินการต่อที่น่าประทับใจมีส่วนร่วมและรักษามันไว้และเมื่อเป็นมาตรฐานใหม่ของ C ++ จะถูกพัฒนาคนมักจะมองไปที่การเพิ่มเพื่อดูว่าส่วนที่มันควรจะเป็นมาตรฐาน ISO มาตรฐาน C ++

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


ถูกต้องมากสำหรับเอกสาร ตัวอย่างเช่น Boost.asio doc จะอธิบายวิธีการเขียนเซิร์ฟเวอร์ http ในสองสามบรรทัดที่น่าประหลาดใจหากเกมของคุณใช้ http (หรือโปรโตคอล vanilla TCP อื่น ๆ สำหรับเรื่องนั้น) แต่มันจะกลายเป็นเรื่องยากมากขึ้นหากคุณต้องการใช้ โปรโตคอลที่กำหนดเองหรือไลบรารีเครือข่ายที่เป็นกรรมสิทธิ์ ฉันใช้เวลา 20 นาทีในการทำความเข้าใจวิธีสร้างเซิร์ฟเวอร์ websocket โดยใช้ boost.asio แต่สัปดาห์เพื่อทำความเข้าใจวิธีใช้ ENet ( enet.bespin.org ) ผ่านทาง boost.asio io_service ที่กำหนดเอง
ClosetGeek

21

เราใช้ Boost กลับไปที่สถานที่ทำงานเก่าของเรา เหตุผลหลักในการหลีกเลี่ยงและ จำกัด การใช้งานส่วนใหญ่คือ:

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

1
เพิ่ม :: shared_ptr? งั้นเหรอ
Tili

6
ถ้าฉันจำได้อย่างถูกต้องมันจะจัดสรรจำนวนการอ้างอิงบนฮีปบางแห่ง นี่เป็นสิ่งที่ไม่ดีสำหรับการเชื่อมโยงแคชระหว่างการใช้งานและยังหมายถึงการจัดสรรและการจัดสรรเวลาสองเท่าในตอนเริ่มต้นและสิ้นสุด
Kylotan

10
(ควรเพิ่มว่าการใช้ make_shared นั้นสามารถบรรเทาปัญหาได้)
Kylotan

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

16

สิ่งเดียวกันคือ (คืออะไร) ที่ถูกกล่าวถึงสำหรับ "มาตรฐานที่มากกว่า" STL บทความนี้พูดถึง EASTL การเขียน (ส่วนของ) STL โดย Electronic Arts เพื่อตอบสนองความต้องการของการพัฒนาเกมซึ่งแตกต่างจากการพัฒนาแอพพลิเคชั่น "ทั่วไปมากกว่า"

ดังนั้นบางทีบางคนเป็นอีกครั้งที่การเขียน (ส่วนของ) เพิ่มเพื่อรองรับความต้องการของพวกเขาในการพัฒนาเกม!


+1 สำหรับบทความ ฉันคิดว่านี่ตอบคำถามได้อย่างสวยงาม
egarcia

9
ประสบการณ์ของฉันคือยิ่งโค้ดเบสของคุณพกพาได้มากเท่าไหร่คุณก็ยิ่งเขียนส่วนประกอบ "มาตรฐาน" ใหม่เช่น STL
Jari Komppa

6

ใครบอกว่าพวกเขาไม่ใช้การกระตุ้น ฉันรู้จัก C ++ หนึ่งหรือสองตัวที่ใช้บูสต์ ฉันไม่เคยทำงานกับพวกเขาโดยตรง แต่นั่นเป็นเพราะประสบการณ์ของฉันส่วนใหญ่อยู่ใน Unreal

สำหรับเหตุผลที่ฉันพบที่ไม่ได้ใช้การเพิ่มและสิ่งเหล่านี้เป็นอัตนัย:

  • เราชอบกลิ้งโครงสร้างข้อมูลของเราเองเฉพาะกับแพลตฟอร์มที่เรากำลังปรับใช้
  • เราชอบ จำกัด จำนวนของรหัสที่ไม่ได้รับการพัฒนาภายในที่เราต้องใช้ในโครงการของเราโดยเฉพาะอย่างยิ่งเมื่อรหัสภายนอกนั้นพึ่งพาไลบรารีที่พัฒนาจากภายนอกอื่น ๆ

โดยทั่วไปแล้วจะเดือดลงไปที่: วิธีแก้ปัญหาทั่วไปไม่ใช่ "แบบที่ถูกต้อง" เสมอไป

ฉันแน่ใจว่าคนที่ทำงานกับห้องสมุดจริงสามารถแสดงความคิดเห็นได้ดีขึ้น


จริงแก้ไขคำถามของฉันเพื่อบัญชีนี้
James

5

ฉันออกไปเที่ยวที่ StackOverflow และไม่ใช้การเพิ่ม ฉันจะเพิ่มเหตุผลของฉันเพราะยังไม่ได้กล่าวถึง

Boost มีแนวคิดที่ยอดเยี่ยมมากมายจริงๆ ฉันชอบที่จะดูสิ่งที่พวกเขาทำและลองสิ่งใหม่ ๆ และความคิด มันยอดเยี่ยมเพราะมันเป็นแหล่งเพาะพันธุ์สำหรับการปรับปรุง C ++ มากมาย

แต่การเพิ่มพลังเป็นสัตว์ร้ายที่ไม่แน่นอนด้วยเหตุผลหลายประการ เหตุผลหนึ่งก็คือพวกเขาต้องการ (ต้องการ) เพื่อให้เข้ากันได้กับคอมไพเลอร์แทบทุกชนิด เป็นผลให้พวกเขาจำเป็นต้องใช้ลูกเล่นมากมายเช่น MPL เพื่อดึงออกมา ตัวอย่างเช่น (นานมาแล้ว) ฉันต้องการใช้ shared_ptr ของพวกเขาเพื่อให้ทำงานได้หมายความว่าฉันต้องการแหล่งและไลบรารีของสิ่งที่รู้สึกเหมือน 90% ของการเพิ่ม ฉันสิ้นสุดการเขียนของตัวเอง; 50 บรรทัดของโค้ดที่อ่านได้ (ความต้องการของฉันที่เข้มงวดเช่นไม่มีความอ่อนแอหรือความปลอดภัย thread_ptr)

บ่อยครั้งที่คุณต้องการชุดบูสต์ขนาดเล็กมาก ๆ แต่การบูรณาการบูสต์ทั้งหมดนั้นไม่คุ้มกับความยุ่งยาก

แก้ไข :

เพียงเพื่อให้มีความชัดเจนเนื่องจากดูเหมือนว่าจะไม่ได้มาอย่างชัดเจน (เช่น downvote) ฉันใช้อย่าใช้ห้องสมุดบุคคลที่สาม แต่ในกรณีส่วนใหญ่ทุกอย่างเท่าเทียมกันรวมห้องสมุดของบุคคลที่สามหรือเพิ่มห้องสมุดบุคคลที่สามอื่น ๆ ได้เร็วขึ้นและสะอาดขึ้น ส่วนที่เหลือจะทำในการออกกำลังกายนิ้ว "2h" ฉันจะดูยากมากในการสร้างหรือซื้อคำถาม


1
มีเครื่องมืออย่าง BCP, y'know
Bartek Banachewicz

2
คุณหมายถึงว่าคุณไม่จำเป็นต้องรักษารหัสของคุณเองหรือ? นอกจากนี้ฉันหวังว่าฉันจะสามารถเขียนส่วนเสริมทั้งหมดที่ฉันใช้ใน 2 ชั่วโมง (ซึ่งเกี่ยวข้องกับการทดสอบพวกเขาในเป้าหมายการสร้างทั้งหมดที่ฉันจะใช้และการทดสอบการเขียน) คุณต้องเป็น coder ที่รวดเร็วจริงๆ Oh, และยัง "ที่สุดของบิตประโยชน์" สวยมากเท่ากับ "ฉันไม่สามารถ c ++" ที่นี่เพราะยังขาดมาตรฐานมาก
Bartek Banachewicz

2
สำหรับการเริ่มคุณสมบัติไม่กี่อย่างที่ได้รับจากการเร่งความเร็วฉันพบที่อื่นในแพ็คเกจขนาดเล็กที่กำหนดไว้อย่างดีเช่น sigc ++ ในหลายกรณีมีความสง่างามและ / หรือมีประสิทธิภาพมากกว่า สิ่งที่ฉันได้มาเพื่อเพิ่มความสามารถส่วนใหญ่ที่มีคุณสมบัติเช่นเธรดตัวชี้อัจฉริยะและนิพจน์ทั่วไปสิ่งต่าง ๆ ที่ทำให้เป็นมาตรฐาน ในช่วงหลายปีที่ผ่านมาฉันได้รับชุดห้องสมุดบุคคลที่สามและรหัสของฉันเอง "ฉันสามารถ C ++" ได้นานกว่า 15 ปีแล้วขอบคุณมาก
rioki

3
@ SeanFarrell คุณไม่ควรวางตัว คุณบอกว่าคุณทำ C ++ มา 15 ปีแล้วจากคำวิจารณ์เหน็บแนมของ Bartek ดูเหมือนว่าคุณไม่เข้าใจว่า Bartek หมายถึงอะไรเมื่อเขาพูดว่า "บำรุงรักษา" ร่วมกับ "แพ็คเกจ" การบำรุงรักษาไม่ได้หมายถึงการแก้ไข เพียงแค่อัปเดตเป็นรีลีสใหม่หรือจัดเก็บเวอร์ชันสำหรับเป้าหมายหลาย ๆ อันซึ่งก็คือความหมายนี้ เพียงแค่ FYI

3
Sigh Boost ยังทำงานนอกกรอบได้ แต่คุณยังคงกล่าวถึงการบำรุงรักษา ฉันไม่เห็นเหตุผลของคุณที่นี่
Bartek Banachewicz

4

ในกรณีของเรา (ไม่ใช่เกม) เรามีเหตุผลที่ดีที่ไม่ใช้การเพิ่ม (หรือ std): เรามีรหัสจำนวนมากที่มีอายุนับสิบปี ตามรุ่นพี่ std และ boost ไม่สมบูรณ์เต็มไปด้วยบั๊กหรือช้าเกินไปสำหรับสิ่งที่มีประสิทธิภาพสูงที่เราต้องการ ดังนั้นคลาสพื้นฐานบางส่วนถูกนำไปใช้งานโดยใช้แนวคิดเดียวกัน (เช่นตัววนซ้ำ) และมักปรับให้เหมาะสมสำหรับอัลกอริทึมของเรา ทุกวันนี้ห้องสมุดทั้งสาม (เรามาตรฐานและเพิ่ม) มีความคล้ายคลึงกันมาก

แต่เราต้องการย้ายรหัสของเราทั้งหมดหรือไม่ ไม่ได้จริงๆ ฉันถือว่า บริษัท อื่น ๆ อีกหลายแห่งเผชิญกับภาวะที่กลืนไม่เข้าคายไม่ออกเดียวกัน อาจเขียนรหัสที่ผ่านการทดสอบและใช้งานได้จำนวนมากหรือไม่ใช้ std / boost


5
นี่เป็นเรื่องจริงและสิ่งที่ฉันไม่ได้คิด แต่ฉันสังเกตเห็นว่าผู้คนมากมายที่เริ่มต้นพัฒนาเกมใน C ++ ไม่สนใจที่จะใช้ boost / std บางครั้งฉันรู้สึกว่าเป็นเพราะการส่งเสริมการเรียนรู้เหมือนการเรียนรู้ภาษาใหม่ทั้งหมด
James

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

1

ฉันไม่ได้ใช้บูสต์หรือรหัสวัตถุประสงค์ทั่วไปอื่น ๆ เป็นการส่วนตัวเมื่อสร้างเกมเพราะเกมนั้นไม่ได้มีวัตถุประสงค์ทั่วไป ประเภทของรหัสที่คุณอาจต้องใช้ในการพัฒนาเกมนั้นมักจะเฉพาะเจาะจงกับการพัฒนาเกม แต่ไม่เสมอไป แต่จะเหมือนกับ 98% (ตัวเลขสุ่ม) ของเวลา คุณสามารถแก้ไขรหัสสองสามบิตสุดท้ายจากการเพิ่มหรือ lib อื่น ๆ แต่มันอาจจะดีกว่าที่จะเขียนส่วนเล็ก ๆ เหล่านั้นที่คุณต้องการที่นี่และที่นั่น

ในหมายเหตุด้านข้างฉันคิดว่ามันค่อนข้างสนุกที่จะเขียนโค้ดของคุณเองใน c ++ ซึ่งเป็นสาเหตุที่ฉันไม่เคยใช้บูสต์หรืออะไรทำนองนั้น


3
มันสนุก แต่การเพิ่มประสิทธิภาพนั้นมีไว้สำหรับผู้ที่ต้องการทำ sh * t แทนที่จะสร้างล้อ
Bartek Banachewicz

3
นี่คือความคิดเห็นของฉัน แต่มันผิดที่จะบอกว่า "เกมพิเศษ" แท้จริงแล้วอุตสาหกรรมอัตโนมัติแบบเรียลไทม์ก็มีความพิเศษเช่นกัน ฉันทำทั้งสองอย่างและสามารถยืนยันได้ว่าบิตที่การเพิ่มประสิทธิภาพจะมีความชัดเจนคล้ายกันมาก การพูดว่าพวกเขาแตกต่างกันคือไม่รู้เพราะบนขอบพวกเขาแตกต่างกันมาก แต่การใช้ภาษาแกนกลางเหมือนกัน ฟังก์ชั่นการจัดเรียงนั้นโดยทั่วไปไม่ว่าคุณจะเรียงลำดับอะไร (จากนั้นอีกครั้งเพียงแค่ว่าคุณสามารถไม่ได้หมายความว่าคุณจะอยากให้ดูคำตอบของฉัน.)
rioki

2
คุณสามารถเพิ่มเครือข่ายทั้งหมด / เลเยอร์เลเยอร์ทั้งหมดในเกมของคุณโดยใช้ boost :: asio และคิดค้นโปรโตคอลการสื่อสารของคุณเอง นั่นเป็นเหตุผลที่ถูกต้อง 100% ในการใช้บูสต์เป็นเกมที่คุณเคยเขียนที่ต้องการฟังก์ชั่นที่เกี่ยวข้องกับเครือข่าย "การกลิ้งของคุณเอง" ได้ดีเมื่อคุณใหม่และคุณต้องเรียนรู้ ไม่มีอะไรผิดปกติกับที่ แต่ในตอนท้ายของวันฉันจะไม่เสียเวลาพยายามเขียนข้ามแพลตฟอร์มการสื่อสารแบบอะซิงโครนัสของตัวเองเมื่อมันทำไปแล้ว

2
@HaywireSpark ไม่จำเป็นต้องเริ่มดูถูกผู้คน ฉันอ่านโพสต์ของคุณและยังไม่เห็นด้วยกับคุณ แม้ว่าคุณจะไปกับ "มักจะเฉพาะเจาะจง" ที่ไม่เกี่ยวข้องทั้งหมด เกือบทุกอย่างในบูสต์ได้รับการออกแบบให้พกพาได้และไม่แน่นอนมากที่สุด boost :: asio เป็นการนำไปปฏิบัติที่ธรรมดามากและไม่ได้มุ่งเน้นไปที่วิธีการสื่อสารเครือข่ายใด ๆ ฉันไม่สามารถจินตนาการถึงสถานการณ์ใด ๆ ที่ฉันต้องพูดว่า "gee, boost :: asio ไม่พอดีกับโมเดลเครือข่ายเลเยอร์ของฉัน แค่พูด.

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

0

มรดกในห้องสมุดบ้านไม่ใช่ปัจจัย ... เหตุผลหลักที่ทุกคนไม่ควรใช้ boost u ห้องสมุดอเนกประสงค์อื่น ๆ เพราะพวกเขาไม่ได้เพิ่มประสิทธิภาพความเร็วและหน่วยความจำดังนั้นฉันต้องพูดถึงว่า Cryengine ใช้ STL แต่พวกเขารวบรวม เป็นเวอร์ชันโอเพ่นซอร์สที่เรียกว่า STLPort ดังนั้นอย่ากลัวที่จะใช้ STL เพียงแค่ใช้ตัวจัดสรรแบบกำหนดเองของคุณและคุณก็ใช้ได้ อย่าใช้ Boost tho


5
-1: สำหรับความเชื่อของคุณว่า "Boost" คือ "ไม่ได้เพิ่มประสิทธิภาพความเร็วและหน่วยความจำ" เมื่อมีไลบรารี Boost หลายสิบตัวอักษรทั้งหมดนี้มีระดับความเร็วและประสิทธิภาพหน่วยความจำที่แตกต่างกัน
Nicol Bolas

2
... นั่นคือเหตุผลที่นักพัฒนาเกมจำนวนมากหลีกเลี่ยงการเพิ่มและแม้แต่เล่น STL ของตัวเองพร้อมกับความจริงที่ว่าเทมเพลตการใช้งานที่หนักหน่วงจะรวบรวมเวลาผ่านหลังคา โดยเฉพาะอย่างยิ่งโปรดจำไว้ว่า debug สร้างบน MSVC ซึ่งคุณต้องการจำนวนขั้นต่ำที่แน่นอนของสิ่งที่เป็นนามธรรมและสิ่งล้อมรอบและสิ่งที่นิยมทั่วไปที่คุณสามารถหลีกเลี่ยงได้ซึ่งทั้งหมดนี้เป็นสิ่งที่ตรงกันข้ามกับ Boost ปัญหาไม่ได้เป็นอัลกอริทึม แต่เพียงแค่ Boost ไม่เคยมีความหมายสำหรับความเร็วของโลหะส่วนสิบ ไม่มีใครนอกจากนักพัฒนาเกมจะต้องการแลกเปลี่ยนที่ต้องการ
Sean Middleditch

2
@seanmiddleditch: จุดของฉันคือมีหลายไลบรารีใน Boost บางอันเร็วกว่าและมีประสิทธิภาพมากกว่าหน่วยความจำที่คุณสามารถเขียนโค้ดเพื่อทำงานเดียวกันและบางอันก็ไม่ได้ หากต้องการลบล้างทั้งชุดของไลบรารีสำหรับสิ่งนี้ก็เป็นการเพิกเฉย
Nicol Bolas

2
มีผู้พัฒนาเกมไม่มากนักที่สามารถเขียนโปรแกรมแยกวิเคราะห์ที่เร็วกว่า Boost.Spirit ในขณะที่มีตัวเลือกที่ดีกว่า (ใช้งานง่ายกว่า) สำหรับการแยกภาษาที่สมบูรณ์วิญญาณจะเร็วมากในการแยกสตริงที่มีโครงสร้างที่ดีแม้เพียงแค่แปลงสตริงเป็นชนิดข้อมูล ห้องสมุด Boost.Xpressive นั้นรวดเร็วมากสำหรับ regex โปรดทราบว่าผู้คนจำนวนมากที่ทำงานกับ Boost เป็นคนที่ทำงานในคณะกรรมการมาตรฐาน C ++ และพวกเขารู้วิธีที่จะได้รับประสิทธิภาพที่ดีที่สุดจาก C ++ ในแพลตฟอร์มต่างๆ
เจอราลด์

5
พวกเขามักจะใช้เทมเพลตการเขียนโปรแกรมในวิธีที่ช่วยให้งานส่วนใหญ่ทำได้ในเวลาคอมไพล์แทนที่จะเป็นแบบรันไทม์ซึ่งจะเอาชนะความตกต่ำของการปรับแต่งรันไทม์ระดับต่ำที่ผู้พัฒนาเกมภูมิใจ . ฉันเคยเห็นประสิทธิภาพเพิ่มขึ้นมากกว่า 50 เท่าเมื่อแปลงงานบางอย่างจากไลบรารี C ประสิทธิภาพสูงทั่วไปให้ใช้ Boost เทียบเท่า
เจอราลด์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.