Informazioni sul servizio
TradottoSono uno sviluppatore Racket e Scheme e lavoro in quell'angolo del mondo Lisp che gli ingegneri backend ordinari quasi mai visitano: creo linguaggi, non solo utilizzo quelli già pronti. Quando un compito caparbiamente trasforma il tuo codice di uso generale, la risposta onesta suona spesso così: hai bisogno di un piccolo linguaggio specifico per il compito stesso. Questo è ciò che progetto e implemento. Scrivo programmi funzionali attenti e ben strutturati, macro igieniche, lettori e valutatori personalizzati, così come gli strumenti che trasformano un'idea grezza in un interprete funzionante su cui puoi ragionare.
Il mio lavoro di solito si suddivide in tre forme. La prima è DSL e sistemi di macro: utilizzo le capacità orientate al linguaggio di Racket per fornire al tuo team una notazione per un compito specifico, con controlli di sintassi, messaggi di errore chiari e un lettore che si sente nativo, non aggiunto. La seconda è interpreti e piccoli compilatori: parser, valutatori, camminatori ad albero e backend di bytecode per formati di configurazione, motori di regole, strati di scripting e linguaggi sperimentali. La terza è strumenti educativi e di ricerca: mi interessa creare programmi che si spiegano da soli, quindi realizzo visualizzatori, debugger passo-passo, controllori di esercizi e materiali interattivi per chi sta imparando la programmazione funzionale e il calcolo lambda sottostante.
Poiché sono cresciuto nella famiglia Lisp piuttosto che nel lavoro backend mainstream o in Clojure, la correttezza e un nucleo minimale sono particolarmente importanti per me. Mi affido a contratti, test basati su proprietà e piccole funzioni componibili, documentazione della grammatica e invarianti affinché la prossima persona non debba smontare il tuo parser. Se hai un prototipo semi-funzionale, un mucchio di macro che nessuno osa toccare, o un'idea fresca per un piccolo linguaggio — lo porterò da uno schizzo a un risultato affidabile.
— Linguaggi di dominio e macro igieniche in Racket
— Interpreti, valutatori e piccoli compilatori in Scheme
— Parser, lettori personalizzati e motori di regole
— Strumenti educativi: debugger passo-passo, visualizzatori, controllo degli esercizi
— Refactoring funzionale, contratti e test basati su proprietà
— Migrazione e modernizzazione di vecchio codice Scheme e Lisp
Il mio lavoro di solito si suddivide in tre forme. La prima è DSL e sistemi di macro: utilizzo le capacità orientate al linguaggio di Racket per fornire al tuo team una notazione per un compito specifico, con controlli di sintassi, messaggi di errore chiari e un lettore che si sente nativo, non aggiunto. La seconda è interpreti e piccoli compilatori: parser, valutatori, camminatori ad albero e backend di bytecode per formati di configurazione, motori di regole, strati di scripting e linguaggi sperimentali. La terza è strumenti educativi e di ricerca: mi interessa creare programmi che si spiegano da soli, quindi realizzo visualizzatori, debugger passo-passo, controllori di esercizi e materiali interattivi per chi sta imparando la programmazione funzionale e il calcolo lambda sottostante.
Poiché sono cresciuto nella famiglia Lisp piuttosto che nel lavoro backend mainstream o in Clojure, la correttezza e un nucleo minimale sono particolarmente importanti per me. Mi affido a contratti, test basati su proprietà e piccole funzioni componibili, documentazione della grammatica e invarianti affinché la prossima persona non debba smontare il tuo parser. Se hai un prototipo semi-funzionale, un mucchio di macro che nessuno osa toccare, o un'idea fresca per un piccolo linguaggio — lo porterò da uno schizzo a un risultato affidabile.
— Linguaggi di dominio e macro igieniche in Racket
— Interpreti, valutatori e piccoli compilatori in Scheme
— Parser, lettori personalizzati e motori di regole
— Strumenti educativi: debugger passo-passo, visualizzatori, controllo degli esercizi
— Refactoring funzionale, contratti e test basati su proprietà
— Migrazione e modernizzazione di vecchio codice Scheme e Lisp