Frage

Ich überlege, einer bestehenden Codebasis Skriptfunktionen hinzuzufügen und wäge die Vor- und Nachteile verschiedener Pakete ab.Lua ist wahrscheinlich die naheliegendste Wahl, aber ich habe mich gefragt, ob die Leute aufgrund ihrer Erfahrung noch andere Vorschläge haben.

Skripte werden bei bestimmten Ereignissen ausgelöst und können für einen bestimmten Zeitraum resident bleiben.Beispielsweise kann ein Skript beim Start mehrere Optionen definieren, die das Programm dem Benutzer als Anzahl von Schaltflächen präsentiert.Wenn Sie eine dieser Schaltflächen auswählen, teilt das Programm dem Skript mit, wo weitere Ereignisse auftreten können.

Dies sind die einzigen wirklichen Anforderungen;

  1. Es muss sich um eine plattformübergreifende Bibliothek handeln, die aus dem Quellcode kompilierbar ist
  2. Skripte müssen in der Lage sein, registrierte codeseitige Funktionen aufzurufen
  3. Code muss in der Lage sein, skriptseitige Funktionen aufzurufen
  4. Kann innerhalb einer C/C++-Codebasis verwendet werden.
War es hilfreich?

Lösung

Basierend auf meiner eigenen Erfahrung:

  • Python.Meiner Meinung nach ist das eine gute Wahl.Wir haben eine ziemlich große Codebasis mit vielen Benutzern und sie mögen es sehr.
  • Rubin.Es gibt einige wirklich nette Apps wie Google Sketchup, die dies nutzen.Ich habe ein Sketchup-Plugin geschrieben und fand es ziemlich nett.
  • Tcl.Dies ist die altmodische, einbettbare Skriptsprache der Wahl, aber sie erfreut sich heutzutage nicht mehr großer Beliebtheit.Es ist jedoch von hoher Qualität, sie verwenden es im Hubble-Weltraumteleskop!
  • Lua.Ich habe nur Kleinigkeiten damit gemacht, aber IIRC hat nur einen numerischen Gleitkommatyp. Stellen Sie also sicher, dass dies kein Problem für die Daten darstellt, mit denen Sie arbeiten werden.

Wir haben das Glück, im goldenen Zeitalter der Skripterstellung zu leben, daher ist es schwierig, eine schlechte Wahl zu treffen, wenn man sich für eines der beliebtesten entscheidet.

Andere Tipps

Ich habe ein bisschen damit herumgespielt Spinnenaffe.Es scheint, als wäre es in Ihrer Situation zumindest einen Blick wert.Ich habe auch Gutes über Lua gehört.Das große Argument für die Verwendung einer Javascript-Skriptsprache ist, dass viele Entwickler sie bereits kennen und sich wahrscheinlich von Anfang an wohler fühlen würden, während Lua höchstwahrscheinlich eine gewisse Lernkurve haben würde.

Ich bin mir nicht ganz sicher, aber ich denke, dass Spidermonkey Ihre 4 Anforderungen erfüllt.

Ich habe Python zu diesem Zweck ausgiebig genutzt und es nie bereut.

Lua verfügt über die einfachste C-API zum Einbinden in eine Codebasis, die ich je verwendet habe.Tatsächlich rolle ich die Bindungen dafür normalerweise schnell von Hand.Ohne einen solchen Generator würde man dies jedoch oft nicht in Betracht ziehen Schluck für andere.Außerdem ist es normalerweise schneller und leichter als die Alternativen Coroutinen sind eine sehr nützliche Funktion, die nur wenige andere Sprachen bieten.

AngelScript

ermöglicht den Aufruf von Standard-C-Funktionen und C++-Methoden, ohne dass Proxy-Funktionen erforderlich sind.Die Anwendung registriert lediglich die Funktionen, Objekte und Methoden, mit denen die Skripte arbeiten können sollen, und Sie müssen nichts weiter mit Ihrem Code tun.Dieselben Funktionen, die von der Anwendung intern verwendet werden, können auch von der Skript-Engine verwendet werden, wodurch die Notwendigkeit einer Duplizierung von Funktionen entfällt.

Für den Skriptautor folgt die Skriptsprache der weithin bekannten Syntax von C/C++ (mit geringfügigen Änderungen), ohne sich jedoch um Zeiger und Speicherlecks kümmern zu müssen.

Die ursprüngliche Frage beschrieb Tcl als „T“.

Tcl wurde von Anfang an als eingebettete Skriptsprache konzipiert.Es hat sich zu einer eigenständigen dynamischen Sprache erster Klasse entwickelt, wird aber immer noch auf der ganzen Welt als eingebettete Sprache verwendet.Es ist unter der BSD-Lizenz verfügbar und daher so kostenlos wie es nur geht.Es lässt sich auch auf nahezu jeder modernen Plattform kompilieren, auch auf vielen, die nicht so modern sind.Und es funktioniert nicht nur auf Desktop-Systemen, es sind auch Variationen für mobile Plattformen verfügbar.

Tcl zeichnet sich als „Klebstoffsprache“ aus, mit der Sie leistungsintensive Funktionen in C schreiben und gleichzeitig von den Vorteilen einer Skriptsprache für weniger leistungskritische Teile der Anwendung profitieren können.

Tcl wird außerdem mit einem erstklassigen GUI-Toolkit (Tk) geliefert, das wohl eines der einfachsten verfügbaren plattformübergreifenden GUI-Toolkits ist.Es lässt sich auch sehr gut mit SQLite und anderen Datenbanken verbinden und verfügt seit geraumer Zeit über eine integrierte Unterstützung für Unicode.

Wenn die Skriptschnittstelle Ihren Kunden zur Verfügung gestellt wird (anstatt einfach Ihren eigenen Ingenieuren die Arbeit auf der Skriptebene zu ermöglichen), ist Tcl äußerst einfach zu erlernen, da es insgesamt nur 12 Regeln gibt, die die gesamte Sprache regeln (wie z. B von Tcl 8.6).Tatsächlich glänzt Tcl als Möglichkeit, domänenspezifische Sprachen zu erfinden, und wird daher häufig als Skriptlösung für Endbenutzer verwendet.

Es gab bereits einige hervorragende Vorschläge, aber ich wollte nur erwähnen, dass Perl auch aufgerufen werden kann bzw. C/C++ aufrufen kann.

Sie könnten wahrscheinlich jede moderne Skript-/Bytecode-Sprache verwenden.

Wenn Sie bereit sind, die Wachstumsschwierigkeiten eines neuen Produkts in Kauf zu nehmen, können Sie das verwenden Papagei VM.Das unterstützt viele, wenn nicht alle der auf dieser Seite aufgeführten Sprachen.Leider ist es noch nicht fertig, aber das hat einige Leute nicht davon abgehalten, es in einer Produktionsumgebung zu verwenden.

Ich denke, die meisten Leute erwähnen wahrscheinlich die Skriptsprache, mit der sie am besten vertraut sind.Aus meiner Sicht wurde Tcl speziell für die Schnittstelle mit C entwickelt, sodass Ihre Problemdomäne maßgeschneidert für die Sprache ist.Ich bin jedoch sicher, dass Python, Perl oder Lua in Ordnung wären.Sie sollten wahrscheinlich die Sprache wählen, mit der Ihr aktuelles Team am besten vertraut ist, da dies die Lernzeit verkürzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top