Alternative moderne compilabili a C / C ++ [chiuso]

37

Sto pensando di scrivere un nuovo prodotto software. Le prestazioni saranno critiche, quindi sono diffidente nell'usare un linguaggio interpretato o che usi un livello di emulazione (leggi java).

Il che mi porta a pensare di usare C (o C ++), tuttavia questi sono entrambi piuttosto lunghi nel dente. Non l'ho usato per molto tempo. Ho immaginato che negli ultimi 20 anni qualcuno abbia probabilmente creato qualcosa che è ragionevolmente popolare, piacevole da codificare e compilare.

Quali alternative più moderne ci sono in C per scrivere codice compilato ad alte prestazioni?

Se C ++ è una bestia diversa da quella di 15 anni fa, lo considererei, suppongo di avere l'impressione che abbia alcuni problemi inerenti.

La parallelizzazione sarebbe importante, ma probabilmente non tra più macchine.

    
posta Jeremy French 28.08.2012 - 15:40
fonte

12 risposte

54

Esiste un linguaggio in sviluppo chiamato The Rust Programming Language che persegue obiettivi simili a quelli del C ++, in particolare astrazioni a costo zero e controllo preciso gestione della memoria. Detto questo, è forse il candidato imminente più importante nonostante sia ancora molto giovane.

Oltre a Rust non ci sono altre alternative popolari che compili al codice nativo. Ci sono anche Delphi e D, ovviamente, ma non sono così veloci, popolari o usati. La lingua Google di Google potrebbe essere un candidato, ma è ancora molto giovane e mira a un dominio un po 'diverso.

Tuttavia, si noti che C # (presupponendo la piattaforma Microsoft) e Java potrebbero non essere così lenti anche se vengono eseguiti su una macchina virtuale; la compilazione just-in-time del codice può fare alcune ottimizzazioni che i compilatori tradizionali in anticipo non sono in grado di applicare a causa della mancanza di informazioni sullo stato e sull'ambiente del programma.

Francamente non considererei C la candidata se C ++ è un'opzione, principalmente per il fatto che il moderno C ++ è più sicuro, lavora a un livello più alto di astrazione, è più espressivo e non ha praticamente alcuna perdita di prestazioni rispetto a C ( in alcuni casi il C ++ è notevolmente più veloce). In poche parole, C ++ fornisce tutto ciò che C fornisce e altro ancora. La maggior parte delle funzionalità C è considerata "deprecata" e le alternative migliori, più sicure, più veloci e più intuitive sono fornite dalla libreria standard C ++.

    
risposta data 28.08.2012 - 15:47
fonte
18

C'è anche Ada , che viene compilato in codice nativo ed è portatile su varie piattaforme all'interno del limiti della sua libreria standard. La lingua è viva e vegeta, con il più recente aggiornamento standard della lingua attualmente in corso (noto come Ada 2012).

Riepilogo rapido per coloro che non hanno familiarità con Ada:

  • strongmente tipizzato
  • Supporto integrato per la concorrenza
  • Orientato agli oggetti o procedurale, in base alle tue esigenze
  • Supportato da GNU toolchain (GCC contiene il frontend di Ada)
  • Eccellente anche per lo sviluppo di software, ovvero quando è necessario interfacciarsi direttamente con l'hardware
  • Supporta la programmazione generica (pacchetti generici, procedure, funzioni)
  • Le funzionalità supportano lo sviluppo di software su larga scala (pacchetti, pacchetti figlio, compilazione separata, rigorosa distinzione tra specifiche e implementazione)
risposta data 29.08.2012 - 14:56
fonte
17

If C++ is a different beast than it was 15 years ago, I would consider it, I guess I had an assumption that it had some inherent problems.

15 anni fa, non esisteva uno standard C ++. Il secondo è stato pubblicato l'anno scorso. Le migliori pratiche C ++ sono cambiate molto nei 5 anni dopo la pubblicazione dello standard 98 e stanno cambiando di nuovo con la pubblicazione dell'11.

    
risposta data 28.08.2012 - 16:34
fonte
11

