Logo Blogo

C/C++

Rilasciato nginx 1.2.0, il secondo web server più utilizzato

pubblicato da Giacomo Picchiarelli in: BSD Open Source C/C++


Appena tre giorni fa è stata rilasciata la versione 1.2.0 di NGINX (engine x), il web e reverse/mail proxy server, creato da Igor Sysoev. Sono passati sette anni dal rilascio iniziale e mese dopo mese continua a guadagnare terreno; secondo Netcraft la sua quota di mercato è di circa il 10%. Questo risultato ne fa il secondo web server più utilizzato.

Di fatto si sta trasformando nella killer app dei web server, tanto che compagnie come Hulu, Facebook e Automattic (per wordpress.com) lo utilizzano per le sue eccellenti doti di scalabilità, stabilità e gestione di carichi molto elevati. C’è da sottolineare che nginx non è progettato per fornire il maggior numero di features, ma piuttosto per supportare un limitato insieme di caratteristiche con prestazioni di classe superiore e soprattutto con un ottimo grado di determinismo. Caratteristica fondamentale per la progettazione di data center.

nginx è nato con l’intento di risolvere il problema C10K, ossia poter servire 10000 client simultanei per ogni istanza server con un consumo di risorse veramente limitato. I confronti con installazioni Apache Web Server sono spesso imbarazzanti e questo è dovuto al diverso approccio utilizzato dai due. nginx ha adottato una strategia asincrona ad eventi, che consente di scalare in maniera molto efficiente, evitando di replicare risorse ad ogni richiesta, come invece avviene per i server multi-processo o multi-thread.

Continua a leggere: Rilasciato nginx 1.2.0, il secondo web server più utilizzato

Debian può compilare su LLVM/Clang il 92% dei pacchetti in archivio

pubblicato da Federico Moretti in: Debian C/C++

LLVMDebian può sostituire GCC con LLVM/Clang per il 92% dei pacchetti del proprio archivio: è il risultato delle prove di Sylvestre Ledru. Più precisamente, la percentuale dei pacchetti compilati con successo è del 91,2% — contro l’85,5% della versione 2.9 di LLVM/Clang. Una cifra confortante per chi intende utilizzare il compilatore.

Sul totale di 15.658 pacchetti, appena 1.381 hanno fallito la compilazione: Ledru ha fornito una spiegazione dettagliata del tipo d’errore in una sezione dedicata a Clang sul portale di Debian. Nella maggioranza dei casi, i problemi possono essere risolti con facilità: spesso il fallimento non sarebbe neppure dovuto al compilatore.

Ledru è convinto che, nei prossimi anni, LLVM e Clang sostituiranno GCC nella toolchain di Linux e *BSD: a supporto di questa tesi, Ledru sottolinea la maggiore specificità del compilatore nel debugging e i progressi delle soluzioni correlate da Xcode a Chromium. Il problema è legato alla governance. LLVM non è un progetto di GNU.

Via | Phoronix

LLVM/Clang potrebbero supportare OpenMP da un prossimo aggiornamento

pubblicato da Federico Moretti in: Programmazione C/C++

OpenMPOpenMP, l’Application Programming Interface (API) per il parallel programming già implementata con successo da GCC, potrebbe essere supportata al più presto da LLVM/Clang. Al momento, l’infrastruttura di LLVM-IR non permette l’utilizzo delle specifiche di OpenMP: l’unica soluzione è compilare i sorgenti ottimizzati da LLVM con GCC.

Questa situazione sembra essere destinata a cambiare: tuttavia, non è ancora stata definita la tabella di marcia per l’integrazione di OpenMP. Il supporto potrebbe essere escluso da LLVM 3.1, l’imminente aggiornamento della piattaforma. Clang, ad ogni modo, non permetterebbe la compilazione di tutti i linguaggi supportati da OpenMP.

Mi riferisco, in particolare, a Fortran. Previsto da OpenMP e supportato da GCC, il linguaggio è escluso da Clang — che prevede soltanto C/C++ e Obj-C/Obj-C++. Quando OpenMP dovesse essere implementato da LLVM, il multi-threading per Fortran resterebbe legato all’utilizzo di GCC e DragonEgg sarebbe comunque fondamentale per OpenMP.

Via | Phoronix

hello, world: The New York Times celebra la storia di Dennis Ritchie

pubblicato da Federico Moretti in: Programmazione C/C++

hello, worldThe Lives They Lived (lett. “le vite che hanno vissuto”) è una rubrica del magazine di The New York Times: il numero domenicale, pubblicato a Natale, ha proposto un riassunto della vita di Dennis Ritchie. È il creatore di C, che è morto nella prima metà dell’ottobre di quest’anno. Una delle grandi personalità che ci hanno lasciati.

