Geliştirme aşamasında neden komut dosyaları kullanıyoruz?


67

Şu andaki projemde Lua scriptleri sunucu tarafında C ++ fonksiyonları tarafından çağrılıyor. Ondan sonra komut dosyaları yine bu çözümde C ++ fonksiyonlarını çağırır. Neden böyle şeyler yapmalıyız ve doğrudan C ++ işlevini çağırmıyoruz? Senaryoların gerekli olduğu durumlar nelerdir?

Yanıtlar:


73

Komut dosyaları genellikle çalışma zamanında derlenirken , ana bilgisayar dili derleme zamanında derlenir. Bu, komut dosyası değişirse yeniden derlemeye ihtiyacımız olmadığı anlamına gelir. Tam bir oyunun yeniden derlenmesi dakikalar veya saatler alabilmekte ve bu da büyük bir verimlilik isabeti anlamına gelmektedir.

Genellikle, kritik kod veya arka uç kodu komut dosyası yazılmaz. Bu kod hızlı çalışmalı ve hafıza yönetimi çok önemlidir.
Oyunlarda, oyun mantığı ve konfigürasyonu tipik olarak script dosyalarında bulunur. Bu senaryolar programcı olmayanlar tarafından (tasarımcı gibi) oyunu kolayca değiştirmek için kolayca güncellenebilir . Script dilleri kolaydır ve bu amaç için bağışlayıcı bir şekilde hareket eder.

Genellikle, bir komut dosyası dili, gerçek zamanlı olarak komut dosyası yapmak için de kullanılır . Bu, bazı oyun öğelerinde ince ayar yapmak veya hatta hata ayıklamak için kullanışlıdır. Birçok oyun bu (çoğunlukla kurum içi) amaç için bir konsol sağlar.

Mevcut bir oyun motorunu kullanarak sadece bir komut dosyası kullanarak bir oyun yaratmanız çok iyi. Bu nedenle oyun motoru katmanı, oyun mantığı katmanından tamamen ayrıştırılır . Modern motorlar genellikle FPS veya RTS oyunlarını kolayca bu şekilde oluşturmak için kullanılabilir, ancak hiçbir tür için bu mümkün değildir. Bir MMO muhtemelen başka tür bir motor gerektirir.

Demek ki sonuçta ayrılma var. Yukarıda listelenen faydalar, genellikle bir kodlama dili oluşturmak veya entegre etmek için yapılan ekstra çalışmalardan daha fazladır.


7
Programcı olmayanlar tarafından komut dosyalarının güncellenmesinin genellikle daha kolay olduğunu söyleyen + 1. Tasarımcılar her zaman programlayıcı değildir ve olmaları gerekmez.
Oak Oak

19
Senaryo yazımı ile ilgili her soruda kendimi tekrar ediyormuşum gibi hissediyorum - iş akışınız programcı olmayanların programlanmasını gerektiriyorsa (hangi kodlamayı içerir), sonradan kıçınızdan sizi ısırır. Tasarımcılar her zaman programcılar değildirler, ancak önemsiz olmayan komut dosyaları yazdıkları anda (örneğin, bir işlevi tanımlamaya ya da bir döngü kullanmaya çalıştıklarında) bir gibi görünüyorlar. Programlama eğitimi almazlarsa, bu gözyaşı ile bitecek ve herkes için boşa harcanacaktır.

5
Joe - bu argümanı geçersiz kılmaz, sadece "programlama öğelerini" tasarım tasarımlarından "nereye ayırmanız gerektiğine karar vermeniz gerektiği anlamına gelir ve bölen çizgi tasarımcılarınızın teknik uzmanlığına bağlı olarak farklı olacaktır (veya eksik bunun).
Ian Schreiber

3
Kendine saygılı bir tasarımcının en az bir dilde iyi bir şekilde öğretildiğinden eminim. İşleri biraz netleştirmek için, mesleği bir yazılım mühendisinin mesleği olmayan biri olarak "programcı olmayan" teriminden bahsetmek istiyorum. Terimi kullandığım için pişmanım, Joe sayesinde belirsiz olduğunu düşünüyorum. Basit XML yazmaktan zorlu düzene kadar matematiğin yoğun sinyal işlemesine kadar pek çok programcının olduğuna inanıyorum. Umarım bu "programcı olmayan" dualite sorununu çözer.
Nef

