È possibile combinare i linguaggi di programmazione?

25

Ho programmato per un po ', ho scritto alcuni programmi rudimentali e voglio continuare ad imparare. Ho raggiunto quel punto in cui non sai più cosa imparare e vorrei fare una domanda per mia curiosità.

La domanda, in poche parole, è se riesci a combinare più linguaggi di programmazione in 1 risultato? Ad esempio, questo codice può essere possibile?

<html>
cout << "Hello world!";
</html>

o

import java.util.Scanner;
cout << "Insert a number from 1 to 10";
Scanner n = new Scanner(System.in);
System.out.println("The value you entered was" +n.newLine());

Mi sembra una domanda sciocca, ma non posso sapere se è possibile o meno, quindi è per questo che lo sto chiedendo. Nella domanda noto che sta usando il codice Python nel codice html, se il mio esempio precedente non è possibile, cosa ha fatto?

    
posta Bugster 12.04.2017 - 09:31
fonte

14 risposte

42

Il primo esempio è possibile. Solitamente queste cose accadono in PHP (e in altri linguaggi di programmazione web correlati) come questo:

<HTML>
<?PHP
call_some_php_function(1,2,"a","b"); /* This is may return nothing, a text string, or actual HTML markup code */
?>
</HTML>

Alcuni punti importanti da notare su questo esempio:

  • HTML NON è un linguaggio di programmazione, è un linguaggio di markup.
  • PHP e HTML e non eseguiti / interpretati nello stesso posto: il codice PHP viene eseguito da un interprete PHP in esecuzione sul server e il risultato viene "iniettato" nell'HTML circostante. Quindi l'intero blob viene inviato al client / browser che esegue il rendering dell'intero codice HTML.

Il tuo secondo esempio sembra una specie di mash-up di C ++ e Java. È possibile che moduli compilati scritti in lingue diverse parlino tra loro, ma combinare Java e C ++ nello stesso file sorgente sarebbe estremamente confuso e difficile: come fa il compilatore a sapere quali dichiarazioni sono Java e quali sono C ++?

Suppongo che in teoria potresti scrivere uno speciale compilatore / pre-processore con indicatori di "lingua" come:

Java
{
    import java.util.Scanner;
}
C++
{
   cout << "Insert a number from 1 to 10";
}
Java
{
    Scanner n = new Scanner(System.in); //Actually, this line *could* be a C++ line - it's hard for me to tell just by looking at it.
    System.out.println("The value you entered was" +n.newLine());
}

Ma onestamente non sono sicuro che otterrai qualcosa di utile in questo modo.

Inoltre, in che modo questo ambiente linguistico ibrido gestirà le caratteristiche del linguaggio che sono incompatibili tra i due?

    
risposta data 27.02.2012 - 21:41
fonte
19

Risposta breve

Non proprio.

Risposta lunga

Embedding

Generalmente, un singolo file sorgente contiene codice per esattamente un linguaggio di programmazione. È raro che più lingue siano combinate in un singolo file per un paio di motivi:

  • L'analisi diverse lingue sintatticamente diverse contemporaneamente è estremamente difficile (se non addirittura impossibile).
  • Diverse lingue trattano la programmazione in modo diverso . La nozione di Haskell di una funzione è diversa da quella di C ++.

Collegamento

Diversi linguaggi di programmazione che condividono un'interfaccia interfaccia binaria comune possono essere combinati per formare un singolo file eseguibile o una libreria. Ottenere le firme delle due lingue disponibili l'una dentro l'altra spesso richiede un po 'di lavoro, ma esistono strumenti per facilitare il processo.

poliglotti

Il codice Polyglot è valido e equivalente in più di una lingua. La pagina 404 di Overflow dello stack include uno di questi programmi:

Stack Overflow 404 poliglotta http://sstatic.net/stackoverflow/img/polyglot-404.png

Questo stampa "404" in Python, Perl, Ruby, C, Brainfuck e Befunge.

Conclusione