Il titolo assegnato al numero su Ritchie non poteva essere che hello, world: il testo stampato a video dal primissimo esempio di The C Programming Language, il libro scritto a quattro mani da Ritchie e Brian Kernighan. Quella frase – spesso, con una sintassi diversa – è diventata il simbolo ricorrente degli esempi di programmazione.

Il 2011 porta via con sé un intero “mondo” di persone che hanno contribuito alla realizzazione delle tecnologie del presente. L’ultima in ordine di tempo è stata Jacob Goldman — il creatore di Xerox Lab, morto settimana scorsa. Ritchie e Goldman sono legati da UNIX, il sistema operativo che ha stimolato la nascita dell’open source.

Via | The New York Times

Mono inaugura il supporto all’interoperabilità con C++ grazie a CXXI

pubblicato da Federico Moretti in: C# C/C++

Mono by XamarinCXXI è un nuovo progetto di Mono che colma la mancanza d’interoperabilità per C Sharp e .NET con C++. È stato realizzato grazie a due anni consecutivi di finanziamento da parte della Google Summer of Code e, al momento, include dei binding e dei test per Qt. CXXI sostituisce gli espedienti utilizzati da Mono per il dialogo con C++.

Ad esempio, in passato i manutentori di Mono avevano realizzato un binding del PhyreEngine di Sony per dimostrare le potenzialità di C# coi sorgenti ad alto livello dei videogiochi per PlayStation 3. PhyreEngine# è stata una soluzione di compromesso, inadatta a supportare l’interoperabilità con C++. CXXI è il presente — e il futuro.

La tecnologia di CXXI, di per sé, riassume le funzionalità d’altre tre soluzioni temporanee di Mono per elaborare i sorgenti in C++. Rispettivamente, Platform Invoke, COM Interop e MarshalByRefObject di Microsoft. Tre complessi escamotage per tradurre e compilare il codice scritto per C++ con C# e .NET. Ormai – di fatto – superati.

Continua a leggere: Mono inaugura il supporto all’interoperabilità con C++ grazie a CXXI

nVidia ha approvato la distribuzione del codice sorgente di CUDA 4.1

pubblicato da Federico Moretti in: Driver C/C++

nVidiaL’aggiornamento di Compute Unified Device Architecture (CUDA), l’infrastruttura di nVidia per il parallel computing sui processori grafici, include un nuovo compilatore basato su LLVM. Già distribuito nel toolkit per i driver proprietari, quest’ultimo avrà una licenza open source — perché possa essere applicato ad altri processori.

È giusto evidenziare che l’“apertura” di CUDA 4.1 – almeno, giudicando il comunicato stampa di nVidia – riguarda soltanto il compilatore. In pratica, nVidia C/C++ Compiler (NVCC) è sostituito da una nuova soluzione basata su LLVM e distribuito sotto una licenza open source da comunicare. Non significa che CUDA funzionerà su Nouveau.

Nouveau può utilizzare il compilatore, esteso ai processori grafici o centrali di AMD/ATI e Intel. Le librerie accelerate previste da CUDA, però, resteranno vincolate ai driver proprietari di nVidia. Inoltre, la disponibilità dei sorgenti del compilatore è subordinata alla compilazione d’un modulo per qualificare gli sviluppatori.

Via | nVidia

Rilasciato LLVM 3.0

pubblicato da Giacomo Picchiarelli in: Programmazione C/C++

LLVMDopo la lunga attesa, finalmente arriva la versione 3.0 di LLVM. Di fatto questo è un rilascio incrementale, ma gli sviluppatori non hanno perso l’occasione per eliminare qualche vecchio modulo. Sono stati necessari sei mesi di sviluppo dalla versione 2.9 per introdurre importanti novità: un nuovo register allocator per migliorare ulteriormente le prestazioni, il supporto completo per operazioni atomiche e il nuovo memory model per C++.

Avevamo già trattato l’abbandono di llvm-gcc in favore di CLang e DragonEgg. E proprio CLang offre numerose correzioni e migliorie: ridotta lunghezza nei messaggi di errore, ricavando così un’informazione più immediata e suggerimenti in caso di errori di digitazione. Quest’ultima si rivela utile nel caso di errori di digitazione: maiuscole/minuscole nella battitura dei tipi. Gli sviluppatori potranno inoltre fare affidamento nei nuovi messaggi di warning, il tutto a beneficio dell’espressività della diagnostica.

Lo sforzo degli sviluppatori si è concentrato non solo nelle prestazioni, migliorate rispetto alla precedente versione, ma anche per quanto riguarda l’aderenza ai recenti standard per C/C++. Ad esempio sono state introdotte molte caratteristiche del C++11 come il supporto agli alias, i cicli for basati su intervalli e le espressioni noexcept. Infine per quanto riguarda il plugin DragonEgg, non sarà più necessario apportare la patch ed effettuare la compilazione di GCC. La versione 4.6 è pienamente supportata.

