Ich suche zwei Dinge - Geschwindigkeit und Integration. Normalerweise gehören die beiden zusammen und mit Vertrautheit. Leider gibt es für C ++ so gut wie keine Sprachen, die Geschwindigkeit und Integration bieten. Ich habe Lua benutzt und es saugte schrecklich. Ich habe die ganze Zeit damit verbracht, Bindungen zu schreiben und bei weitem nicht genug Zeit, um tatsächlich Code zu schreiben.
Sprachmerkmale? Das Einbetten einer Skriptsprache dient nicht dazu, dass sie über dynamische Funktionen verfügt, die meine Originalsprache nicht hatte, sondern dass sie zur Laufzeit interpretiert werden kann . Darüber hinaus ist mir das wirklich egal, solange es im Grunde genommen funktionsfähig ist, dann ist das in Ordnung - und passt zu meiner Hostsprache (in diesem Fall C ++). Erstaunlicherweise scheitern Sprachen, die für die Integration in Hostanwendungen ausgelegt sind, jedoch vollständig an der Integration .
Benötige ich Co-Routinen? Nein, ich brauche keine Co-Routinen. Benötige ich dynamisches Tippen? Nein, ich muss wissen, welche Typen aus meiner Skriptsprache auf mich zurückkommen, und da mein gesamter vorhandener Code auf sehr starker Typisierung basiert, möchte ich wirklich, dass mein Skriptcode dies auch respektieren kann. Benötige ich Müllabfuhr? Nein, meine Typen verwalten bereits ihre eigenen Ressourcen, und ich möchte definitiv deterministische Zerstörung. Will ich gehen Nein, ich möchte Ausnahmen werfen.
Das Problem, das ich fand, war, dass im Grunde alle vorhandenen Skriptsprachen so konzipiert waren, dass sie C und nicht C ++ erweitern und das C ++ - Modell in vielerlei Hinsicht nicht richtig unterstützen. Außerdem haben sie eine völlig andere Semantik. Wie um alles in der Welt werde ich übersetzen?shared_ptr
, was automatische deterministische Zerstörung ist, in eine von Müll gesammelte Umgebung übersetzen? Sie können beliebige Wrapping-Bibliotheken schreiben. Sie werden nicht ändern, dass die zugrunde liegende Sprachsemantik nicht mit der Sprache kompatibel ist, die Sie damit erweitern möchten. Wie kann ich sicherstellen, dass dies void*
der richtige Typ ist? Wie kann ich mit Vererbung umgehen? Wie werfe und fange ich Ausnahmen? Es funktioniert einfach nicht.
Eine gute Skriptsprache für C ++ wäre statisch typisiert, Wertesemantik, deterministisch zerstört, Ausnahmen auslösen und abfangen und meine Destruktoren / Konstruktoren / Kopierkonstruktoren respektieren, da dann alle meine Typen einfach funktionieren, nett und einfach, und die resultierende Sprache wird es sein schnell und unterstütze alle meine ursprüngliche Semantik, einfach zu binden.