Qual è il modo corretto di pubblicare un runtime? Dovrebbe essere un singleton?

3

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?

    
posta MaiaVictor 31.12.2014 - 01:45
fonte

1 risposta

1

Che ne dici di mettere runtime in una chiusura?

function mycode(runtime) {    
   function example_of_compiled_function(arg0, arg1){
    var arrayPtr = runtime.alloc(arg0);
    for (var i=0; i<arg0; ++i)
        runtime.write(arrayPtr+i, arg1);
    return arrayPtr;
   }
};

Basta passare in runtime a questa funzione (o qualsiasi altra funzione generata), e sarà accessibile a tutti i codici nella chiusura senza passarla esplicitamente ovunque.

    
risposta data 31.12.2014 - 02:32
fonte

Leggi altre domande sui tag