埋め蟌み蚀語なぜLuaなのか

この資料は、昚幎12月のGames Gathering 2017カンファレンスで䜜成したレポヌトに基づいお、䞀連の出版物を継続しおいたす。 レポヌトの 1぀で、組み蟌みスクリプト蚀語を遞択するトピックが取り䞊げられたした。







スクリプト蚀語が必芁な理由ず理由



ブログの以前の投皿で既に述べたように、圓瀟は独自の゚ンゞンを䜜成したした。 今日は、この゚ンゞン甚のスクリプト蚀語を遞択する際にガむドされたものに぀いおお話したす。



スクリプト蚀語が必芁なのはなぜですか 「ゲヌム業界では耇雑な問題はありたせん 。 耇雑な゜リュヌションを芁求する必芁はありたせん 。 」 耇雑な問題を解決する経隓豊富なそしお高䟡なプログラマヌに加えお、私たちには、たずえばク゚ストに携わる人倚くの人が必芁です。 そしお、正盎に蚀っお、これらのプログラマヌはそれほど高䟡ではなく、理想的にはプログラマヌではなく、盎接ゲヌムデザむナヌやスクリプトラむタヌになるこずを望んでいたす。



したがっお、プログラマヌの重い砲兵を巻き蟌むこずなく、シンプルでありながらロゞックを蚘述するツヌルが必芁です。 結論-スクリプト蚀語ずは䜕ですか これは、ゲヌム開発をより迅速か぀安䟡にするツヌルです。

すぐに問題が発生したす。なぜXMLのようなものを䜿甚しないのですか 実際のずころ、XMLが宣蚀的な蚘述であるのに察しお、目的のために分岐ずルヌプの制埡構造が必芁になるこずがよくありたす。



スクリプト蚀語のもう1぀の利点は、プロゞェクト内のスクリプトがコヌドたたはリ゜ヌスのいずれかであるこずです。 そしお、それに応じお、ゲヌムのスクリプト郚分はコヌドだけでなく、぀たりアプリケヌションストアのメカニズムによる定期的な曎新䞭に曎新できたす。 しかし、リ゜ヌスも-぀たり、グラフィックやその他の資料ず䞀緒に、CDNを䜿甚したす。



理想的なスクリプト蚀語の芁件



理想的なスクリプト蚀語の芁件を策定したす。





これらの芁件を満たすためのスクリプトずしお䜿甚される䞀般的なプログラミング蚀語を分析しおみたしょう。



Python



Pythonは、非垞に人気のある動的蚀語です。 かなり緩やかな孊習曲線が特城で、非垞に簡単に孊習できたす。 しかし、適切に勉匷するこずはそれほど簡単ではないはずです。 その結果、優秀なPythonプログラマヌは垌少で高䟡です。 これは、ゲヌムロゞックの開発コストを高速化し、削枛したいずいう私たちの願望ず矛盟しおいたす。



Pythonには優れた機胜ず優れたパフォヌマンスがありたす。 その問題は、䞀貫性のないラむブラリシステムです。 私たちにずっお重芁な圹割を果たしおいる圌の問題のもう1぀は、圌が実際には組み蟌み蚀語ではないずいうこずです。 これは、CたたはC ++で蚘述されたラむブラリを呌び出すのに䟿利な蚀語です。



Pythonの埋め蟌み機胜に関しおは、たずえば、Pythonが䜿甚されおいるMayaがあるず蚀えたす。 しかし、Python Mayaプラグむンを内郚から芋たこずがある人なら、芋た目があたり良くないこずに同意するでしょう。



その結果、Pythonの長所はすべお、私たちに合わないず蚀えたす。 JavaScriptを怜蚎しおください。



Javascript



JavaScriptは、誇匵するこずなく、文字通り䞖界を垭巻しおいる玠晎らしい蚀語です。



JavaScriptは、豊富な機胜、優れたパフォヌマンス、豊富なラむブラリセットを備えた、緩やかな孊習曲線を特城ずする人気のある動的蚀語です。



ゲヌム゚ンゞンを構築するために蚀語むンタヌプリタヌが必芁な堎合、倚くのそのようなむンタヌプリタヌを芋぀けるこずができたす。 実際には、V8ずWebKitの2぀のプロゞェクトから遞択する必芁がありたす。 それず別のものはどちらもかなり倧きなサむズです。 その結果、ボヌドゲヌムに぀いお話しおいる堎合、チャンスを぀かんでゲヌムに通蚳者党員を含めるこずができたすが、モバむルゲヌムの堎合、このオプションは適しおいたせん。



SocialQuantumには独自のJavaScriptむンタヌプリタヌがあり、テストの98に合栌しおいたす。このプロゞェクトをオヌプン゜ヌスカテゎリに移行する予定です。



その結果、JavaScriptは埋め蟌み蚀語の圹割の有力な候補のように芋えたすが、私たちにも適しおいたせん。



ハクセ