Via | Phoronix

Programmazione parallela con OpenMP

pubblicato da Giacomo Picchiarelli in: Programmazione C/C++

OpenMPOpenMP è una specifica API che consente l’esecuzione parallela di task secondo il modello a memoria condivisa. Questo consente di creare programmi che implementano la programmazione parallela da poter eseguire sia nei cluster, se usato in combinazione di MPI, sia su normali computer desktop. I linguaggi supportati sono CC++ e Fortran.

In concreto OpenMP è implementata come estensione di un compilatore, quindi è sufficiente aggiungere un opportuno parametro al comando di compilazione: ad esempio, nelle ultime versioni di GCC il parametro è -fopenmp. OpenMP non necessita di librerie esterne, i comandi vengono forniti sotto forma di commenti speciali. Una caratteristica estremamente utile, se si vuole utilizzare lo stesso codice senza imporre un’esecuzione parallela.

Un classico esempio, per questo genere di programmazione, è la parallelizzazione dei cicli: il comando è #pragma omp parallel for. Sono inoltre disponibili diversi metodi di sincronizzazione per sezioni critiche, variabili condivise e race condition: critical, atomic, ordered, barrier e nowait. Inoltre si può specificare il numero di thread da console, in fase di compilazione, con la variabile d’ambiente OMP_NUM_THREADS=n°thread.

OpenMP dispone di una lunga esperienza come standard (la prima versione è del 1998) e di un consorzio composto da nomi di tutto rispetto come Intel, AMD, Fujitsu, Oracle e molti altri. C’è una sola “pecca” degna di nota, a mio parere: non può essere utilizzata per le GPU. Una lacuna che si spera venga colmata presto.

Via | Linux Journal

Dennis Ritchie è morto

pubblicato da Giacomo Picchiarelli in: Unix C/C++

Ci ha lasciati, all’età di 70 anni. Dennis Ritchie è uno di quei giganti dell’informatica a cui tutti dobbiamo qualcosa. Insieme a Ken Thompson creò il linguaggio C e il sistema operativo UNIX, entrambi pilastri fondamentali dei sistemi informatici. E ancora oggi il linguaggio C è tra i più utilizzati dopo decenni di onorato servizio; persino sistemi come OSX, *BSD e Linux che sono basati su UNIX non esisterebbero senza i contributi di Ritchie.

Nel 1984 i suoi meriti gli consentirono di ricevere il Premio Turing per la teoria generica sui sistemi operativi, sette anni dopo fu il turno della IEEE Richard W. Hamming Medal, nel 1998 ricevette la Medaglia Nazionale della Tecnologia consegnata dal Presidente USA Bill Clinton per poi concludere con il Japan Prize for Information and Communications. Continuò a lavorare instancabilmente fino al 2007, anno della pensione.

L’estrema semplicità e l’eleganza della logica di UNIX hanno attraversato i decenni senza invecchiare. Un’eredità tanto importante quanto attuale che Dennis Ritchie ha lasciato al mondo dell’informatica. Un mondo che continuerà a far tesoro delle sue creazioni ma che ha irrimediabilmente perso un pioniere, uno di quelli veri, uno di quelli che l’Informatica più che averla studiata ha contribuito a crearla. Grazie.

Via | Tagxedo
Foto | Flickr

Google ha aggiunto l'utilizzo di C/C++ a Chrome 15 via Native Client

pubblicato da Federico Moretti in: Google C/C++

Google Chrome DevChrome 15 è in grado d’eseguire del codice in C/C++ attraverso il Native Client: la novità apre interessanti prospettive allo sviluppo d’applicazioni web per il browser. L’esecuzione del codice è soggetta a delle restrizioni, simili a quelle già previste per JavaScript. Pepper è il plugin responsabile dei binding di C/C++ per HTML5.

Appoggiandosi alle possibilità offerte da OpenGL, ecc. il browser di Google consentirà agli sviluppatori di portare in HTML5 sul web le prestazioni tipiche del desktop. Il percorso per arrivare a un sostanziale pareggio delle performance, però, è ancora lungo. A questo proposito è interessante l’implementazione delle Web Audio API.

Insieme all’attivazione del Native Client con la possibilità d’eseguire il codice in C/C++, Chrome 15 include l’ultima bozza delle specifiche per la riproduzione di flussi audio via HTML5 e JavaScript. Non si tratta ancora di uno standard (Mozilla ha una proposta diversa), comunque esistono degli esempi riproducibili con Chrome 15.

Via | Google