การใช้ C ++ 11 สำหรับการพัฒนา Game Engine ข้ามแพลตฟอร์ม


18

หมายเหตุ:นี่ไม่ใช่คำถาม 'ให้ความเห็นของคุณ' เกี่ยวกับ C ++ 03 และ C ++ 11

เอ็นจิ้นเกมของเราเขียนด้วย C ++ 03 ออกแบบมาเพื่อรวบรวมบน Windows, OSX และ iOS การสนับสนุน Linux มีการวางแผนสำหรับ (มาก) ในอนาคตอันใกล้ ประสบการณ์ของเรามี จำกัด เมื่อพูดถึงคอนโซลซึ่งเป็นสาเหตุที่ฉันถามคำถามนี้

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

ดังนั้นนักพัฒนาเกมที่มีประสบการณ์ในหลายแพลตฟอร์มและคอนโซลคุณคิดว่าเราควรติดกับ C ++ 03 จนกว่าคอนโซลรุ่นใหม่จะมาถึงและทุกคนส่วนใหญ่เปลี่ยนไปใช้มาตรฐาน C ++ 11 แล้วหรือยัง หรือคอนโซลส่วนใหญ่ที่ใช้ / รองรับคอมไพเลอร์ (VC ++, GCC หรือตัวแปร) ที่รองรับคุณสมบัติ C ++ 11 อยู่แล้ว


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

1
คุณลักษณะใดและเหตุใดจึงมีความสำคัญอย่างยิ่งที่คุณจะต้องพิจารณาใช้มาตรฐานที่ไม่ได้นำไปใช้อย่างสมบูรณ์แม้ในแพลตฟอร์มการพัฒนาที่ได้รับความนิยมสูงสุด
snake5

4
@ snake5: อัตโนมัติแลมบ์ดานามแฝงเทมเพลตการมอบหมาย c-tor คุณสมบัติเหล่านี้ไม่เพียง แต่จะทำให้โค้ดของเราอ่าน / ดูแลได้ง่ายขึ้นเท่านั้น เพียงคำหลักอัตโนมัติเป็นหนึ่งในสิ่งที่ฉันพลาดมากเมื่อฉันเปลี่ยนจาก C ++ 11 เป็น C ++ 03 คุณสมบัติอื่น ๆ เช่นเทมเพลต variadic แม้ว่าจะมีประสิทธิภาพมากและสามารถปรับปรุงโค้ดได้อย่างแน่นอนเราสามารถทำได้โดยไม่ต้องใช้ (และยังไม่ได้ใช้งานโดยคอมไพเลอร์ VC ++)
Samaursa

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

1
@Devil ภายในตัวฉันได้ใช้คุณสมบัติ C ++ 11 บางอย่างใน Android NDK โดยไม่มีปัญหาใด ๆ
notlesh

คำตอบ:


19

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

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

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


4
+1 สำหรับสิ่งนี้ (และส่วนที่เหลือของโพสต์ แต่สิ่งนี้): "พึ่งพา [วัน] ในการปฏิบัติตามข้อตกลงที่ถูกต้องของผู้เขียนคอมไพเลอร์ที่ไม่รู้จักกับมาตรฐานภาษาขอบมีเลือดออกเป็นอันตราย" การทดลองกับของเล่นล่าสุดนั้นสนุกอยู่เสมอไม่ต้องพึ่งพาอะไรมาก
NoobsArePeople2

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

ฉันจะไม่ลงคะแนนนี้ แต่มาตรฐาน C ++ ใหม่มากกว่าน้ำตาลประโยคเช่นคำหลักอัตโนมัติ
vdaras

1
@ TrevorPowell คุณบอกว่าความเสี่ยงที่เขาจะได้รับนั้นก็เพื่อประโยชน์ของคำหลักอัตโนมัติเมื่อมีคุณสมบัติที่สำคัญและเป็นพื้นฐานในมาตรฐาน C ++ ใหม่ บางคนเช่นการอ้างอิงค่าจะต้องถูกนำมาพิจารณาที่สำคัญเมื่อคิดเกี่ยวกับความเสี่ยง
vdaras

2
@ TrevorPowell นั่นเป็นเหตุผลที่ฉันพูดว่าโพสต์นั้นไม่คุ้มค่ากับการลดลงแม้จะมีข้อโต้แย้งใด ๆ ที่ฉันมีเกี่ยวกับเรื่องนี้ ฉันเชื่อว่านี่เป็นโพสต์ที่ดีฉันแค่ต้องการชี้แจงว่ามาตรฐาน C ++ ใหม่มีคุณสมบัติที่สำคัญมากและการพิจารณาใช้มันไม่ได้เกี่ยวกับสิ่งเล็กน้อยอย่างอัตโนมัติ
vdaras

6

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

แต่นั่นหมายถึงเวลาในการทำงานกับเกมของคุณน้อยลง

นอกจากนี้ยังมีศักยภาพสำหรับคุณสมบัติพิเศษบางอย่างเช่นการสะท้อนกลับ คุณสามารถสร้างคลาสและสร้างรายการคุณสมบัติทั้งหมดโดยอัตโนมัติเพื่อตรวจสอบ ณ รันไทม์ อาจเป็นประโยชน์อย่างมากสำหรับการเขียนสคริปต์ผลิตเครื่องมือแก้ไขเกมเป็นต้น แก้ไข: ตรวจสอบclreflect

http://cppnow.org/session/refactoring-c-with-clang/

http://www.youtube.com/watch?v=mVbDzTM21BQ

http://clang.llvm.org/docs/Tooling.html

http://clang.llvm.org/docs/RAVFrontendAction.html


น่าสนใจอย่างมาก คุณเคยลองด้วยตัวเองเพื่อจุดประสงค์นี้ (หรือคล้ายกัน)?
Jonas Byström

ยังไม่ตัดสินใจที่จะรอจนกว่ามันจะพัฒนาขึ้นเล็กน้อย แต่ครั้งสุดท้ายที่ฉันดูมันจริงๆมันเป็นเพียงใน svn
เดวิดซี. บิชอป

น่าสนใจมาก (+1)
Samaursa

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