Questa domanda mi è stata fatto dall'Editor-in-Chief di Motherboard Derek Mead e non riesco a smettere di pensarci: Qual è la più piccola unità di codice del mondo dell'informatica?È una domanda interessante perché fa riferimento, prima di tutto, al vero significato di 'codice'. Un piccolo codice corrisponde a ciò che noi sviluppatori e programmatori vediamo effettivamente sullo schermo? O dovremmo misurare il codice in base a come viene tradotto e come effettivamente agisce su una vera macchina? Personalmente, credo sia una combinazione delle due cose: il codice più piccolo possibile corrisponde alla minore quantità di sintassi di un linguaggio di programmazione che possiamo scrivere per produrre il più grande effetto a livello macchina.Quindi, diamo un'occhiata alle tre prospettive menzionate sopra, cominciando con la più semplice.Parlando di numero di caratteri, qual è il più piccolo pezzo di sintassi di programmazione funzionante che posso scriverePer essere chiari: non conosco tutti i linguaggi di programmazione, ma ho dimestichezza con tutti i principali e anche qualcosa in più. I cosiddetti linguaggi interpretati sono ciò che rendono questo interrogativo semplice. Si tratta di linguaggi la cui sintassi (ciò che il programmatore, di fatto, scrive) viene data in pasto a un software intermediario che funge da traduttore (o interprete) tra il nostro codice di alto livello e unità pre-costruite di istruzioni macchina. È come eseguire dei programmi dentro altri programmi.L'alternativa a un linguaggio interpretato è un linguaggio compilato, per cui scriviamo un tot di codice in un file e poi inviamo quel file ad essere convertito in una nuova serie di istruzioni macchina che rappresentano solamente (e solamente) il file di input. La differenza è un po' come quella che c'è tra il costruire un castello con dei Lego (linguaggio interpretato) e costruirlo con un grosso pezzo di plastica fusa (linguaggio compilato). Entrambi gli approcci hanno i loro vantaggi e i loro svantaggi. Generalmente, se stai lavorando a un grosso pezzo di software che dovrà essere utilizzato su un computer vero e proprio, lo programmerai con un linguaggio compilato.Python e il JavaScript sono entrambi linguaggi interpretati. Siamo liberi di scrivere enormi programmi vecchia scuola in ognuno dei due linguaggi, ma possiamo anche dare in pasto piccoli frammenti di sintassi direttamente all'interprete di ognuno dei linguaggi, che esistono sotto forma di linea di comando identica a quella del tuo sistema operativo (anch'essa è un'interprete, ma per un set diverso di comandi). Quest'è, Python è un linguaggio di programmazione ma è anche un software installato nei nostri sistemi come qualsiasi altro software.Per rispondere alla domanda: una singola cifra numerica. Questo, probabilmente, è il più piccolo frammento di sintassi codice che posso scrivere in qualsiasi linguaggio di programmazione.Posso inserire una singola cifra numerica sia nell'interprete Phyton che in quello Node.js (una shell che interpreta il JavaScript) e entrambi me lo restituiranno senza errori o avvisi di sorta. Posso anche non scrivere nulla e non ricevere alcun errore, ma in questo caso forse non avrebbe granché senso.In un linguaggio compilato, c'è bisogno di molto di più, relativamente parlando. Abbiamo almeno bisogno della shell di una funzione che fornisca al sistema operativo il punto di partenza nel programma, quindi almeno una mezza dozzina di caratteri. Lo scheletro base di un programma in C++ assomiglia a questo:int main() { return 0; }Non è molto, ma è sicuramente più di:Non credo che la misura della sintassi più breve indicata sopra sia una maniera onesta di rispondere a questa domanda. Per eseguire quello "0" ci sono bisogno, in realtà, di un bel po' di risorse di sistema, relativamente parlando. Secondo l'activity monitor del mio MacBook, lo shell Node che ho usato per interpretare la singola cifra sta occupando circa 11 MB di memoria di sistema. Un singolo carattere, però, può essere rappresentato da un singolo byte di memoria. Quindi, stiamo sfruttando 11 milioni di byte per visualizzare un byte di dati.int main() { cout << 0; return 0; }
Il codice C++ sopra è modificato per visualizzare la singola cifra "0" occupa circa 28.000 byte di memoria al massimo (secondo il tool per code profiling Valgrind). Si tratta di un ingombro decisamente minore.
Ciononostante, 28.000 byte sono 28.000 byte. Potrei migliorare la situazione liberandomi di "iostream," una libreria C++ standard usata per operazioni input/output. Includerla significa che sto includendo del codice extra da altri file, e poi altro codice da altri file che dipendono dal codice iostream. La libreria iostream non è di per sé enorme, ma deve chiamare in causa qualche altra componente per riuscire a lavorare a dovere. Tutto ciò finisce impiantato nella memoria di sistema quando il codice viene effettivamente eseguito.
Nel programma sopra, iostream ci restituisce solamente cout (pronunciato "sii-aut", ma sarà per sempre "kout" nella mia testa). Si tratta solamente di un frammento di sintassi utile a restituire dati allo schermo. Possiamo fare la stessa cosa in maniera leggermente diversa, come in:
Pubblicità
LA SINTASSI PIÙ PICCOLA
Pubblicità
Pubblicità