Linguaggio di riferimento per la compilazione di binari

Pubblicità

Architetto

Nuovo Utente
Messaggi
8
Reazioni
1
Punteggio
24
Ero interessato ad entrare più a fondo nel mondo della programmazione da sorgente a linguaggio macchina. Sono partito con il vecchio Visual Basic 5 e 6, poi passai alla piattaforma .NET, in particolare rivolgendomi a C#, ho imparato anche Python, PHP e JavaScript, questo come sfondo "culturale". Comunque nessuno di questi linguaggi di programmazione può fare a meno di un interprete e quelli che vengono compilati sono totalmente dipendenti da librerie legate ad un sistema operativo (in particolare Windows).

Vorrei fare un nuovo passo, quando si scrivono programmi come LibreOffice, Audacity, parti di un sistema operativo, la cui compilazione punta al linguaggio macchina viene usato C++ e ci sono tante opzioni di compilazione per CPU a 32 o 64 bit e l'utilizzo di librerie grafiche per l'interfaccia su Linux o quella su Windows. Credo che dal codice sorgente, poi, si preparano differenti installabili per le differenti destinazioni. C++ dovrebbe essere il linguaggio di riferimento, però esiste da un po' di tempo il D, che ha migliorato la precisione, la semplicità, la velocità di compilazione ed è sempre un linguaggio vicino alla macchina come il C. Inoltre il D legge tutte le librerie in C e c'è retrocompatibilità, non è forse meglio iniziare a studiare e usare il D ormai, piuttosto che il C, come linguaggio di riferimento per creare binari?

Siccome ci sono complicazioni per via dei differenti hardware e sistemi operativi e ambienti (KDE, Gnome, .NET), molti sviluppano in Java per avere programmi molto veloci (quasi compilati) e certamente multipiattaforma. Però Java non si usa per fare parti di sistemi operativi e binari (mi pare). Un altro linguaggio che nomino è Common LISP, perché ho letto che viene compilato è anche molto raffinato nelle opzioni che riceve (puoi bilanciare tempo di compilazione, velocità del programma, impiego di memoria, messaggi per il debug...) , ammette molti approcci e stili di scrittura e di norma viene usato ad alto livello, tanto che spesso lo usano in connessione all'intelligenza artificiale.