8
Kimsenin tasarımcıların prodüksiyon için karmaşık, iş için kritik senaryolar yazması gerektiğini önerdiğini duymadım. Bununla birlikte, mütevazı bir programlama anlayışına sahip olan tasarımcılar hala bazı senaryoları deneysel olarak ince ayarlayabilirler (ve daha sonra bunları gerçek programcıları dağıtırlar). Kendi testlerini kolaylaştırmak için çalışma zamanında bir konsoldan basit geçici komut dosyaları yazabilirler. Tasarımcıların yeni ekran tasarımlarını prototip hale getirmek için temel komut dosyalarından yararlanmak isteyebileceklerini (yarı işlevsel, etkileşimli örnekler dışında bile olmasalar) hayal edebiliyorum. Bir sürü üretim dışı kodun yazılması gerekiyor.
Mike Strobel

38

Yanlış soruyu sordun. Sanırım asıl soru, neden C, C ++, Java vb. Gibi "komut dosyası olmayan" dilleri kullanıyoruz? Ve cevap bir nedendir: performans. (Belki atalet olabilir, ama bu atalet performans nedeniyle oradadır ve iyi bir C / C ++ / Java yazabilen herkes en azından geçirgen Ruby / Python / Lua / JavaScript yazabilir.)

"Scripting" dillerini kullanıyoruz (bu gerçekten çok yüksek seviyeli, toplanan çöpler ve genellikle bir tür daha gevşek tipleme ve dinamik derleme anlamına gelir) çünkü genel olarak herkes için daha kolay dillerdir - programcılar dahil - kod yazmak için Malloc sonra serbest bırakmayı hatırlamak veya kodunuzun istisnai güvenli olduğundan emin olmak gibi aptalca şeyler veya tüm yıkıcılarınızı sanal hale getirmeyi hatırlamak gibi. Eğer bilgisayarlarımız sonsuz hızlı olsaydı, her şey için "betik" dillerini kullanırdık.


4
Ben bu tartışmayı ister bu yüzden "tasarımcılar programlayabilir böylece." Çok daha iyi Hızlı gelişmenin değerini ortadan kaldırmak ve her şeyi yeniden derlemeden değişiklikleri deneyimlemek çok kötü bir fikir.
ojrac


8
  1. Her yeni lua sınıfı iki satırdır. Her yeni C ++ sınıfı acıdır.
  2. İstediğiniz tek şey, etrafındaki değerleri karıştırmaktır.
  3. Çöp toplama.
  4. Betik kodu sanal makinelerde hoş bir şekilde izole edilmiştir; tüm bu kötü dolaşan segfaults ve dizi taşmaları.

5

Komut dosyası değişiklikleri dağıtmak kolaydır. Örneğin, komut dosyalarını bir veritabanında tutabilirsiniz; bu, tam ikili yeniden dağıtım ve olası yeniden başlatma yerine, tek bir SQL UPDATE ifadesi yayınlamanız, muhtemelen komut dosyasını yeniden yüklemek için çalışan hizmetinize bir sinyal göndermeniz anlamına gelir.

Ayrıca betik dillerinin anlaşılması ve programlanması kolaydır, bu nedenle kodun çoğunluğu için 'hardcore' geliştiricilere (Bellek Yönetimi / İşaretçiler ve işlemci düzeyinde optimizasyonlarla uğraşanlara) ihtiyacınız yoktur (eğer büyük bir RPG, AI, Spells, Item Effects ve dünyanın kendisi için komut dosyaları genellikle motor kodundan daha büyüktür). Betik dilleri, Çöp Toplama (Lua durumunda) ve daha yüksek bir soyutlama seviyesi nedeniyle 'nasıl' yerine 'ne' üzerine yoğunlaşmaktadır.


4

Komut dosyalarının yararlı olduğu senaryolardan biri, motorumuzun eklentiler / eklentilerle genişletilebilir olmasını istememizdir. Bu eklentiler, çoğu durumda profesyonel olmayan kişiler tarafından (ileri düzey oyuncular ve meraklılar gibi) oluşturulur. Scriptler bu amaç için daha güvenli ve kolaydır. Senaryoları kullanarak derleyicileri kullanmaları gerekmiyor ve işaretçilerden haberdar olmaları gerekmiyor ...

Buna güzel bir örnek, World of Warcraft oyunudur. Topluluk tarafından oluşturulan binlerce eklenti vardır. Bu eklentiler LUA + XML kullanılarak yazılmıştır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.