Hangi durumlarda hangi kodlama dilleri diğerlerinden daha iyi?
Tüm cevaplar takdir edilmektedir, lütfen bir tanım girin ve dilin hangi durumlarda daha iyi sonuçlandığını açıklayın.
(Unutma, cevap başına bir dil)
Hangi durumlarda hangi kodlama dilleri diğerlerinden daha iyi?
Tüm cevaplar takdir edilmektedir, lütfen bir tanım girin ve dilin hangi durumlarda daha iyi sonuçlandığını açıklayın.
(Unutma, cevap başına bir dil)
Yanıtlar:
Lua, oyun endüstrisinde yaygın olarak kullanılmaktadır . Bağımsız oyunlardan ( Aquaria ) AAA başlıklarına (Civilization).
Temel sebep? Söyleyeceğim çünkü oyunlarınıza dahil edilmesi öğrenmesi kolay ve kolaydır. Ama aynı Python için söylenebilir, eminim. Komut dosyası yazmak genel olarak zor değildir. Bence Lua ile gitmenizin asıl sebebi, oradan öğrenmeniz için çok daha fazla kaynağa neden olduğu kanıtlanmış olmasıdır. Eğer normalin dışında bir şeyle denemeyi düşünüyorsanız, o zaman başka bir dille uğraşmaya başlarım.
Sincapın ilginç bir tarihi var. Bir oyun mimarı, Lua'nın tahmin edilemeyen çöp koleksiyonuyla ilgili sorunları yaşadıktan sonra inşa edildi ve çılgınca her şey boş olsa bile .
Sincap, Sol 4 Ölü 2'de kullanılan yazı dilidir . API çok lua benzeri (Sincap'ın yazarı Lua'nın tasarımını seviyor ).
Yani Sincap, 2. nesil Lua gibi harika bir dil. İyi fikirleri aldı ve sinir bozucu eksantriklikleri ortadan kaldırdı.
Lua'dan aynı:
Sincap'ta Yeni:
Sincap'ın birincil dezavantajı Lua değil. Lua çok daha yaygın olarak kullanılıyor. Ama bu bir sorun değilse, Sincap kolay bir galibiyettir. Bununla birlikte, çoğu zaman dilin popülerliği kendi başına kullanışlı bir özelliktir, bu nedenle karar çok net değildir.
V8 Google'dan Javascript.
PRO'nun:
Kullanımı oldukça kolay
Sürekli iyileşmek
Güçlü ve esnek
Diğerleri Birçok dile getirildiği gibi, javascript ortak bir programcı aracıdır. Oyunuma eklemek, diğer dillerden daha yetenekli olanları açtı. Ayrıca programcı için işten tasarruf etmek için büyük miktarda döküm ve dönüşümü destekler, ayrıca kullanımı gerçekten çok kolaylaştırır, STL ile iyi çalışır.
Olası CON's:
Belgeler kafa karıştırıcı olabilir . Gerçekten de en iyisi değil.
Örnekler Genellikle bir tuhaflık ağı. Basit sadelikten yoksun olmak, olduğundan daha yüksek bir seviye ile karşılaşır.
Şablonlar Bazen bunlardan nefret edilir veya bundan kaçınılır.
SDK Kod tabanı boyutu Oluşturulan kod boyutu şişmiş sayılabilir.
Bu oyuna ve hedef platformuna bağlıdır.
100 oyuncu olmayan karakter (RTS oyunları) kullanan bir oyunun sadece 2 (Street Fighter) koşan bir oyundan farklı ihtiyaçları vardır. PC'de çalışan bir oyun, konsolda çalışan oyundan farklı gereksinimlere sahiptir.
Lua popüler
GameMonkey birkaç ekip tarafından kullanılır. Lua'dan daha hızlı ve diş açmada daha iyi.
Python birkaç oyunda kullanılmıştır.
JavaScript motorlarını indirebilmeniz için JavaScript olası bir seçenektir. Diğer programlayıcı türlerinden daha fazla JavaScript programcısı var.
Özel diller de vardır.
SCUMM, çeşitli macera oyunlarında kullanılmıştır ve bu oyunlara özellikle uygundur.
Bütünlük uğruna, başka bir seçenek de, komut dosyası için .NET çerçevesinin Novell uygulamasını kullanmanıza izin veren mono komut dosyasıdır . Bu ne Unity kullanır. Monoyu uygulamanıza yerleştirme hakkında başka bir sayfa daha var .
Mono çerçevesi, orada kodlama dillerinin çoğundan (belki hepsi?) Çoğundan daha hızlıdır çünkü yorumlanmamıştır ve derleyici ile komut seti arasında bir katman olduğu için C # ve lehçeleri de dahil olmak üzere çeşitli dillerde programlamanıza izin verir. Python, Lua ve Javascript.
Ancak tüm platformlarda ücretsiz olup olmadığından emin değilim.
Şahsen, kendi projem için bir betik dili seçerken, AngelScript'i (aşağıdaki bağlantıya bakın) C ++ 'a Lua'dan daha kolay bağlamak buldum. (Aslında, biraz esneklik pahasına, kullanımı daha da kolaylaştırmak için küçük bir sarmalayıcı kitaplığı yazdım.)
http://www.angelcode.com/angelscript/
Bununla birlikte, Lua'nın ticari oyun geliştiricileri için çekici kılan birkaç avantajı olduğundan şüpheleniyorum:
(a) AngelScript'ten daha olgun ve yaygın
(b) Sözdizimi programcı olmayanlar için daha kolaydır (AngelScript çok C ++ benzeri)
(c) AngelScript'ten daha az yer kaplar (en azından hatırladığım kadarıyla)
Eğer sadece bir hobi projesi yazıyorsanız, AngelScript'in en azından bir göz atmaya değer olduğunu söyleyebilirim.
Oyununuzun birincil gelişim dili için sağlam ve iyi desteklenmiş bir bağlamaya sahip bir komut dosyası dili seçmelisiniz. Oyununuzu C veya C ++ ile yazıyorsanız, Python ve Lua için oldukça sağlam ciltler var. Oyununuzu .NET platformu için yazıyorsanız (C # veya başka bir dil kullanarak), ya IronPython veya IronRuby'yi kullanmanızı tavsiye ederim. Her ikisi de mükemmel performans ve .NET Framework ile çok sıkı entegrasyon sağlayan Microsoft'un Dinamik Dil Çalışma Zamanı'nı (DLR) kullanan tam dil uygulamalarıdır. C # ve IronPython / IronRuby arasındaki birlikte çalışabilirlik, günümüzde, özellikle C # 4.0'da dinamik çağrı alanı bağlamanın başlatılmasıyla oldukça düzgündür.
Şey, özellikle suçluluk duyuyorsun .
Guile ile sadece oyununuz için kendi DSL'nizi (Etki Alanına Özel Dil) alabilirsiniz. Parantez ve ön ek notasyonuna alışınca şema çalışılacak cennettir.
Eğer guile'ı ciddi bir oyunda kullanacaksanız, 2.0 sürümü piyasaya sürülmeden önce bir Ecmascript yorumlayıcısı olan IIRC'yi ve şu anki planı içerecek şekilde birkaç ay bekleyeceğim. Ayrıca büyük hız iyileştirmeleri görmeyi de bekleyebilirsiniz.
Bu, gerçekte neye ihtiyacınız olduğuna bağlı. David'in işaret ettiği gibi, Lua çok popüler, bir oyun geliştiricisi bana nedenini tam olarak bilmiyordu. Hafifliğinin ortak bir neden olduğunu düşünüyorum, ancak bu noktada birçok insanın Lua'yı kullanmasını beklerdim çünkü bu gerçek bir standart haline geldi. Çok hafif bir değişiklik için en iyi görünüyor.
Daha tam teşekküllü bir yaklaşım için Python'un doğru seçim olduğunu söyleyebilirim. Civ IV bunu makul bir etki için kullandı.
Bir komut dosyası dili diğeri üzerinde seçmek, sizin özel gereksinimlerinize bağlıdır.
Seçmeniz gereken seçeneklerden bazıları şunlar olabilir:
Tercümanın hızı - komut dosyası özelliği yalnızca statik davranışları kodlamak için geliştiriciler tarafından kullanılıyorsa, hız ve tam teşekküllü ve genişletilebilir bir API en önemli unsur olabilir. Orada LUA ile bazı iyi deneyimler yaşadım.
Öğrenmesi kolay, erişilebilirlik - bir içerik / seviye tasarımcısı için dinamik davranış oluşturmak için daha karmaşık komut dosyası dilleri (arka plana bağlı olarak) öğrenmek zor olabilir. Bu durumda, öğrenmesi kolay (yani yaygın olarak kullanılan) ve iyi belgelenmiş dillerin kullanımı burada daha uygun olabilir. JavaScript veya Python burada iyi bir çözüm olabilir.
İş akışı entegrasyonu - mevcut araçlara sahip belirli bir üretim hattınız varsa, diğer araçlar tamamen farklı bir araçla çalışıyorsa, belirli bir durum için en iyi görünen dili kullanmak kötü bir fikir olabilir. Bu, özellikle farklı araçlar üzerinde çalışan birkaç programcınız varsa geçerlidir. Bu durumda, "pek uyuşmuyor" dilini kullanmak daha verimli olabilir.
Windows için bir başlık üzerinde çalışıyorsanız ve Ortak Dil Çalışma Zamanı (CLR) üzerinde çalışan yönetilen kod yazıyorsanız - örneğin, C # dilinde diyelim - (Demir) Python'u komut dosyası dili olarak entegre etmenizi öneririm.
Tecrübelerime göre, Python'un programcı olmayanlara / tasarımcılara öğretmesi çok kolaydır. Aslında sözde kod gibi okuduğu için geliştiriciler için daha kolay almak. Dinamik olarak yazılmış olmak, daha önce kodlama deneyimi olmayan veya az olan kişilerin diliyle hızlı bir şekilde çalışıp çalışmalarına yardımcı olan özelliklerden sadece bir tanesidir.
Dilin öğrenilmesi kolay ve güçlü olmasının yanı sıra, Microsoft'taki CLR ve dil ekipleri (Anders Hejlsberg, Eric Lippert, Mads Torgersen, Jim Hugunin ve diğerleri), yeni Dinamik aracılığıyla derleyici ve çalışma zamanı özelliklerini gösterme konusunda harika çalışmalar yaptılar. .NET 4'teki Dil Çalışma Zamanı (DLR), statik olarak yazılan kod ile dinamik olarak yazılan kod arasında birlikte çalışabilirliği çok daha kolay hale getirir. Şimdiye kadar gördüklerim ve denediklerimden, kazan kodu en aza indirildi. Kod tabanınızı temiz ve bakımlı tutacaktır.
Bunu, oyununuzun komut dosyası olan bölümleriyle motor arasındaki sürtünmeyi çok düşük tutmak için kullanabilirsiniz. Her ikisinin de aynı VM içinde çalıştırılması, çalışma zamanının yürütme sırasında kodunuzun daha fazlasını optimize etmesini mümkün kılar.
Senaryo dilini kullanacak bir takımınız veya senaryoyu kullanacak bir lider (seviye) tasarımcınız varsa, o zaman tercih ettikleri dil ne olursa olsun devam edin. Zamanlarını bununla harcayacaklar, bu yüzden yiyecek ve içecek sağlamak için.
[tuz tanesi] Hiç kimseniz yoksa veya uzun vadede bir planınız varsa , kendinizinkini alın . evet, bir kodlama dili için bir derleyici ve / veya yorumlayıcı yazmak bir veya iki hafta sürebilir, ancak uzun vadede esneklik birçok kez ödeyecektir. Sadece uzaklara gitme ve beynini yeniden icat etme. [/ tuz tanesi]