บางคนบอกว่ามันให้การควบคุมแก่นักพัฒนามากขึ้น แต่มันคืออะไรที่แม่นยำที่สามารถควบคุมผ่าน C ++ ซึ่งไม่สามารถควบคุมได้โดยใช้ตัวอย่างเช่น Java?
บางคนบอกว่ามันให้การควบคุมแก่นักพัฒนามากขึ้น แต่มันคืออะไรที่แม่นยำที่สามารถควบคุมผ่าน C ++ ซึ่งไม่สามารถควบคุมได้โดยใช้ตัวอย่างเช่น Java?
คำตอบ:
Java ทำงานในเครื่องเสมือนในขณะที่ C ++ ทำงานโดยตรงบนฮาร์ดแวร์ สิ่งนี้หมายความว่าคุณสามารถควบคุมได้มากขึ้นว่าหน่วยความจำของคุณไปที่ใดและทำอะไรกับมันใน C ++
Java เป็นภาษาที่รวบรวมขยะ คุณไม่มีการควบคุมโดยตรงกับหน่วยความจำของคุณ คุณสามารถจัดสรรชิ้นส่วนของหน่วยความจำใหม่ แต่คุณไม่สามารถควบคุมได้ (ดี) เมื่อมันถูกลบ ตัวรวบรวมขยะจะตรวจสอบหน่วยความจำทุกชิ้นที่คุณจัดสรรทุกเฟรม x และกำหนดว่ามันเป็นขยะหรือยังถูกใช้อยู่
สำหรับเกมนี้อาจเป็นหายนะ ทุก ๆ ไม่กี่เฟรมบางตัวรวบรวมขยะมาพร้อมเพื่อตรวจสอบทุกการจัดสรรเดียวที่คุณทำเพื่อดูว่ามันยังคงถูกใช้ พูดคุยเกี่ยวกับการชะลอตัว!
ประการที่สองห้องสมุดที่เราใช้ส่วนใหญ่เขียนด้วยภาษา C หรือเขียนด้วยภาษา C ++ ฉันกำลังพูดถึง Scaleform, Havok physics engine, PhysX, SpeedTree และอื่น ๆ แพ็คเกจมืออาชีพทั้งหมดที่ใช้กันอย่างแพร่หลายในอุตสาหกรรม หากภาษาอื่นต้องการที่จะเป็นราชามันจะสนับสนุนพวกเขาได้ดีกว่า
มุมมองส่วนตัวของฉันคือ Java นั้นดีสำหรับแอพพลิเคชั่นเดสก์ท็อปและแอพ แต่ไม่ใช่สำหรับเกม Java มีเครื่องมือที่ดีมากมายสำหรับนักพัฒนาและในทางทฤษฎีสามารถรันบนแพลตฟอร์มใด ๆ ที่มีการนำ Java Virtual Machine มาใช้ แต่ฉันยังคงชอบ C ++ เพราะฉันต้องการควบคุมหน่วยความจำของฉัน โดยเฉพาะอย่างยิ่งเมื่อคุณเริ่มทำงานกับโครงสร้างข้อมูลที่แปลกใหม่ (ต้นไม้สีแดงดำรายการที่เชื่อมโยงซ้ำ ๆ เป็นต้น) มันจะช่วยให้ภาพรวมที่ดีของการจัดสรรหน่วยความจำทั้งหมดของคุณ
ฉันไม่ได้พูดว่า: อย่าใช้จาวา ฉันกำลังพูดว่า: คิดว่าทำไมคุณถึงใช้ Java Minecraft นั้นสร้างขึ้นใน Java ดังนั้นจึงเป็นไปได้ที่จะสร้างเกมใน Java แต่มันจะเป็นเกมที่ดีกว่านี้สร้างขึ้นใน C ++ หรือไม่? แน่นอนว่ามันไม่ถูกเลยที่จะให้มันทำงานบนสามใหญ่ (Windows, MacOS, Linux) แต่ถึงกระนั้นก็พบข้อผิดพลาดเฉพาะแพลตฟอร์มจำนวนมากในการพัฒนาข้อบกพร่องที่ Java ไม่ราบรื่น เกิน.
มีเฟรมเวิร์ก C ++ มากมายสำหรับผู้เริ่มต้นโปรแกรมเมอร์ ไม่มีข้อแก้ตัวใด ๆ ที่จะไม่เรียนรู้โดยเฉพาะอย่างยิ่งถ้าคุณต้องการที่จะส่งเสริมอาชีพของคุณในอุตสาหกรรม
คำตอบสั้น ๆ : คอมไพล์ C ++ กับรหัสเนทีฟดังนั้นประสิทธิภาพจึงขึ้นอยู่กับนักพัฒนาไม่ใช่รันไทม์หรือ VM
คำตอบยาว:
C ++ เป็น "เร็วขึ้น" ไม่เกี่ยวข้องกับ C ++ ในขณะนี้เป็นหนึ่งในไม่กี่ภาษาที่มีการสนับสนุนโดยเครื่องมือที่สร้างรหัสแบบสแตนด์อโลนและเนทีฟสำหรับหลายแพลตฟอร์ม
ย้อนกลับไปในวันนี้คุณสามารถใช้ C, C ++, BASIC / 2, Delphi และอื่น ๆ และรับโปรแกรมที่มีประสิทธิภาพและอิสระ การเลือกใช้ภาษาเป็นเรื่องของความชอบส่วนตัวและกลไกตลาด
ทุกวันนี้การสันนิษฐานว่า "C ++ เร็วกว่า" นั้นเป็นคำทำนายการตอบสนองด้วยตนเองเป็นหลักแม้ว่า LLVM จะอยู่ในตำแหน่งที่ดีที่จะเปลี่ยนว่าเมื่อใดก็ตามที่มันเข้าสู่การแยกวิเคราะห์
Borland เข้าใจถูกต้อง: มีหลายภาษาที่แยกวิเคราะห์ใช้การปรับให้เหมาะสมครั้งแรกจากนั้นส่งไปยังคอมไพเลอร์แบ็กเอนด์และลิงค์เกอร์ทั่วไป ซึ่งเป็นหนึ่งในความสำเร็จที่สำคัญของ LLVM อย่างมีประสิทธิภาพ
Java มีโครงสร้างในลักษณะที่มันจะเป็นเรื่องยากมากที่จะใช้โดยไม่ต้อง JVM พอผิดปกติ C # ทั่วไปและไม่ถูกต้องถือว่าเทียบเท่ากับ Java อย่างคร่าว ๆ แล้วรวบรวมรหัสพื้นเมืองบนแพลตฟอร์มต่าง ๆ รวมถึง iOS
ด้านบนของรายการคริสมาสต์ของฉัน? ไทม์แมชชีนที่จะย้อนกลับและเพิ่มคุณสมบัติการจัดการข้อยกเว้นที่แท้จริงและ polymorphism การทำงานจริงไปยัง C ++ และกำจัด crap ลูกศรไวยากรณ์ f "d up up ที่ parser สามารถหาได้ด้วยตัวเองฉันเขียน preprocessor เป็นเวลา 10 ปี ที่ผ่านมาเพราะมันบ้าโง่