2009-08-15 4 views
5

Ich habe an einem C-Programm gearbeitet, das eine ganze Reihe von String-Manipulationen durchführt und sehr oft für eine Sonderfallbearbeitung optimiert und neu kompiliert werden muss. Ich habe gedacht, dass die Einbettung einiger Skriptsprachen mit guter Unterstützung für die String-Manipulation für das Projekt sinnvoll sein könnte.Einbettbare Sprache mit guter Unterstützung für die Zeichenfolgenbearbeitung

Welche Sprache würde die beste Unterstützung für die String-Manipulation bieten und gleichzeitig einfach in ein C-Programm eingebettet werden?

Für etwas mehr Hintergrund ...

  • Leistung ziemlich wichtig ist (vor allem Anlaufzeit)
  • Needs leicht auf mehreren Plattformen kompiliert werden (Linux, Solaris, Win32 (idealerweise mit MinGW), Darwin)
  • braucht eine Sprache zu sein, die immer noch um in 5 Jahren sein wird

ich ein wenig in Python geschaut haben (vielleicht zu schwer Gewicht?) und Lua (vielleicht nicht auf strin fokussiert g manipulation?), aber ich weiß nicht genau genug über sie oder welche anderen Möglichkeiten es gibt.

Antwort

0

Perl. Sein (ursprünglicher) Grund für das Sein ist eine String-Manipulation.

+0

Aber überhaupt nicht leicht in ein C-Programm einzubetten von dem, was ich verstehe. Kennst du anders? –

+0

Ich habe es nie versucht, persönlich habe ich C/C++ nicht viel mehr als "Hello World" benutzt. Ich kenne mindestens ein (C++ ich denke) Opensource-Projekt, das es zwar einbettet, wenn Sie herumstochern und sehen wollen, wie es gemacht wird. –

+0

Ja, wie heißt es? –

3

Die Menschen haben tcl in größeren Projekten für das Alter eingebettet scheint. Es ist eine Weile her, seit ich tcl für alles verwenden musste ...

Eines der Dinge, die Tcl von anderen Programmiersprachen unterscheidet, ist, dass alles ist eine Zeichenfolge.

Und zu Ihrer Referenz, hier ist die tcl documentation on string functions.

tcl könnte einfacher zu embed als perl sein, aber ich muss @ Matthew Scharleys Argumentation zustimmen. Auch ist tcl nicht gerade für seine Leistung bekannt, aber vielleicht hat sich das in den letzten Jahren geändert.

Wie auch immer, here is the tcl wiki link on embedding tcl in C applications und ein relevantes Zitat von der Seite: "Wie binde ich ein Tcl-Interpreter in meinem vorhandenen C (oder C++) Anwendung"

ist eine sehr häufig gestellte Frage. Es ist einfach, sicherlich viel einfacher, als das Gleiche mit Perl oder generell Python zu tun; Darüber hinaus war diese Art von "Einbettbarkeit" eines der ursprünglichen Ziele für Tcl, und viele, viele Projekte tun es. Es gibt keine vollständigen Diskussionen zum Thema, aber wir können hier einen Überblick geben. (RWT 14-Oct-2002)


Eine weitere Alternative könnte mit Lua gehen, wie Sie bereits erwähnt, während es mit einer anderen C-String-Bibliothek Ihrer Wahl erstreckt (Google auftaucht The Better String Library, zum Beispiel) .

Sobald Sie Lua in Ihre Anwendung kompiliert haben, you can "extend" C functions to Lua's interpreter. Oder vielleicht the built-in string functions sind für Sie angemessen.

Sie haben sicherlich ein paar Optionen.

10

Ich habe es nie bereut, Lua zu benutzen.

Es ist sehr einfach, in Ihrer Anwendung einzubetten. Tatsächlich schreibe ich normalerweise keine C-Anwendungen, sondern schreibe C-Bibliotheken und steuere sie von Lua aus.

Textmanipulation ist nicht die beste Eigenschaft, aber es ist sicherlich viel besser als C allein. Und die Bibliothek LPEG macht das Erstellen von Parsern fast trivial, was jeden Regex in den Schatten stellt (hat aber immer noch ein paar Regex-artige Syntaxen, wenn Sie sie bevorzugen).

