Pensieri da Coder
mercoledì 29 febbraio 2012 - 1 Commento
CPython e il polimorfismo degli operatori

Manca ormai l’ultimo pezzo del puzzle, come si suol dire, per completare l’analisi del funzionamento e dell’implementazione degli operatori nella macchina virtuale di Python (CPython per l’esattezza).
Abbiamo visto nel precedente articolo che, per l’operatore di “somma” (il simbolo +), l’astrazione è racchiusa dentro un’apposita funzione, chiamata PyNumber_Add.
Ovviamente esistono altrettante funzioni per gli altri operatori, inclusi quelli unari, ma il concetto finora esposta è di carattere generale, per cui è applicabile anche a questi.
PyNumber_Add, però, esegue soltanto una piccola parte del lavoro, delegando l’implementazione, di più basso livello, a un’altra funzione, …

mercoledì 22 febbraio 2012 - Commenta
L’astrazione dell’operazione di somma/concatenazione in CPython

La lunga serie di articoli finora scritti che descrivono i meccanismo interni di CPython hanno fornito uno spaccato di come la macchina virtuale implementi le operazioni a cui siamo abituati (in particolare ci siamo soffermati su quelle binarie), ma il cerchio non è ancora stato chiuso.
Manca, infatti, l’analisi del workflow che dall’istruzione / opcode da eseguire porta alla routine che verrà effettivamente utilizzata per coprire il caso specifico, di cui quest’articolo presenta una prima parte.
CPython 2.x ci ha abituati a diversi hack, spezzoni di codice altamente specializzato per accelerare il …

mercoledì 8 febbraio 2012 - 17 Commenti
Nuovi linguaggi, vecchi errori

YAPL: Yet Another Programming Language. Da un po’ di anni a questa parte, con la diffusione di strumenti di sviluppo comodi e semplici per la generazione di interpreti e/o compilatori, si sta assistendo a un’autentica proliferazione di nuovi linguaggi di programmazione che cercano di ritagliarsi uno spazio in appositi ambiti applicativi o addirittura di proporsi come sostituti di altri “storici” e consolidati.
E’ il caso di Rust di Mozilla Foundation, che strizza l’occhio al C con una sintassi che ha molto in comune, sebbene non l’abbia presa in prestito a tutti …

mercoledì 1 febbraio 2012 - 17 Commenti
Aspettative sulle prossime console

Dall’annuncio della prossima console di Nintendo, il Wii U, che dovrebbe arrivare quest’anno, si è dato ufficialmente il via alle speculazioni sull’hardware della prossima generazione, e su quello che sarebbe (il condizionale rimane un obbligo in attesa delle specifiche definitive) in grado di fare.
L’ultima notizia, di qualche giorno fa, attesta la Wii U come due volte “più potente” della XBox 360, mentre il successore di quest’ultima sembrerebbe sei volte “più potente” del predecessore.
Fermo restando che il concetto di “potenza” di una macchina rimane, in ogni caso, relativo. “Potente” rispetto a …

mercoledì 18 gennaio 2012 - 2 Commenti
Tipi, classi, e protocolli in CPython

Dopo una breve pausa torniamo a parlare di Python e della sua implementazione più comune, la virtual machine CPython. Abbiamo già visto in che modo viene effettivamente realizzata la somma di due numeri interi e, in parte, la concatenazione di due stringhe.
Il “filo conduttore” di tutto è rappresentato dal tipo (o classe) più semplice, cioè dalla struttura PyObject definita in C dai due campi ob_ref e ob_type, rispettivamente contatore del numero di riferimenti di un certo oggetto, e puntatore alla struttura della classe a cui appartiene.
Quest’ultimo è stato visto più volte, …

mercoledì 4 gennaio 2012 - 32 Commenti
Emulazione, simulazione, e limiti tecnologici

Il precedente articolo sul MAME ha scatenato un po’ di polemiche che francamente non mi sarei aspettato, per cui ho deciso di affrontare alcuni argomenti che sono venuti fuori, in particolare quello prettamente tecnico che riguarda il cieco affidarsi all’evoluzione della tecnologia per giustificare il ricorso a codice sempre meno ottimizzato e/o esageratamente spostato verso la più onerosa simulazione piuttosto che alla più leggera emulazione.
Premetto intanto che l’emulazione era pre-esistente al MAME, da un bel pezzo. La prima volta che ne ho sentito parlare era ai tempi dell’Amiga, col suo …

giovedì 22 dicembre 2011 - 80 Commenti
Il MAME è sempre più distante dalla gente

Per un appassionato di emulazione non conoscere il MAME sarebbe come non conoscere il David di Michelangelo per un amante della scultura, perché rappresenta senza ombra di dubbio il progetto assunto ad autentico simbolo di riferimento in questo settore.
L’acronimo sta per Multiple Arcade Machine Emulator e nasce dal lavoro di un italiano, Nicola Salmoria, già noto ai tempi delle mitiche BBS per la frequentazione dell’allora più grande rete mondiale dell’epoca, Fidonet.
Come si può intuire già dal nome, nasce per emulare macchine che fanno girare i videogiochi arcade (detti anche coin-op). Il …

mercoledì 14 dicembre 2011 - 8 Commenti
Dai long del C a quelli di (C)Python

Nel precedente articolo abbiamo visto a grandi linee in che modo viene eseguita una somma fra due interi “lunghi” (long) di CPython (il codice riguardava la versione 3.2, per la precisione), puntando l’attenzione sul caso migliore (che dovrebbe anche essere il più comune).
Dalla discussione era rimasta fuori la funzione PyLong_FromLong, che si occupa di convertire il risultato dell’operazione dal tipo long del C al PyLongObject col quale lavora la macchina virtuale, ma a causa della complessità ho preferito trattarla separatamente.
Al solito, suddividendo il codice in parti risulta molto più semplice comprenderne …

venerdì 9 dicembre 2011 - 11 Commenti
Kahn, il francese che ambiva al dominio nel mondo del software

Dopo il precedente post dedicato all’odiato Ed Esber, continuo a fare tesoro del libro “Alla ricerca della stupidità” per parlarvi di Philippe Kahn, ovvero il fondatore e primo CEO di Borland che irrompe sulla scena nel 1983 con il mitico Turbo Pascal, riadattamento per CP/M e DOS del COMPAS Pascal di Anders Hejlsberg.

Philippe Kahn nel 2007
Il prodotto è decisamente innovativo con il suo IDE all-in-one, ma, soprattutto, si rileva un generatore di entropia per l’intero settore grazie ad un prezzo assolutamente irrisorio per il periodo: solo 49,95dollari contro i 300dollari …

mercoledì 7 dicembre 2011 - 14 Commenti
Sommare due “long” non è così semplice in CPython

Arrivati ai long (interi “lunghi”) sulla scia dei precedenti articoli sulla macchina virtuale di Python (CPython, quella maggiormente in uso finora), un articolo sull’implementazione della loro somma, a titolo anche di confronto con la medesima operazione per gli interi (corti), era inevitabile.
Il cuore di tutto sta nella funzione long_add, locata nel file longobject.c, che ovviamente riceve come parametri i due oggetti PyLongObject di cui si voglia effettuare la somma:
In apparenza il funzionamento non sembra complicato, presentando poco codice che, però, si trova per lo più celato all’interno di macro e funzioni …