web-dev-qa-db-fra.com

Quelle est la signification exacte de l'indépendance de la plateforme?

Quelle est la signification de l'indépendance de la plateforme?

Je prends le cas de Java. Puis-je exécuter une application Java sur Linux basée sur la plate-forme Windows? Ou l'inverse?

Puis-je utiliser un même algorithme de programmation (ou exact) sur les deux systèmes d'exploitation?

À mon avis, les types de fichiers sont indépendants de la plate-forme, comme les vidéos, les images, les documents, etc.

9
Dileep DiL

L'indépendance de la plate-forme dans le logiciel signifie que vous pouvez exécuter le même code avec peu ou pas de modification sur plusieurs plates-formes.

Le diable est dans les détails:

  • Cela dépend de ce que vous définissez comme "la plate-forme". Dans certains cas, il peut s'agir d'une configuration de machine matérielle spécifique. Dans d'autres cas, il peut s'agir d'un "PC générique". Dans d'autres cas, il peut s'agir d'une machine virtuelle et d'un environnement d'exécution (ce qui est le cas avec Java).
  • Rien n'est "parfaitement" indépendant de la plate-forme - il y a toujours quelques cas d'angle qui peuvent vous rattraper. Par exemple, si vous codez en dur les séparateurs de chemin de fichier plutôt que d'utiliser la plate-forme indépendante File.pathSeparator in Java alors votre code ne fonctionnera pas sur Windows et Linux. En tant que programmeur, vous devez faire attention à ces choses, en utilisant toujours l'option indépendante de la plateforme où possible et testez correctement sur différentes plates-formes si vous vous souciez de la portabilité.
  • Il existe toujours des contraintes sur des plates-formes spécifiques qui ne peuvent pas être ignorées. Les exemples sont des choses comme la longueur maximale des noms de fichiers ou le RAM disponible sur un système. Peu importe combien vous essayez d'être indépendant de la plate-forme, votre code peut échouer si vous essayez de l'exécuter sur un plate-forme trop étroitement contrainte.
  • Il est important de noter que certains langages sont indépendants de la plateforme au niveau du code source (C/C++ en est un bon exemple) mais perdent leur indépendance une fois le code compilé (puisque le code natif est spécifique à la plateforme). Java conserve l'indépendance de la plateforme même après la compilation du code car il se compile en bytecode indépendant de la plateforme (la conversion réelle en code natif est gérée ultérieurement après le chargement du bytecode par la JVM).
  • Il existe des bogues occasionnels dans les implémentations de langage qui ne se produisent que sur certaines plates-formes. Donc, même si votre code est théoriquement 100% portable, vous devez toujours le tester sur différentes plates-formes pour vous assurer que vous ne rencontrez aucun bogue inhabituel!

Dans le cas spécifique de Java:

  • Java code est indépendant de la plateforme dans le sens où la même application Java Java ou des algorithmes (généralement compilés en Java bytecode et empaquetés dans un fichier .jar) fonctionneront de manière identique sur Windows et Linux.

  • Les bibliothèques Java (par exemple, tous les ensembles d'outils open source Nice) sont généralement indépendantes de la plate-forme, tant qu'elles sont écrites en Java pur. La plupart des bibliothèques essaient de s'en tenir à Java afin de maintenir l'indépendance de la plate-forme, mais il y a des cas où cela n'est pas possible (par exemple si la bibliothèque doit s'interfacer directement avec un matériel spécial ou appeler un Bibliothèque C/C++ qui utilise du code natif).

  • L'environnement de plate-forme Java/d'exécution est indépendant de la plate-forme dans le sens où les mêmes bibliothèques (images, réseau, File IO, etc.) sont disponibles et fonctionnent de la même manière sur toutes les plateformes. Ceci est fait délibérément afin de permettre aux applications qui utilisent ces bibliothèques de pouvoir s'exécuter sur n'importe quelle plate-forme. Par exemple, les bibliothèques Java qui accèdent au système de fichiers savent que Windows et Linux utilisent des séparateurs de chemin de nom de fichier différents et en tiennent compte pour vous. Bien sûr, cela signifie que sous le capot, le l'environnement d'exécution utilise des fonctionnalités spécifiques à la plate-forme, vous avez donc besoin d'un JRE différent pour chaque plate-forme. Vous pouvez voir une liste de certaines des plates-formes disponibles sur le Java: - http://www.Oracle.com/technetwork/Java/javase/downloads/jdk-6u26-download-400750.html

  • La JVM elle-même (c'est-à-dire la machine virtuelle Java qui est responsable de la compilation et de l'exécution de JIT Java bytecode) est indépendant de la plate-forme dans le sens où il est disponible sur de nombreuses plates-formes (tout, des ordinateurs centraux aux téléphones mobiles). Cependant des versions spécifiques de la JVM sont nécessaires pour chaque plate-forme sous-jacente afin de prendre en compte les différents codes d'instructions natifs et les capacités de la machine (vous ne pouvez donc pas exécuter une JVM Linux sur Windows et Vice Versa). La JVM est fournie dans le cadre du Java plateforme/environnement d'exécution comme ci-dessus.

