Je programme depuis un certain temps, j'ai écrit des programmes rudimentaires et je veux continuer à apprendre. J'ai atteint ce point où vous ne savez tout simplement pas quoi apprendre ensuite, et je voudrais poser une question pour ma propre curiosité.
La question, en un mot, est de savoir si vous pouvez combiner plusieurs langages de programmation en 1 résultat? Par exemple, ce code peut-il être possible?
<html>
cout << "Hello world!";
</html>
ou
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());
Cela ressemble à une question stupide, mais je ne peux pas savoir si c'est possible ou non, c'est pourquoi je le pose. Dans cette question, je remarque qu'il utilise Python code en code html, si mon exemple ci-dessus n'est pas possible, qu'a-t-il fait?
Votre premier exemple est en quelque sorte possible. Habituellement, de telles choses se produisent dans PHP (et d'autres langages de programmation Web associés) comme ceci:
<HTML>
<?PHP
call_some_php_function(1,2,"a","b"); /* This is may return nothing, a text string, or actual HTML markup code */
?>
</HTML>
Quelques points importants à noter sur cet exemple:
Votre deuxième exemple ressemble à une sorte de mash-up de C++ et Java. Il est possible que des modules compilés écrits dans différents langages se parlent, mais combiner Java et C++ dans le même fichier source serait extrêmement déroutant et difficile: comment le compilateur pourrait-il savoir quelles instructions sont Java et quels sont C++?
Je suppose qu'en théorie, vous pourriez écrire un compilateur/pré-processeur spécial avec des indicateurs de "langage" tels que:
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());
}
Mais je ne suis honnêtement pas sûr que vous gagneriez quelque chose d'utile en faisant cela.
De plus, comment cet environnement de langage hybride gérerait-il des fonctionnalités de langage incompatibles entre les deux?
Pas vraiment.
Généralement, un seul fichier source contient du code pour exactement un langage de programmation. Il est rare que plusieurs langues soient combinées dans un seul fichier pour plusieurs raisons:
Différents langages de programmation partageant une interface application binaire commune peuvent être combinés pour former un seul exécutable ou bibliothèque. Obtenir les signatures des deux langues à l'intérieur l'une de l'autre demande souvent un peu de travail, mais des outils existent pour faciliter le processus.
Code polyglotte est valide et équivalent dans plusieurs langues. La page 404 de Stack Overflow propose un de ces programmes:
Ceci imprime "404" en Python, Perl, Ruby, C, Brainfuck et Befunge.
Les langues sont rarement mélangées dans les fichiers, et quand elles le sont, c'est pour rire . Les gens essaient même d'éviter de mélanger les langues au sein des projets en raison des tracas supplémentaires qu'il introduit. Ainsi, bien que cela soit techniquement possible, mélanger différentes langues n'est ni courant ni pragmatique.
Oui, c'est possible en effet. Pas comme vous l'avez imaginé, bien sûr. Il y a quelques langues là-bas construits spécifiquement à cet effet.
En pratique, il pourrait être très utile de mélanger un certain nombre de langues spécifiques au domaine dans une seule langue hôte. Il est rarement nécessaire de mélanger deux ou plusieurs langages également "à usage général" dans un seul fichier de code source, bien que vous trouverez souvent des projets écrits dans les deux, disons, VB.NET et C #, avec différents composants de langage compilés séparément.
Quant au HTML, c'est juste un langage de balisage. Vous pouvez souvent trouver un code côté serveur (par exemple, dans VB.NET), du balisage HTML et du code Javascript côté client mélangés dans un seul fichier source, bien qu'il soit considéré comme une mauvaise pratique par beaucoup.
Ceci est souvent appelé code polyglotte - il existe des exemples amusants/fous si vous suivez le lien ou à divers autres endroits sur le Web. La plupart d'entre eux sont juste pour le plaisir/pour prouver que c'est possible.
Plus sérieusement, il existe divers exemples concrets où deux ou plusieurs langues différentes peuvent être utilement combinées:
Il est possible de faire une combinaison de langages en utilisant Perl Inline qui permet d'écrire un script Perl et d'insérer des sections de code écrites dans un autre langage:
Inline prend en charge C, C++, Java, Python, Ruby, Tcl, Assembler, Basic, Guile, Befunge, Octave, Awk, BC, TT (Template Toolkit), WebChat et même Perl
Embedded SQL était un moyen courant d'incorporer des instructions SQL dans des programmes d'autres langages.
De nos jours, il a été remplacé presque entièrement par un accès à la base de données basé sur l'API plus facile à compiler qui n'a pas besoin de modifier le langage hôte, mais utilise plutôt ses capacités normales.
Je pense qu'il vaut la peine de mentionner Cython ici. C'est un surensemble de Python pour l'écriture d'extensions C et bien qu'il s'agisse vraiment d'un langage unique en soi, il vous permet d'utiliser le code C dans Python code , si vous vous conformez à la syntaxe de style Python de Python
Plusieurs langages de programmation peuvent être utilisés pour former 1 exe. Une façon consiste à utiliser des DLL. Bien sûr, il existe diverses préoccupations à ce sujet. Par exemple, la compatibilité des paramètres, la compatibilité COM et autres. En fait, si vous pensez à la façon dont vous appelez un système de base de données pour travailler, vous pourriez constater que le SGBD n'est pas toujours écrit dans une langue que vous connaissez. Vous ne vous en souciez probablement même pas tant que l'interface est connue.
Ce concept est poussé plus loin lorsque votre solution utilise les services Web, ce qui est encore plus propre de combiner plusieurs composants logiciels.
Dans le monde .NET, tout ce qui précède s'applique, plus au niveau de l'interface, les interfaces XAML et HTML peuvent cohabiter dans Silverlight.
Dans le monde UNIX, à un moment donné, nous avons utilisé des scripts KShell pour lancer des programmes C++ et COBOL afin que la solution puisse fonctionner.
Le framework .NET est conçu pour permettre à plusieurs langues de participer à une seule solution. Cela fonctionne tant que le langage peut produire un code d'octet compatible CLR.
Il est très difficile, très moche et souvent inutile de combiner plusieurs langages de programmation en un seul fichier.
Il est cependant possible d'avoir un gros projet écrit dans plus d'une langue. Par exemple, Mozilla Firefox et MySQL contiennent du code C et C++. Quand il s'agit de grands projets, cette pratique est souvent utilisée car un langage particulier fournit certaines fonctionnalités qu'un autre ne propose pas. En PHP, par exemple, vous pouvez demander l'exécution d'un exécutable binaire, prendre son résultat et l'utiliser dans votre code PHP à partir de ce moment).
Si vous êtes curieux de savoir quelles langues sont utilisées pour certains des projets open source les plus importants au monde, vous pouvez consulter Ohloh.net
. Des statistiques sur le code source de nombreux projets peuvent être trouvées ici.