Ho sviluppato un piccolo linguaggio di scripting e ho appena iniziato a scrivere i primi binding della libreria nativa. Questa è praticamente la prima volta che scrivo un'estensione nativa a un linguaggio di script, quindi mi sono imbattuto in un problema concettuale.
Mi piacerebbe scrivere il codice della colla per le librerie popolari in modo che possano essere utilizzate da questo linguaggio, e grazie al design del motore che ho scritto, questo si ottiene usando un array di C struct
s che descrive il nome della funzione visibile dalla macchina virtuale, insieme a un puntatore di funzione.
Quindi, un legame nativo è in realtà solo una variabile di array globale, e ora devo ovviamente dargli un nome (preferibilmente buono). In C, è idiota mettere le proprie funzioni in uno "spazio dei nomi" anteponendo un prefisso personalizzato ai nomi delle funzioni, come in myscript_parse_source()
o myscript_run_bytecode()
. Il nome personalizzato descriverà idealmente il nome della libreria di cui fa parte. Qui sorge la confusione.
Diciamo che sto scrivendo un'associazione per libcURL
. In questo caso, sembra ragionevole chiamare la mia libreria di estensioni curl_myscript_binding
, come questa:
MYSCRIPT_API const MyScriptExtFunc curl_myscript_lib[10];
Ma ora questo si scontra con lo spazio dei nomi curl
. (Ho anche pensato di chiamarlo curlmyscript_lib
ma sfortunatamente, libcURL non usa esclusivamente il prefisso curl_
- le API pubbliche contengono macro come CURLCODE_*
e CURLOPT_*
, quindi presumo che questo ingombrerebbe anche lo spazio dei nomi .)
Un'altra opzione sarebbe dichiararla come myscript_curl_lib
, ma va bene solo finché sono l'unico che scrive vincoli (dato che so cosa sto facendo con il mio spazio dei nomi). Non appena gli altri contributori iniziano ad aggiungere i propri binding nativi, ora ingombrano lo spazio dei nomi myscript
. (Ho fatto qualche ricerca, e sembra che ad esempio il collegamento Perl cURL segue questo schema Non sono sicuro di cosa dovrei pensare ...)
Quindi come suggerisci di nominare le mie variabili? Ci sono delle linee guida generali da seguire?