Struttura del software

Sage è l’acronimo inglese di “software per la sperimentazione in Algebra e Geometria” (System for Algebraic and Geometrc Experimentation). Il nome richiama la parola inglese “sage” che significa sia uomo saggio che la pianta della salvia, ma è anche detto SageMath per distinguerlo da un omonimo software di contabilità molto diffuso negli USA.
Come abbiamo detto esso è iniziato dall’opera di William Stein nel 2005, all’epoca ricercatore in Teoria dei Numeri presso l’Università di Harvard. La sua idea fondamentale è stata che non si dovesse “reinventare la ruota ma costruire l’automobile”, cioé non si dovesse scrivere un altro software di computer algebra ex-novo ma integrare l’open-source già  esistente in ambito universitario in un contenitore unico di facile utilizzo. A tal fine si trattava, dal lato utente, soprattutto di fornire un’interfaccia comune e, dal lato implementazione, di collegare i vari pezzi in una struttura accessibile attraverso un unico linguaggio di scripting.

Il punto di partenza è stato individuare il linguaggio Python come base del progetto: per le sue caratteristiche esso si presta a scrivere programmi che seguono approcci diversi, quali imperativo, OOP e funzionale, e si adatta molto bene ad essere utilizzato come linguaggio di scripting (è ad esempio utilizzato come tale in Samba 4, un altro importante progetto open-source). Inoltre erano già disponibili una libreria per il calcolo simbolico, SymPy, e soprattutto un’interfaccia funzionante sia in modalità testuale che grafica, Ipython, fatta proprio per l’utilizzo di Python nel calcolo scientifico.

A questa base è stato aggiunto, a monte, un preparser per poter fare delle aggiunte alla sintassi di Python/Ipython (esso intercetta le particolarità sintattiche aggiunte da Sage), ed a valle delle librerie precaricate in grado di superare i limiti di SymPy e SciPy. Ad esempio i calcoli simbolici che SymPy non è in grado di gestire internamente vengono passati a Maxima, una libreria preesistente scritta in Lisp, dotata di costrutti più potenti per il calcolo simbolico. Analogamente i calcoli di interi o floating-point non gestibili da SciPy vengono passati alla libreria Pari, scritta in linguaggio C, o altre.

Attualmente Sage usa la versione 2.7 di Python ma è in corso la migrazione alla versione 3.

Riassumendo i componenti fondamentali sono:

  • iPython: interfaccia dell’interprete Python migliorata per il calcolo scientifico, con apposite funzioni e tipi di dati, ed interfaccia sia testuale a riga di comando che grafica su browser (Notebook Ipython);
  • SymPy: libreria Python per il calcolo simbolico;
  • SciPy: libreria Python per il calcolo numerico;
  • NumPy: fondamentale libreria Python che estende il linguaggio con numerosi tipi di dato e costrutti per il calcolo e l’interfacciamento con programmi Fortran e C; la sua importanza è tale che, ad ogni nuova release di Python, qualche suo componente viene inglobato direttamente nel linguaggio.

A questi vanno aggiunte le seguenti librerie fondamentali:

  • GAP: libreria per matematica discreta, soprattutto Teoria dei Gruppi;
  • Pari/GP: libreria per la Teoria dei Numeri;
  • Singular: libreria per la fattorizzazione di polinomi e simili;
  • Maxima: potente libreria per il calcolo simbolico.

Sage integra oltre 90 pacchetti FOSS. Il codice scritto ex-novo per Sage ammonta ad oltre 700.000 righe di codice Python (o Cython, laddove sono necessarie prestazioni migliori di quelle che può fornire il codice prodotto dall’interprete Python). Oltre a queste librerie principali ve ne sono decine di altre, create per risolvere specifici problemi matematici. In particolare Sage può essere usato come interfaccia per R, il famoso software open-source per la statistica. Se sul sistema su cui si va ad installare Sage è già installato Latex, Sage vi si interfaccia automaticamente ed è possibile stampare la documentazione in PDF.

Sage non è limitato alle librerie già collegate ad esso: chiunque abbia le competenze informatiche necessarie può aggiungere collegamenti a nuove librerie o ad altri software.

Si sottolinea che in questo modo Sage usufruisce dei miglioramenti che vengono apportati a tutti questi software, e che inoltre contribuisce al loro miglioramento attraverso le segnalazioni di bachi fatte dagli utenti Sage e che vengono girate dai developer Sage ai team di sviluppo di tali software. Si crea così un circolo virtuoso in cui ciascuno, migliorando il proprio software, contribuisce al miglioramento di quelli che utilizza e di quelli che si basano su di lui.

L’interfaccia di Sage, derivando da Ipython, gli è molto simile, sia nella forma testuale che in quella grafica. In particolare quest’ultima, detta Notebook Sage e basata su browser web, risulta ispirata all’interfaccia di Mathematica ed è capace di sfruttare le capacità grafiche di Latex, WebGL, ed altre tecnologie all’avanguardia. In particolare sono utilizzate le seguenti componenti:

  • jsMath fonts e MathJax javascript library: visualizzazione di formule matematiche in formato simile a Latex;
  • MatPlotLib, gnuplot, e altri: visualizzazione di grafici di funzione 2D e 3D, alberi e grafi, ecc.

Sebbene siano state proposte altre interfacce grafiche per Sage, funzionanti al di fuori del browser (in particolare per MacOSX), si preferisce mantenere questa scelta perché maggiormente in linea con il trend attuale della tecnologia informatica, anche in relazione al diffondersi di dispositivi quali tablet e smartphone.