2012-04-06 11 views
7

Sto lavorando per un prodotto che utilizza C++ principalmente per i suoi componenti principali. Sebbene utilizzi Visual C++ come compilatore primario per la piattaforma Windows e sia l'editor e il debugger come ambiente di sviluppo primario, non utilizza alcuna tecnologia specifica di Microsoft. Per altre piattaforme utilizza gcc per la compilazione.migrazione a C++ 11

La mia base di codice utilizza pesantemente il riferimento di valore emulato (utilizzando la libreria di spostamento boost), i modelli variadici (utilizzando il processore di boost) e in alcuni casi i modelli di espressione.

Sono tentato di passare a C++ 11 per ottenere una base di codice più pulita utilizzando il riferimento di rvalue, l'inoltro perfetto, l'impostazione predefinita e l'eliminazione per costruttori, modelli variadici e auto e decltype.

In tal caso, potrei eseguire alcune rielaborazioni sul codice esistente per semplificarlo (utilizzando l'alias del modello e potrebbe essere constexpr). In tal caso, devo passare a gcc per la piattaforma Windows usando mingw, in quanto lo studio visivo non ha implementazioni per default e cancella e template variadic. Inoltre devo passare a gdb come debugger e ad un altro editor di codice.

Per me un vantaggio enorme in termini di semplicità e prestazioni del codice, tuttavia stabilità, disponibilità (su alcune piattaforme come Android), debugging (migrazione da Visual Studio a gdb, poiché abbiamo molti strumenti di visualizzazione sviluppati per Visual Studio Debugger) e l'editor di codice (non tanto per il pesante codice dei template che non trovo molti usi di auto completamento, refactoring ecc. e codelite, codeblocks, qt creatore funziona bene con il nostro sistema di compilazione) sono alcuni dei problemi.

Mi piacerebbe sapere se uno qualsiasi dei progetti di media/grande scala commerciale o open source utilizza/intende utilizzare una delle caratteristiche di C++ 11 sopra menzionate? E quanto sforzo è richiesto per fare questa migrazione?

Qualsiasi esperienza pratica, consigli o parole di saggezza mi aiuteranno a prendere una decisione.

+1

Le domande di avviso e di elenco non sono in genere le attività di Overflow di stack. –

+1

Ti suggerisco di aspettare ancora un po '. Attendere fino al corretto supporto VC++. I file di intestazione in mingw32 sono problematici. –

+0

dare un'occhiata al progetto clang hanno il [C++ 11 Migrator] [1] nei repository [1]: http://blog.llvm.org/2013/04/status-of-c11- migrator.html – Alex

risposta

7

Prima di tutto: dipende dalla politica.

Come tutte le tecnologie, passare da qualcosa che funziona a qualcosa di nuovo è un rischio in sé. A seconda della tua mentalità e della critica del tuo progetto, il livello di rischio che accetti potrebbe essere diverso (ad esempio, uso la versione superiore di Tree di Clang per i progetti personali ma un gcc maturo al lavoro).

Personalmente, vorrei raccomandare non immersioni testa a testa per i progetti pronti per la produzione, ma invece eseguire una selezione frammentaria delle funzionalità che funzionano.

È menzionate:

  • rvalue riferimento per & perfetti inoltro
  • default/delete
  • modelli variadic
  • tipo di inferenza (auto/decltype)
  • alias di template e constexpr

VC++ 11 viene fornito con support for many C++11 features. È possibile iniziare ad utilizzare riferimenti di valore e di tipo al momento, ad esempio. E quelli possono essere usati con il ramo gcc 4.5.x se ricordo male, che ha già più di un anno, così ben indossato.

Una notevole assenza dalla lista è lambda ad esempio, supportate sia da VC++ 11 sia da gcc.

Se si desidera spostare ulteriormente, sarà necessario cambiare compilatore e ambiente. Lo sforzo è significativamente maggiore in quanto dovrai riqualificare la squadra (personalmente ho avuto alcune verruche con gdb su mingw ...).

Vorrei consigliare a cherry picking ciò che funziona su entrambi i compilatori, per ora, a meno che non ti senti avventuroso. Tuttavia, la migrazione è sempre un rischio aziendale.