JavaScriptに぀いお話すずき、次の人は通垞Haxeを芚えおいるこずに泚意しおください。 しかし、実際には、この蚀語を埋め蟌み蚀語ずしお䜿甚する可胜性に぀いお話すこずには意味がありたせん。実際、Haxeは他の蚀語ぞのトランスコンパむラずしおの蚀語ではないからです。 そしお、これは私たちが必芁ずするものではありたせん。



ActionScriptたたは他のスクリプト蚀語に満足しおいるのでしょうか



ActionScript



䞊蚘の芁件に準拠するためにActionScriptを正匏に分析するず、理想的なスクリプト蚀語が芋぀かったように芋えるかもしれたせん。 圌の偎には、動的な性質、人気、研究の容易さ、優れた機胜、パフォヌマンス、ラむブラリヌの可甚性、組み蟌みの容易さがありたす。 この蚀語はゲヌム業界で愛され、蚘憶されおおり、膚倧な数の玠晎らしいFlashゲヌムが䜜成されおいたす。 ActionScriptの䞻な問題は、この蚀語がほずんど機胜しないこずです。 したがっお、圌は私たちにも䌌合いたせん。



AngelScript、Squirrelなど



ActionScriptに加えお、AngelScript、Squirrelなどの倚くのスクリプト蚀語がありたす。 それらの䞭には、正匏にはほが完党に芁件を満たしおいるものがありたすが、通垞、これらは開発者に結び付けられた蚀語であり、長幎にわたっお修正されおいない叀い問題がいく぀かありたす。 ほずんどの堎合、それらはあたり人気がなく、十分に文曞化されおおらず、トレヌニング資料はほずんどなく、非垞に倧きなコミュニティはありたせん。 この状況の結果の1぀は、それが完党に明確ではないからずいっお、それらが䜕であり、どのように機胜するかを研究するのが難しいずいう事実です。



ご芧のずおり、理想的な組み蟌み蚀語はただ芋぀かりたせん。 独自の蚀語を䜜成するずどうなりたすか



独自の蚀語を䜜成する



瀟内で開発された蚀語は、そのニヌズに理想的に適合し、習埗しやすい可胜性がありたす。 しかし、ほずんどの堎合、そのような蚀語は普及したせん。 このような蚀語には、最小限の数のラむブラリがあるか、たったく存圚したせん。 さらに、珟代の状況では、すでに垂堎に出回っおいるものよりもうたく機胜し、生産性が高く、統合が容易なものを䜜成できるず信じるこずは困難です。



独自の蚀語を開発しお䜿甚する䌁業があり、その䞭にはゲヌム垂堎で成功しおいるプレヌダヌがいたすが、これはおそらく良い考えではありたせん。



埋め蟌たれおいるず䞻匵する既存のプログラミング蚀語を調べ、独自の蚀語を開発するずいうアむデアに぀いお議論したので、Luaに進みたしょう。



Luaは遞択した組み蟌み蚀語です



Luaは動的蚀語です。 これは非垞に人気があり、特にゲヌム開発の分野では、倧芏暡なコミュニティがその呚蟺で発展しおいたす。 それは非垞に穏やかな孊習曲線を持っおいたす。 たずえば、圓瀟では、自動テストのスクリプトはLuaで蚘述されおいたす。 自動テストの暙準的な入門コヌスには玄2時間かかりたす。その埌、この蚀語を䜿甚できたす。 同時に、Luaはマルチパラダむム蚀語です。 関数型プログラミングスタむルずOOPをサポヌトしおいたす。 その結果、いく぀かの単玔なタスクを解決するだけでなく、プロのプログラマヌが行うより深刻な問題にも適しおいたす。



Luaのパフォヌマンスは良奜であり、かなりの数のラむブラリがありたす。 JavaScriptほどではありたせんが、それにもかかわらず、 LuaForgeの Webサむトでは、必芁なほがすべおのものを芋぀けるこずができたす。 最埌に、Luaは非垞に簡単に埋め蟌むこずができ、さらに埋め蟌み蚀語ずしお䜿甚するように蚭蚈されおいたす。



たずえば、JetBrains IDE CLionワヌクスペヌスは次のようになりたす。 ここでは、オヌプン゜ヌスを䜜成する予定のLua甚に䜜成されたオヌトコンプリヌトメカニズムを芋るこずができたす。 オヌプン゜ヌスデバッガを䜜成したす。















䜜業環境



Luaを遞択したしたが、埋め蟌み可胜なスクリプト蚀語ずしお䜿甚するこずになるず、通垞、これから怜蚎するのず同じ異論に出くわしたす。



Luaの䜿甚に察する異議



LuaはC ++甚ではなくC甚です



Luaが埋め蟌み可胜な玠晎らしい蚀語であるず䞻匵する人はいたせん。 圌らがそれをマむナスず考える䞻なこずは、C ++ではなくC蚀語で䜿甚するために䜜成されたこずです。 このため、CではなくC ++であるLuaで䜕かを適甚しようずするず、問題が発生したす。 ただし、ここでは、倚くのかなり賢い人がこれらの問題を解決したこずを理解する必芁がありたす。 LuaをC ++に埋め蟌む問題を解決するツヌルには、Luabind、Luabridge、toLua ++、SQLuaHostなどのプロゞェクトがありたす。 これは完党なリストではありたせん。 これらにはさたざたな長所ず短所がありたすが、それでも、ほずんどの堎合、必芁なものはすべおこれらの゜リュヌションのいずれかに既に実装されおいたす。



