ทำไมเราใช้สคริปต์ในการพัฒนา


67

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

คำตอบ:


73

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

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

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

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

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


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

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

5
โจ - นั่นไม่ทำให้การโต้แย้งขัดกันมันก็หมายความว่าคุณต้องตัดสินใจว่าจะแยก "การเขียนโปรแกรม" ออกจาก "สิ่งที่ออกแบบ" และเส้นแบ่งจะแตกต่างกันไปตามความเชี่ยวชาญด้านเทคนิคของนักออกแบบของคุณ (หรือขาด ดังกล่าว)
Ian Schreiber

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

8
ฉันไม่ได้ยินใครแนะนำว่านักออกแบบควรเขียนสคริปต์ที่ซับซ้อนและมีความสำคัญต่อภารกิจสำหรับการผลิต อย่างไรก็ตามนักออกแบบที่มีความเข้าใจในการเขียนโปรแกรมไม่มากก็ยังสามารถปรับแต่งบางสคริปต์ที่ทดลองได้ (จากนั้นก็ส่งโปรแกรมเมอร์ที่แท้จริงออกไป) แน่นอนพวกเขาสามารถเขียนสคริปต์ ad hoc แบบง่าย ๆ จากคอนโซลที่ runtime เพื่ออำนวยความสะดวกในการทดสอบของตนเอง ฉันคิดว่านักออกแบบอาจต้องการใช้ประโยชน์จากการเขียนสคริปต์ขั้นพื้นฐานเพื่อต้นแบบการออกแบบหน้าจอใหม่ (แม้ว่าพวกเขาจะไม่มีอะไรมากไปกว่า mockups แบบโต้ตอบที่ใช้งานได้) รหัสที่ไม่ใช่ผลิตภัณฑ์จำนวนมากจำเป็นต้องเขียน
Mike Strobel

38

คุณถามคำถามผิด คำถามจริงฉันคิดว่าทำไมเราถึงใช้ภาษาที่ "ไม่ใช่สคริปต์" เช่น C, C ++, Java และอื่น ๆ และคำตอบคือเหตุผลหนึ่ง: ประสิทธิภาพ (และอาจเป็นความเฉื่อย แต่แรงเฉื่อยนั้นอยู่ที่นั่นเพราะประสิทธิภาพและทุกคนที่สามารถเขียน C / C ++ / Java ได้ดีสามารถเขียน Ruby / Python / Lua / JavaScript ได้อย่างน้อย)

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


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

10

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


8
  1. คลาส lua ใหม่แต่ละเส้นมีสองบรรทัด คลาส C ++ ใหม่แต่ละอันนั้นมีความเจ็บปวด
  2. ไม่หอนเกี่ยวกับประเภทเมื่อสิ่งที่คุณต้องการคือค่าการสับเปลี่ยน
  3. เก็บขยะ
  4. รหัสสคริปต์ถูกแยกอย่างชัดเจนในเครื่องเสมือนห่างจาก segfaults ที่น่ารังเกียจและอาร์เรย์ล้น

5

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

นอกจากนี้ภาษาสคริปต์มักจะเข้าใจง่ายและตั้งโปรแกรมได้ง่ายดังนั้นคุณไม่จำเป็นต้องใช้ 'hardcore' (คนที่เกี่ยวข้องกับ Memory Management / Pointers และ cpu-level optimization) สำหรับโค้ดส่วนใหญ่ (ถ้าเป็น RPG ขนาดใหญ่ สคริปต์สำหรับ AI, Spells, Item Effects และโลกมักจะใหญ่กว่ารหัสเครื่องยนต์) ภาษาสคริปต์ให้ความสำคัญกับ 'สิ่ง' มากกว่า 'วิธี' เนื่องจากการรวบรวมขยะ (ในกรณีของ Lua) และระดับที่สูงขึ้นของสิ่งที่เป็นนามธรรม


4

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

ตัวอย่างที่ดีของเกมนี้คือเกม World of Warcraft มันมีหลายพัน addons ที่สร้างขึ้นโดยชุมชน ส่วนเสริมเหล่านี้เขียนขึ้นโดยใช้ LUA + XML

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