2009-09-10 7 views
9

Ich habe ein C++ serverseitiges Projekt, in das ich eine Art Scripting einbetten muss. Es ist Teil eines Online-MMO-Servertyps. Ich habe signifikante Erfahrung mit TCL, und es scheint wie die natürliche Passform. Ich habe eine minimale Menge an Lua in meinen Game Dev Tagen gemacht, und ich frage mich, ob dies eine bessere Sprache für Embedded Scripting sein könnte. Es ist auch schön, eine neue Sprache zu lernen. Was sind die relativen Stärken und Schwächen von TCL vs Lua? Vielen Dank!TCL vs Lua - Skripting eines mmo-Servers

Antwort

20

Ehrlich gesagt sind sie beide sehr gut für die Aufgabe geeignet. Beide sind einfach in eine Anwendung einzubetten und haben eine relativ einfache Syntax. Ich weiß in der Tat, dass es sehr einfach ist, neue Befehle (um mit der Anwendung zu interagieren) in Tcl hinzuzufügen, und mir wurde gesagt, dass Lua auch bei dieser Art von Dingen sehr gut ist.

Meine Empfehlung wäre, eine Weile mit Lua herumzuspielen, um zu sehen, wie es Ihnen gefällt (da Sie Tcl bereits kennen) ... und dann wählen Sie diejenige, die sich am wohlsten fühlt. Wenn Sie viel vom Code schreiben, werden Sie viel damit arbeiten, so dass Sie etwas brauchen werden, das Sie auch verwenden können. Am Ende sollten beide Sprachoptionen für Ihre Endbenutzer relativ einfach zu schreiben sein.

Meine persönliche Vorliebe ist Tcl, sowohl weil ich Lua nicht mag (ich habe eine vernünftige Menge an Programmierung dafür gemacht Warcraft fügt hinzu) und weil ich Tcl liebe (ich habe eine Menge Programmierung für professionelle und private Arbeit gemacht).

Bearbeiten: Der Hinweis hinzugefügt, dass beide für Endbenutzer einfach zu sein. Habe 2 Stimmen erhalten und konnte mir nichts anderes einfallen lassen als den Warum-Teil meiner Aussage zu erklären.

6

Die Lua C API ist extrem einfach in eine Anwendung zu integrieren. Von C aus haben Sie vollständigen Zugriff auf den Lua-Status und seine nativen Datentypen. Ich habe empfohlen, Lua nur zu verwenden, um die Implementierung der Hashtabelle zu erhalten, ohne dass beispielsweise Skripts benötigt werden.

In C geschriebene Lua-Funktionen können als globale Namen eingefügt, in einer Tabelle wie die meisten Standardbibliotheksfunktionen gesammelt oder in DLLs implementiert und zur Laufzeit dynamisch geladen werden. Dies ermöglicht es der Anwendung, eine stabile API bereitzustellen und Plugins zu unterstützen, die entweder in Lua oder in C++ geschrieben sind, da eine Sprache überraschend leistungsfähig ist und sowohl funktionale als auch objektorientierte Programmierstile unterstützt. Es ist auch überraschend leicht: Das vollständige Quellkit und die vollständige Dokumentation passen gut unter 1 MB, und die gesamte VM, Compiler und Standardbibliotheken in einer DLL sind nur 164 KB unter Windows.

Ich habe nicht TCL seit Version 2 oder so ernsthaft untersucht ... Ich werde nicht versuchen, sie auf eine konkrete Weise zu vergleichen. Ich glaube, dass beide erfunden wurden, um in die gleiche Nische zu passen und ungefähr zur gleichen Zeit. Sie sind sicherlich beide ausgereifte Sprachen mit begeisterten Benutzergemeinschaften.

7

Ich vermute, dass Tcl mehr Bibliotheken haben wird, die Sie möglicherweise notwendig oder bequem auf dem Weg finden.

16

Ich denke, ich bin das Gegenteil von RHSeeger dort. Ich habe sowohl Lua als auch TCL verwendet, die in Spielen eingebettet sind (Online-Spiele übrigens), und ich würde TCL nicht wieder mit einem 10-Zoll-Bargepole anfassen, wenn ich die Wahl hätte. Meine sehr subjektive Meinung ist, dass Lua eine vernünftige Sprache ist und TCL nicht. Relativ zu den anderen Optionen für Skriptsprachen ist die TCL-Syntax für die meisten Leute sehr undurchsichtig, mit all den gesetzten und expr und Dollarzeichen und vielen Klammern etc. Der einzige objektive Vorteil ist die Einfachheit der Einbettung - aber Lua ist keine Lüge diese Abteilung entweder.

Wenn diese Scripting-Oberfläche nur für Sie gedacht ist, können Sie auch TCL verwenden, da Lua Ihnen nichts neues bietet (es sei denn, die Objektorientierung ist Ihre Sache). In den Händen eines erfahrenen Benutzers ist TCL ein vernünftiges Werkzeug.Wenn Sie jedoch erwarten, dass weniger erfahrene Benutzer das System verwenden, dann sollten Sie mit Lua gehen - die einfachere Syntax wird ihnen eine Menge Produktivität bringen.

+5

Ich finde es amüsant, dass wir solche gegensätzlichen Meinungen haben können. Alles, was du sagst, macht Lua besser als Tcl, ich würde sagen, Tcl ist besser als Lua. Die Tcl-Syntax ist für mich wesentlich sauberer und offensichtlicher als Lua's usw. – RHSeeger

