12 maggio 2019

L'editor LISP in ZWCAD 2020

Una lieta ed inaspettata novità in ZWCAD 2020 è l'editor di codice LISP basato su Visual Studio Code.
Uno strumento per il debug dei programmi Lisp facile da usare



Che cosa è

Visual Studio Code è un editor/debugger di codice creato da Microsoft. Il prodotto è gratuito ed open source e, cosa più importante, supporta le cosidette 'estensioni' una sorta di plug-in di codice che gli permettono di gestire file sorgenti di qualsiasi linguaggio di programmazione.

La ZWSOFT ha pertanto sviluppato una propria estensione (chiamata ZwLisp) per supportare il linguaggio LISP. Il tutto (Visual Studio Code ed estensione) è stato integrato in ZWCad 2020 dopo una fase di test nella precedente versione 2019 SP2.

L'estensione (la versione che ho testato è la 1.048) offre :
  • un tema grafico personalizzato
  • l'auto completamento dei testi
  • l'evidenziazione della sintassi tramite colori
  • il debug linea per linea
  • i breakpoint (sono i punti di interruzione del programma in determinati punti del codice)
  • l'ispezione del valore delle variabili
  • la traccia delle eccezioni.
L'utente medio / avanzato ha adesso uno strumento in più per monitorare il funzionamento dei propri programmi in LISP, oltre che di poter sviluppare rapidamente codice grazie alle tante funzionalità e comandi presenti in Visual Studio Code.

Perché è utile

Quello che succede spesso è che in ZWcad si utilizzano programmi Lisp scritti in origine per AutoCAD o altri CAD simili.

Sebbene la compatibilità tra ZWcad e AutoCAD sia molto alta, può capitare che il richiamo di qualche comando nuovo o qualche funzione avanzata, generi errore rendendo inutilizzabile l'applicazione Lisp.

Il criptico messaggio di errore che appare sulla linea di comando a volte non basta a comprendere quale è e dove viene generato l'errore.

Con un editor di codice che supporti il debug (la ricerca di errori nel codice) si può riuscire a capire in maniera puntuale dove si genera l'errore ed a correggerlo.

Come usarlo

Per avviarlo dall'interno di ZWcad bisogna digitare VLIDE o VLISP (gli stessi comandi che in AutoCAD avviano l'editor di VisualLISP) o, dal ribbon Gestisci, cliccando sull'apposita icona.
il pulsante per avviare Visual studio code

Il programma si presenta con una serie di menu a tendina, 5 icone incolonnate nella parte sinistra e l'area per le finestre di codice sulla destra. Il tutto e ridimensionabile e personalizzabile.

Caricare l'estensione

La prima cosa da verificare è che sia stata caricata l'estensione ZwLisp che gli permette di editare i file .LSP.
L'ultima icona in basso è quella che permette la gestione delle estensioni.
verificare che l'estensione ZwLisp sia attiva
Nel riquadro relativo all'estensione, in basso a destra, cliccando sul simbolo della rotellina la si può abilitare/disabilitare o installare/disinstallare.

La cartella di lavoro

Una volta che si è certi che l'estensione ZwLisp è abilitata si può passare a specificare una cartella di lavoro, cioè quella che contiene i file sorgenti da editare o controllare.

Cliccare sulla prima icona nella colonna di sinistra e poi sul pulsante Open folder.
In alternativa, dal menu File selezionare la voce "Open folder..."
apertura della cartella di lavoro

I file

Cliccando sulla prima icona ci si porta nell'area della gestione file.
Sotto il nome della cartella selezionata appaiono i nomi dei file in essa contenuti.

Basta un semplice click sul nome del file per visualizzare il suo contenuto.
È possibile aprire più finestre di codice contemporaneamente.
i files e le finestre con il codice

Si nota subito come il codice è contraddistinto da elementi di vario colore e le parole chiave (le funzioni Lisp) hanno il proprio.

Funzionalità e comandi di Visual Studio Code

Sono tantissime le funzionalità dell'editor ed i comandi utili alla scrittura del codice.
Ne segnalo alcuni, chi volesse approfondire può consultare l'help di Visual Studio Code.
  • Quando si posiziona il cursore su una parentesi, in automatico viene evidenziata la parentesi che la bilancia.
  • Per ogni parentesi aperta digitata, il programma provvede a far apparire la corrispondente chiusa.
  • È possibile comprimere ed espandere una porzione di codice bilanciata (stesso numero di parentesi aperte e chiuse) agendo sul "+" e "-" disposti a destra del numero di linea del codice.
  • Evidenziando con un doppio click una parola sono evidenziate le altre identiche presenti nel codice.
  • È possibile sdoppiare il cursore facendo scrivere lo stesso testo in punti diversi.
  • Tramite l'IntelliSense si ha il completamento automatico delle istruzioni.
