Uso di matrici, stringhe e puntatori
Il programma Doctor (vedere \samples\rpc\doctor in Platform Software Development Kit (SDK)) è un buon esempio di un'applicazione che illustra i compromessi di progettazione coinvolti con gli attributi di matrice e stringa. Il programma Doctor è una piccola versione di esempio di un programma più noto, Eliza, sviluppato dal ricercatore di intelligenza artificiale Joseph Weizenbaum al MIT negli anni '60. Il programma simula un terapeuta usando una semplice corrispondenza dei modelli per rispondere all'input del linguaggio naturale.
Il programma Eliza ha registrato la sessione seguente.
Utente | Eliza |
---|---|
Gli uomini sono tutti uguali. | In che modo? |
Ci stanno sempre buccando qualcosa o altro. | Si può pensare a un esempio specifico? |
Beh, il mio ragazzo mi ha fatto venire qui. | Il tuo ragazzo ti ha fatto venire qui. |
Dice che sono depresso molto del tempo. | Mi dispiace sentire che sei depresso. |
È vero, sono infelice. | Pensi di venire qui ti aiuterà a non essere infelice? |
Ho bisogno di aiuto; che sembra molto certo. | Cosa significa per te se hai un aiuto? |
Forse potrei imparare a andare insieme a mia madre. | Dimmi di più sulla tua famiglia. |
Mia madre mi prende cura di me. | Chi altro nella tua famiglia ti prende cura? |
Mio padre. | Tuo padre. |
Sei come mio padre in qualche modo. | Qual è la somiglianza che vedi? |
Il programma Doctor può essere suddiviso in applicazioni lato client e lato server. Il lato client richiede l'input del paziente e visualizza la risposta del medico. Il lato server elabora l'input del paziente e genera la risposta del medico. Si tratta di un esempio classico di un'applicazione client-server: il client è responsabile dell'interazione dell'utente mentre il server gestisce il carico di calcolo esteso. Non molti dati vengono passati e restituiti dalla funzione, ma, poiché i dati possono richiedere una quantità significativa di elaborazione, il server lo elabora.
Il programma Doctor usa una matrice di caratteri per l'input e restituisce un'altra matrice di caratteri come output. La tabella seguente elenca quattro modi per passare matrici di caratteri tra il client e il server e gli attributi e le funzioni necessarie per implementare ogni approccio.
Approccio | Attributi o funzioni |
---|---|
Matrici di caratteri conteggiate | [ size_is], [ length_is], [ ref] |
Stringhe gestite da Stub | [ string], [ ref], midl_user_allocate nel server |
Stringhe gestite da Stub | [ string], [ unique], midl_user_allocate nel client e nel server |
Funzione che restituisce una stringa | [ univoco] |
All'interno dei vincoli associati a queste combinazioni di attributi, esistono modi alternativi per inviare una matrice di caratteri dal client al server e restituire un'altra matrice di caratteri dal server al client.
Gli argomenti seguenti illustrano i compromessi di progettazione tra le varie interfacce che possono gestire questi parametri.