Our company will purchase a large and very complex piece of source code for satellite communications. It is coded in C++ and we will code additions to it, also in C++, linking our code with the purchased code into a single executable unit.
Sembra buono!
Is it necessary that we use the same compiler and same compiler version as was used to develop the purchased code?
Parlando in generale, no non è necessario. Lo scopo di C ++ è di agire come un'astrazione su questo tipo di cose, quindi un programma C ++ ben scritto si compilerà altrettanto bene sulla tua toolchain come ha fatto sull'autore originale, e il programma risultante avrà lo stesso risultato. Le prestazioni possono variare, perché diversi compilatori sono validi per cose diverse, ma il comportamento fondamentale del programma non dovrebbe cambiare.
Tuttavia, il software scritto male può basarsi su un comportamento specifico dell'implementazione o anche su un comportamento non definito. Può fare supposizioni sui tipi built-in o sulla endianità della piattaforma. Anche il software ben scritto può non avere altra scelta che fare affidamento su estensioni non standard che non sono disponibili sulla toolchain prescelta, o può farlo perché semplicemente non c'era bisogno di dedicare tempo all'aggiunta di uno strato di portabilità entro la durata di il progetto originale.
In definitiva, dovrai chiedere all'autore / venditore quale sia il codice sorgente per cui è stato scritto. Se affermano che è specificamente scritto contro, ad esempio, Visual Studio 2015 e richiede le funzionalità dell'API di Windows, si dovrebbe probabilmente attenersi a ciò. Ma se affermano che è portatile, standard C ++, allora usa qualsiasi compilatore che ti piace. Assicurati che il tuo contratto di acquisto includa un accordo di assistenza in modo che tu possa ricevere assistenza gratuita quando risulta che il venditore stava mentendo.
Is it necessary that we use the same version of C++ as the purchased code? If it is not using 2014, we might want to use some features of it, but not if there might be some problems with mixing different versions.
Probabilmente. Forse.
C ++ 03 è in avanti compatibile per la maggior parte quindi, se il codice è C ++ 03, allora è improbabile che abbia un problema. (Anche se potrebbero essere necessarie alcune modifiche.)
Ma le funzionalità introdotte in C ++ 11 e C ++ 14 non sono compatibili con le versioni precedenti, quindi se il fornitore usa, ad esempio, C ++ 11 lambdas e si tenta di creare il proprio codice in un compilatore C ++ 03, che semplicemente non funzionerà.
In theory, of course, it ought not to matter, especially the language version, but it is conceivable that different versions of the compiler will generate different object code, potentially leading to timing differences, etc.
Assolutamente. Se il codice si basa tanto su una specifica implementazione al fine di ottenere risultati attesi, allora spetta al venditore essere responsabile e informarlo. Dato che viviamo nel mondo reale, raccomando di essere diligente e di chiederli prima.
E farò eco a quello che hanno detto gli altri: assicurati di avere una sorta di ricorso per il supporto, in modo che se travisano una qualsiasi delle risposte a queste domande (intenzionalmente o meno) non finisci con il costo risultante .