การแข่งขันกับ C ++ สำหรับการเขียนโปรแกรมเกม


21

ฉันสงสัยว่าเพราะเหตุใด C ++ จึงเป็นที่นิยมสำหรับการพัฒนาเกมไม่ใช่ภาษาอื่นแทน ฉันรู้ว่าคุณสามารถสร้างรหัสได้อย่างรวดเร็วด้วย แต่สิ่งที่ทำให้มันเป็นที่นิยม?

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

หากใครบางคนสามารถกรอกฉันในนี้ฉันจะมีความสุขมาก :-)


7
ความเร็วมีเหตุผลเพียงพอสำหรับฉันโดยเฉพาะอย่างยิ่งเนื่องจากการร้องเรียนของทุกคนเกี่ยวกับภาษานั้นไม่สมเหตุสมผลกับฉัน
Benjamin Lindley

เดาด่วน: เกมส่วนใหญ่เขียนขึ้นสำหรับ Windows Microsoft และ C ++ ได้รับการสนับสนุนอย่างมากจาก Microsoft และในที่สุด C ++ ก็เป็นที่ต้องการเนื่องจาก OOP และ metaprogramming

@ Matt Thanks ไม่รู้ว่ามันมีอยู่จริง ฉันสามารถย้ายหัวข้อไปที่นั่นหรือฉันควรลบหัวข้อนี้และสร้างขึ้นใหม่ที่นั่นได้หรือไม่

คำถามนี้ถูกถามหลายครั้งแล้ว
Zan Lynx

1
@Benjamin: จากนั้นฉันก็กล้าที่คุณยังไม่ได้เขียนใน C ++ หรือคุณไม่เคยใช้ภาษาที่แสดงออกเช่น Python (หรือแม้แต่ C # กับ LINQ) อย่างไรก็ตามแม้ว่าด้วยเหตุผลบางอย่างที่คุณต้องการเขียนโค้ด 20 บรรทัดสำหรับภาษาอื่น ๆ ที่สามารถทำได้ใน 1 ไวยากรณ์ที่แย่ มากของ C ++ หมายความว่าโปรแกรมใช้เวลาในการคอมไพล์นานกว่าที่ควรจะเป็นและเครื่องมือ IDE ที่เหมาะสม (การปรับโครงสร้างเป็นต้น) เป็นการยากที่จะสร้าง
BlueRaja - Danny Pflughoeft

คำตอบ:


29

เหตุผลมากมาย:

  • ตัวใหญ่ที่คุณพลาด: มันพกพาสะดวกทำให้พอร์ตเกมเอ็นจิ้นของคุณเป็น iOS, XBOX, PS3 ไม่ว่าจะเป็นอะไรก็ตาม
  • มันเร็วมาก
  • SDK ทั้งหมดสนับสนุนโดยกำเนิด
  • มีห้องสมุดมากมาย
  • ทุกคนที่เขียนเกมรู้เรื่องนี้ดังนั้นจึงเป็นเรื่องง่ายที่จะจ้างนักพัฒนาเกมที่มีประสบการณ์มาให้ทีมของคุณ
  • มันไม่สำคัญเลยที่จะฝังภาษาสคริปต์เอ็นจินของเกมเช่น Lua

เอาล่ะขอบคุณสำหรับคำตอบของคุณทุกคนคุณได้ครอบคลุมทุกสิ่งที่ฉันต้องการฉันคิดว่า :-)
KasMA1990

14

