[C++] Implementeren van opdrachtinfrastructuur icm JS (v8)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 19-09 16:51

LauPro

Prof Mierenneuke®

Topicstarter
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.

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik zou std::(tr1::)function gebruiken, die is een stuk flexibeler dan pointer-to-memberfunctions. Deze is inderdaad gebaseerd op boost::function, maar wel standaard C++ (TR1 danwel C++11).

Of je designtechnisch verder op de goede weg ben kan ik je moeilijk mee adviseren, daarvoor geef je te weinig details.

[ Voor 24% gewijzigd door .oisyn op 15-07-2012 00:04 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 19-09 16:51

LauPro

Prof Mierenneuke®

Topicstarter
Dank! De std::tr1::function is wat ik zocht. Gek genoeg werkt std::function niet zoals ik het wil maar prima, die tr1 compileert voor zover ik nu heb kunnen zien op 4 platformen (linux-arm32, linux-x64, macosx-64 en win64).

Het enige waar ik nu ook een beetje tegenaan loop is dat ik volgens mij voor alle gebruikte objecten geëxporteerd naar V8 een reference counter moet gaan maken. Als een javascript bijvoorbeeld 10 minuten draait (procedureel) en een module valt weg dan kan die module niet zomaar weg gaan zonder dat A) de javascript klaar is of B) het javascript is geannuleerd.

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

std::(tr1::)shared_ptr geeft je automatische reference counting ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.