Ho un compilatore per un linguaggio di programmazione che ha come target JavaScript. Quel linguaggio ha bisogno di alcune funzioni globali come: alloc
, memcpy
, write
e così via. La mia domanda è: dove dovrei posizionare quelle funzioni? Ho praticamente 2 opzioni:
1: all'interno di un oggetto autonomo, runtime
. Le funzioni compilate dovrebbero ricevere quell'oggetto:
function example_of_compiled_function(runtime, arg0, arg1){
var arrayPtr = runtime.alloc(arg0);
for (var i=0; i<arg0; ++i)
runtime.write(arrayPtr+i, arg1);
return arrayPtr;
};
2: globalmente. Le funzioni compilate non avrebbero bisogno di ricevere un oggetto aggiuntivo:
function example_of_compiled_function(arg0, arg1){
var arrayPtr = alloc(arg0);
for (var i=0; i<arg0; ++i)
write(arrayPtr+i, arg1);
return arrayPtr;
}
Entrambi i modi hanno problemi. Per (1), c'è un notevole rallentamento per l'accesso ai metodi all'interno di un oggetto, e l'uso di funzioni compilate diventa più complicato dal momento che gli utenti devono creare manualmente quell'oggetto e alimentarlo a loro. Per (2), è più veloce e più semplice, ma potrebbe inquinare lo spazio dei nomi globale. C'è una soluzione soddisfacente per questo?