มีเหตุผลอยู่สองสามข้อที่ฉันอยากพูดถึงเพิ่มเติมจากสิ่งที่ @Graham นำมาใช้

  • Legacy Code - สตูดิโอหลายแห่งมีรหัส C ++ มากมายให้ไปที่ไลบรารี่ของคุณ
  • C ++ เป็นแอสเซมเบลอร์ระดับสูงและเข้าถึงฮาร์ดแวร์ได้โดยตรง (อย่างที่คุณสามารถใช้งานได้บนระบบปฏิบัติการอย่างน้อย) และค่อนข้างเร็ว หากคุณต้องการใน C ++ คุณสามารถวางลงในภาษาแอสเซมบลีโดยตรงสำหรับการควบคุมระดับการเรียนการสอน (ไม่ว่ามันจะฉลาดเสมอมันเป็นไปไม่ได้กับ Java, C #, Python, ฯลฯ )
  • DirectX และ OpenGL สนับสนุนภาษา C ++ โดยพื้นฐานแล้วภาษาอื่น ๆ ส่วนใหญ่มี "การเชื่อมโยง" กับไลบรารีพื้นฐานผ่านเลเยอร์ระดับกลางซึ่งไม่ได้บอกว่ามันไม่เร็วหรือไม่สามารถทำสิ่งเดียวกันหลายอย่างได้ แต่เพิ่มชั้นของซอฟต์แวร์ระหว่าง เกมและฮาร์ดแวร์ของคุณ
  • ตามที่ @Graham กล่าวถึงโปรแกรมเมอร์จำนวนมากรู้ดีดังนั้นจึงเป็นเรื่องง่ายที่จะหานักพัฒนาที่มีประสบการณ์และมันยังพกพาได้ค่อนข้างเมื่อเทียบกับ C # ซึ่งติดอยู่บน. NET Framework (มี Mono) แต่โดยทั่วไปแล้ว .)

คุณหมายถึงคนระดับต่ำใช่ไหม
jhocking

5
C ++ เป็นlow-levelภาษา แต่เป็นแอสhigh-levelเซมเบลอร์ IMO
เนท

3
ฉันไม่เห็นด้วย. C ++ เป็นภาษาระดับสูงที่มีสิ่งอำนวยความสะดวกในการสร้างเพื่อถอยกลับใน C (ซึ่งเป็นภาษาระดับต่ำ)
foo

7
C ++ เป็นภาษาระดับสูงเช่นเดียวกับ C Assembly เป็นระดับต่ำ ตอนนี้ C ++ อยู่ในระดับสูงกว่า C คือเช่นเดียวกับ C # สูงกว่า C ++ และ Ruby / Python สูงกว่า C #
AA Grapsas

4
ทำไมรหัสดั้งเดิมควรเลิกใช้งาน (ไม่คิดค่าเสื่อมราคา) "รหัสมรดก" เพียงหมายความว่าเก่า แต่ก็ไม่ดี

8

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

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


3

ใน C ++ คุณสามารถจัดสรรตัวแปรท้องถิ่นที่หายไปหลังจากฟังก์ชั่นสิ้นสุด โดยปกติสิ่งเหล่านี้จะถูกจัดสรรในสแต็ก

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

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

ความเร็วของ C ++ นั้นมีสาเหตุหลักมาจากการแปลโดยตรงไปยังโค้ดที่รันได้ Java และ C # รวบรวมเป็นรหัสกลางซึ่งจะถูกตีความโดยเครื่องเสมือน โดยทั่วไปแล้วภาษาที่สื่อความหมายจะใช้ภาษาที่แปลช้ากว่าภาษาที่แปลโดยตรง


1
-1 (ถ้าฉันทำได้) - พื้นฐานดั้งเดิมจะถูกจัดสรรบนสแต็กทั้ง Java และ C # และใน C # คุณสามารถสร้างการจัดสรรสแต็structsก ขึ้นไปยังจุดที่มากมากเพิ่มขึ้นเล็กน้อยในความเร็วมุ้งนี้คุณไม่ได้เกือบพอที่จะปรับภาษาหนึ่งในช่วงอื่น ๆ เหตุผลที่แท้จริงระบุไว้โดย @Graham Perks: เป็นสิ่งที่ผู้พัฒนาเกมคาดหวังที่จะรู้ดังนั้นจึงเป็นสิ่งที่ผู้พัฒนาเกมใหม่เรียนรู้และ SDK ใหม่ที่กำหนดเป้าหมาย มีมากมายของภาษา (อดีต. Go) ซึ่งเป็นเพียงเป็นเร็วหรือเร็วขึ้นและไม่ได้มีเกือบเป็นไม่สะดวกที่จะเขียนสำหรับ
BlueRaja - Danny Pflughoeft

C ++ ไม่ค่อยดีในการจัดสรรสแต็ก อันที่จริงมันยากมากที่จะจัดสรรวัตถุที่เข้ากันได้กับ STL ในสแต็ก เช่นเครื่องยนต์ขนาดใหญ่ตัวสุดท้ายที่ฉันทำงานอยู่ใน C และเรามีสตริงที่คุณสามารถเริ่มบนสแต็กในขนาดคงที่ (ปกติคือ 1K) ถ้ามันเติบโตในอดีตว่ามันย้ายไปที่กองอย่างโปร่งใส คุณสามารถทำสิ่งที่คล้ายกันกับ std :: string allocators แบบกำหนดเองใน C ++ แต่โค้ดนั้นยากกว่ามากในการทำให้ถูกต้อง

1
@Joe Wreschnig: C ++ เป็นเลิศในการจัดสรรสแต็คเพียงแค่ทิ้งรายการภาษาแอสเซมบลี อย่างไรก็ตามผู้จำหน่ายคอมไพเลอร์ส่วนใหญ่ไม่ได้จัดสรรหน่วยความจำจำนวนมากให้กับสแต็ก ความเข้าใจร่วมกันของโปรแกรมเมอร์ C ++ ที่มีประสบการณ์คืออ็อบเจ็กต์ขนาดใหญ่ถูกจัดสรรแบบไดนามิก (ฮีป) ไม่ใช่หน่วยเก็บข้อมูลโลคัล (สแต็ก) วัตถุขนาดใหญ่บนสแต็กอาจถูกบุกรุกเข้าไปในฮีปบนบางแพลตฟอร์มเมื่อสแต็กและฮีปเติบโตต่อกัน
โธมัสแมตทิวส์

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

2
ไม่ข้อดีของความเร็วของ C ++ นั้นเกิดจากความสามารถในการใช้ตัวจัดการหน่วยความจำที่คุณเขียนขึ้นเองสำหรับการจัดสรรฮีป ภาษาที่มีสติทุกภาษาจะจัดสรรคนในกองไว้
ไม่เป็นไร

3

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

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

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

ดูเหมือนว่าตอนนี้คอมพิวเตอร์จะเร็วกว่า 1,000 เท่าเมื่อไม่กี่ปีที่แล้วภาษาระดับสูงจะช่วยลดเวลาในการพัฒนา ($) ทำให้ C ล้าสมัย

สิ่งนี้ไม่ได้เกิดขึ้นเพราะผู้ซื้อเกมรู้ว่าฮาร์ดแวร์ดีกว่า 1,000 เท่าและต้องการแลกเปลี่ยนดอลลาร์เพื่อเกมที่มีลักษณะและเสียงดีกว่า 1000x สิ่งนี้จะช่วยลดความหย่อนจากระบบที่ภาษาระดับสูงใช้

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

โปรแกรมเมอร์เกมไม่เพียงทำงานในภาษาระดับต่ำเท่านั้น แต่ยังหลีกเลี่ยงโครงสร้างข้อมูลและอัลกอริธึมระดับสูงด้วย เกมมักจะไม่มีรายการที่เชื่อมโยงและไม่ค่อยมีต้นไม้ มีการเคลื่อนไหวต่อการหลีกเลี่ยงพอยน์เตอร์เมื่อเป็นไปได้ * อัลกอริทึมที่มีเวลามากกว่า O (N) หรือพื้นที่ O (1) มีแนวโน้มที่จะไม่พบการใช้งานที่กว้างขวาง

* ถ้าพอยน์เตอร์ไม่ทำให้แคชหายไปทำไมใช้ 32 บิตเพื่อเก็บมัน? หากตัวชี้ทำให้แคชหายควรกำจัดแคชนั้นเสีย


1
"ไม่มีคุณสมบัติใหม่สำหรับ C ++ ที่ฉันคิดว่าจะปรับปรุงเกม" ฮ่า ๆ? OOP? ชั้นเรียนhumanกับ derivates playerและenemy?
orlp

2
@ nightcracker: พื้นฐานคือการรับมรดกทำงานได้ดีใน C; ความสัมพันธ์ที่คุณอธิบายนั้นถูกนำไปใช้งานได้ดีขึ้นโดยใช้เหตุผลด้านประสิทธิภาพและความสะอาด

3
มีฉันทามติที่เพิ่มขึ้นว่าฟีเจอร์ OOP ของ C ++ ไม่เหมาะสำหรับเกมเนื่องจากฟีเจอร์เหล่านี้ทำงานบนสมมติฐานที่ไม่เป็นมิตรต่อประสิทธิภาพแคช
bmcnett

แม้ว่าคุณจะเชื่อว่า C ++ ไม่มีข้อได้เปรียบเหนือ C คุณก็ควรตระหนักว่าการกลับไปที่ C นั้นไม่ได้ให้ประโยชน์เหนือ C ++ เช่นกัน
Dan Olson

@Dan การกลับไปที่ C นำเสนอข้อได้เปรียบที่ "วิธีปฏิบัติที่ดีที่สุด" อย่างการไม่ใช้เทมเพลตหรือ OOP นั้นถูกบังคับใช้โดยข้อผิดพลาดในการคอมไพล์ในเวลามากกว่าที่จะไล่โปรแกรมเมอร์จูเนียร์ไปด้วยไม้ นอกจากนี้เนื่องจากภาษานั้นเรียบง่ายกว่าการคอมไพเลอร์และการบำรุงรักษาดีบักเกอร์ก็ง่ายกว่าเช่นกัน
bmcnett

3

ภาษาโปรแกรมทุกภาษามีจุดแข็งและจุดอ่อนในหลายปัจจัย ตัวอย่างของปัจจัยเหล่านี้คือ:

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

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

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

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

  • การชุมนุม:นี่คือพลังงานดิบ สิ่งที่คุณเขียนนั้นเป็นสิ่งที่ CPU ทำ แต่ในทุกขั้นตอนคุณจำเป็นต้องรู้ว่าเกิดอะไรขึ้นกับรีจิสเตอร์และผลกระทบของสิ่งนี้และมันไม่เหมือนเอนทิตีในโลกเกม ผู้เขียนโปรแกรมจะต้องสร้างการโต้ตอบทางจิตของสิ่งที่รหัสของพวกเขาทำกับสิ่งที่เกิดขึ้นในเกม นี่อาจเป็นค่าใช้จ่ายค่อนข้างจิต
  • C: ที่นี่เรามีประสิทธิภาพที่ดี แต่เราสามารถยกระดับประสบการณ์ของผู้เชี่ยวชาญในการทำสิ่งต่าง ๆ ให้เป็นมาตรฐาน (เช่นจัดสรรหน่วยความจำทำงานบนสตริงและใช้ฟังก์ชันทางคณิตศาสตร์มาตรฐาน) เราเข้าใกล้ความหมายมากขึ้น แต่ภาษาจะบังคับให้คุณมุ่งเน้นไปที่การนำไปใช้มากขึ้นหรือน้อยลงเพราะคุณสามารถทำงานกับประเภทข้อมูลปกติเท่านั้น ทุกสิ่งทุกอย่างเป็นแบบ char, int หรือ like structs พอยน์เตอร์และอาร์เรย์สามารถจัดเก็บสิ่งต่าง ๆ ไว้ด้วยกัน แต่ยังคงต้องคิดถึงภายใน
  • Java:เรากระโดดข้าม C ++ และไปที่ Java Java ผลักดันให้ห่างไกลจากรายละเอียดการใช้งาน ในความเป็นจริงเวลาส่วนใหญ่คุณไม่สามารถเข้าถึงระดับล่าง Java สรุปรายละเอียดของการติดตั้ง (เช่น CPU หรือ OS ที่คุณใช้) ไปด้วยเหตุผลอะไรที่มันต้องการข้ามแพลตฟอร์ม คุณไม่สามารถเข้าถึงรายละเอียดเพราะพวกเขาไม่ได้มี คุณไม่ได้ตั้งโปรแกรมสำหรับคอมพิวเตอร์คุณเขียนโปรแกรมสำหรับแพลตฟอร์ม (แพลตฟอร์ม Java ซึ่งมีอยู่ในคอมพิวเตอร์ส่วนใหญ่) นอกจากนี้ Java มีภาษาที่ดีกว่าสำหรับการจัดการในภาษาของปัญหากว่า C ++ ข้อเสียคือคุณไม่สามารถปรับให้เหมาะสมสำหรับคอมพิวเตอร์เฉพาะเครื่อง ไม่ว่าสิ่งนี้จะสร้างความแตกต่างในทางปฏิบัติหรือไม่เกิดขึ้นกับข้อมูลเฉพาะของโปรแกรมและคอมพิวเตอร์
  • ภาษาสคริปต์ของเกม:จากนี้ฉันหมายถึงบางสิ่งบางอย่างเช่นUnrealScriptหรือภาษาสคริปต์ที่กำหนดเองที่ผูกติดกับเอ็นจิ้นเกม ในสิ่งเหล่านี้คุณไม่สามารถเข้าถึงเอนจินพื้นฐาน คุณมอบหมายการพิจารณาเกี่ยวกับประสิทธิภาพของเครื่องยนต์โดยปล่อยให้คุณเป็นอิสระในการทำเกม มันง่ายกว่าในการเขียนเกมและยากที่จะเพิ่มประสิทธิภาพด้วยตัวคุณเอง
  • Haskell (หรือภาษาปิดบังที่คุณชื่นชอบ):ใด ๆทัวริงสมบูรณ์การเขียนโปรแกรมภาษาเทียบเท่ากับคนอื่น ๆ ดังนั้นในขณะที่คุณสามารถเขียนโปรแกรมใด ๆ ในภาษาใด ๆ คุณทำการแลกเปลี่ยนบางวัตถุประสงค์บางอัตนัย ภาษาอย่าง Haskell ให้ความสำคัญกับการทำงานในเชิงคณิตศาสตร์มากขึ้น ปัญหาที่นำมาใช้นั้นค่อนข้างแตกต่างจากปัญหาที่พบในเกม ไม่ได้หมายความว่ามันจะไม่สามารถใช้หรือไม่ควรใช้กับเกม แต่มันไม่เหมาะกับมัน

ประเด็นสุดท้ายคือบางสิ่งนี้เป็นเรื่องประวัติศาสตร์และการเมือง สงครามเปลวไฟจำนวนมากได้รับการต่อสู้ระหว่างภาษาการเขียนโปรแกรมที่แตกต่างกัน ตัวอย่างเช่น C # อาจเหมาะสมกับการพัฒนาเกม แต่มาจาก C ++ หรือคนไม่ชอบที่มันมาจาก Microsoft บางคนย้ายไปที่ C # บางคนไม่ได้ บางคนยังคงเขียนโปรแกรมเกมใน BASIC, Pascal และ C ไม่ว่าโปรแกรมเมอร์จะคุ้นเคยกับอะไรก็ตาม โปรแกรมเมอร์เกมส่วนใหญ่คุ้นเคยกับ C ++ เป็นไปได้เพราะพวกเขาเติบโตขึ้นมาด้วย C และ C ++ และมันก็ตรงกับความต้องการของพวกเขา หากอุตสาหกรรมคอมพิวเตอร์อยู่ในสถานะที่ประสิทธิภาพของจาวาและการตอบสนองต่อผู้คนเพียงพอแล้ว Java อาจเป็นภาษาพัฒนาเกมมาตรฐานอย่างแท้จริง


2

มรดกและโมเมนตัม

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

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


2

หากคุณกำลังพัฒนาสำหรับคอนโซลคุณไม่มีทางเลือก: SDK ระดับมืออาชีพมีเฉพาะใน C ++ เท่านั้น โดยปกติแล้วพวกเขายังมีการเข้าถึง C เพื่อสิ่งส่วนใหญ่

เนื่องจากนักพัฒนาซอฟต์แวร์หลายคนเป็น Consoles + PC จึงเหมาะสมที่จะใช้งานพีซีทั้งหมดในภาษาเดียวกันและแบ่งปันเทคโนโลยีโดยตรง

เพราะนั่นคือสิ่งที่อุตสาหกรรมมืออาชีพอาศัยอยู่และทุกคนส่วนใหญ่ต้องการเป็นส่วนหนึ่งของมันโปรแกรมเมอร์เกมส่วนใหญ่เป็นโปรแกรมเมอร์ C ++

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

มันเป็นเครื่องมือรักษาตัวเองที่ยิ่งใหญ่ การขัดขวางมันจะต้องมากกว่าความก้าวหน้าทางเทคนิค


2

FWIW: C # กำลังได้รับความนิยมในการพัฒนาเกม ดูโพสต์บล็อก Miguel de Icaza ของ อ่านที่น่าสนใจมาก IMHO


2
ตามปกติมิเกลจะผลักดันเทคโนโลยีที่เขาโปรดปราน (โดยปกติจะเป็นขอบ) ในขณะที่ไม่สนใจวิธีที่ C # ได้กลายเป็นผู้เล่นรายใหญ่ในอุตสาหกรรมเช่น XNA

2

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

สิ่งนี้ไม่สำคัญเท่าวันนี้ แต่สามารถใช้กับแพลตฟอร์มที่มีกำลังต่ำได้

บน PC / Mac / Linux อาจเป็นภาษาพกพาที่น้อยที่สุดที่คุณจะเจอในวันนี้และโบนัสความเร็วไม่ได้มีความแตกต่างกันอีกต่อไป - Minecraft (Java) นั้นราบเรียบและใช้งานได้บนแพลตฟอร์มที่น้อยที่สุด ด้วยการปฏิบัติการเพียงครั้งเดียว - ฉันยังไม่เห็นแอพ C / C ++ ที่มีกำลังคนต่ำ แต่มีฟังก์ชั่นการใช้งานมากและมีข้อบกพร่องเล็กน้อยให้ทำงานบนแพลตฟอร์มสามแพลตฟอร์มเพียงอย่างเดียว

ดังนั้น ณ จุดนี้ฉันจะบอกว่าส่วนใหญ่มันเป็นความเฉื่อยและความคิดที่ว่าเกมจริง ๆ จะทำใน C / C ++ เสมอถึงแม้ว่าความสามารถในการ "พอร์ต" ไปยัง iPhone และคอนโซลมีความสำคัญ (แม้ว่าฉันค่อนข้างแน่ใจมากที่สุด ของ UI ของเกมใช้ความพยายามอย่างมากในการพอร์ตยกเว้นระหว่าง Windows และ XBox)


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

@Chris: วิธีที่ดีที่สุดที่ฉันพบเพื่ออธิบายให้โปรแกรมเมอร์ที่ไม่ใช่เกมคือเกมเป็นโดเมนที่มีความเร็วเป็นข้อได้เปรียบในการแข่งขัน หากโปรแกรมประมวลผลคำของคุณเริ่มต้นใน 5 วินาทีโดยที่ MS Word ใช้เวลา 10 หรือ reflows ใน 0.1 วินาทีที่ Word ใช้เวลา 0.2 นั่นก็ไม่คุ้มค่า แต่ถ้าเกมของคุณสามารถสร้างส่วนย่อยได้มากขึ้น 10% หรือแสดงตัวละครที่มีรายละเอียดมากขึ้นนั่นอาจเป็นข้อได้เปรียบในการแข่งขันที่ยิ่งใหญ่

ถ้าอย่างนั้นมันจะไม่งี่เง่าที่จะเขียนโค้ดในทุกสิ่งยกเว้นการประกอบ มันจะเร็วขึ้นอย่างน้อย 10% มีจุดที่คุณโทรเพื่อแลกเปลี่ยนประสิทธิภาพเพื่อการบำรุงรักษาและความเร็วในการพัฒนา โดยทั่วไปประเด็นนี้คือ C ++ ทุกวันนี้ มันคงจะดีถ้าความสามารถในการข้ามแพลตฟอร์มอย่าง Minecraft มีน้ำหนักมากกว่านี้
Bill K

อ่า แต่มันเป็นความเข้าใจผิดที่การเข้ารหัสในแอสเซมบลีนั้นเร็วกว่า: ชิปปัจจุบันนั้นซับซ้อนพอที่จะทำให้โปรแกรมเมอร์ยากกว่าคอมไพเลอร์อย่างสม่ำเสมอ เฉพาะในโดเมนที่ จำกัด มากขึ้นเช่น SPUs บน PS3, วงฟิสิกส์ด้านในและเงาบน GPU ยังคงมีข้อได้เปรียบที่ชัดเจน ปัจจุบัน C ++ เป็นจุดที่น่าสนใจด้วยข้อแม้ที่ OOP ไม่ใช่ตัวเลือกที่ดีที่สุด: การอภิปรายแบบโครงสร้างของอาเรย์กับ Array of Structs ไม่ใช่การสนทนาภาษา แต่ C ++ นำคุณไปสู่ ​​AoS อย่างชัดเจน บางครั้ง ... คุณแค่อยากได้ C.
Chris Subagio

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