Buongiorno, abbiamo avuto un breve scambio privato con Alessandro nel quale mi ha chiesto un chiarimento in merito al "linguaggio macchina"
Alessandro mi permetto di rispondere (a quello che può essere reso pubblico, ovviamente) qui in lista perché credo che questi concetti non facciano ancora parte della cultura generale, mi perdonino gli eruditi in lista! io ho scritto: >> [...] la cosa è molto tecnica e un po' complessa (ma non >> complicata) ma c'è una differenza _costitutiva_ tra il cosìddetto >> "linguaggio macchina" - l'unico che comprendono i calcolatori, quello >> "binario" - e i "linguaggi di programmazione" progettati e usati da gli >> umani per scrivere il software "sorgente" che poi viene trasformato in >> "binario" >> >> anche linguisticamente parlando questa differenza deve essere compresa >> in tutti i suoi risvolti, altrimenti facciamo fatica a capirci > Non è per niente semplice capire i millemila tecnicismi, nella mia > ignoranza vorrei capire le differenze fra "linguaggio macchina" - "binario" > - "linguaggi di programmazione" - "sorgente". > Intuisco quello che scrivi, ma c'è un bel salto fra intuire e capire, > intanto domando: "linguaggio macchina" - "binario", sono sinonimi, ho > capito bene oppure no? sì, hai capito bene :-) come saprai la CPU può "riconoscere" solo 0 e 1 perché i circuiti elettronici possono distinguere solo tra "passa corrente" o "non passa corrente" e (re)agire di conseguenza i comandi (e i dati) in notazione binaria sono una sequenza di uni e zeri e vengono spesso rappresentati in notazione esadecimale (numeri a base 16 invece che 2)... perché viene comodo. il linguaggio macchina è una piccola sequenza di comandi e parametri espressa in formato binario o esadecimale che viene eseguita dal processore; i comandi che un processore piò eseguire sono molto semplici, tipo somma, dividi, confronta, memorizza (ma lo fa a velocità stratosferiche). Un programma binario è una enorme sequenza di codici binari (codici e dati a quel punto sono praticamente indistinguibili). tutto quello che "succede" dentro un computer, compresa l'interazione con l'ambiente esterno attraverso i cosiddetti i dispositivi di input/output come tastiera/mouse, monitor, ecc. dipende solo ed esclusivamente da quel numero enorme di piccole sequenze di comandi e parametri espressi in linguaggio macchina. Come corollario, data l'enorme complessità del sistema, è praticamente impossibile verificare cosa succede /dentro/ la macchina anche si ha accesso a tutto il suo codice in linguaggio macchina; in altre parole, a quel punto (binario) la macchina è una "black box". tornando al linguaggio, ne esiste uno di programmazione a basso livello, l'assebly, in cui i codici operativi (numerici binari) e i parametri sono sostituiti da istruzioni mnemoniche per rendere più semplice ai programmatori (umani) sviluppare e fare debugging di programmi che funzionano _direttamente_ senza bisogno di essere "tradotti" se non con una banale tabella di conversione nel corrispondente codice binario. L'assembly quindi è un linguaggio di programmazione a "basso livello", livello che sale man mano che i linguaggi diventano /simbolici/, come Fortran, C, Python fino al Lisp. a causa della complessità della programmazione in assembly, tale linguaggio viene usato solo ed esclusivamente per pochissimi programmi per i quali è indispensabile accedere direttamente alla CPU o ad altro hardware. per approfondimenti sul linguaggio macchina puoi partire da qui: https://it.wikipedia.org/wiki/Linguaggio_macchina la prima e _fondamentale_ conseguenza di tutto ciò espresso sopra è che tutti programmi scritti in linguaggi di programmazione (assembly a parte per i motivi detti prima) _devono_ essere "tradotti" in linguaggio macchina e la traduzione è effettuata per mezzo di altri... /programmi/, che a loro volta sono stati scritti in un linguaggio di programmazione e "tradotti" da alti... /programmi/; e così via fino al primo programma che è stato scritto direttamente in assembly (da un essere _umano_). tutto quello che "succede" dentro un calcolatore è _determinato_ da questo lunga /catena/ (supply chain) di "traduzione" da linguaggi di programmazione ad alto livello a linguaggio macchina, processo che viene chiamato "bootstrappable builds" [1]. [...] > quel che ho capito è che la macchina intende soltanto 0 / 1, tutto il > problema ma proprio tutto nasce da qui, sì, nasce tutto, ma proprio tutto da qui :-) > come tradurre umano in zerounese e viceversa. solo una piccolissima parte "dell'umano" può essere espressa in un linguaggio di programmazione, anche il più completo dei linguaggi di programmazione, il Lisp, è estremamente limitato nelle sue capacità di "esprimere l'umano" (o meglio, è molto ma molto ma molto complesso raggiungere un simile livello di espressività [2]). le sole cose che si possono esprimere per essere eseguite da un calcolatore sono quelle possibili coi linguaggi di programmazione ad alto livello (o anche in assembly, ma in /rare/ occasioni) il "viceversa" invece è _lettarelmente_ impossibile: non esiste un modo per tradurre lo zerounese in umano, cioè nel linguaggio di programmazione ad alto livello usato per generare lo zerounese capisci perché, /linguisticamente/ parlando, è importante partire da queste basi per sviluppare tutto il resto del dibattito? [...] spero di non essere stato troppo tecnico ma nemmeno troppo all'acqua di rose :-) un caro saluto, 380° [1] https://bootstrappable.org/ [2] la ricerca iniziale sull'Intelligenza Artificiale si è spesa molto sulla possibilità di sviluppare Intelligenza Artificiale per mezzo di rappresentazioni simboliche di alto livello https://en.wikipedia.org/wiki/Symbolic_artificial_intelligence -- 380° (Giovanni Biscuolo public alter ego) «Noi, incompetenti come siamo, non abbiamo alcun titolo per suggerire alcunché» Disinformation flourishes because many people care deeply about injustice but very few check the facts. Ask me about <https://stallmansupport.org>.
signature.asc
Description: PGP signature