คุณมองหาอะไรในภาษาสคริปต์? [ปิด]


10

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

โดยไม่เปิดเผยรายละเอียดใด ๆ (เพื่อหลีกเลี่ยงอคติ) ฉันอยากรู้ว่า:

คุณสมบัติอะไรที่คุณชอบในภาษาสคริปต์สำหรับการพัฒนาเกม

หากคุณใช้ Lua, Python หรือภาษาที่ฝังตัวอื่นเช่น Tcl หรือ Guile เป็นภาษาสคริปต์หลักของคุณในโครงการเกมคุณคิดว่ามีประโยชน์อะไรมากที่สุด

  • คุณสมบัติภาษา (lambdas, class, parallelism)

  • คุณสมบัติการนำไปใช้ (การเพิ่มประสิทธิภาพประสิทธิภาพ JIT การเร่งด้วยฮาร์ดแวร์)

  • คุณสมบัติการรวม (การผูก C, C ++ หรือ. NET)

  • หรือสิ่งที่แตกต่างอย่างสิ้นเชิง?


2
การทำให้งงงวย: เพราะถ้ามันสามารถทำให้งงแล้วก็อาจจะมีความยืดหยุ่น ยกตัวอย่างเช่นใช้ Perl ซึ่งอาจทำให้สับสนจนดูเหมือนว่าเอาต์พุตที่เกิดจากสัญญาณรบกวนสายจากโมเด็ม 300bps (เมื่อมีคนอื่นหยิบโทรศัพท์ขึ้นที่ปลายอีกด้านของบ้าน) ย้อนกลับไปในสมัยที่พวกมันถูก รวดเร็ว ;-P
Randolf Richardson

1
@ Randolf: จุดดี ปัญหาเดียวของการทำให้งงงวยคือมันมักจะพึ่งพาภาษาที่มั่นคงซึ่งภาษาเล็กไม่ได้ obfuscator ที่ทำงานกับ 0.10 อาจไม่ทำงานกับ 0.11
Jon Purdy

@Jon Purdy: ถูกต้อง (+1 สำหรับคุณ) นอกจากนี้ยังมีแง่มุมของโค้ดที่สับสนที่จะรักษาได้ยากขึ้น อย่างไรก็ตามสิ่งสำคัญที่ควรทราบคือการทำให้งงงวยสามารถให้หนึ่งวัดที่น่าสนใจของวิธีการที่ภาษามีความยืดหยุ่น
Randolf Richardson

5
@ Randolf: เมื่อไหร่ perl ไม่เหมือนที่?
Ken

1
@Joe Wreschnig พูดว่า 'ฉันควรเลือกอันไหน' นี่เป็นอีก 'คุณสมบัติที่ดีในภาษาสคริปต์'
The Duck คอมมิวนิสต์

คำตอบ:


4

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

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

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

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

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


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

2

สำหรับเกมบนเว็บมีสามปัจจัยที่สำคัญสำหรับฉันคือ:

  • ความคุ้นเคย
  • ความเร็ว
  • บูรณาการ

ฉันชอบ Perl เป็นพิเศษส่วนหนึ่งเป็นเพราะฉันคุ้นเคยกับภาษานี้แล้วและเนื่องจากเว็บเซิร์ฟเวอร์โมดูลเช่น mod_perl2 มีประสิทธิภาพที่ยอดเยี่ยมและข้อดีของการรวม - mod_perl2 เก็บสคริปต์ที่รวบรวมไว้ใน RAM (ซึ่งถูกตีความเท่านั้น การโหลดครั้งแรก) ซึ่งให้ความเร็วที่เหนือกว่าภาษาที่ตีความอื่น ๆ ที่ไม่มีตัวเลือกการรวบรวมและยังรวมเข้ากับเซิร์ฟเวอร์ Apache HTTPd ด้วย API ที่มีคุณสมบัติหลากหลายซึ่งให้การเข้าถึงคุณลักษณะที่ทรงพลังมากมาย

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


2

จัดเรียงตามลำดับความสำคัญ (ลดลง):

  • อ่านได้อย่างรวดเร็ว ที่จริงแล้วมันเป็นข้อกำหนดสำหรับภาษาใด ๆ ที่ฉันต้องการใช้ แต่สำหรับการเขียนสคริปต์มันมีความสำคัญมากกว่า: สคริปต์ตามคำนิยามเปลี่ยนบ่อยกว่ารหัส "แกน" ดังนั้นไม่มี LISP หรือ PERL
  • รวบรัด สคริปต์ถูกเขียนและเขียนใหม่อย่างต่อเนื่องและการพิมพ์รหัสจำนวนมาก "จำนวนมาก" ไม่มีประสิทธิภาพ
  • แก้จุดบกพร่องได้ง่าย โดยเฉพาะกับจุดพักขั้นตอนและอื่น ๆ
  • รวมเข้ากับเทคโนโลยี "แกน" ที่ฉันเลือกได้ง่าย ถ้าฉันใช้ C ++ สำหรับเกมของฉันฉันต้องมีการผูก C ++ ที่ดีเหมือนใน LUA หากเกมอยู่ใน C # ฉันจะเลือกภาษาที่ใช้ CLI: C #, IronPython, Boo
  • คุณสมบัติภาษา: อาเรย์เชื่อมโยงง่าย coroutines บางที lambdas จริงๆแล้วสิ่งนี้ส่วนใหญ่ขึ้นอยู่กับสิ่งที่ฉันจะใช้สคริปต์สำหรับ สคริปต์ AI นั้นแตกต่างจากสคริปต์เริ่มต้น
  • เอกสารที่ดี C # มี MSDN ทั้งหมดโดยเฉพาะและ Boo มีแหล่งข้อมูลเท่านั้น นั่นคือเหตุผลที่ C # ดีกว่า
  • สภาพแวดล้อมการพัฒนาที่ดี VS หรือ Eclipse ชนะ Notepad ทุกครั้ง

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