+10

Ich stimme RHSeeger zu dem Kommentar zu, dass "was du über Lua sagst, würde ich über Tcl sagen". Du (Kylosan) sagtest du dachtest, Lua sei besser für weniger erfahrene Benutzer, aber ich denke auch, dass das rückwärts ist. Das Hauptproblem von Tcl IMO ist, dass erfahrene Programmierer zu viel Gepäck mit sich herumtragen - Erwartungen darüber, wie eine Sprache funktionieren sollte. Tcl ist wegen seiner Einfachheit unkonventionell, aber diese Einfachheit ist seine Stärke. Alles, was Sie über Tcl wissen müssen, kann auf einer einzigen Webseite ausgedrückt werden. –

+3

Dies steht kurz davor, in "Sprachkriege" zu verfallen. Ich denke, es ist eine Frage des richtigen Tools für den Job, und, abgesehen von der Syntax, sind beide Tools in diesem Fall fast gleich geeignet, aber meiner Meinung nach gewinnt Tcl wegen seiner Reife und deshalb ist es Bibliotheken; tatsächlich scheint Lua in dieser Abteilung notorisch zu sein. Was die Syntax angeht, scheinen ja Lua's vertrauter zu sein, fast Basic/Python-artig, und das könnte tatsächlich eine Stärke sein. Aber für diejenigen, die nur die Oberfläche von Tcl gekratzt haben, fordere ich Sie auf: Scratch Tiefer. Wenn Sie es bekommen, ist es praktisch auf dem gleichen Niveau wie Lisp oder Haskell. –

7

Wie andere gesagt haben, würden beide Sprachen sehr gut funktionieren. Eine dritte Option, die wahrscheinlich auch funktionieren würde, ist JavaScript, da es in etwa die gleiche Nische passt. Anstatt zu versuchen, Sie zu dem einen oder anderen zu verheiraten (Da ich beide Sprachen sehr mag), werde ich versuchen, mich auf einige der objektiven Unterschiede zu konzentrieren und darauf hinzuweisen, wo ich denke, dass einer dem anderen voraus ist.

Das wichtigste Problem in einem Spieleserver ist wahrscheinlich rohe Leistung. Beide Sprachen sind ausgereift und gut optimiert, aber beide erkennen auch, dass einige Probleme am besten durch den Verzicht auf kompilierten Code optimiert werden. Beide Sprachen verwenden grundsätzlich denselben Mechanismus, um dies auszuführen. Aus der Sicht der Sprachen selbst sieht es so aus, als wäre Lua nur ein bisschen schneller. link

Aus der Sicht der Bibliotheken, die der nächste große Faktor ist, erfordert keine Sprache die Verwendung von Bibliotheken, um nützlich zu sein; das bedeutet, dass beide Sprachen sehr kompakt sind, verglichen mit Sprachen wie Java, die große Laufzeitbibliotheken benötigen, um nützlich zu sein; Dies ist wiederum eine Folge ihrer ursprünglichen Designanforderungen. Beide Sprachen haben reichlich Auswahlbibliotheken zur Auswahl, aber es ist zumindest mein Eindruck, dass TCL etwas mehr Abwechslung in dieser Kategorie hat. tcl :(Tcl Extension Archive/Tcl Extension Repository) lua: (LuaForge)

Ein weiterer Unterschied besteht zwischen den Kernsprachen selbst. Beide Sprachen schätzen Einfachheit gegenüber Stil, aber hier endet die Ähnlichkeit. Lua verwendet die für die meisten Programmierer wohlbekannte Syntax mit einer sehr einfachen kontextfreien Grammatik. Die TCL-Syntax ist ebenfalls einfach, hat aber mit anderen existierenden Sprachen nichts wirklich gemeinsam, obwohl sie oberflächlich ein wenig wie eine UNIX-Shell-Sprache aussieht. Tcl ist wahrscheinlich nur für Nicht-Programmierer einfacher, weil seine zeilenorientierte Befehlssyntax ziemlich klar ist, aber Programmierer, die in anderen Sprachen erfahren sind, widersprechen normalerweise ihrer arkanen Syntax. Weder bei der Code-Generierung, noch bei beiden ist die Metaprogrammierung stark ausgeprägt (vergleichbar, aber vielleicht nicht so robust wie bei CLISP-Makros).

+0

Ich habe nicht an Javascript gedacht. Das ist eine mögliche Idee .... –

+1

Javascript hat vielleicht den Vorteil, dass es bei Gelegenheits-Codierern bekannt ist, aber es hat definitiv den Nachteil von spärlichen Laufzeit-Bibliotheken, zumindest für die C-Implementierungen. – SingleNegationElimination

0

Lua hat LuaJIT, das ist ein JIT-Compiler, der C-Geschwindigkeiten auf engen Schleifen erreicht und für Projekte wie Snabb Switch verwendet wird, wo die Leistung kritisch ist (Snabb kann Gigabits pro Sekunde verarbeiten, alle über LuaJIT verarbeitet). LuaJIT hat auch eine einfach zu bedienende FFI, die es ermöglicht, auf C-Funktionen zuzugreifen, ohne C-Stub-Code schreiben zu müssen.

PUC-Lua (die Standardimplementierung) unterstützt die Wiederherstellung des Arbeitsspeichers. Weder LuaJIT noch TCL.