Ho iniziato a pasticciare con Ypsilon, che è un'implementazione C++ di Scheme.Ho bisogno di un esempio di utilizzo Ypsilon
Si conforma R6RS, dispone garbage collector veloce, supporta CPU multi-core e Unicode ma ha un LACK di documentazione, esempi e commenti nel codice C++!
Gli autori lo forniscono come applicazione console standalone. Il mio obiettivo è usarlo come motore di scripting in un'applicazione di elaborazione delle immagini.
Il codice sorgente è ben strutturato, ma la struttura non è familiare. Ho trascorso due settimane penetrante, ed ecco cosa ho scoperto:
- Tutte le comunicazioni con il mondo esterno avviene tramite strutture C++ chiamato porte, essi corrispondono a porte Scheme.
- La macchina virtuale ha 3 porte: IN, OUT ed ERRORE.
- Le porte possono essere porte std (tramite console), porte socket, porte bytevector, named-file-ports e custom-ports.
- Ogni porta personalizzata deve fornire una struttura piena denominata gestori.
- gestori è un vettore contenente 6 elementi: 1 ° uno è un valore booleano (se porta è testuale), e altri cinque sono puntatori a funzione (OnRead, OnWrite, onSetPos, onGetPos, onClose).
Per quanto ho capito, ho bisogno di implementare 3 porte personalizzate (IN, OUT ed ERRORE). Ma per ora non riesco a capire, quali sono i parametri di input di ogni funzione (onRead, onWrite, onSetPos, onGetPos, onClose) nei gestori .
Purtroppo, non c'è né esempio di implementazione di una porta personalizzata alcun esempio di seguire roba:
- C++ per binding funzione Scheme (esempi forniti sono un mucchio di .scm-files, ancora poco chiaro che cosa fare sul lato C++).
- Compilazione e in esecuzione bytecode (tramite bytevector-ports? Ma come compilare il testo in bytecode?).
Riassumendo, se qualcuno fornisce un C++ esempio di qualsiasi scenario di cui sopra, si potrebbero salvare significativamente il mio tempo. Grazie in anticipo!
Hai provato a contattare il responsabile del progetto del progetto? Potrebbe farti risparmiare tempo. – Seki
@Seki, Sì. Non hanno risposto. –