+3

In der einbettbaren Sprachnische ist Lua einfach perfekt - klein, perfekte Portabilität (striktes C++ - kompilierbares ANSI C-Subset), saubere und einfache Syntax, minimale aber bequeme Standardbibliothek, leichte Erweiterbarkeit (ich glaube, es schlägt Python dort), und sehr gute Dokumentation. Meine vergangenen Erfahrungen mit Lua waren nichts als positiv. Es kann nicht sofort über die Funktionen zur Zeichenfolgenbearbeitung verfügen, aber Sie können problemlos alle benutzerdefinierten Funktionen bereitstellen, die für diesen Zweck erforderlich sind (Regex usw.). –

+2

+1 für das Schreiben von C-Bibliotheken, die von Lua aus gesteuert werden. Das ist auch für mich immer üblicher geworden. – RBerteig

+0

Vergessen Sie nicht, dass Lua einige Benchmark-Wettbewerbe gewinnt, und das, bevor Sie einen JIT-Compiler für seinen Bytecode einbinden. Und ein JIT ist ebenfalls verfügbar, siehe http://luajit.org/ für die blutigen Details. – RBerteig

3

Wir haben Python und Lua für Skripting für ein .NET-Produkt angeschaut. Ziel war es, den Endbenutzern eine gewisse Skriptfähigkeit zu bieten. Die Entscheidung fiel auf Python, weil die Machthaber alles andere als Microsoft unterstützten. Meine Wahl war für Lua.

1

Einige Leute stimmen vielleicht nicht überein, aber Sara Goleman hat a great book zum Erweitern und Einbetten von PHP veröffentlicht. Welche wird eine der am meisten verwendeten Sprachen um ... :)

PHP String-Unterstützung ist nicht so gut wie sagen Perl, aber es ist sehr brauchbar.

Habe ich erwähnt, dass es in C geschrieben ist? </my2cents >

+0

Welche Vorteile bietet PHP als eingebettete Sprache? Irgendein solches ist normalerweise domänenspezifisch, so große Popularität anderswo ist kein großer Faktor. Und PHP hat viele Kritiker als eigenständige Sprache. –

1

Python ist kein Schwergewicht! Es ist ziemlich einfach einzubetten (hier ist die official guide, aber Sie können auch viele Tutorials finden), sehr leistungsfähig, ideal für die String-Verarbeitung, und eine angenehme und einfache Sprache insgesamt zu verwenden. Es hat eine riesige Benutzergemeinschaft und Support-Basis, was ein Bonus ist.

Python wurde auch in eine große Anzahl von Real-Life-Anwendungen eingebettet. Ein cooles Beispiel, an das ich sofort denken kann, ist das Civilization IV-Spiel, von dem die meisten auf Python-Skripten auf einer C++ - API basieren.

3

Es gibt einen guten Überblick Papier über die relativen Vorteile der Einbettung APIs verschiedener Sprachen Scripting:

H. Muhammad and R. Ierusalimschy. C APIs in extension 
and extensible languages. Journal of Universal Computer 
Science, 13(6):839–853, 2007. 

bei Kombination der Suche sowohl ausgezeichnete String-Manipulation und eine ausgezeichnete embed API, würde ich vorschlagen, um:

  • Ruby: Ausgezeichnete String-Unterstützung, einschließlich Syntax-Unterstützung für Regex. Gut gestaltete Embed API, sehr einfach zu bedienen.
  • Lua: Ich bin mir nicht sicher, wie seine String-Unterstützung ist, aber es soll eine großartige Sprache für die Einbettung sein.
  • Python: Weniger einfach einzubetten, etwas schwieriger zu verwenden String-Funktionen als Ruby. Aber es hat Pyrex, also könnte es ein einfacherer Weg sein, es einzubetten.
  • PHP: Nasty API, böse Sprache. Die Einbettung SAPI ist wirklich ein Bürger der zweiten Klasse, aber es funktioniert. Es gibt eine Menge von String-Manipulationsfunktionen. Trotzdem würde ich es nicht empfehlen.
  • Perl: Nasty zu einbetten (so weit ich gehört habe), könnte String-Unterstützung besser sein.

