Sostituzione dinamica * dll?

2

Ho un problema di architettura qui.

Lascia che ci sia un IShell . Principalmente responsabile della mappatura dei comandi dell'utente (rappresentati come stringhe di tipo linux) a un% di% di co_de appropriato.

Questi eseguibili sono piuttosto vari. Quindi, ci sono diversi moduli / assembly / DLL (o how-the-hell-you-call-it): IExecutable , Module1 , Module2 che forniscono tutte diverse implementazioni del sopra citato Module3 .

Ora è necessario poter sostituire al volo uno di questi moduli al momento dell'esecuzione, senza arrestare IExecutable istanza . Ovviamente, ci sarà una sorta di API, come IShell e ... potrebbe restituire un codice non elaborato da compilare localmente (quali sono i vantaggi e gli svantaggi?) O potrebbe rispondere con la dll precompilata *.

Non importa come, a un certo punto, /api/update/module1 alla fine riceverà la versione più recente di un particolare modulo. E qui emerge il problema più grande. Supponendo che io possa "mettere in pausa" cosa sta accadendo all'interno, qual è il modo più chiaro e più efficace per sostituire il modulo attualmente caricato con uno nuovo?

Dato che la maggior parte del codice scritto in Haskell, sono decisamente interessato alla soluzione correlata a Haskell. O, almeno, vorrei riconoscere il fatto che non c'è nessuno.

P.S. Se qualcuno di voi, ragazzi, è a conoscenza del concetto potrebbe funzionare, ma non la realizzazione di Haskell di quello, comunque fatemelo sapere. Grazie in anticipo.

    
posta Sereja Bogolubov 15.02.2018 - 11:17
fonte

1 risposta

1

Potrei immaginare qualcosa come una mappa mutabile che serve per cercare un modulo per nome. Una volta ricevuta una nuova versione di codice, aggiorni quella mappa con una nuova istanza di IExecutable .

Ovviamente tutto ciò può vivere solo all'interno di IO ; Suppongo che sarà nel livello "impura crosta". Il "puro core" sarà chiamato in do / >>= , mentre la ricerca di IO IExecutable avverrà all'esterno.

IDK su come caricare e caricare nuovamente DLL in Haskell. Ma puoi usare module GHC per compilarli dal sorgente.

    
risposta data 15.02.2018 - 22:31
fonte

Leggi altre domande sui tag