Altro Rust nel 2022 conviene? Meglio il C++? O forse meglio aspettare Carbon?

giovy2707

Utente Silver
27 Giugno 2019
77
31
59
97
Volevo imparare il C++, poi però ho sentito che molti consigliano Rust in quanto è più moderno e risolve alcuni problemi del C++, e da poco ho scoperto che Google sta lavorando a questo "Carbon" che dovrebbe sostituire il C++, vorrei sapere quindi da qualcuno più informato ed esperto di me al riguardo, cosa ne pensa di questi linguaggi.

Leggendo un post sempre qui su inforge ho letto che alla fine Rust non è esattamente così buono come linguaggio (link alla discussione: link), infatti anche lui come il C++ ha la sua buona dose di "problematiche", quindi mi domando:
  1. in vista del futuro e anche tenendo conto della situazione attuale è Rust un degno successore del C++?
  2. Cosa ne pensate di Carbon?
  3. Il C++ è veramente così tanto incasinato come ho letto spesso in giro?
  4. Quale può essere secondo voi un buon linguaggio su cui puntare tra Rust e C++ (carbon non lo conto per il momento perché ancora è molto sperimentale da quanto so)
 

St3ve

Utente Jade
12 Ottobre 2011
2,367
5
1,716
683
Carbon è significativamente indietro. L'hanno annunciato giusto per dire "hey guardate, stiamo facendo questa cosa, venite su github a darci consigli e spiegateci cosa volete vedere nel C++ del futuro". Non è detto che tra 2-3 anni sarà usabile e soprattutto non è detto che tra 5 anni sarà ancora vivo, magari google l'ammazza prima. È un progetto in fase embrionale che per adesso non ha alcun senso prendere in considerazione, non ha nemmeno un compilatore.

Non ho cambiato la mia opinione riguardo a Rust, anche perché non sono più aggiornato a riguardo. Tipicamente ne senti parlare molto bene perché ci sono veramente tanti fan sfegatati. Volevo far vedere anche i lati negativi che troppo spesso passano in sordina. La cosa divertente è che l'unico messaggio sotto il mio è quello di un nuovo utente che si è iscritto solamente per dire quanto ama e quanto è magnifico questo linguaggio di programmazione. Cioè, come volevasi dimostrare...

Vale la pena imparare Rust? Sì, credo che sia un buon linguaggio di programmazione. Buono come tanti altri, ma non certo perfetto. È una mia opinione che la sintassi è atroce, ma che i meccanismi che hanno introdotto per garantire safety (ownership, borrowing e lifetime) abbiano il loro prezzo mi sembra proprio un dato di fatto. Saranno anche (quasi) zero-cost in termini di performace, ma paghi carissimo in termini di flessibilità ed espressività. Dico "quasi" zero-cost perché, per esempio, se vuoi implementare un qualsiasi algoritmo di ordinamento o usi unsafe e rinunci alla feature #1 di questo linguaggio o hai un test-and-branch per ogni accesso all'array (performance peggiori != zero-cost abstraction). Quello che per me è il problema più grande è che ti porta agli antipodi rispetto a linguaggi come python e lisp: non pieghi il linguaggio verso la tua volontà, sei tu a doverti sottomettere al borrow checker. Non vederlo come successore di C++. Magari io non sono nessuno per dirlo, ma guardati l'inizio della presentazione di Carbon. Parafrasando dalla dalla mia memoria, hanno detto qualcosa del tipo: "sentiamo il bisogno di allontanarci dal C++ e trovare un suo successore, ma Rust non è il linguaggio adatto e allora stiamo provando a creare qualcosa di nuovo". L'opinione del team di google che lavora ad LLVM è sicuramente più significativa della mia.

C++ è molto incasinato, ma non è una tragedia. È abbastanza malleabile come linguaggio e puoi limitarti ad usarlo come un C with goodies, come fanno in molti. Continuano ad aggiungere features, ma non sei costretto a tenerti costantemente aggiornato perché alla fine il "vecchio" linguaggio con il "vecchio" stile di programmazione è sempre andato bene ed è ancora okay. Nel 2011 hanno aggiunto un po' di features importanti e da li in avanti hanno spinto abbastanza sul paradigma funzionale perché ultimamente va di moda, ma non sei costretto a spammare lambda e meccanismi di metaprogrammazione complicatissimi. Il problema principale di C++ è che ormai è diventato enorme e non si può deprecare niente o cambiare il comportamento "sbagliato" che spesso ha di default (e.g., rule of three/five/zero e cose simili). È per questo che ogni tanto qualcuno prova ad inventarsi il nuovo C++ killer.

Comunque, mi accodo alla tua richiesta: mi piacerebbe sapere cosa ne pensano gli altri utenti!
 

giovy2707

Utente Silver
27 Giugno 2019
77
31
59
97
Carbon è significativamente indietro. L'hanno annunciato giusto per dire "hey guardate, stiamo facendo questa cosa, venite su github a darci consigli e spiegateci cosa volete vedere nel C++ del futuro". Non è detto che tra 2-3 anni sarà usabile e soprattutto non è detto che tra 5 anni sarà ancora vivo, magari google l'ammazza prima. È un progetto in fase embrionale che per adesso non ha alcun senso prendere in considerazione, non ha nemmeno un compilatore.

Non ho cambiato la mia opinione riguardo a Rust, anche perché non sono più aggiornato a riguardo. Tipicamente ne senti parlare molto bene perché ci sono veramente tanti fan sfegatati. Volevo far vedere anche i lati negativi che troppo spesso passano in sordina. La cosa divertente è che l'unico messaggio sotto il mio è quello di un nuovo utente che si è iscritto solamente per dire quanto ama e quanto è magnifico questo linguaggio di programmazione. Cioè, come volevasi dimostrare...