Le lingue vengono mescolate raramente all'interno dei file e, quando lo sono, è per le risate . Le persone cercano persino di evitare di mescolare le lingue all'interno dei progetti a causa delle seccature extra che introduce. Quindi, mentre può essere tecnicamente possibile, mescolare lingue diverse non è né comune né pragmatico.

    
risposta data 23.05.2017 - 14:40
fonte
7

Sì, è possibile davvero. Non come l'hai immaginato, naturalmente. Ci sono alcune lingue disponibili appositamente per questo scopo.

In pratica, potrebbe essere molto utile combinare un numero di lingue specifiche del dominio in un singolo host linguaggio. Raramente c'è bisogno di mescolare due o più lingue ugualmente "generiche" insieme in un unico file di codice sorgente, anche se spesso troverai progetti scritti in entrambi, ad esempio, VB.NET e C #, con componenti linguistici diversi compilati separatamente.

Come per HTML, è solo un linguaggio di markup. Spesso è possibile trovare un codice lato server (ad es. In VB.NET), codice HTML e codice Javascript lato client mescolati in un unico file sorgente, sebbene sia considerato da molti una pratica sbagliata.

    
risposta data 27.02.2012 - 20:34
fonte
7

Questo è spesso chiamato codice poliglotta - ci sono alcuni esempi divertenti / folli se segui il link o in vari altri luoghi sul web. La maggior parte di questi sono solo per divertimento / per dimostrare che è possibile.

