Il est l'affaire: je fais des recherches théoriques sur les plates-formes .NET et Java pour mon cours de remise des diplômes et j'ai atteint une zone nuageuse: peut être considéré comme une partie du framework .NET? Analogique à cela, est Java (la langue de programmation) considérée comme une partie de la plate-forme Java? p>
Permettez-moi de passer en revue les faits: p>
.NET est une plate-forme de développement spécifiée par la norme ECMA-335; C'est une mise en œuvre de cette norme si vous voulez. C # Cependant, une mise en œuvre d'une autre norme, ECMA-334 qui indique clairement que sa mise en œuvre n'exige pas une mise en œuvre de la norme ECMA-335 - le CLR dans le cas de Microsoft (dont beaucoup de personnes appellent par erreur .net quand il y a beaucoup de plus à cela que juste le CLR). p> li>
En outre, nous avons mono, une implémentation différente de l'ECMA-335, sur laquelle c # est également exécuté (de tout ce que j'ai lu, il est implicite que Novell n'a pas de mise en œuvre de l'ECMA-334, Ce qui est parfaitement raisonnable), mais c # ne fait pas partie de mono. p> li>
Il y a le fait que j'ai lu quelque part qu'un langage de programmation ne fait pas partie d'une plate-forme, mais malheureusement, je ne peux pas sembler trouver la source. P> Li>
Il y a aussi le fait que l'article Wikipedia "Computing Platform" indique qu'un langage de programmation est une plate-forme; Wiki est cependant pratiquement sans valeur si vous voulez que vos recherches soient prises au sérieux. P> li>
Microsoft semble promouvoir C # dans une partie de .NET, mais être une plate-forme multi-langues, ne serait donc pas si chaque langue prenant en charge / est prise en charge par elle? P> LI > ol>
Jusqu'à présent, je n'ai pas seulement parlé de .NET, mais j'ai aussi besoin d'une réponse concernant Java. En fait, une réponse générale serait la meilleure. P>
Alors, quelqu'un peut-il m'aider à mettre les morceaux ensemble? Le matériau de référence est très apprécié. P>
Sur un problème différent, j'ai trouvé beaucoup de livres qui expliquent le fonctionnement intérieur du CLR, ce n'est-il rien sur les mêmes lignes pour la JVM? Je veux dire, il y a la spécification, bien sûr, mais je visitant quelque chose de plus facile à digérer, je ne prévois pas de construire un compilateur Java après tout .. p>
9 Réponses :
Retour un peu plus loin (1978), la distinence entre UCSD Pascal et l'UCSD Le système P était souvent flou, de sorte que la plupart des utilisateurs se réfèrent à UCSD Pascal en tant que système d'exploitation. P>
pensant de Sun / Oracle sur le sujet relative à Java: p>
La technologie Java est
forte> un langage de programmation et strong> une plate-forme. p> blockQuote> Plus tard: p>
Une plate-forme est l'environnement matériel ou logiciel dans lequel un programme fonctionne. ... La plate-forme Java diffère de la plupart des autres plates-formes en ce sens que c'est une plate-forme logicielle uniquement qui fonctionne au-dessus d'autres plates-formes basées sur le matériel. p> blockQuote>
Je dirais donc en fonction de leur définition, la langue Java n'est pas "partie" de la plate-forme Java. Tout comme C99 ne fait pas partie de la plate-forme UNIX, etc. p>
En pratique, cependant, les lignes sont quelque peu floues. La langue Java est probablement plus couplée à la plate-forme Java que ce qu'elle souhaite admettre. L'API Java (les bibliothèques) figurent partie de la plate-forme Java, pas de la langue, et une fois que la langue est couplée à certaines classes ou interfaces (par exemple, la boucle pour chacune dépend de
Java.lang. Ibler code> etjava.util.itéator code>). p>En général, les concepteurs tentent de contenir le couplage au package
java.lang code>, qui étant pour langue em> prise en charge. C'est pourquoi vous voyez des cas spéciaux commechaîne code>,objet code>, etc. dansjava.lang code>. P>.
La plate-forme est la JVM, tandis que le langage de programmation est Java. Je ne vois pas comment cela aborde les questions de l'Asker, cependant.
@THOMAS: L'OP a demandé à "est Java (la langue de programmation) considérée comme une partie de la plate-forme Java?" I>. Je suis juste en train de relier à l'utilisation des termes du soleil. Bien sûr, vous n'allez jamais trouver ces types de termes utilisés de manière cohérente sur toutes les technologies.
Ah. Je vois d'où vous venez de. Bien que je n'aime vraiment pas vraiment l'utilisation de la terminologie Sun / Oracle, je ne peux pas vraiment discuter avec elle puisqu'elles elles possèdent Java.
Je pense que la déclaration provient principalement du département juridique du Sun, qui essaie de maintenir le contrôle de la marque Java (TM) et de le couvrir autant que possible.
@ Mark: la réponse java la plus satisfaisante jusqu'à présent ... pense que je vais suivre votre train de pensée.
C # est un langage de programmation. Il a été développé par Microsoft dans l'initiative .NET et approuvé ultérieurement comme une norme par ECMA (ECMA-334) et ISO (ISO / CEI 23270). Mono, Dotgnu et DotNetanywhere ne sont pas des implémentations ".NET" de C #. Donc c # fait partie de .NET, mono, dotgnu et dotnetanywhere. P>
Le langage de programmation Java est également une langue, qui fonctionne sur la plate-forme Java. N'oubliez pas que la JVM peut exécuter de nombreuses langues de programmation (Scala, Groovy, Jruby, Jython). Ensuite, vous avez les différentes "plateformes" Java «Plates-formes»: Java Standard Edition, Java Enterprise Edition et Java Mobile Edition. Chacune d'entre elles suivent certaines spécifications définies par le processus communautaire Java, et ils incluent le langage de programmation Java. P>
N'importe où j'ai dit qu'ils étaient "" .NET "implémentations de C #" (une déclaration qui n'a même pas de sens), j'ai dit que Mono est une mise en œuvre de l'ECMA-335, la CLI (la plus précise serait de dire que mono A une implémentation CLI, en fait)
J'essayais de faire un point: "C # peut exister sans .net". Théoriquement au moins. Si une norme avait été définie sans .NET en cours de création, mono et toutes ces autres plates-formes C # auraient pu exister de toute façon.
Ainsi, Fernando (Bassani ?!) Vous dites essentiellement que les deux langues appartiennent / font partie de leurs plates-formes respectives, n'est-ce pas?
Java fait partie de la plate-forme Java (les 3 d'entre eux) et C # fait partie de la plate-forme .NET. Cela ne signifie pas qu'ils sont définis par ces plates-formes (à nouveau "théoriquement"), mais oui, ils font partie des plates-formes. Qui est Fernando Bassani?
NEWMIND NEUVEZ DU BASSANI Chose. Je tire votre point sur le point de vue historique, mais ce n'est pas exatly ce que j'allais pour ...
demandez-vous en général? Si oui, il me semblerait que la réponse est sûre que la réponse est C'est vraiment une question de lâche contre un couplage serré appliqué à large échelle. Les lettres sont généralement préférées comme un choix de conception. Serré est néanmoins toujours une option. P>
Penser à la question un peu plus, je pense que je comprends mieux ce que vous êtes incertain. Il y a la CLI, spécifiée par ECMA-335, puis il y a .NET, qui est évidemment liée à Microsoft. P>
La cli est pas em> include c #; À ce sujet, je pense que nous pouvons être d'accord. Est-ce que .net? P>
Honnêtement, je ne suis pas vraiment sûr. Considérant .net est un produit Maintenu par Microsoft, je suppose que c'est vraiment à la hauteur de ce que c #, vb.net, f #, etc. sont ou ne sont pas une "partie de" .NET. Même va pour le soleil avec Java et la "plate-forme Java". P>
Oui, tu l'as eu. Je pense que pour tout ce qui compte, je m'en tenir à 1. Un langage de programmation peut faire partie d'une plate-forme (de cette façon, je peux m'abstenir de dire quoi que ce soit à propos de ce problème particulier et ne risquera pas de se tromper); 2. C # ne fait pas partie de .NET Même s'il n'y a pas de consensus à ce sujet dans la communauté; 3. Toujours sur la clôture sur la question Java, mais jusqu'à présent, je règle avec la réponse de Mark Peter.
d'un point de vue purement théorique, une langue et une plate-forme sont séparées. La spécification linguistique de C # définit uniquement sa structure et sa syntaxe; Comment cela devrait-il examiner et agir du point de vue du programmeur. À partir d'une perspective orientée objet, la langue est une interface (assez littéralement) et les plates-formes y sont des implémentations. Il existe de nombreuses idées C / C ++, toutes pouvant être conformes à la spécification ANSI C ++ pour la langue elle-même (certaines incluent des gizmos supplémentaires). Si vous le souhaitez, vous pouvez écrire un compilateur qui acceptera les fichiers de code C # et produira Java intermédiaire au lieu de MSIL, ou même du code de machine natif (bien que C # a été conçu pour une plate-forme de code géré, certaines fonctionnalités d'une langue de code natif. , comme la capacité de détruire explicitement des objets, il peut être nécessaire d'ajouter à la spécification pour le faire fonctionner). P>
Dans le monde réel, c # est tout-but-injussible de la framework .NET, car Microsoft a développé la spécification de la langue, et la mise en œuvre de MS (.NET) est de loin le plus prolifique. Donc, la langue est généralement considérée comme faisant partie de la plate-forme, au point que presque n'importe qui dit C # .NET. Il existe des ports de la spécification linguistique (généralement écrit pour Workalikes de la plate-forme MS), mais lorsque vous dites simplement C #, les développeurs supposent que vous parlez de C # dans le contexte du .NET. P>
Une réponse simple pourrait être oui et non, comme vous l'avez dit, c'est une zone nuageuse. Vous trouverez probablement des arguments pour, et certains contre, tous deux également valables. P>
Mais mon point de vue est que c # n'est pas une partie de .NET. C # est conçu pour les plateformes telles que .NET et met des exigences assez spécifiques de la plate-forme, telles que la mémoire gérée, que des affectations 32 bits peuvent être implémentées atomiquement, etc. P>
Tournez la question autour de .net nécessite. Jetez C # et vous avez toujours VB.NET, etc. C # peut être considéré comme un plugin nécessitant une plate-forme avec une interface spécifique, où .NET implémente cette interface. P>
comme un argument "oui", vous pouvez demander à la question rhétorique ce que .net serait sans c #. Pourrait-il même survivre? P>
Comme tout le monde semble remarquer, cela dépend de vos définitions. p>
mais ECMA 334 (et / ou un autre doc) spécifie également msil fort> (ou CIL), et que est em> partie de la plate-forme. p>
Et je pense que c # est pas em> partie de la plate-forme, le compilateur MS vise simplement le CLR en délivrant le MSIL. Ce n'est pas si difficile d'imaginer une implémentation pour une autre plate-forme, gérée ou non gérée. p>
Java confond le problème un peu en ayant à la fois une plate-forme et une langue appelée Java, mais ce n'est pas si difficile de voir la distinction. p>
Alors, une langue peut-elle faire partie d'une plate-forme? oui fort>, voir msil. Beaucoup de langues (C, C ++) apportent un effort actif pour être portable à travers les plates-formes. p>
Mais la plupart des langues (y compris C # et Java) ne sont pas. p>
Mais bien sûr! Bon sang Partition III, n'avait pas traversé mon esprit ... Merci un tas!
NOT C # ou Java liée, mais, par exemple, la plate-forme SmallTalk inclut non seulement la langue et la machine virtuelle, mais aussi l'IDE. Donc, je suppose que la réponse à votre question est la suivante: Oui - Un langage de programmation peut faire partie d'une plate-forme. P>
C # dépend de certaines classes .NET (spécifiquement, dans MSCORLIB) pour mettre en œuvre ses constructions spéciales, bien que je suppose que vous pouvez créer des équivalents pour un autre runtime de support différent. P>
foreach code> dépend de ienumerable code> ou ienumerable code> li>
-
en utilisant code> dépend de Idisposable code> li>
- Les expressions Lambda peuvent se résoudre à des objets de représentation génériques spéciaux
Expression <> CODE> LI>
-
retour de rendement code> est également lié dans le modèle de dénombrement .NET LI>
ul>
SO C # n'est donc pas complètement indépendant d'au moins certains aspects de .NET et le CLR, bien que vous puissiez, en principe, obtenez le même comportement en créant un compilateur d'exécution / compilateur qui fournit uniquement le sous-ensemble minimal des fonctionnalités .NET requises mettre en œuvre les fonctionnalités de la langue. Je ne pense pas que cela serait particulièrement utile, car la langue et l'exécution ont augmenté et évolué ensemble. P>
Votre titre manque un verbe, semble-t-il? (Oh, c'est juste être. :)
@ Nicolas78 Dammit ... ¬¬¬¬
La réponse facile et facile est la suivante: C # est liée si étroitement à .NET qu'il leur appartient effectivement.
@delnan: Oui, mais cela ne coupe pas les deux sens. C # ne pouvait pas vraiment exister sans .net. .NET pourrait exister sans c #.
En fait, C # ne pouvait pas exister sans .NET uniquement Si vous pensez à un point de vue de la langue / de la plate-forme, car comme je l'ai déjà dit, il y a mono (entre autres), ce qui n'est pas .NET et C # s'exécute dessus. Bien sûr, je ne suis pas vraiment intéressé à comprendre dans les excroissances historiques, comme il y avait d'abord .NET et le CLR, puis il a été stadardisé et le CLI a été créé et à cause de cela, nous pouvons avoir mono ... hors de portée ^ ^
@ S.o.: Désolé, quand j'ai dit .net, ce que je voulais vraiment dire était le cli. Il est clair que vous devez faire attention quelles conditions vous utilisez; Il est très facile de confondre involontairement des choses distinctes.