Dal menu View, selezionando la voce "Command palette..." , si può consultare l'elenco completo dei comandi. Alcuni però non sono stati implementati nell'estensione di ZwLisp.

Debug del codice lisp

Vediamo come utilizzare Visual Studio Code per ricercare la causa di un errore all'interno del programma.
Utilizziamo il codice seguente:
(defun c:ztest ()
(setq uno 1
due 2
tre (getreal"\nInserisci un valore numerico:")
testo "Questo è un testo"
)

(setq somma 
(- (+ uno due) tre)
)
(setq lista(list tre due uno))
(setq lung_testo(strlen testo))
;; errore se somma = 0
(setq risultato(/ lung_testo somma))
)

nel programma delle variabili vengono inizializzate e, se nell'ultima istruzione :
(/ lung_testo somma)
la variabile somma è  0, si genera un errore.

Per far si che la variabile somma risulti 0 occorre inserire il valore di 3 alla richiesta  :
(getreal"\nInserisci un valore numerico:").

Inserire un punto di interruzione (breakpoint)

La prima operazione da fare è quella di inserire un punto di interruzione - o breakpoint - nel programma.
Quando sarà eseguito il codice Lisp in ZWcad, non appena sarà rilevato un breakpoint, il controllo delle operazioni passerà da ZWcad a VS Code interrompendo l'esecuzione del programma.

Nel nostro esempio lo inseriamo subito dopo una istruzione che siamo sicuri sia stata eseguita, e cioè la richiesta di un numero tramite getreal (al rigo 7)
l'aggiunta di un Breakpoint (punto di interruzione)
Con un click a sinistra del numero di riga o richiamando il menù contestuale (tramite click destro del puntatore) con la voce "Add breakpoint", si aggiunge il punto di interruzione.

Controllare il valore delle variabili

Una tipica funzione dei debugger è quella di ispezionare lo stato delle variabili inizializzate nel programma.

Per 'tenerle d'occhio' basta aggiungerle nell'area Watch. In questa maniera, durante l'esecuzione del programma, si può monitorare il loro valore.
Avere chiaro il loro valore aiuta ad interpretare il comportamento del codice che le coinvolge.

Nel caso del nostro semplice  programma ne monitoriamo 3, come esempio.
Nell'area WATCH tramite il pulsante "+" si aggiungono all'elenco.
l'ispezione delle variabili del programma


Eseguire passo passo il programma

Dopo aver impostato breakpoint e l'eventuale ispezione di variabili si può cliccare sul tasto 'Play' di debug o la corrispondente voce di menù (Debug / Start debugging)
l'avvio del debug ed il ritorno in ZWCAD per lanciare il programma da testare

VS Code ritorna in ZWCAD in modo da poter far lanciare all'utente il comando Lisp da testare.
Il programma sarà eseguito sino a che non incontra il breakpoint.
A questo punto il controllo ritorna a VS Code.

All'interno di VS Code, per proseguire, si ha la possibilità di far eseguire una alla volta le istruzioni restanti, con 2 modalità differenti:
  • step over, viene eseguita per intero l'istruzione presente nella linea di codice;
  • step into, viene eseguita ogni sotto istruzione (dalla più interna alla più esterna) presente nella linea di codice;
la console con i vari comandi per eseguire il debug














Si esegue ogni istruzione premendo più volte i tasti Step into (o Step over) fino alla comparsa del messaggio di errore (vedi animazione seguente).

Nella linea di codice evidenziata è possibile ispezionare le variabili coinvolte e verificare i loro valori anche posizionado la freccia del mouse sul nome della variabile.

la fase di debug fino alla comparsa dellìerrore, un passo alla volta con Step in e Step over
Alla linea 16 evidenziata in giallo del codice c'è l'errore! Il messaggio "dividere per zero" (errata traduzione del messaggio "divide by zero") viene visualizzato in basso.
Nel riquadro, WATCH vediamo il valore della variabile somma uguale a 0.

Da notare che via via che si esegue il codice nella finestra VARIABLES è mostrato il valore restituito dall'ultima istruzione valutata.

Conclusione

Da sviluppatore più volte ho dovuto modificare i miei programmi per adeguarli a ZWcad a causa di qualche piccola differenza con AutoCAD.

Per scoprire la causa degli errori ho dovuto svolgere a volte un lavoro 'al buio' e per tentativi.
Adesso lo si può fare facilmente è più rapidamente.

Un ottimo strumento dunque ma l'estensione ZwLisp può essere ancora fortemente implementata.
Ad esempio non supporta i file .DCL (quelli delle finestre di dialogo), i suggerimenti relativi alla sintassi delle funzioni... ma del resto siamo appena alla 1.0.

Un riassunto di quanto esposto sopra lo puoi trovare in questo video:

Nessun commento:

Posta un commento