Scelta della lingua per la libreria portatile
-
06-07-2019 - |
Domanda
Voglio scrivere una libreria che sarà collegata dinamicamente da altri programmi in esecuzione su moderni sistemi operativi come Windows, Linux e OS / X (cioè sarà distribuito come .dll
o .so
).
Qual è la lingua più appropriata in quel caso? Dovrei attenermi alla semplice C? O va bene anche C ++?
Soluzione
Puoi usare C o C ++ per l'implementazione, ma consiglierei di definire l'interfaccia in puro C. Sarà molto più facile da integrare.
Altri suggerimenti
La difficoltà con la creazione di una libreria C ++ distribuita in forma binaria è che i tuoi clienti - gli utenti della libreria - sono generalmente costretti a usare lo stesso compilatore C ++ con cui hai creato la libreria. Questo può essere problematico se vuoi tenerti aggiornato e loro no, o se vogliono tenerti aggiornato e tu no. Se gestisci i sorgenti, questo è meno un problema, purché il tuo C ++ sia abbastanza portatile da consentirne l'utilizzo da parte di tutti i compilatori utilizzati dai tuoi clienti.
Se il codice potesse essere usato da C, probabilmente codificherei un'interfaccia C. In alternativa, fornire due interfacce: l'interfaccia C ++ nativa e un'interfaccia C. Ma questo è più lavoro di una semplice interfaccia C. D'altra parte, potrebbero esserci vantaggi da un'interfaccia C ++ (forse usando iteratori STL, ecc.) E ciò potrebbe influenzare la tua decisione.
Direi anche che C è il minimo comune denominatore. Hai sempre la possibilità di scrivere un wrapper C ++ nella libreria principale se questo si integra meglio con l'applicazione chiamante.
Direi che C è il più prevedibile portatile, ma C ++ è fattibile.
Considera il fattore con il minimo comune denominatore e fai in modo che i consumatori delle tue biblioteche prendano le decisioni migliori per loro. Il costrutto di extern c probabilmente confonde ancora alcune persone e vuoi che la tua biblioteca viaggi lontano e raggiunga il pubblico più vasto. Sicuramente rendere le interfacce pure c. Il C ++ va bene purché tu eviti alcuni degli angoli più scuri (come STL). C è la barra più portatile nessuna. La creazione di librerie per tutte le piattaforme disponibili non è cosa da poco, quindi assicurati di dare un'occhiata qui per alcuni suggerimenti. Potresti anche considerare l'utilizzo di autoconf e simili.