Bij een project ben ik bezig om de Google V8 Javascript engine te gebruiken voor wat bindings. Het programma maakt communicatie met diverse hardware en ik gebruik de Javascript als scripttaal om bijvoorbeeld initialisatiecode die soms kan veranderen aan te sturen.
Om dit te organiseren moet ik dus een aantal wrappers gaan maken tussen V8 en de huidige C++ classes. Ik wil echter lang niet alle classes exporteren want naar de 'buitenwereld' (javascript) zal dit anders zijn. Nu zijn er een aantal mooie generators dus dat is op zich niet het probleem.
Wat het probleem echter wel is is dat het programma modulair is opgebouwd en afhankelijk van de modules er dus functies beschikbaar komen. Om te voorkomen dat het een #define-hell gaat worden ben ik al gestart met een managerobject welke alle geëxporteerde functies bij gaat houden. Alle objecten die laden kunnen dan dus functies registreren bij dit object (en als ze ontladen worden functies deregisteren).
Aangezien V8 helemaal tijdens de runtime geladen wordt is dit niet echt een probleem, hooguit goede locking om te voorkomen dat functies worden aangeroepen die niet bestaan.
Tevens kan ik met een dergelijk managerobject ook bijvoorbeeld een console-interface kan implementeren (eenvoudig een lijst van functies te geven en aan te roepen). Op zich zou ik deze console ook via javascript kunnen doen maar dit lijkt mij wat meer overhead hebben. Zeker omdat ik de Javascript-support voorlopig ook nog even optioneel wil houden...
Zit ik met een dergelijke manager op de goede weg? Ik registreer dan functiepointers naar public functies van klassen. Ik zag dat Boost ook wel het een en ander heeft alleen dat gebruik vooralsnog niet.
Om dit te organiseren moet ik dus een aantal wrappers gaan maken tussen V8 en de huidige C++ classes. Ik wil echter lang niet alle classes exporteren want naar de 'buitenwereld' (javascript) zal dit anders zijn. Nu zijn er een aantal mooie generators dus dat is op zich niet het probleem.
Wat het probleem echter wel is is dat het programma modulair is opgebouwd en afhankelijk van de modules er dus functies beschikbaar komen. Om te voorkomen dat het een #define-hell gaat worden ben ik al gestart met een managerobject welke alle geëxporteerde functies bij gaat houden. Alle objecten die laden kunnen dan dus functies registreren bij dit object (en als ze ontladen worden functies deregisteren).
Aangezien V8 helemaal tijdens de runtime geladen wordt is dit niet echt een probleem, hooguit goede locking om te voorkomen dat functies worden aangeroepen die niet bestaan.
Tevens kan ik met een dergelijk managerobject ook bijvoorbeeld een console-interface kan implementeren (eenvoudig een lijst van functies te geven en aan te roepen). Op zich zou ik deze console ook via javascript kunnen doen maar dit lijkt mij wat meer overhead hebben. Zeker omdat ik de Javascript-support voorlopig ook nog even optioneel wil houden...
Zit ik met een dergelijke manager op de goede weg? Ik registreer dan functiepointers naar public functies van klassen. Ik zag dat Boost ook wel het een en ander heeft alleen dat gebruik vooralsnog niet.
Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!