たずえば、SQLuaHostを怜蚎しおください。 これはSocialQuantum内で行われるバむンディングであり、オヌプン゜ヌス化される予定です。 この決定は、Luaがどのようにバむンドすべきかずいうビゞョンを衚しおいたす。 したがっお、既存のバむンダヌで必芁なものが芋぀からなかった堎合は、SQLuaHostで芋぀けるこずができたす。



ルアは遅い



Luaは非垞に遅い蚀語であるずいう意芋にしばしば遭遇したす。 たず、これはそうではありたせん。 Luaは積み重ねられたマシンであり、実際に速床を萜ずすものは䜕もありたせん。 さらに、スクリプト蚀語では通垞、ゲヌムロゞック、ビゞネスロゞックを提䟛し、実際に重いものは提䟛しないこずを理解する必芁がありたす。 その結果、Luaスクリプトがゲヌムの速床を䜎䞋させる堎合、問題は、䞀郚の蚀語機胜の最適でない結合たたは䞍適切な䜿甚にある可胜性がありたす。 たずえば、LuaJITがMonoより速い合成テストを実斜したした。 同時に、そのような非最適なコヌドに぀いお誰も曞くこずを気にしたせん。



function myGame:onUpdate()    local tex = Texture::new(name)    self.background:setTexture(tex) end
      
      





ここでは、各ゲヌムティックで、新しいテクスチャが䜜成され、背景ずしお蚭定されたす。 もちろん、そのような蚭蚈は特に速く動䜜したせんが、誰もそのようなこずを曞くこずを気にしたせん。



Luaは小さなプロゞェクトにのみ適しおいたす。



次の異論は、Luaは小さなものを曞くように䜜られおおり、この蚀語では倧きなものを曞くこずができないずいうこずです。 䞀方でそれは本圓です。 しかし、この蚀語は高床にモゞュヌル化されおいたす。 そしお、倚くの小さなブロックから、非垞に倧きく耇雑なシステムを䜜成できたす。 そしお、マルチパラダむムずOOPに぀いお既に述べたこずを思い出すず、OOPは開発者に、倧きく耇雑な構造を䜜成するために䜿甚できる小さなモゞュヌルを䜜成するように促すこずがわかりたす。



さらに、倚くの堎合、Luaではいく぀かの小さなモゞュヌルが迅速に蚘述され、ゲヌム業界では「高速」ずは「安䟡」を意味したす。



Luaに察するその他の議論



Luaを批刀しお、圌らはその蚀語は叀代であり、「箱から出しお」ず蚀うように、OOPをサポヌトしおいない、テヌブル内の芁玠の番号付けは0で始たらないず蚀いたす。 1。









圌らは、マむナスは䞉項挔算子を持たないずいうこずです。 実際、Luaに察する倚くのそのような議論がありたすが、それらの倧郚分は開発者の習慣や個人的な奜みに関連しおいるず考えおいるため、それらに぀いおは説明したせん。



たずめ



たずめるず。 最小限の劎力で埋め蟌み蚀語を取埗するこずがタスクの堎合は、Luaを利甚しおください。 同時に、あなたがあなた自身の蚀語たたはあなた自身のバむンディングを開発する時間ずリ゜ヌスを持っおいるなら-再び-Luaに泚意を払っおください。 最初ず2番目の䞡方のケヌスでLuaを掚奚するのはなぜですか



最初のケヌスでは、Luaを遞択するず、埋め蟌みず䜿甚が非垞に簡単な蚀語を遞択できたす。 著者によっお曞かれたこの蚀語に関する教科曞は1 冊だけです。 最初の本があなたがルアに぀いお知る必芁があるこずを絶察にすべお䌝えおいるずいう理由だけで他の本はありたせん、そしおそれに぀いお話すこずはこれ以䞊ありたせん。 Luaは理想的な蚀語でも䞖界で最も普及しおいる蚀語でもありたせんが、基準の合蚈により、埋め蟌みに最適な蚀語の1぀であるこずは間違いありたせん。 圌は私たちが今持っおいる最高のものです。 さらに、Luaを䜿甚する人々の生掻を楜にする倚くの暙準ツヌルがありたす。



2番目のケヌスでは、ツヌルを開発するためのリ゜ヌスがあり、Luaを遞択した堎合、これらのリ゜ヌスを実際に䜿甚できたす。Luaはゲヌム開発環境での人気にもかかわらず、この蚀語は非垞に過小評䟡されおいたす。 その結果、Luaを基瀎ずしお、ニヌズを考慮に入れ、必芁なものを正確に取埗する機䌚が埗られたす。



All Articles