Vale la pena imparare Rust? Sì, credo che sia un buon linguaggio di programmazione. Buono come tanti altri, ma non certo perfetto. È una mia opinione che la sintassi è atroce, ma che i meccanismi che hanno introdotto per garantire safety (ownership, borrowing e lifetime) abbiano il loro prezzo mi sembra proprio un dato di fatto. Saranno anche (quasi) zero-cost in termini di performace, ma paghi carissimo in termini di flessibilità ed espressività. Dico "quasi" zero-cost perché, per esempio, se vuoi implementare un qualsiasi algoritmo di ordinamento o usi unsafe e rinunci alla feature #1 di questo linguaggio o hai un test-and-branch per ogni accesso all'array (performance peggiori != zero-cost abstraction). Quello che per me è il problema più grande è che ti porta agli antipodi rispetto a linguaggi come python e lisp: non pieghi il linguaggio verso la tua volontà, sei tu a doverti sottomettere al borrow checker. Non vederlo come successore di C++. Magari io non sono nessuno per dirlo, ma guardati l'inizio della presentazione di Carbon. Parafrasando dalla dalla mia memoria, hanno detto qualcosa del tipo: "sentiamo il bisogno di allontanarci dal C++ e trovare un suo successore, ma Rust non è il linguaggio adatto e allora stiamo provando a creare qualcosa di nuovo". L'opinione del team di google che lavora ad LLVM è sicuramente più significativa della mia.

C++ è molto incasinato, ma non è una tragedia. È abbastanza malleabile come linguaggio e puoi limitarti ad usarlo come un C with goodies, come fanno in molti. Continuano ad aggiungere features, ma non sei costretto a tenerti costantemente aggiornato perché alla fine il "vecchio" linguaggio con il "vecchio" stile di programmazione è sempre andato bene ed è ancora okay. Nel 2011 hanno aggiunto un po' di features importanti e da li in avanti hanno spinto abbastanza sul paradigma funzionale perché ultimamente va di moda, ma non sei costretto a spammare lambda e meccanismi di metaprogrammazione complicatissimi. Il problema principale di C++ è che ormai è diventato enorme e non si può deprecare niente o cambiare il comportamento "sbagliato" che spesso ha di default (e.g., rule of three/five/zero e cose simili). È per questo che ogni tanto qualcuno prova ad inventarsi il nuovo C++ killer.

Comunque, mi accodo alla tua richiesta: mi piacerebbe sapere cosa ne pensano gli altri utenti!
Grazie, risposta molto chiara, allora penso che rimarrò col caro vecchio C++ poi chissà con gli anni potrebbe uscire qualche linguaggio che veramente potrà essere considerato come un C++ killer
 

St3ve

Utente Jade
12 Ottobre 2011
2,367
5
1,716
683
Grazie, risposta molto chiara, allora penso che rimarrò col caro vecchio C++
Dipende da te. Se conosci abbastanza bene più di un linguaggio e ti ritieni un bravo programmatore allora imparare linguaggi moderni (rust, swift, zig, raku, etc.) o poco comuni (prolog, erlang, pharo, racket, etc.) ha senso. È utile non tanto per aggiungere un linguaggio a quelli che già conosci, ma per migliorarti proprio come programmatore. In rust ci sono diversi concetti ti insegnano a programmare meglio indipendentemente dal linguaggio che poi andrai effettivamente ad usare. Per farti capire di cosa sto parlando, prendiamo ad esempio questo codice in scritto in C++
C++:
void erase_odd_numbers(std::vector<int> &v) {
  for (auto it = std::begin(v); it != std::end(v); it++)
    if (*it & 1) v.erase(it);
}
Un buon programmatore C++ lo sa perché questo codice è sbagliato, però il linguaggio fa fatica ad insegnartelo: il codice compila correttamente, senza errori e senza warnings, e magari ogni tanto funziona anche. Rust invece te lo insegna bene che in quel codice c'è un errore perché non ti permette nemmeno scriverlo: al posto di usare iteratori ti obbliga ad usare gli indici (cosa che puoi fare anche in C++).
Codice:
fn erase_odd_numbers(v: &mut Vec<i32>) {
    let mut idx = 0;
    while idx < v.len() {
        if v[idx] & 1 == 1 {
            v.remove(idx);
        } else {
            idx += 1;
        }
    }
}
E pensa che se al posto di studiare rust ti metti a studiare heskell impari ancora di più, però il linguaggio è "ancora più inutile".

Se sei già bravo con i linguaggi che hai intenzione di usare veramente allora vale la pena imparare linguaggi profondamente diversi, altrimenti anche no. Con C++ vai sul sicuro, mentre rust è una scommessa che plausibilmente andrai a perdere. Se non ti dispiace studiare un linguaggio per puro interesse personale buttati, altrimenti è meglio che investi il tuo tempo diversamente: studiati un linguaggio che ti aiuterà a trovare lavoro.

chissà con gli anni potrebbe uscire qualche linguaggio che veramente potrà essere considerato come un C++ killer
Sono convinto anch'io che C++ ha bisogno di essere abbattuto. La complessità dietro a questo linguaggio è diventata insostenibile. Scott Meyers, uno dei più famosi esperti di questo linguaggio, dopo due anni e mezzo che ha smesso di contribuire allo sviluppo del linguaggio se n'è uscito con I throw in the towel: in the ensuing two and a half years, I’ve forgotten enough details of the language that I am no longer able to properly evaluate bug reports regarding the technical aspects of my books. Il problema è ci stanno provando da oltre 20 anni ad ucciderlo e per adesso non ci è riuscito nessuno. Se non puoi batterli, unisciti a loro. Non sarai mai un esperto di questo linguaggio, però puoi impararlo quanto basta per esserti utile.