<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Lisp on Melabit</title>
    <link>https://static.233.196.69.159.clients.your-server.de/it/tags/lisp/</link>
    <description>Recent content in Lisp on Melabit</description>
    <generator>Hugo</generator>
    <language>it</language>
    <lastBuildDate>Sat, 09 Aug 2025 06:00:00 +0000</lastBuildDate>
    <atom:link href="https://static.233.196.69.159.clients.your-server.de/it/tags/lisp/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Addio dc, benvenuta luka: una nuova calcolatrice RPN da Terminale</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2025/08/09/addio-dc-benvenuta-luka-una-nuova-calcolatrice-rpn-da-terminale/</link>
      <pubDate>Sat, 09 Aug 2025 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2025/08/09/addio-dc-benvenuta-luka-una-nuova-calcolatrice-rpn-da-terminale/</guid>
      <description>&lt;p&gt;La &lt;em&gt;Notazione Polacca Inversa&lt;/em&gt; (o RPN, dall&amp;rsquo;inglese Reverse Polish Notation) è un modo per eseguire operazioni matematiche senza usare le parentesi. Negli anni ‘70-80 l&amp;rsquo;RPN fu resa popolare da Hewlett-Packatd (HP), che l&amp;rsquo;utilizzò in &lt;a href=&#34;https://www.hpmuseum.org/rpnvers.htm&#34;&gt;tutte le sue calcolatrici&lt;/a&gt; scientifiche e finanziarie.&lt;/p&gt;&#xA;&lt;p&gt;Con le calcolatrici della rivale Texas-Instruments, che usavano le parentesi, era facile perdere il conto di quante parentesi si erano aperte o chiuse, cosa che costringeva spesso a reinserire l’intera espressione dal principio. Chi usava una calcolatrice RPN non aveva questi problemi, anche se doveva superare un piccolo scoglio iniziale per abituarsi alla nuova notazione.&lt;/p&gt;&#xA;&lt;p&gt;Oggi le calcolatrici &lt;em&gt;fisiche&lt;/em&gt; sono poco usate, e quasi tutti preferiscono utilizzare un&amp;rsquo;app sul telefono o sul computer. Ma c&amp;rsquo;è ancora qualche &lt;em&gt;nerd&lt;/em&gt; impenitente che non si arrende all&amp;rsquo;interfaccia grafica e si ostina ad usare il Terminale. Perché? Ad esempio, perché è molto più facile inserire numeri e operazioni complicate con la tastiera, che &lt;em&gt;premere&lt;/em&gt; i tasti di vetro di una calcolatrice virtuale.&lt;/p&gt;&#xA;&lt;h4 id=&#34;premessa&#34;&gt;Premessa&lt;/h4&gt;&#xA;&lt;p&gt;Se avete fretta e non volete sobbarcarvi la lettura di questo lungo articolo, troverete tutte le informazioni che vi servono in &lt;a href=&#34;https://macintelligence.org/post/2025-07-24-ma-non-per-calcolo/&#34;&gt;questo post&lt;/a&gt;, sintetico ma come sempre brillante, su &lt;a href=&#34;https://macintelligence.org/&#34;&gt;Quickloox&lt;/a&gt;, uno dei blog di riferimento per chi è appassionato del mondo Apple.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-08-09-addio-dc-benvenuta-luka-una-nuova-calcolatrice-rpn-da-terminale/Gemini_Generated_Image_72y1t072y1t072y1.jpg&#34; alt=&#34;&#34;&gt;&#xA;&amp;ndash; &lt;em&gt;Immagine generata da &lt;a href=&#34;https://gemini.google.com&#34;&gt;Google Gemini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;div style = &#34;border-style: solid; border-width: 0px 0px 0px 12px; border-color: #03a87c; background-color: #defef6; padding: 1em; color:black; font-size:100%;&#34;&gt;&#xA;&lt;h4 id=&#34;un-po-di-storia&#34;&gt;Un po&amp;rsquo; di storia&lt;/h4&gt;&#xA;&lt;p&gt;La Polonia ci ha dato Niccolò Copernico, Fryderyk Chopin, Joseph Conrad, Marie Curie, Arthur Rubinstein, Stanislaw Lem. Ma ci ha dato anche Jan Lukasiewicz, un logico matematico (e filosofo) che cent&amp;rsquo;anni fa inventò una notazione matematica che non faceva uso di parentesi.&lt;/p&gt;&#xA;&lt;p&gt;In questa &lt;em&gt;notazione polacca&lt;/em&gt; tutti i simboli di operazione ( \( + \), \( - \), \( \times \), \( / \) ) precedono i numeri a cui si applicano. Lo stesso vale più in generale per le funzioni matematiche, come \( \sqrt{} \), \( \sin \), \( \cos \), \( \exp \) (dette &lt;em&gt;operatori&lt;/em&gt;) e i numeri o le variabili (dette &lt;em&gt;operandi&lt;/em&gt;) su cui agiscono.&lt;/p&gt;&#xA;&lt;p&gt;Ad esempio, una operazione come \( 3 + 4 \), in notazione polacca viene scritta \( + \ 3 \ 4 \), mentre \( (5 + 2) \times (5 - 2) \) diventa \( \times + 5 \ 2 - 5 \ 2 \).&lt;/p&gt;&#xA;&lt;p&gt;Per molti anni questa è rimasta solo una idea un po&amp;rsquo; bislacca, perché il vantaggio di non usare le parentesi non sembrava compensare a sufficienza la notazione inusuale e più difficile da leggere.&lt;/p&gt;&#xA;&lt;p&gt;Poi alla fine degli anni &amp;lsquo;50, John McCarthy rispolverò la notazione polacca  (o &lt;em&gt;prefissa&lt;/em&gt;) per il &lt;a href=&#34;https://twobithistory.org/2018/10/14/lisp.html&#34;&gt;LISP&lt;/a&gt;, uno dei linguaggi di programmazione più influenti di tutti i tempi,&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; sviluppato con l&amp;rsquo;obiettivo di essere applicato allo sviluppo di programmi nell&amp;rsquo;ambito della nascente intelligenza artificiale.&lt;/p&gt;&#xA;&lt;p&gt;La notazione prefissa, infatti, non solo semplificava notevolmente la scrittura dell&amp;rsquo;interprete LISP, ma permetteva anche di rappresentare allo stesso modo sia il codice che i dati, una cosa utilissima per un linguaggio finalizzato a rendere in computer &lt;em&gt;intelligente&lt;/em&gt;. Ma meglio non divagare troppo.&lt;/p&gt;&#xA;&lt;h4 id=&#34;notazione-polacca-inversa&#34;&gt;Notazione polacca inversa&lt;/h4&gt;&#xA;&lt;p&gt;Ma la vera svolta avviene invertendo l&amp;rsquo;ordine fra operandi ed operatori, cioè scrivendo &lt;em&gt;prima&lt;/em&gt; i numeri e &lt;em&gt;poi&lt;/em&gt; le operazioni da eseguire, per cui \( 3 + 4 \) diventa \( 3 \ 4 \ + \) e \( (5 + 2) \times (5 - 2) \) diventa \( \ 5 \ 2 + 5 \ 2 - \times \).&lt;/p&gt;&#xA;&lt;p&gt;Questa &lt;a href=&#34;https://en.wikipedia.org/wiki/Reverse_Polish_notation&#34;&gt;&lt;em&gt;notazione polacca inversa&lt;/em&gt;&lt;/a&gt; (RPN) viene scoperta e riscoperta per almeno tre volte in vent&amp;rsquo;anni, ma diventò popolare solo all&amp;rsquo;inizio degli anni &amp;lsquo;60 quando Friedrich Bauer, inventore del concetto di &lt;a href=&#34;https://en.wikipedia.org/wiki/Stack_%28abstract_data_type%29&#34;&gt;&lt;em&gt;stack&lt;/em&gt;&lt;/a&gt; e uno degli sviluppatori dell&amp;rsquo;&lt;a href=&#34;https://en.wikipedia.org/wiki/ALGOL&#34;&gt;ALGOL&lt;/a&gt;, e Edsger Dijkstra, famoso per la soluzione del &amp;ldquo;problema del cammino minimo&amp;rdquo; e per mile altre cose, ripresero in mano il concetto, perché permetteva di ridurre l&amp;rsquo;accesso alla memoria, che nei computer dell&amp;rsquo;epoca era scarsa e lenta, e di eseguire tutte le operazioni in un&amp;rsquo;area di memoria bene definita (lo &lt;em&gt;stack&lt;/em&gt;) e per questo più facile da manipolare.&lt;/p&gt;&#xA;&lt;p&gt;I vantaggi dell&amp;rsquo;RPN per eseguire i calcoli matematici erano così evidenti che HP la utilizzò in praticamente &lt;a href=&#34;https://www.hpmuseum.org/rpnvers.htm&#34;&gt;tutte le sue calcolatrici&lt;/a&gt; scientifiche e finanziarie, almeno fino all&amp;rsquo;inizio degli anni &amp;lsquo;90. Solo con lo sviluppo di memorie più capienti e di display molto più grandi divenne possibile visualizzare e modificare facilmente l&amp;rsquo;intera operazione impostata &amp;ndash; e non più solo l’ultimo numero inserito &amp;ndash; rendendo così meno necessario l’uso dell&amp;rsquo;RPN.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;br/&gt;&#xA;&lt;h4 id=&#34;una-calcolatrice-nel-terminale&#34;&gt;Una calcolatrice nel Terminale&lt;/h4&gt;&#xA;&lt;p&gt;Chi vuole usare una calcolatrice tradizionale nel Terminale di macOS o di Linux ha una scelta pressoché obbligata: &lt;code&gt;bc&lt;/code&gt;, il &lt;a href=&#34;https://en.wikipedia.org/wiki/Bc_%28programming_language%29&#34;&gt;&lt;em&gt;basic calculator&lt;/em&gt;&lt;/a&gt;, presente in UNIX dal 1975, 50 anni filati. La versione attuale, disponibile su Linux e macOS, è stata completamente riscritta, ma quella originale era solo una interfaccia per &lt;code&gt;dc&lt;/code&gt; (&lt;a href=&#34;https://en.wikipedia.org/wiki/Dc_%28computer_program%29&#34;&gt;&lt;em&gt;desk calculator&lt;/em&gt;&lt;/a&gt;), una delle più antiche utility presenti in UNIX e più vecchia persino del C.&lt;/p&gt;&#xA;&lt;p&gt;E &lt;code&gt;dc&lt;/code&gt; era&amp;hellip; una calcolatrice RPN. Una scelta che confermava l’intuizione di HP: la notazione RPN era più efficiente e più semplice da implementare, e quindi ideale anche per i computer dalle risorse limitate degli anni ’70.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Oggi l&amp;rsquo;RPN non è più una scelta quasi obbligata dalle limitazioni hardware, ma direi una scelta motivata soprattutto dalla &lt;em&gt;pigrizia&lt;/em&gt;. Perché, una volta che si è spesa una mezz&amp;rsquo;oretta per imparare ad usarla, si scopre che è davvero molto più comodo eseguire i calcoli con questa notazione piuttosto che con quella tradizionale.&lt;/p&gt;&#xA;&lt;p&gt;E poi forse c&amp;rsquo;è anche un certo gusto per andare controcorrente: in un mondo in cui tutti si uniformano ai dettami degli &lt;em&gt;influencer&lt;/em&gt; (veri o presunti) sui social, usare una calcolatrice RPN diventa un modo per distinguersi, per sentirsi fuori dal coro, quasi una dichiarazione di indipendenza intellettuale.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;dc&lt;/code&gt; è ancora presente in Linux e macOS e può essere tranquillamente usata dal Terminale, ma è una bella fatica, i suoi cinquant&amp;rsquo;anni si sentono (e si vedono) tutti. I risultati delle operazioni non si vedono, a meno di non &lt;em&gt;stamparli&lt;/em&gt; sullo schermo con &lt;code&gt;p&lt;/code&gt;. Nemmeno lo stack si vede, a meno di non chiederlo esplicitamente con &lt;code&gt;f&lt;/code&gt;. I numeri negativi si indicano con l&amp;rsquo;underscore &lt;code&gt;_&lt;/code&gt; e non con il normale &lt;code&gt;-&lt;/code&gt;, per cui \( - 4 \) si scrive \( \_4 \). E così via.&lt;/p&gt;&#xA;&lt;p&gt;Ma da oggi c&amp;rsquo;è &lt;code&gt;dc2&lt;/code&gt; o meglio, &lt;code&gt;luka&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;la-calcolatrice-rpn-del-xxi-secolo&#34;&gt;La calcolatrice RPN del XXI secolo&lt;/h4&gt;&#xA;&lt;p&gt;E sì, perché da qualche settimana abbiamo a disposizione una nuova calcolatrice RPN per il Terminale di macOS di Linux, chiamata inizialmente &lt;a href=&#34;https://github.com/mastro35/dc2&#34;&gt;&lt;code&gt;dc2&lt;/code&gt;&lt;/a&gt;, in omaggio alla veneranda calcolatrice ormai ultracinquantenne.&lt;/p&gt;&#xA;&lt;p&gt;Però &lt;code&gt;dc2&lt;/code&gt; sapeva troppo di una riscrittura dell&amp;rsquo;originale, mentre questo è un progetto completamente nuovo, scritto da zero in &lt;code&gt;C&lt;/code&gt;. Meritava quindi un nome tutto suo, &lt;a href=&#34;https://github.com/mastro35/luka&#34;&gt;&lt;code&gt;luka&lt;/code&gt;&lt;/a&gt;, in omaggio a Jan Lukasiewicz, l&amp;rsquo;inventore della &lt;em&gt;notazione polacca&lt;/em&gt; (si veda il riquadro qui sopra).&lt;/p&gt;&#xA;&lt;p&gt;Rispetto a &lt;code&gt;dc&lt;/code&gt;, &lt;code&gt;luka&lt;/code&gt; è davvero di un&amp;rsquo;altro secolo, e si vede appena si inizia a provarla. È interattiva, mostra in ogni momento il contenuto dello stack, ha la storia delle operazioni eseguite, le variabili, un help sintetico ma completo in linea, una pagina di manuale cristallina (ce ne fossero tante altre così!).&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-08-09-addio-dc-benvenuta-luka-una-nuova-calcolatrice-rpn-da-terminale/luka-example.png&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-08-09-addio-dc-benvenuta-luka-una-nuova-calcolatrice-rpn-da-terminale/luka-help.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;E poi &lt;code&gt;luka&lt;/code&gt; è fatta in Italia. In tempi in cui si esalta l’identità nazionale per i motivi più futili, è bello vedere qualcosa che merita davvero di essere valorizzato.&lt;/p&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-08-09-addio-dc-benvenuta-luka-una-nuova-calcolatrice-rpn-da-terminale/luka-credits.png&#34; alt=&#34;&#34;&gt;&lt;p&gt;Il programma in questo momento ha un piccolo &lt;em&gt;bug&lt;/em&gt; legato alla visualizzazione dell’history, ma l&amp;rsquo;autore macina il codice molto più velocemente di quanto io macini le parole, per cui è più che probabile che il bug sarà corretto al più presto (vacanze permettendo).&lt;/p&gt;&#xA;&lt;h4 id=&#34;evoluzione-del-codice&#34;&gt;Evoluzione del codice&lt;/h4&gt;&#xA;&lt;p&gt;Lo sviluppo di &lt;code&gt;dc2&lt;/code&gt;/&lt;code&gt;luka&lt;/code&gt; è stato rapidissimo. Dietro al progetto c&amp;rsquo;è Davide Mastromatteo, noto fra i suoi &lt;em&gt;amici di penna&lt;/em&gt; come @mastro35 e autore dell&amp;rsquo;ottimo blog &lt;a href=&#34;https://thepythoncorner.com/&#34;&gt;The Python Corner&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In pochi giorni Davide è passato dalla versione 0.1.0, perfettamente funzionale ma con una interfaccia utente ancora acerba,&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-08-09-addio-dc-benvenuta-luka-una-nuova-calcolatrice-rpn-da-terminale/dc2-010.png&#34; alt=&#34;&#34;&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-08-09-addio-dc-benvenuta-luka-una-nuova-calcolatrice-rpn-da-terminale/dc2-010-help.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;alla versione 0.2.0, con una vista dello stack molto più chiara, la possibilità di usare gradi e radianti e di cambiare il formato di rappresentazione dei numeri, nonché con un help più compatto.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-08-09-addio-dc-benvenuta-luka-una-nuova-calcolatrice-rpn-da-terminale/dc2-020.png&#34; alt=&#34;&#34;&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-08-09-addio-dc-benvenuta-luka-una-nuova-calcolatrice-rpn-da-terminale/dc2-020-help.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;La versione 0.3.0 ha introdotto l&amp;rsquo;&lt;em&gt;history&lt;/em&gt; delle operazioni eseguite e un help ancora rivisto,&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-08-09-addio-dc-benvenuta-luka-una-nuova-calcolatrice-rpn-da-terminale/dc2-030.png&#34; alt=&#34;&#34;&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-08-09-addio-dc-benvenuta-luka-una-nuova-calcolatrice-rpn-da-terminale/dc2-030-help.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;mentre la versione 0.4.0, che è coincisa con il cambio di nome del programma, ci ha portato le variabili e parecchi nuovi comandi da tastiera, come si può vedere nelle prime immagini di questo articolo.&lt;/p&gt;&#xA;&lt;h4 id=&#34;usare-luka&#34;&gt;Usare luka&lt;/h4&gt;&#xA;&lt;p&gt;Installare &lt;code&gt;luka&lt;/code&gt; sul Mac o su Linux è un attimo, almeno &lt;a href=&#34;https://www.melabit.com/it/2014/04/29/homebrew-software-per-il-mac-fatto-in-casa/&#34;&gt;per chi usa &lt;code&gt;homebrew&lt;/code&gt;&lt;/a&gt; (e chi non lo usa dovrebbe iniziare a farlo subito)&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;brew install mastro35/homebrew-mastro35/luka&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Altrimenti basta scaricare l&amp;rsquo;&lt;a href=&#34;https://github.com/mastro35/luka/releases&#34;&gt;ultima release&lt;/a&gt; del codice sorgente, scompattarla ed eseguire&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;make clean &amp;amp;&amp;amp; make&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;dal Terminale, ovviamente dopo essersi &lt;a href=&#34;https://melabit.com/it/2018/01/30/script-per-tutti-i-giorni-ricapitoliamo/&#34;&gt;spostati nella directory&lt;/a&gt; che contiene il codice sorgente.&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Inutile dire che chi ha installato &lt;code&gt;make&lt;/code&gt; e un compilatore C su Windows, potrà compilare &lt;code&gt;luka&lt;/code&gt; anche su questo sistema operativo.&lt;/p&gt;&#xA;&lt;p&gt;Dimenticavo: presto arriveranno i pacchetti per Linux, in formato  &lt;code&gt;deb&lt;/code&gt; e &lt;code&gt;rpn&lt;/code&gt; e, chissà, magari anche &lt;code&gt;aur&lt;/code&gt;. E forse anche un installatore per Windows.&lt;/p&gt;&#xA;&lt;p&gt;Sull&amp;rsquo;uso vero e proprio della calcolatrice c&amp;rsquo;è poco da dire. Chi conosce già l&amp;rsquo;RPN si troverà a suo agio, e ci metterà pochissimo ad usare &lt;code&gt;luka&lt;/code&gt;  al meglio. Chi non conosce l&amp;rsquo;RPN magari avrà voglia di provarla, per toccare con mano quanto sia più comodo eseguire un calcolo appena appena complicato con una calcolatrice RPN piuttosto che con una normale calcolatrice algebrica.&lt;/p&gt;&#xA;&lt;p&gt;Di guide all&amp;rsquo;RPN ce ne sono a iosa, purtroppo sono tutte orientate a &lt;a href=&#34;https://hansklav.home.xs4all.nl/rpn/&#34;&gt;spiegarne l&amp;rsquo;uso con una calcolatrice fisica&lt;/a&gt;, come le ormai mitiche HP &lt;em&gt;vintage&lt;/em&gt;, oppure con le emulazioni grafiche per Android o iOS.&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Rispetto a queste guide ci sono alcune differenze da considerare. La principale è che, non avendo i tasti fisici, &lt;code&gt;luka&lt;/code&gt; (ma anche &lt;code&gt;dc&lt;/code&gt;) richiede che si prema ogni volta &lt;code&gt;ENTER&lt;/code&gt; per inserire un numero o una funzione. Anche alcuni nomi di funzioni sono diversi, così come i comandi per gestire lo stack o per salvare e recuperare le variabili. Ad esempio &lt;code&gt;luka&lt;/code&gt; usa &lt;code&gt;store&lt;/code&gt; e &lt;code&gt;load&lt;/code&gt; per le variabili, mentre le calcolatrici fisiche o emulate usano dei tasti denominati in genere &lt;code&gt;STO&lt;/code&gt; e &lt;code&gt;RCL&lt;/code&gt; (ma se l&amp;rsquo;autore legge questo articolo forse cambierà idea 😂). Ma, a parte questi dettagli, la logica di fondo non cambia.&lt;/p&gt;&#xA;&lt;p&gt;Da parte mia, ho provato in tutti i modi a far andare &lt;code&gt;luka&lt;/code&gt; in crash, e non ci sono mai riuscito. Ho provato a fargli calcolare il fattoriale di numeri assurdamente grandi o piccoli, a dividere per zero, ad eseguire il famigerato \( 0 / 0 \) e poi a calcolare il reciproco del risultato. Ma niente, imperturbabile mi ha sempre dato il risultato esatto. Insomma, la qualità c&amp;rsquo;è.&lt;/p&gt;&#xA;&lt;h4 id=&#34;conclusioni&#34;&gt;Conclusioni&lt;/h4&gt;&#xA;&lt;p&gt;Provare &lt;code&gt;luka&lt;/code&gt; non costa niente. Si installa (e disinstalla) in pochi secondi, funziona su macOS, Linux e, per chi vuole, anche su Windows. I risultati che produce sono esatti (e questa è la cosa che conta di più). Lo sviluppatore è bravo ed aperto ai suggerimenti. Insomma, è uno strumento ideale per chi vuole eseguire dei calcoli dal Terminale.&lt;/p&gt;&#xA;&lt;p&gt;Certo, è uno strumento di nicchia, destinato a pochi utenti sofisticati che apprezzano la notazione RPN e non hanno paura del Terminale. Ma proprio per questo ha un fascino tutto suo.&lt;/p&gt;&#xA;&lt;p&gt;E poi, vuoi mettere la bellezza di vedere un programma che evolve davanti ai nostri occhi, magari &lt;a href=&#34;https://github.com/mastro35/luka/issues&#34;&gt;partecipando allo sviluppo&lt;/a&gt; con suggerimenti o critiche?&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;Ed uno dei pochi linguaggi di programmazione, assieme a &lt;a href=&#34;https://www.melabit.com/it/2024/10/06/70-anni-di-fortran-piu-o-meno/&#34;&gt;FORTRAN&lt;/a&gt; e COBOL, ad essere ancora vivo e vegeto.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;Non a caso, uno dei linguaggi di programmazione più efficienti in assoluto è il FORTH, che si basa sullo stack e sull&amp;rsquo;uso dell&amp;rsquo;RPN.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:3&#34;&gt;&#xA;&lt;p&gt;Come, non avete nemmeno &lt;code&gt;make&lt;/code&gt;? Allora correte ad installare &lt;code&gt;homebrew&lt;/code&gt;!&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:4&#34;&gt;&#xA;&lt;p&gt;Per quest&amp;rsquo;ultimo consiglio senza riserve &lt;a href=&#34;https://apps.apple.com/it/app/pcalc-lite/id300311831&#34;&gt;PCalc Lite&lt;/a&gt; o meglio ancora la versione &lt;em&gt;full&lt;/em&gt; &lt;a href=&#34;https://apps.apple.com/it/app/pcalc/id284666222&#34;&gt;Pcalc&lt;/a&gt;, che costa quanto un panino e una minerale al bar. In alternativa &lt;a href=&#34;https://apps.apple.com/it/app/wp-34s/id620255094&#34;&gt;WP 34s&lt;/a&gt;, che riesce a compattare tutto in una sola schermata, oppure &lt;a href=&#34;https://apps.apple.com/it/app/i41cx/id292619450&#34;&gt;i41CX&lt;/a&gt;, perfetta per chi a suo tempo sognava di averla.&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>70 anni di Fortran (più o meno)</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2024/10/06/70-anni-di-fortran-piu-o-meno/</link>
      <pubDate>Sun, 06 Oct 2024 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2024/10/06/70-anni-di-fortran-piu-o-meno/</guid>
      <description>&lt;p&gt;Pochi giorni fa, il &lt;a href=&#34;https://www.edn.com/1st-fortran-program-runs-september-20-1954/&#34;&gt;20 settembre&lt;/a&gt; per essere precisi, il Fortran ha compiuto 70 anni.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; La data scelta per il compleanno è un po&amp;rsquo; anomala, per i software di solito si celebra la data in cui vengono presentati al pubblico,&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; mentre per il Fortran è stato scelto il giorno in cui gli sviluppatori dell&amp;rsquo;IBM hanno eseguito il primo programma scritto in questo linguaggio, ben tre anni prima della presentazione ufficiale.&lt;/p&gt;&#xA;&lt;h4 id=&#34;ad-alto-livello&#34;&gt;Ad alto livello&lt;/h4&gt;&#xA;&lt;p&gt;Ed è una decisione pienamente giustificata, poiché il 20 settembre del 1954 accade qualcosa che avrebbe fatto la storia: per la prima volta un computer esegue un programma scritto in un linguaggio ad alto livello, molto più vicino al modo di pensare di un uomo, invece che in un linguaggio comprensibile solo alle macchine come l&amp;rsquo;assembler.&lt;/p&gt;&#xA;&lt;p&gt;Un evento cruciale, che avrebbe reso la programmazione accessibile ad un numero sempre maggiore di persone, aprendo la strada alla diffusione capillare dei computer e innescando una trasformazione radicale della società e della nostra vita quotidiana. Non a caso David Padua&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;a href=&#34;https://ucla-biostat-257-2020spring.github.io/readings/fortran.pdf&#34;&gt;sostiene che&lt;/a&gt;&lt;/p&gt;&#xA;&lt;!-- &#xA;&gt; it is almost universally agreed that the most important event of the 20th century in compiling -- and in computing -- was the development of the first Fortran compiler between 1954 and 1957. By demonstrating that it is possible to automatically generate quality machine code from high-level descriptions, the IBM team led by John Backus opened the door to the Information Age.&#xA; --&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;è quasi universalmente riconosciuto che l&amp;rsquo;evento più importante del XX secolo nel campo dei compilatori &amp;ndash; e in quello dell&amp;rsquo;informatica [in generale, ndt] &amp;ndash; è stato lo sviluppo del primo compilatore Fortran tra il 1954 e il 1957. Dimostrando che è possibile generare automaticamente codice macchina di qualità a partire da descrizioni ad alto livello, il team IBM guidato da John Backus aprì le porte all&amp;rsquo;era dell&amp;rsquo;informazione.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h4 id=&#34;il-primo-programma&#34;&gt;Il primo programma?&lt;/h4&gt;&#xA;&lt;p&gt;Per quanto abbia cercato non sono riuscito a trovare il codice di questo primo programma in Fortran, ma non dovrebbe essere troppo diverso da questo,&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2024-10-06-70-anni-di-fortran-piu-o-meno/ibm3.jpg&#34; alt=&#34;&#34;&gt;&#xA;&amp;ndash; &lt;em&gt;IBM 704 Fortran Programmer&amp;rsquo;s Reference Manual, 1956.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;che cerca il numero più grande in una lista di numeri fornita dall&amp;rsquo;utente. Il programma è molto semplice e può analizzare non più di 999 numeri ma, quando l&amp;rsquo;unica alternativa era scorrere a mano colonne e colonne di numeri, doveva essere un bel passo in avanti.&lt;/p&gt;&#xA;&lt;p&gt;Da notare la presenza dell&amp;rsquo;istruzione &lt;code&gt;FREQUENCY&lt;/code&gt;, rimossa nelle versioni successive e più efficienti del compilatore, con la quale il programmatore poteva stimare il numero di volte in cui ciascun ciclo &lt;code&gt;DO&lt;/code&gt; o test logico &lt;code&gt;IF&lt;/code&gt; poteva essere eseguito, dando modo al compilatore di &lt;a href=&#34;https://ucla-biostat-257-2020spring.github.io/readings/fortran.pdf&#34;&gt;ottimizzare il codice macchina generato&lt;/a&gt;. L&amp;rsquo;ottimizzazione  si basava sul nuovo (per l&amp;rsquo;epoca) metodo Monte Carlo, che non è per niente difficile da padroneggiare, ma che deve essere piuttosto difficile da programmare in un linguaggio a basso livello come l&amp;rsquo;assembler. Tanto di cappello per gli sviluppatori del primo Fortran!&lt;/p&gt;&#xA;&lt;h4 id=&#34;ottimizzare-ottimizzare-ottimizzare&#34;&gt;Ottimizzare ottimizzare ottimizzare&lt;/h4&gt;&#xA;&lt;p&gt;La questione dell&amp;rsquo;ottimizzazione del codice generato dal compilatore era essenziale per il successo del nuovo compilatore Fortran. I computer di allora erano estremamente lenti e costosi, e i programmi dovevano essere molto efficienti per riuscire ad eseguire le operazioni richieste senza inutili sprechi di risorse. Il team IBM &lt;a href=&#34;https://ucla-biostat-257-2020spring.github.io/readings/fortran.pdf&#34;&gt;era consapevole&lt;/a&gt; che&lt;/p&gt;&#xA;&lt;!-- &#xA;&gt; if Fortran, during its first months, were to translate any reasonable scientific source program into an object program only half as fast as its hand-coded counterpart, the acceptance of our system would be in serious danger.&#xA; --&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;se il Fortran, nei suoi primi mesi di vita, fosse in grado di tradurre qualsiasi programma sorgente scientifico ragionevole in un programma oggetto con una velocità pari alla metà di quella della sua controparte codificata a mano, l&amp;rsquo;accettazione del nostro sistema sarebbe in serio pericolo.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;E ci sono riusciti. Un programma scritto in Fortran e tradotto in codice macchina attraverso il primo compilatore risultava effettivamente più lento di uno equivalente scritto in assembler, ma molto meno di quanto avessero temuto inizialmente gli sviluppatori.&lt;/p&gt;&#xA;&lt;p&gt;Il grande vantaggio di poter programmare utilizzando un linguaggio ad alto livello, con una sintassi molto vicina all&amp;rsquo;inglese, compensava ampiamente questa perdita di prestazioni. Non a caso, in pochi anni l&amp;rsquo;uso dei linguaggi ad alto livello si diffuse così tanto da mandare l&amp;rsquo;assembler nel dimenticatoio.&lt;/p&gt;&#xA;&lt;h4 id=&#34;notarelle-finali&#34;&gt;Notarelle finali&lt;/h4&gt;&#xA;&lt;p&gt;Il &lt;a href=&#34;http://pages.swcp.com/~walt/ibm.html&#34;&gt;manuale&lt;/a&gt; della prima versione del Fortran era davvero smilzo, appena 54 pagine. Niente a che vedere con i giganteschi tomi odierni, che riempiono 4-500 pagine per insegnare i rudimenti di un linguaggio di programmazione o di uno strumento software.&lt;/p&gt;&#xA;&lt;p&gt;Negli anni &amp;lsquo;80 il Fortran era così popolare in ambito scientifico che poteva essere usato non solo sui grossi mainframe o sulle workstation e i minicomputer tanto diffusi in ambito universitario, ma perfino sui microcomputer economici come il &lt;a href=&#34;https://www.lyonlabs.org/commodore/onrequest/Nevada_FORTRAN_for_the_Commodore_64.pdf&#34;&gt;Commodore 64&lt;/a&gt; e lo &lt;a href=&#34;https://crashonline.org.uk/45/tips.htm&#34;&gt;Spectrum 48K&lt;/a&gt;, oppure (c&amp;rsquo;è bisogno di dirlo?) sul più potente &lt;a href=&#34;https://www.computinghistory.org.uk/det/1702/Apple-II-Apple-Fortran-Language-Reference-Manual/&#34;&gt;Apple II&lt;/a&gt;. Certo, su queste macchinette non si poteva pensare di far girare una simulazione meteorologica o di generare un frattale in tempo reale, ma per imparare nella comodità di casa propria potevano essere più che sufficienti.&lt;/p&gt;&#xA;&lt;p&gt;È curioso che i tre principali linguaggi di programmazione sviluppati negli anni &amp;lsquo;50, Fortran (1954), LISP (1958) e COBOL (1959) siano ancora in uso oggi, dividendosi in modo netto i campi di applicazione: il Fortran per il calcolo scientifico ed ingegneristico, il COBOL in campo finanziario e bancario. E il LISP? Beh, il LISP sta ben nascosto in tante cose odierne, fra cui &lt;a href=&#34;https://www.gnu.org/software/emacs/&#34;&gt;emacs&lt;/a&gt; e &lt;a href=&#34;https://julialang.org/&#34;&gt;Julia&lt;/a&gt;, e comunque rimane sempre il più affascinante dei tre.&lt;/p&gt;&#xA;&lt;h4 id=&#34;bibliografia&#34;&gt;Bibliografia&lt;/h4&gt;&#xA;&lt;p&gt;Qualche link per chi volesse approfondire:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Il sito di riferimento del linguaggio Fortran, &lt;a href=&#34;https://fortran-lang.org/&#34;&gt;fortran-lang.org&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.ibiblio.org/pub/languages/fortran/ch1-1.html&#34;&gt;A Brief History of FORTRAN/Fortran&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;David Padua, &lt;a href=&#34;https://ucla-biostat-257-2020spring.github.io/readings/fortran.pdf&#34;&gt;The Fortran I Compiler&lt;/a&gt;, Computing in Science &amp;amp; Engineering, 2000.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Lee Phillips, &lt;a href=&#34;https://arstechnica.com/science/2014/05/scientific-computings-future-can-any-coding-language-top-a-1950s-behemoth/&#34;&gt;Scientific computing’s future: Can any coding language top a 1950s behemoth?&lt;/a&gt;, Ars Technica, 2014.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Rud Merriam, &lt;a href=&#34;https://hackaday.com/2015/10/26/this-is-not-your-fathers-fortran/&#34;&gt;This Is Not Your Father’s FORTRAN&lt;/a&gt;, Hackaday, 2015.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Liam Tung, &lt;a href=&#34;https://www.zdnet.com/article/this-old-programming-language-is-suddenly-hot-again-but-its-future-is-still-far-from-certain/&#34;&gt;This old programming language is suddenly hot again. But its future is still far from certain&lt;/a&gt;, ZDNET, 2021.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;Lo so, ormai non sono più tanto &lt;em&gt;pochi&lt;/em&gt;, ma negli ultimi tempi sono stato assorbito dal trasloco imprevisto del nostro istituto a causa di urgenti lavori di ristrutturazione.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;Anche in modo informale, come è successo per Linux, presentato per la prima volta su un &lt;a href=&#34;https://en.wikipedia.org/wiki/History_of_Linux&#34;&gt;newsgroup&lt;/a&gt; dedicato ad un sistema operativo ormai dimenticato.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:3&#34;&gt;&#xA;&lt;p&gt;David Padua è professore emerito presso il Dipartimento di Informatica dell&amp;rsquo;università dell&amp;rsquo;Illinois a Urbana-Champaign.&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
  </channel>
</rss>
