<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">2013/12/26 Enrico Bianchi <span dir="ltr"><<a href="mailto:enrico.bianchi@ymail.com" target="_blank">enrico.bianchi@ymail.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="im">On 12/25/2013 04:22 PM, enrico franchi wrote:<br>


<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
3. Go e' un linguaggio *pensato* per la concorrenza... che lo rende 'un po' diverso' da Pascal. E no, le goroutines sono una bestia molto diversa da un TThread.<br></blockquote></div></blockquote><div> </div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="im"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


</blockquote></div>
Quindi, la risposta alla mia domanda iniziale e` che Go e` pensato per un ambito specifico, mentre (Object) Pascal (ma anche Python, C e un'altra serie di linguaggi) sono pensati per un ambito generico. Il che li rende due linguaggi di nicchia, sia per diffusione (Delphi e FreePascal sono meno diffusi di Python, ad esempio), sia per ambito (L'ambito di Go e` la programmazione concorrente). Per il resto del discorso, la risposta si riassume in:<br>

</blockquote><div><br></div><div><br></div><div>Guarda che nel 2013 dire che e' "pensato per la concorrenza", vuole dire che e' progettato per le esigenze specifiche condivise da buona parte dei progetti software. Cioe' ormai *tutto* e' concorrente: tutte le volte che vuoi avere a che fare con internet, quello devi fare e' fare tanto I/O remoto. E qui aiuta. Tutte le volte che vuoi scrivere un servizio accessibile dalla rete, tutto questo diventa ancora piu' fondamentale.</div>

<div> </div><div>Il problema della concorrenza e' uno dei piu' sentiti e critici nel mondo moderno. Tutte le piattaforme sperimentano soluzioni per questo problema. Perche' nel 2013 e' qualcosa in cui ti imbatti continuamente, piu' volte, per qualunque cosa.</div>

<div><br></div><div>Quindi e' abbastanza surreale pensare di liquidare "Go e' pensato per un ambito specifico", nello stesso modo in cui si direbbe "R e' pensato per un ambito specifico". Semplicemente Go ti mette a disposizione una buona primitiva, mentre, per dire, Java te ne mette a disposizione una cattiva.</div>

<div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
 - Si, (Object) Pascal e` supportato, sia a livello di aziende che ti offrono assistenza, sia a livello di<br>
   sviluppatori che ad oggi ti mettono a disposizione gli strumenti che ti permettono di usarlo anche in<br>
   ambienti mission critical, sia a livello di compilatori disponibili.<br></blockquote><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


 - La "roba moderna" la fai tranquillamente con (Object) Pascal, sia perche` sono rilasciate le librerie</blockquote><div><br></div><div>Ma sei *sicuro*? Solo per fare una cosa spannometrica... guardiamo GitHub.</div>

<div>Su GitHub ci sono 11 mila e rotti progetti in Go. Per confronto ce ne sono 168 in Pascal.</div><div>Non che sia autoritativo, eh, ma e' qualcosa che mi fa sospettare una leggera differenza in termini di facilita' di trovare i progetti.</div>

<div><br></div><div>Tipo... gli altri 11.000 progetti in Pascal, dove stanno? Tutti sparsi per la rete?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

, sia<br>
   perche` puoi  linkare direttamente librerie C. Quindi, se proprio non c'e` la libreria che si cerca, il<br>
   problema lo si aggira facilmente.<br></blockquote><div><br></div><div>Cioe' devo passare per il binding in C di una libreria per chiacchierare con Twitter [sostituisci Twitter con una qualunque web app moderna]? Siamo sullo stesso pianeta? Cioe', ok mi va anche bene passarci (forse), o meglio vorrei che qualcun altro ci fosse  passato da tempo; se voglio fare X, mi piace trovare X-1 fatto. </div>

<div><br></div><div>Mi spiego, mi stai suggerendo di usare Pascal per chiamare librerie in C? E allora perche' non usare C?</div><div>Non e' che Pascal mi dia questa soverchiante astrazione sopra C da facilitarmi la vita. Viceversa, in Go, chiamare C e' parecchio facile (imbarazzantemente facile, aggiungo).</div>

<div><br></div><div>Tra l'altro Go e' un linguaggio che ha fatto sua la lezione di cosine come Python e Ruby. Tante cose che oggi diamo per scontate, in Go le troviamo. In Pascal, purtroppo, no.</div><div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

- Fare programmazione concorrente con (Object) Pascal si puo`, solo che ti ritroveresti gli stessi problemi<br>
  che avresti (e.g.) con C, in quanto sono due linguaggi generici. E questo senza considerare Concurrent<br>
  Pascal<br>
<br></blockquote><div><br></div><div>Veramente stai suggerendo Concurrent Pascal? Cioe' come alternativa a Go tu stai sostituendo un linguaggio in cui hanno tolto:</div><div>1. puntatori</div><div>2. la possibilita' di passare funzioni come parametri (eeh?) [quindi in pratica tutte le higher order functions]</div>

<div>3. il concetto di file?</div><div><br></div><div>e che basa il suo modello di concorrenza sul concetto di, udite udite, *MONITOR* (che nel 1975 magari sembrava una splendida idea, 20 anni di Java ci hanno insegnato che non lo e')</div>

<div><br></div><div>Aggiungo, questa e' la home page:</div><div><a href="http://faculty.cs.wwu.edu/meehan/ProgramExample/CPS/CpsSamps.htm">http://faculty.cs.wwu.edu/meehan/ProgramExample/CPS/CpsSamps.htm</a></div><div>

<br></div><div>Parliamo di un linguaggio del 1975 che non ha avuto praticamente impatto sull'accademia [ovvero 42 citazioni in 38 anni, scherziamo?]. L'impatto sull'industria e' non pervenuto... l'autore apparentemente ha smesso di pubblicarci dal 2001.</div>

<div><br></div><div>Cioe', tu vorresti suggerire di deployare un sistema sviluppato in Concurrent Pascal *sul serio*?</div><div>Vorresti paragonare questo a Go? Che scusa, ma quei due o tre progetti di scala *immensa* visto che se lo usa big G ha dimostrato di saperli reggere. Non parliamo delle migliaia di progetti di scala grossa o normale che vengono deployati in Go.</div>

<div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Infine, dire che le goroutines non sono thread quando praticamente tutto il mondo dice che lo sono ma con qualche differenza e` come dire che le patate a pasta viola non sono patate</blockquote><div><br></div><div>Quello che dovresti chiederti, e' se sai quali sono le differenze. Perche' queste "piccole" differenze, cambiano completamente il modo in cui concepisci, strutturi, progetti e scrivi il codice.  </div>

<div><br></div><div>Cioe', tipo che quello che fai con l'uno, con l'altro non riesci a fare... a meno di implementarti a mano quello che il primo ti offre gratis.</div><div><br></div><div>Cioe' tecnicamente le goroutine sono threads se e solo se intendi thread nel senso completamente piu' vago del termine. Se vuoi usare un termine piu' specifico, assomigliano molto di piu' alle fibre, o se preferisci, ai processi di Erlang (anche qui... quelli di Erlang li chiamano processi, ma non e' che siano molto parenti dei processi di un sistema operativo, sebbene abbiano lo stesso nome).</div>

<div> </div></div>-- <br> .<br>..: -enrico-
</div></div>