Più seriamente, ci sono vari esempi di vita reale in cui due o più lingue diverse possono essere combinate in modo utile:

  • Web templating : i linguaggi come i file PHP o JSP mescolano il codice in HTML. Le opinioni divergono ampiamente sul fatto che questa sia una buona idea o meno.
  • Linguaggi macro - spesso un linguaggio macro è mescolato nel file sorgente come macro del preprocessore C / C ++. Ci sono anche casi interessanti come Lisp in cui il linguaggio macro è Lisp (l'unica differenza è se il codice viene eseguito in fase di compilazione o in fase di esecuzione)
  • DSL : spesso viene definito un linguaggio specifico del dominio per risolvere efficacemente un particolare problema, che è incorporato nel codice sorgente di un'altra lingua. Ecco un esempio di bello DSL per SQL che può essere incorporato nel codice Clojure.
  • Scripting : alcuni linguaggi dinamici sono particolarmente utili per i brevi script e sono progettati per essere incorporati all'interno di software scritto in un'altra lingua. Gli script Groovy , ad esempio, sono molto facili da incorporare in un'applicazione Java.
  • Progetti Polyglot - a volte ha senso utilizzare più lingue solo per sfruttare le diverse funzionalità di ciascuno. Ad esempio, la JVM supporta più lingue che possono interagire in modo abbastanza trasparente, quindi potresti mescolare Java (per OOP veloce e tipizzato staticamente ) con Clojure (per sviluppo interattivo, concorrenza e programmazione funzionale). Tali progetti tipicamente separano le diverse lingue in file / cartelle di origine separati, ma sono compilati contemporaneamente per produrre una singola applicazione.
risposta data 28.02.2012 - 04:02
fonte
6

È possibile eseguire alcune combinazioni di lingue usando Perl Inline che consente di scrivere un Perl script e inserisci sezioni di codice scritte in una lingua diversa:

Inline has support for C, C++, Java, Python, Ruby, Tcl, Assembler, Basic, Guile, Befunge, Octave, Awk, BC, TT (Template Toolkit), WebChat and even PERL

    
risposta data 27.02.2012 - 21:40
fonte
3

Diversi linguaggi di programmazione possono essere utilizzati per formare 1 exe. Un modo è usare le DLL. Naturalmente ci sono varie preoccupazioni al riguardo. Ad esempio, compatibilità dei parametri, compatibilità COM e così via. In effetti, se pensi a come chiami un sistema di database per farti lavorare, potresti scoprire che il DBMS non è sempre scritto in una lingua che conosci. Probabilmente non ti interessa nemmeno se l'interfaccia è conosciuta.

Questo concetto viene portato avanti quando la tua soluzione utilizza i servizi Web, che è anche un modo più pulito per combinare più componenti software.

Nel mondo .NET, tutto quanto sopra si applica, più oltre, al livello di interfaccia XAML e le interfacce HTML possono convivere in Silverlight.

Nel mondo UNIX, allo stesso tempo, abbiamo utilizzato gli script KShell per avviare programmi C ++ e COBOL in modo che la soluzione potesse funzionare.

    
risposta data 27.02.2012 - 20:42
fonte
3

SQL incorporato era un modo comune per incorporare le istruzioni SQL in programmi di altre lingue.

In questi giorni è stato sostituito quasi interamente da un accesso al database basato su API più facile da compilare che non ha bisogno di modificare la lingua dell'host, ma usa invece le sue normali abilità.

    
risposta data 28.02.2012 - 08:19
fonte
2

Penso che varrebbe la pena citare Cython qui. È un superset di Python per scrivere estensioni C e sebbene sia davvero un linguaggio unico in sé, ti permette di usare il codice C in codice Python, se sei conforme alla sintassi in stile Python di Cython

    
risposta data 29.02.2012 - 17:29
fonte
0

Esempi di combinazioni di lingue: Jython (python in Java), Cog (python utilizzato come generatore di codice incorporato in praticamente qualsiasi cosa). Ho spesso usato il codice Perl per generare C ++, se si considera la generazione del codice.

    
risposta data 28.02.2012 - 03:27
fonte
0

Il framework .NET è progettato per consentire a più lingue di partecipare a una soluzione. Funziona finché la lingua può produrre codice byte compatibile con CLR.

link

    
risposta data 06.03.2012 - 10:08
fonte
0

È molto difficile, molto brutto e spesso inutile combinare più linguaggi di programmazione in 1 file.

È tuttavia possibile avere un grande progetto scritto in più di 1 lingua. Ad esempio, sia Mozilla Firefox che MySQL contengono codice C e C ++. Quando si tratta di progetti di grandi dimensioni, questa pratica viene spesso utilizzata perché una lingua specifica offre alcune funzioni che un'altra non utilizza. In PHP, ad esempio, puoi chiedere l'esecuzione di un eseguibile binario, prendere il suo risultato e usarlo nel tuo codice PHP da quel punto in poi.

Se sei curioso di sapere quali lingue sono usate per alcuni dei più importanti progetti open source nel mondo, puoi consultare Ohloh.net . Le statistiche sul codice sorgente di molti progetti possono essere trovate lì.

    
risposta data 06.03.2012 - 10:48
fonte
-1

Puoi "mescolare" le lingue in HTML. In realtà è importante sapere come funzionano molti siti web che puoi incorporare javascript in html. Ma ovviamente HTML è markup, non un linguaggio di programmazione.

Penso che fare ciò che proponesti implichi comunque scrivere una nuova lingua. O dovresti creare un interprete / compilatore che parli di tutti quei linguaggi e possa incorniciarli coerentemente, o avresti bisogno di un modo per valutare esplicitamente riga per riga in quello che sarebbe un meta-linguaggio. Queste due opzioni sono fondamentalmente le stesse ad eccezione di ciò che il programmatore deve fare per far funzionare le lingue insieme.

    
risposta data 27.02.2012 - 20:30
fonte
-1

La lingua è uno strumento. Prima di scegliere uno strumento (inoltre, creando una strana combinazione di hummer-PC-spettroscopio) ci si dovrebbe chiedere: che cosa esattamente voglio fare? Una volta che la risposta è stata data, scoprirai che questo tipo di mescolanza di lingue è raramente necessario.

    
risposta data 29.02.2012 - 16:46
fonte
-3

Sì, è possibile unire linguaggi di programmazione a patto che il tuo interprete / compilatore possa capirlo. Ad esempio mixando javascript, PHP, python in HTML o C ++ in C #.

Combinare le lingue può rendere più difficile leggere e modificare il codice, tuttavia, quindi deve essere fatto con cautela. Un modo per aggirare questo è creare file separati per il codice nella lingua che è necessario chiamare e importarlo anziché incorporarlo.

    
risposta data 27.02.2012 - 20:12
fonte

Leggi altre domande sui tag