Dans l'ensemble, Java est probablement aussi proche de la véritable indépendance de la plate-forme que vous pouvez l'obtenir, mais comme vous pouvez le voir, il y a encore pas mal de travail spécifique à la plate-forme effectué sous le capot.

Si vous vous en tenez à 100% pur Java et bibliothèques, mon expérience est que vous pouvez compter sur Java comme étant "effectivement" indépendant de la plate-forme et généralement est à la hauteur de la promesse Write Once Run Anywhere. Mais vous devriez quand même la tester !!

34
mikera

Vous avez raison, l'indépendance de la plate-forme signifie que le même programme fonctionne sur n'importe quelle plate-forme (système d'exploitation) sans aucune modification.

Dans le cas de Java l'application s'exécute dans une machine virtuelle Java qui elle-même n'est pas indépendante de la plate-forme. Cela doit être l'interface entre la machine réelle ( système d'exploitation) et le code Java que vous avez écrit.

Dans le cas des vidéos, des images, etc., ce sont des documents et sont données pour les applications, ils sont donc généralement indépendants de la plate-forme par nature.

5
ChrisF

En fait, la technique pour atteindre l'indépendance de la plate-forme est

  • Construire une plateforme intermédiaire
  • Implémentez l'interface intermédiaire dans chacune des plates-formes dont vous avez besoin (dans des langages comme Java)

Ou vous pouvez écrire du code et compiler pour chaque plate-forme (C/C++). À mon avis, c'est aussi une sorte d'indépendance de plateforme. Et les algorithmes peuvent ainsi être indépendants de la plateforme.

Vous avez raison en termes de véritable indépendance de la plate-forme pour les types de fichiers. Mais le terme indépendance de la plate-forme n'est généralement pas appliqué aux fichiers.

1
Gulshan

Java est un langage de programmation indépendant de la plateforme orientée objet. Le compilateur javac compile le code source et produit le langage de code Byte (langage universel).

Ce langage n'est compréhensible par aucun système d'exploitation, il doit d'abord être traité, et c'est là qu'un programme exécutable spécial (JVM) entre en scène. Un interprète de la machine virtuelle Java lit le bytecode ligne par ligne et convertit les instructions de code octet en langage compréhensible spécifique à la machine (en fin de compte code binaire). Ainsi, le code d'octet est indépendant de la plate-forme mais le code interprété est spécifique à la machine et s'exécutera sur l'environnement sur lequel la JVM est installée. Java les programmes sont indépendants de la plate-forme signifie que Java est indépendant de la plate-forme).

Le slogan de Sun MicroSystems était WORA : Write Once Run Anywhere.

Étant donné que la JVM nécessite un hôte, je peux vous dire qu'un programme Java n'est pas indépendant de la plate-forme. De plus, le langage Java de par sa conception a des exigences sur le système de fichiers). résultant en des noms de classe courts si le système utilise une partition FAT16:

class FOOBAR

est le même que

class Foobar

et le nom

class AbstractPrinterFactory

est impossible.

À titre de comparaison, C a très peu d'exigences d'exécution et peut donc offrir une portabilité plus élevée. Il est toujours possible de rétroporter des programmes C plus petits vers des appareils vraiment bas de gamme.

0
user877329