Non so quanto mi dedicherò alla programmazione per il linguaggio macchina, però intanto mi volevo studiare un linguaggio e tra C++, D e Common LISP (Java si discosta dall'uso a cui miro) non so chi è il più adatto. Qualcuno con più esperienza può lasciarmi pareri e consigli? Grazie.
 
Beh veramente ti sbagli: con C# è stato creato il primo kernel ha blocchi(tutta la documentazione e su codeplex), con java invece è stato utilizzato Solaris. Ora il punto è: cosa vuoi fare con la programmazione? E' dalla preistoria che non si programma più in binario, oramai tutti i programmi vengono creati con linguaggi ad alto livello che si appoggiano a librerie e oggetti che gli sviluppatori di SO forniscono attraverso le API
 
Non sapevo che C# potesse eventualmente fare a meno dell'ambiente .NET, ho visto i progetti SharpOS e direttamente della Microsoft Singularity (qui c'è un PDF che offre una panoramica: ftp://ftp.research.microsoft.com/pub/tr/TR-2005-135.pdf), due OS scritti in C#. Il vantaggio principale di C# è l'ottimo ambiente di sviluppo che ha realizzato la Microsoft, la piattaforma Mono per l'esecuzione in altri sistemi (Linux e Mac) e l'alto livello del linguaggio.

Come dici, i programmi possono lavorare ad alto livello soprattutto grazie alle API realizzate dagli sviluppatori di OS, ecco, io vorrei approfondire un linguaggio di quelli usati per scrivere sistemi operativi. Capisco ora che anche C# va bene, però ho qualche perplessità sulle prestazioni. Di norma un linguaggio di alto livello non concede un preciso controllo delle operazioni svolte dalla macchina, tutto si affida al compilatore che rischia di produrre un assembly molto ridondante rispetto alla compilazione che parte da un linguaggio di medio livello come il C. Infatti io ero abbastanza orientato verso il D che è la prosecuzione di questo linguaggio storico di riferimento, però volevo prima confrontarmi e sentire diversi pareri.
 
Se e solo se conosci molto bene il C ti consiglio di entrare nella comunity di linuxmint(ne sono uscito per problemi relativi al tempo che ci dedicavo). E' un sistema operativo open source con una vasta comunity alla spalle. In questo modo ti fai un po' le ossa su come è strutturato il kernel e come funziona(se non ricordo male ci sono anche una decina di tomi su questo argomento ma te lo sconsiglio sono veramente pesanti). Poi in futuro forse magari potrai scriverti un tuo kernel(è una cosa bestiale scriversene un proprio te lo assicuro)
 
Ho avuto in diversi periodi distribuzioni Linux Mint sul mio PC, praticamente nasce ad imitazione di Ubuntu, ma contrariati dall'introduzione di Unity e da una ricerca di novità ed effetti grafici - a leggero (non credo più di tanto) - discapito di prestazioni e stabilità, si è pensato di dar vita a Mint. Non ho seguito il versante degli sviluppatori (allora non ci pensavo proprio) se c'è del buon materiale ci faccio un salto! Inoltre il punto di riferimento per chi desidera mettere le mani su un sistema Linux è LFS e si parte proprio da un manuale, infatti avevo iniziato a leggermi quello.

Comunque non ho intenzione di fare un mio kernel o una mio distro, vorrei solo capirci di più, magari anche solo per contribuire in un qualche specifico aspetto che tra le tante cose potrebbe appassionarmi. Non lo si è detto esplicitamente ma il C sembra un must per chi si interessa di questo ambito. Tutto sommato anche se volessi lavorare con il D, certamente dovrei vedermi tanti codici sorgente che saranno scritti in C e quindi direi che mi devo guardare il C prima di tutto.

Allora faccio un'altra domanda (stesso argomento): è plausibile che il D diventerà il punto di riferimento per gli sviluppatori di driver, sistemi operativi e simili?
 
Non credo, sono state investite troppe risorse su C/C++, il D ha le potenzialità per diventare un ottimo linguagio ma non credo fino al punto di sostituire il C/C++(nessuno ci è ancora riuscito e vedo difficile che qualcuno ci riesca)
 
Mi sono andato a leggere un po' di storia in breve su C e D.

Su Wikipedia (C/Linguaggio/Panoramica - Wikibooks, manuali e libri di testo liberi) possiamo leggere: [Il C] fu ideato nei Bell Laboratories della AT&T nel 1972 da Dennis Ritchie come evoluzione del linguaggio B di Ken Thompson usato per la scrittura dei primi sistemi operativi UNIX. Lo stesso Thompson nel 1970 si era a sua volta ispirato al linguaggio BCPL di Martin Richards, anch'esso pensato per scrivere sistemi operativi e software di sistema. La definizione formale si ha nel 1978 a cura di B. W. Kernighan e D. M. Ritchie. Nel 1983 iniziò il lavoro di definizione di uno standard da parte dell'American National Standards Institute, che rilasciò nel 1990 lo Standard ANSI C (ISO C89).

Invece, il D nasce da altre menti sulle orme del C e non solo: Il D nasce nel dicembre 1999 dalla mente di Walter Bright. [...] è un linguaggio di programmazione ideato dalla DigitalMars, il suo obiettivo è raggiungere la potenza e le alte prestazioni dei linguaggi di basso livello come C e C++ ma con la grande produttività e semplice portabilità di linguaggi di alto livello come C#, Java, Perl, Python, Ruby e simili. In particolare la sintassi e le caratteristiche tecniche del compilatore riprendono C/C++, C# e Java. La versione più recente del compilatore è la 2.062 del 01 gennaio 2013 (nello stesso giorno è stata rilasciata la release 1.076 intesa come manutenzione della versione 1 del linguaggio).

Di recente e con qualche differenza tra i vari sistemi operativi, il compilatore D supporta i 64bit: 64bit - How well does D support 64 bit? - Stack Overflow

Comunque la conclusione sembra chiara, C e C++ sono necessari ed insostituibili al momento, però il D ce la sta mettendo tutta per diventare il "nuovo C", ma è troppo giovane, lo sviluppo deve proseguire sia del linguaggio, sia dei compilatori. Inizierò con il C (che esistono guide a non finire di base e avanzate), però spero che vedrò il D diventare un riferimento stabile e indipendente nel giro di un po' di anni...
 
Devo far presente un altro linguaggio interessante. Google ha realizzato Go, un linguaggio di programmazione open source (per quanto riguarda documentazione, compilatori, ambiente di sviluppo, ecc.) che ricorda molto il C, ma - ho letto - incorpora molte caratteristiche di linguaggi come Python, Erlang/OTP (quest'ultima coppia non l'avevo mai sentita). Non ne sono sicuro ma pare che si possa usare per compilare binari, programmare per il web, realizzare programmi che gireranno su qualsiasi sistema operativo. Inoltre, come il D, Go può usare le librerie del C. È un progetto interessante...
 
Google Go è un linguaggio compilato e la sua peculiarità è il supporto delle goroutines, le quali permettono un'agile e pulita programmazione multithread.

Comunque esiste anche compilatori per linguaggi che sembrano interpretati. Ad esempio python ha un paio di compilatori (pypy e parrot). Stessa cosa dicasi per altri linguaggi come c#, lua ( questo ho visto che non l'hai citato e invece è estremamente interessante ). Paradossalmente pure php c'ha un ottimo compilatore e si tratta di hiphop, scritto da facebook.

Il multipiattaforma l'ottieni solo se c'hai i giusti bindings nel sistema operativo di destinazione, cioè alla fin fine le tue librerie grafiche o altro devono usare l'api dell'os host per fare le loro cose. QT ad esempio è disponibile per svariati sistemi operativi. L'api dell'os non si può bypassare a meno che non si voglia creare eseguibili bare-metal, ma in questo caso dovresti avere nel programma pure i driver per pilotare l'hardware.

Ad esempio il c# usato per creare singularity/midori, sharpos e cosmos è una versione customizzata del linguaggio noto ai più, ma soprattutto dietro non c'è il runtime .net bensì un compilatore ad hoc ( bartok si chiama quello usato da ms ).

Alla fine il linguaggio è una serie di costrutti con spesso accoppiata una libreria di runtime. Questo non vuol dire che si può prendere il linguaggio ed isolarlo dal suo runtime in modo da poterlo usare per altri scopi e in altri contesti.

Riguardo D è un bel linguaggio, ma il fatto che fosse non opensource e di fatto sviluppato in proprio da Digital Mars, ne minò la diffusione nei primi anni di vita. Averlo reso opensource successivamente ha attirato più gente ma il danno comunque è stato fatto.
 
Pubblicità
Pubblicità
Indietro
Top