Lisp può girare sul RISC-V del Pico 2!

Il fan di Lisp David Johnson-Davies sta inserendo il suo linguaggio preferito sulla scheda di sviluppo Raspberry Pi Pico 2, ma in un modo insolito: scrivendo un compilatore Lisp per i core RISC-V dell’RP2350, nel suo linguaggio uLisp incentrato sui microcontrollori.

Per chi non lo sapesse, Lisp (o LISP, abbreviazione di “list Processing”) è una famiglia di linguaggi di programmazione con una lunga storia e una notazione di prefisso distintiva, interamente racchiusa tra parentesi. Specificato originariamente alla fine degli anni ’50, è il secondo linguaggio di programmazione di alto livello più antico ancora di uso comune, dopo Fortran. Il lisp è cambiato sin dai suoi albori e nel corso della sua storia sono esistiti molti dialetti. Oggi, i dialetti Lisp generici più conosciuti sono Common Lisp, Scheme, Racket e Clojure. John McCarthy iniziò a sviluppare Lisp nel 1958 mentre era al Massachusetts Institute of Technology (MIT). McCarthy pubblicò il suo progetto in un articolo su Communications of the ACM nell’aprile 1960, intitolato “Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I”. Ha dimostrato che con pochi semplici operatori e una notazione per funzioni anonime presa in prestito da Church, è possibile costruire un linguaggio completo di Turing per gli algoritmi.

Questo linguaggio è stato originariamente creato come notazione matematica pratica per programmi per computer, influenzato (anche se non originariamente derivato) dalla notazione del lambda calcolo di Alonzo Church. È diventato rapidamente un linguaggio di programmazione preferito per la ricerca sull’intelligenza artificiale (AI). Essendo uno dei primi linguaggi di programmazione, Lisp ha aperto la strada a molte idee nell’informatica, tra cui strutture di dati ad albero, gestione automatica della memorizzazione, tipizzazione dinamica, condizionali, funzioni di ordine superiore, ricorsione, compilatore self-hosting e read- ciclo eval-print, ecc.

 

lisp

 

“Si tratta di un semplice compilatore Lisp sperimentale, scritto in uLisp, che adatterà una funzione Lisp nel codice macchina RISC-V”, spiega Johnson-Davies della sua creazione. “È possibile far girare il compilatore sul core RISC-V di un Raspberry Pi Pico 2 (o un’altra scheda basata su RP2350). Il programma del compilatore è scritto nel sottoinsieme di Common Lisp supportato da uLisp e verrà eseguito sul core RISC-V di una scheda basata su RP2350; Ho usato un Raspberry Pi Pico 2.”

L’ultimo progetto di Johnson-Davies si basa sul suo lavoro precedente per costruire un compilatore Lisp in uLisp destinato ai core dell’architettura Arm, come si trova sull’originale Raspberry Pi Pico e sul suo microcontrollore RP2040. Questa volta, prende di mira il nuovo RP2350 sul Raspberry Pi Pico 2, ignorando invece i due core Arm del chip per i due core Hazard3 RISC-V.

 

Emacs Lisp è un dialetto creato per Emacs. Viene utilizzato per implementare la maggior parte delle funzionalità di modifica integrate in Emacs:

 

lisp

 

“Per far girare il compilatore è sufficiente chiamare compile su una funzione Lisp”, spiega Johnson-Davies. “La funzione verrà compilata in una funzione in codice macchina, sostituendo il codice Lisp originale, in modo che la chiamata [il nome della funzione] ora eseguirà la versione in codice macchina RISC-V.”

Il semplice motivo per farlo, a parte il “perché puoi” è la performance. Rispetto al Lisp interpretato, le funzioni compilate vengono eseguite molto più velocemente: una funzione di fattorizzazione, ad esempio, richiede 5,4 secondi come Lisp interpretato e solo 19 ms compilata; un benchmark della funzione Takeuchi viene completato in 4.1 secondi interpretato e compilato in soli 16 ms; e un’implementazione ricorsiva della serie di Fibonacci richiede ben 50,5 secondi interpretati e solo 80 ms una volta compilata.

Il progetto è documentato integralmente sul sito uLisp.

 

Iscriviti ai nostri gruppi Telegram

Link utili

Seguici per non perdere le prossime novità!

###Da sempre appassionato di tecnologia, soffro di insaziabile curiosità scientifica. Adoro sperimentare e approfondire le mie conoscenze sulle ultime novità sul mercato in termini di hardware, alta tecnologia e videogiochi. Attratto e coinvolto nella prototipazione hardware dalla piattaforma Arduino, Raspberry Pi e Nvidia Jetson.### ###Always passionate about technology, I am suffering from insatiable scientific curiosity. I love experimenting and deepening of my knowledge on the latest news on the market in terms of hardware, hi-tech and video games. Got attracted and involved in hardware prototyping by the Arduino platform, Raspberry Pi and Nvidia Jetson.###

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.