Ich kann nicht über TCL kommentieren, aber ich höre es ist für die Einbettung konzipiert.

4

steht Kopf und Schultern über andere Möglichkeiten.

... beste String-Manipulation Unterstützung, während einfach zu integrieren?

Lua ist entworfen in C eingebettet werden; die API ist klar und einfach zu verwenden; Die Dokumentation ist großartig.

Einige andere Antworten haben Lua's String-Fähigkeiten verunglimpft. Ich denke sie unterschätzt Lua. Lua's String-Fähigkeiten finden tatsächlich einen "Sweet Spot" zwischen "nur Verkettung" und der vollen Komplexität regulärer Ausdrücke. Die Fähigkeit zur String-Formatierung ist sehr stark und das Akkumulieren von Strings durch "Puffer" oder Tabellen ist einfach und effizient.

String-Scannen ist meiner Meinung nach einer der besten Teile des Designs. Es hat keine "oder" Muster, aber ansonsten gibt es einen großen Teil von dem, was man von regulären Ausdrücken erhält, einschließlich einer sehr mächtigen und eleganten "Capture" -Funktion. Zum Beispiel kann ich einen String in Hex durch jedes einzelnes Zeichen Erfassung und Anwendung eine Funktion, um es konvertieren:

s:gsub('.', function(c) return string.format("%02x", string.byte(c)) end) 

Oder ich kann nicht-alphanumerische Zeichen, Nicht-Leerzeichen in Oktal entkommen:

s:gsub('[^%w%s]', function(c) return string.format([[\%03o]], string.byte(c)) end) 

Einige der Funktionen auf dem Display hier:

  • Das Escape-Zeichen für String-Scanning % ist, das ist verschiedene aus dem Escape-Zeichen für die String-Quotierung, die \ ist. Diese Entscheidung ist brillant und sollte eine Auszeichnung für sich :-)

  • Es gibt mehrere Mechanismen für die Quotierung Literalzeichenfolgen, einschließlich [[...]], in dem keine Zeichen zu entkommen gewinnen. Wenn Sie Zeichenfolgen mit umgekehrten Schrägstrichen in ihnen generieren oder zuordnen möchten (wie LaTeX zum Beispiel), ist dies ein Glücksfall.

Wenn Sie die volle Leistung eines kontextfreien Parser möchten, können Sie immer LPEG verwenden, eine Bibliothek von einem Lua-Designer geschrieben.

Leistung ist ziemlich wichtig (vor allem Anlaufzeit)

Lua gewinnt konsequent Leistung ausgezeichnet. Der Start ist blitzschnell: Das gesamte System (einschließlich Compiler, Bibliothek, Garbage Collector und Laufzeitsystem) passt in 150 KB. Um Pausenzeiten zu vermeiden, bietet Lua inkrementelle Garbage Collection. Siehe SO auch Why is Lua faster than other scripting languages?

Frage, die Sie Startup machen können noch schneller durch Ihre Skripte Vorkompilieren, aber ich habe nie es notwendig, diese — und weil Code kompiliert zu tun (wie auf den Quellcode im Gegensatz) ist nicht tragbar, Precompilieren verursacht normalerweise mehr Kopfschmerzen als es löst.

Needs leicht auf mehreren Plattformen

kompiliert werden

Lua kompiliert unter Verwendung von reinem ANSI C und nicht einmal POSIX erfordern. Ich habe eine Version auf meinem PalmOS PDA.

Muss eine Sprache sein, die noch in 5 Jahren sein wird.

Lua gibt es seit 1993. Darüber hinaus sind die beiden Mitglieder des Teams, die am meisten Unterstützung leisten, Professoren an der PUC-Rio. Lua ist ihr Lebensunterhalt. Schließlich besteht das gesamte System aus nur 17.000 Zeilen Code. Wenn Rio morgen von der Landkarte fiel, konnte jeder mit einem guten Undergraduate-Compiler-Kurs das System aufgreifen und aufrechterhalten. Es würde viele Freiwillige geben.

Ich habe ein wenig in Python und Lua aussehen, aber nicht wirklich weiß genug über sie

SO Which game scripting language is better to use: Lua or Python? Frage sehen.

Verwandte Themen