C / C ++ è piuttosto lungo nel dente .... questa è una cosa buona . Ciò implica che sono stati progettati abbastanza bene (ehm) che sono ancora molto utilizzabili, che molte persone li usano per le attività quotidiane e che troverete un grande numero di sviluppatori che sono esperti in loro. La maturità è qualcosa che deve essere apprezzato.

Se passi tutto il tuo tempo a cercare qualcosa di nuovo, solo perché è nuovo e pensa quindi che deve essere in qualche modo migliore, ti troverai molto deluso. Questo vale per le lingue del software, i sistemi GUI (prendi nota, Microsoft e Gnome) e gli amanti (prendi nota, signorine :))

Ora, ammettiamolo, se la tua esperienza di C ++ è di 20 anni, quando il codice C ++ era generalmente codificato come C, allora forse era il momento di rivalutare la lingua, tutte le caratteristiche che erano lì nel giorno che non erano mai abbastanza usate Oggi sono utilizzati molto di più, e alcuni sforzi di standardizzazione hanno ampliato un po 'la lingua per farla sembrare molto diversa da quei vecchi sviluppi in stile C. Non che C sia anche lui - è un linguaggio perfetto anche per molti tipi di attività di codifica!

    
risposta data 28.08.2012 - 16:44
fonte
11

Perché le persone insistono sempre sulla ricerca di nuove lingue?

C ++:

  • È la lingua numero 4 di TIOBE, ma calpesta tutta la competizione se combinata con C
  • Ha molti framework
  • È molto facile codificare
  • È molto facile da mettere a punto
  • È molto performante
  • È molto sicuro
  • Ha un ottimo supporto del settore
  • È multipiattaforma
  • Non ha bisogno di VM / frameworks aggiuntivi / pasticcio di implementazione se eseguito correttamente
  • ti atterrerà facilmente un lavoro
  • Ha tutte le risorse necessarie per creare .so / .dll da avviare su sistemi molto vecchi
  • Facile risoluzione dei problemi
  • Molto espressivo
  • Molto dinamico
  • e un sacco di altre cose interessanti

L'unico svantaggio del C ++ è che devi imparare un po '. Questo è tutto.

