Come vengono realizzati i programmi complessi? [duplicare]

-1

Conosco alcune lingue e posso programmarle. Come si fondono più lingue in un singolo programma? Per es. link . Questo usa C, PHP, Python, Javascript, ecc. Come si combinano esattamente questi linguaggi per dare un singolo risultato? Come interagiscono tra loro? Come imparo a fare questo?

E ho visto questa domanda ma non penso che sia la stessa: Come utilizzare più linguaggi di programmazione insieme nello stesso programma? Poiché la mia domanda riguarda il modo esatto in cui queste cose interagiscono e come apprenderlo mentre la domanda di cui sopra è solo su come interagiscono, che non ha anche risposte dettagliate.

    
posta user194207 03.09.2015 - 07:21
fonte

2 risposte

2

Si noti che un programma complesso non ha bisogno di essere codificato in diverse lingue. Ad esempio, il kernel di Linux è un programma complesso (di oltre dieci milioni di linee sorgente di codice C con un po 'di assembly). E il compilatore GCC ha più di dieci milioni di righe di codice C ++ (era codice C prima di 4.5 e passava a C ++ in GCC 4.8 ), alcuni dei quali generati da utilità interne.

Quindi, mescolare più lingue è specifico per l'implementazione (spesso correlato all'interfaccia per le funzioni straniere ) ma la maggior parte delle implementazioni linguistiche offre la possibilità chiamare il codice C straniero. Il punto è che un sistema informatico ha una convenzione chiamata interfaccia binaria delle applicazioni (ABI, come il x86-64 SVR4 ABI ), e le implementazioni linguistiche generalmente seguono la convenzione ABI, in particolare per convenzioni di segnalazione (forse con l'aiuto di libffi ).

E un software può essere eseguito su diversi processi che in qualche modo comunicano usando alcuni comunicazione interattiva dei processi (IPC), ad es. per computing distribuito (ad esempio cloud computing ). I dettagli sono specifici Sistema operativo . Su Linux, leggi pipe (7) , socket(7) , shm_overview (7) , sem_overview (7) etc ... quindi leggi Programmazione Linux avanzata . Alcuni programmi sono in esecuzione in un processo con diversi threads (ad esempio per eseguire su più core in parallelo di un multi -core processor ).

Distribuito o parallelo o simultaneo il calcolo è difficile. Avrai bisogno di anni di studio e di esperienza per capire e in qualche modo padroneggiarlo.

Un modo comune per combinare risultati parziali in un calcolo distribuito è MapReduce .

    
risposta data 03.09.2015 - 07:28
fonte
1

Compilate ciascun file sorgente in file oggetto usando il compilatore appropriato per la sua lingua, quindi collegate i file oggetto in un file eseguibile, nello stesso modo in cui fareste per qualsiasi altro programma.

Perché funzioni, tutti i compilatori devono concordare su come i moduli comunicano tra loro. Ciò include cose come: quale simbolo indica gli oggetti che esportano e importano, in che formato sono i dati, come gli argomenti vengono passati alle funzioni, chi assegna e libera la memoria, quando e come. A volte, le lingue normalmente fanno le cose in modo diverso e hai bisogno di una parola chiave speciale. C'erano un sacco di varianti diverse, ma le ABI moderne tendono ad essere progettate per renderlo più semplice di quanto non fosse in passato.

Un esempio specifico: C ++ e C sono linguaggi molto simili, ma affinché un programma C e un programma C ++ possano richiamarsi reciprocamente, il programma C ++ deve dichiararli come extern "C" . Questo perché C può esportare solo un simbolo denominato foo , ma C ++ ti consente di dichiarare sia int foo(int) che int foo(double) come funzioni diverse, quindi deve dare loro nomi diversi internamente. Per comunicare con i moduli in altre lingue, è necessario disattivarlo. extern "C" dice al compilatore C ++ di usare lo stesso nome che un compilatore C avrebbe per quella funzione. In Fortran, tutti gli argomenti delle funzioni possono essere modificati, il che significa che per chiamare f (x) in Fortran, un programma C dovrebbe chiamare f (& x). In C, una stringa viene terminata da un byte nullo che devi cercare, ma in molti altri linguaggi, i primi pochi byte di ogni stringa sono la sua lunghezza. C consente alle funzioni, la più famosa printf() , di prendere qualsiasi numero e tipo di argomenti, e questo non gli consente di passare argomenti in alcuni dei modi in cui altri linguaggi l'hanno fatto.

Ci sono molte varianti, ma se i tuoi compilatori possono scrivere codice che parla l'un l'altro, ci saranno alcune convenzioni che entrambe sanno come usare.

    
risposta data 03.09.2015 - 07:57
fonte

Leggi altre domande sui tag