<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2015-06-28 15:22 GMT+01:00 Alessandro Re <span dir="ltr"><<a href="mailto:ale@ale-re.net" target="_blank">ale@ale-re.net</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span><p dir="ltr">On Jun 26, 2015 9:30 AM, "enrico franchi" <<a href="mailto:enrico.franchi@gmail.com" target="_blank">enrico.franchi@gmail.com</a>> wrote:<br>
> Grazie della fiducia, ma qui il disclaimer e' importante. Intanto la "teoria" di cui si parla e' roba che studiai davvero tipo 12 anni fa (quindi ci sono innumerevoli problemi di cache miss).</p>
</span><p dir="ltr">Questo rende la cosa ancor più sorprendente :) la mia conoscenza dei linguaggi formali non è molto estesa (mi fermo a sapere cos'è il pumping lemma, per dire), ma la parte che ti invidio maggiormente è la capacità di collegarla all'effettiva implementazione e applicazione nei linguaggi di programmazione reali - che sostanzialmente non ho.</p></blockquote><div>Questo e', in parte, un problema della didattica italiana. Generalmente trovo che sia molto buona sugli aspetti teorici, ma poi non si procura minimamente di collegare gli aspetti con qualcosa di vagamente pratico. Credo che sia il solito complesso di inferiorita' degli informatici (italiani specialmente) in confronto dei matematici, per cui cercano di fare vedere che sono un po' matematici anche loro, tanta teoria, e la pratica e' solo un dettaglio. Per dire, l'Ullman spesso tentava di ricollegare la teoria alla pratica.</div><div><br></div><div>Come dicevo, poi e' complicato. Davvero la materia e' drammaticamente astratta. Complessivamente ce ne sono intere parti che sono effettivamente indistinguibili da altri soggetti di matematica discreta. Dopo di che capita che una piccolissima parte sia applicata e che una parte importantissima nella pratica (ma relativamente poco interessante nella teoria astratta che si fa nel "primo corso") sia invece esposta in un corso di compilatori. Per esempio, se si va a scrivere un parser per davvero, sapere cosa vuole dire che una grammatica e' LL(k) o LR(k) cambia. E tipicamente uno che fa compilatori sa cosa vuole dire e cosa cambia... pero' ancora una volta, potrebbe non interessargli dimostrare che esiste un parser LL(K) o meglio un LR (o LARL). Probabilmente gli interessa di piu' scriverlo e che funzioni (ed effettivamente se hai un parser LARL che ti parsa e me lo esibisci... beh, sei context free e tanti saluti[0]).</div><div><br></div><div>--</div><div>[0] al solito, sempre che la parte non context-free non sia finita nel lexer.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<p dir="ltr">Ma mentre la teoria si studia e, a seconda del cervello, la si ricorda o meno, la capacità di applicarla di solito è dovuta alla... Pratica! Quindi volevo chiederti, da dove deriva tutta questa conoscenza? Ti occupi di compilatori? Hai fatto un phd sul tema?</p></blockquote><div>Allora... intanto non sono sicuro che sia "tutta questa conoscenza". Nel senso che, davvero... se acchiappi una persona che di queste cose ne sa davvero e' diverso. Parecchio diverso. Poi si, grosso modo questa roba la masticavo, pero' ne ricordo veramente solo degli sprazzi. Grosso modo so come funziona il pumping lemma, per intenderci, ma non e' che sono sicuro che senza leggere te lo saprei scrivere corretto a memoria. Il che la dice lunga su quanto poco ormai sappia della teoria. Pero' diciamo che ho imparato un po' ad applicare quello che ricordo.</div><div><br></div><div>E no, non mi occupo di compilatori; per un po' ho fatto parecchia analisi statica (ma li la parte di parser e combriccola serve, ma e' il meno interessante di tutto il bailamme: puoi tranquillamente sputare syntax error e tanti saluti: a nessuno salta in testa di ficcare un programma sintatticamente non valido in un coso che cerca di dimostrare che il tuo programma non contiene certi errori semantici). Incidentalmente siamo in media piu' forti sulla parte di "ottimizzazione" perche' quello che fai in analisi statica e' relativamente piu' vicino all'ottimizzatore di un computer. Un analizzatore statico cerca di dimostrare che il tuo programma ha certe caratteristiche che implicano che una certa categoria di bug e' assente, un ottimizzatore cerca di dimostrare che il tuo programma ha certe proprieta' tali per cui puo' essere riscritto in un modo piu' efficiente. Ci sono anche casi veramente vicini.</div><div><br></div><div>Ma e' comunque roba di 8 anni fa, direi. Credo che sotto sotto mi sia stata martellata in testa stile training di Karate Kid quando studiavo. Certo, mi e' stata tenuta rinfrescata per alcuni anni. Altra roba e' invecchiata molto peggio nella mia testa. </div></div><div><br></div>-- <br><div> .<br>..: -enrico-</div>
</div></div>