Confrontalo con altre lingue che sono uno o più di:

  • Strettamente supportato (OCML, Fortran, ...)
  • Lento (Java, Javascript)
  • Sperimentale (Silverlight)
  • Un oggetto mobile (.NET 1/2/3/4/5? quale è l'ultimo adesso?)
  • Piattaforma bloccata (.NET)
  • Ha un supporto di framework scadente (Fortran)
  • Ha piccole comunità (qualcosa al di fuori della top 10)
  • È un incubo risolvere i problemi (qualsiasi cosa con concetti e cose di alto livello a prova di stupido)
  • Richiede 500 MB di pre-riga sul computer dei clienti (JVM / .NETVM)

IMHO, meno lingue useremo e sosterremo, migliore sarà la situazione.

Ciò comporta miglioramenti automatici nei framework per lingua, supporto, documentazione, lavoro di commissioni di standardizzazione, libri migliori, più conoscenza, software di supporto più semplice, schemi migliori, cicli di supporto linguistici più lunghi e codice più avanzato scritto nella lingua.

So che le persone lo sottovaluteranno, ma pensaci davvero.

    
risposta data 29.08.2012 - 01:11
fonte
8

Lo standard attuale di C ++ è C ++ 11 , che è stato pubblicato nel 2011. Quindi non è uno standard di 20 anni. E ci sono stati numerosi standard in mezzo. Ognuno di loro introduce numerosi miglioramenti delle prestazioni.

Anche i compilatori sono migliorati costantemente. Sono molto più bravi a ottimizzare, rispetto a prima.

Anche i formati eseguibili sono migliorati, 20 anni fa hai a.out , ora hai ELF .

Nel complesso, il suggerimento che C ++ non è cambiato in 20 anni non può essere più lontano dalla verità.

Inoltre, tieni presente che C e C ++ sono lingue molto diverse.

    
risposta data 28.08.2012 - 17:24
fonte
5

Non sono un grande esperto di questa lingua, ma penso che OCaml potrebbe essere un'opzione interessante da guardare.

OCaml è un linguaggio compilato, funzionale / orientato agli oggetti. Per un confronto delle prestazioni con C ++, vedi Confronto tra C ++ e OCaml: Ray . Ovviamente, questo è un esempio molto specifico e si dovrebbero fare test più estesi per avere una migliore percezione delle prestazioni di OCaml.

    
risposta data 28.08.2012 - 22:59
fonte
3

Dipende da cosa farà il tuo prodotto. Se le prestazioni sono davvero importanti, la lingua preferita è ancora FORTRAN . Inoltre, non escluderei Java: è utilizzato in molte applicazioni di trading finanziario ad alto volume. Erlang vale la pena dare un'occhiata se il tuo dominio problematico richiede una concorrenza elevata. Objective-C è bello, anche se non so quanto sia ben supportato al di fuori dell'ecosistema Apple (oltre ai compilatori e al runtime di base). Ho anche sentito parlare delle prestazioni di Haskell, ma non sono sicuro che si tratti di prestazioni assolute o di prestazioni rispetto ad altri linguaggi funzionali.

    
risposta data 28.08.2012 - 16:44
fonte
3

Quando dici che il tuo progetto è sensibile al rendimento, intendi ogni riga di codice di esso? Oppure, come al solito, c'è una percentuale minore che è critica delle prestazioni mentre il resto è il normale codice commerciale?

Dopo aver risposto, qual è il rischio maggiore per il tuo progetto: che il risultato finale è troppo lento o che non lo finisci mai in primo luogo?

Supponendo che tu risponda al secondo di entrambi, dovresti sviluppare un linguaggio di livello superiore che supporti l'interoperabilità nativa (Python, Ruby, la famiglia .Net hanno tutto questo). Per prima cosa, finisci il progetto. Quindi profilo, ottimizzare, risciacquare, ripetere. Solo dopo, considera il segmento di scelta della calligrafia della tua applicazione nel codice nativo e integra quel codice nativo con il prodotto finito.

    
risposta data 28.08.2012 - 18:07
fonte
1

Vala è simile a Java e C #, compila nel codice nativo (o nel codice sorgente C se preferisci), ed è < a href="https://code.google.com/p/vala-benchmarks/wiki/BenchResults"> molto veloce . Richiede GLib per i suoi bit orientati agli oggetti, ed è scritto da hacker Linux per gli hacker di Linux, quindi se il tuo dominio è Windows potrebbe non essere molto buono.

    
risposta data 28.08.2012 - 21:22
fonte
1

Objective-C è un'alternativa moderna e compilata al C e al C ++. Ha la gestione della memoria sia raccolta che deterministica e il runtime OO di passaggio dei messaggi è stato ottimizzato per le prestazioni.

È disponibile tramite GCC e CLang e ci sono librerie di applicazioni come GNustep e Cocotron che funzionano su varie piattaforme.

Se stai facendo un lavoro ad alte prestazioni, presumo che si tratti di una sorta di lavoro di "number-crunching" o altro "divide et impera" invece dell'interfaccia utente, quindi significa che puoi fare l'interfaccia utente in qualsiasi lingua sia più semplice per te, ad es HTML tramite un mini server http.

    
risposta data 29.08.2012 - 16:40
fonte
0

Non l'ho mai usato, ma un mio amico giura di Cython che ti permette di usare i primitivi in stile C in parti critiche delle prestazioni del tuo codice pur mantenendo la sintassi python generale ed essendo in grado di sfruttare appieno i costrutti Python di livello superiore per ridurre i tempi di sviluppo ovunque.

    
risposta data 28.08.2012 - 17:55
fonte

Leggi altre domande sui tag