Home About us Products Services Contact us Bookmark
:: wikimiki.org ::
Logiciel

Logiciel

Un logiciel ou application est l'ensemble des éléments informatiques qui permettent d'assurer une tâche ou une fonction (exemple : logiciel de comptabilité, logiciel de gestion des prêts). Le terme logiciel est souvent employé pour programme informatique et inversement. Un logiciel peut être composé d'un seul, ou d'une suite de programmes. Ce dernier cas est d'autant plus fréquent que la capacité réduite de calcul de l'ordinateur oblige à une segmentation des tâches en plusieurs modules séparés ; cependant, les énormes capacités des micro-ordinateurs actuels en regard des applications typiques de la bureautique ont permis la réalisation d'applications monolithiques. Généralement, les programmes sont accompagnés d'un ensemble de données permettant de les faire fonctionner (par exemple, un jeu viendra avec de nombreuses images, animations, sons...).

Diverses présentations des logiciels

Les programmes peuvent être de différentes formes :
- exécutables : ils peuvent être exécutés directement par l'ordinateur ;
  - généralement, ils ne peuvent être exécutés que sur un type de machine et de système d'exploitation particulier (exemple : Microsoft Windows sur un compatible PC) ;
  - cependant, il existe des exécutables (en bytecode) exécutables sur une variété de plates-formes (comme ceux du langage Java) ; ils visent en fait l'exécution pour une machine virtuelle, qui est elle-même un logiciel disponible sur les diverses plates-formes.
- fichiers sources : il s'agit généralement d'un texte respectant les règles d'écriture d'un langage de programmation particulier ; à titre indicatif, l'ordre de grandeur de la taille d'un logiciel comme Microsoft Word est d'un million de lignes de code ;
  - pour un langage compilé : ils doivent être traduits en un exécutable par un compilateur ;
  - pour un interpréteur : ils sont exécutés directement à la lecture (par exemple des scripts Perl ou PHP).
- bibliothèques : il s'agit de programmes exécutables ou source qui, en eux-mêmes, ne sont pas exécutables directement et n'offrent pas de fonctionnalité à l'utilisateur, mais fournissent des services à d'autres programmes (par exemple, on trouvera des bibliothèques permettant à un programme de charger des animations ou de jouer des sons) ; on trouve en particulier des bibliothèques dynamiques (dll Windows ou so GNU/Linux). Les données associées au logiciel peuvent également être de différents formats : fichiers classiques, bases de données (relationnelles, hiérarchiques, etc.). Les données du logiciel peuvent être éclatées en un grand nombre de fichiers, ou tout le logiciel peut être rassemblé en un seul fichier ; par exemple, sous Windows, la définition de l'interface utilisateur, le dessin des icônes etc., sont souvent intégrés dans le même fichier que l'application principale.

Développement de logiciels

Article détaillé : Développement de logiciel Les logiciels, suivant leur taille, peuvent être développés par une personne seule, une petite équipe, ou un ensemble d'équipes coordonnées. Le développement de grands logiciels par de grandes équipes pose de grands problèmes de coordination, en raison de la quantité importante d'informations à communiquer entre les intervenants : documentation, réunions. Pour ces raisons, le développement de logiciels dans un contexte professionnel suit souvent des règles strictes permettant le travail en groupe et la maintenance du code ; en effet, souvent, les personnes qui doivent opérer des modifications ultérieures dans le code ne sont plus les personnes qui l'ont développé. Un nouveau modèle de développement tend cependant à se démocratiser : le [http://www.linux-france.org/article/these/cathedrale-bazar/cathedrale-bazar.html bazar] (modèle utilisé pour la conception de GNU/Linux)

Bogues

Article détaillé : bogue Des erreurs de conception dans les logiciels peuvent causer des comportements incorrects, souvent appelés bogues. La gravité de ceux-ci peut aller de très mineure (p.ex., apparence légèrement incorrecte d'un élément d'interface graphique), à des évènements catastrophiques (explosion de la fusée Ariane vol 501, irradiation incorrecte de patients par une machine de traitement...) en passant par des pertes plus ou moins grandes de données, et, rarement, par une détérioration du matériel. Il est difficile, pour des raisons fondamentales, de produire des logiciels sans bogue ; cependant, il existe des mécanismes par lesquels on peut limiter la quantité de bogues, voire les supprimer. Citons d'une part des préceptes d'organisation des équipes de programmation et leur méthodologie, d'autre part les technologies de recherche de bugs dans les logiciels. La recherche en informatique a développé un domaine d'étude, la vérification formelle, dont l'objectif est de certifier la qualité des logiciels et de garantir leur fiabilité. Dans l'ensemble, l'obtention de logiciels complexes peu bogué est coûteuse en hommes et en temps.

Ouverture du code source

On classe les logiciels d'après la disponibilité du code source et de la licence qui régit la distribution du programme :
- code ouvert : tout le monde peut lire le code source. Ce terme n'est pas synonyme de logiciel libre ;
- code fermé : le code source n'est disponible que pour une minorité de personnes ;
- logiciel libre : tout le monde peut étudier, copier, distribuer, modifier et distribuer des versions modifiées du logiciel (définition de la free software foundation). Les logiciels libres sont protégés pour la plupart par une licence d'utilisation ;
- logiciel propriétaire : au moins un de ces droits n'est pas rempli pour les utilisateurs. La plupart du temps, acquérir une licence d'utilisation nécessite le paiement d'une certaine somme aux créateurs du logiciel ;
- logiciel commercial : logiciel destiné à la vente, il peut être libre ou propriétaire, même s'il est souvent propriétaire.

Voir aussi


- Matériel informatique
- Micrologiciel(F) Firmware (A)
- Génie logiciel
- Spécification
- Brevet logiciel
- Brevet logiciel en Europe
- Logiciel libre
- Progiciel
- Noms et utilisation de logiciels
- Version Catégorie:Logiciel Catégorie:Gestion de projet ja:ソフトウェア ko:컴퓨터 소프트웨어 simple:Software th:ซอฟต์แวร์

Programme informatique

Un programme informatique indique à un ordinateur ce qu'il devrait faire faire. Il s'agit d'un ensemble d'instructions qui doivent être exécutées dans un certain ordre par un processus. Un ordinateur sans programme ne fait absolument rien. En fait, la capacité à suivre un programme enregistré sert même souvent, d'un point de vue historique, à distinguer un ordinateur d'une simple machine à calculer. Avec cette définition, le premier ordinateur est le Manchester Mark I, premier calculateur à programme enregistré. À l'origine d'un programme, il y a un code source écrit par un programmeur dans un langage de programmation compréhensible par l'homme. Selon le langage utilisé, ce code est ensuite traduit avec un jeu d'instructions spécifique à un microprocesseur par un compilateur, le programme obtenu peut alors être exécuté directement par l'ordinateur, ou bien est pris en charge par un interpréteur qui décode les instructions et les exécute. Parfois le langage de programmation se réduit à un ensemble de symboles correspondant aux instructions en code machine. C'est du langage assembleur et dans ce cas, un programme appelé assembleur est utilisé pour faire la traduction en langage machine. Le terme programme informatique est souvent utilisé comme synonyme de logiciel ; bien que la majeure partie de tout logiciel soit composée de programmes, les logiciels incluent souvent les fichiers de ressources qui contiennent des données de toutes sortes ; elles ne font pas partie du programme en elles-mêmes. Un programme abstrait est souvent appelé algorithme. Les programmes d'ordinateur sont aujourd'hui souvent les sujets des mathématiques : voir les méthodes formelles, la sémantique des langages de programmation, etc.

Voir aussi

[ langage de programmation | machine de Turing | lisibilité | génie logiciel ] Catégorie:Programmation informatique ja:プログラム ko:프로그램 simple:Computer program zh-cn:程序

Microsoft Windows

Windows est une gamme de systèmes d'exploitation produite par Microsoft, principalement destinées aux compatibles PC. Depuis les années 1990, son succès commercial pour équiper les ordinateurs personnels est tel qu'il atteint un niveau souvent qualifié de monopolistique. La gamme Windows est composée de plusieurs branches. La première (de Windows 1 à 3.11) est née en 1985. C'était une interface graphique pour compatibles PC basée sur un noyau MS-DOS. La seconde branche (Windows NT, 2000) est apparue en 1993. C'est un système d'exploitation complet, de conception robuste et portable, destiné aux ordinateurs personnels comme aux serveurs. Windows XP est la fusion de cette seconde branche avec la troisième, composée de Windows 95, 98 et Me. La troisième branche, la plus connue du grand public, est apparue en 1995 afin de remplacer la première. Il existe enfin une quatrième branche (Windows Mobile) prévue pour être utilisée sur du matériel léger et portable (assistant personnel, téléphone portable).

Versions

Branche fondée sur MS-DOS


- Windows 1.0 : Novembre 1985
- Windows 2 ou 286 : Décembre 1987
- Windows 386 : Décembre 1987
- Windows 3.0 : Mai 1990
- Windows 3.1 (Janus) : Avril 1992
- Windows for Workgroups 3.1 (Sparta) : Octobre 1992
- Windows for Workgroups 3.11 (Snowball) : Novembre 1993 Les premières versions étaient composées d'une interface graphique, en complément du mode en ligne de commandes (COMMAND.COM) de MS-DOS, qui constituait le soubassement (non graphique) du système. Cette interface était directement copiée de Mac OS d'Apple : le responsable du développement du graphisme de Windows avait eu une fonction semblable lors du développement du System (ancien nom de Mac OS). On pouvait la charger sur un DOS concurrent, sous réserve de passer outre aux messages de dissuasion émis lors de l'installation de Windows. À partir de Windows 95, l'interface graphique est devenue commercialement associée à MS-DOS. Cela a motivé un procès entre Caldera, éditeur à l'époque d'un autre système DOS (DR-DOS) qui permettait également de faire tourner Windows, et Microsoft. Caldera estimait en effet que Microsoft adoptait ainsi une pratique anticoncurrentielle de vente forcée, sans justification technique réelle. À partir de Windows XP, on peut considérer que le DOS a bel et bien disparu des systèmes d'exploitations grand public de Microsoft, bien qu'une émulation reste disponible.

Branche Windows 9x

Noms de codes connus entre parenthèses
- Windows 95 (Chicago) : Août 1995
- Windows 98 (Memphis) : Juin 1998
- Windows 98 SE : Mai 1999
- Windows Me (Millenium): Septembre 2000 Parallèlement au développement de Windows NT, un système d'exploitation à proprement parler, Microsoft décide de créer un système hybride à destination du grand public, qui reprendrait certains avantages de Windows NT tout en restant compatible avec les versions antérieures de Windows et MS-DOS. Celui-ci devait pouvoir fonctionner sur des configurations d'entrée de gamme, avec une nouvelle interface graphique conviviale. Cette première mouture, connue durant son développement sous le nom de code « Chicago » et sortie sous le nom de Windows 95, a connu plusieurs évolutions, dont Windows 98 et ME (Millennium Edition), qui ont permis de confirmer la popularité des systèmes d'exploitation de Microsoft. Ces différentes versions ont souffert d'une réputation d'instabilité et de vulnérabilité aux attaques par les réseaux. Le passage à la famille NT pour les versions grand public a eu lieu avec Windows XP, plus stable et moins vulnérable.

Branche Windows NT

Noms de codes connus entre parenthèses Windows NT
- Windows NT 3.1 : Août 1993
- Windows NT 3.5 (Daytona) : Septembre 1994
- Windows NT 3.51 : Juin 1995
- Windows NT 4.0 (Cairo) : Août 1996
- Windows 2000 : Février 2000
- Windows 2000 SP1 : Août 2000
- Windows 2000 SP2 : Mai 2001
- Windows XP (Whistler, né de la fusion du projet grand public Neptune et du projet professionnel Odyssey) : Octobre 2001
- Windows 2000 SP3 : Juillet 2002
- Windows XP SP1 : Septembre 2002
- Windows Server 2003 : Mai 2003
- Windows 2000 SP4 : Juillet 2003
- Windows XP Starter Edition : Août 2004
- Windows XP SP2 : Août 2004
- Windows XP Home Edition N : Avril 2005
- Windows XP 64 : Avril 2005
- Windows Vista (Longhorn) : Attendu le 28 juin 2006
- Windows XP SP3 : Sortie attendu après Windows Vista La branche NT (Nouvelle Technologie), est une famille de systèmes d'exploitation 32-bits. On y réfère souvent sous l'appellation « Win32 ». Elle serait inspirée de VAX VMS et d'Unix, conçue à l'origine pour les processeurs Intel 386, MIPS, Compaq Alpha et Motorola PowerPC. Elle permet le multitâche préemptif, le multithreading, un modèle d'exécution séparée (chaque processus possède une zone de mémoire séparée, sans accès à celle des autres processus). Une anecdote existe sur le nom, VMS => V+1 M+1 S+1 => WNT. Elle dérive également de OS/2, et est née du divorce de Microsoft et d'IBM sur les systèmes d'exploitation pour PC. Détail piquant : le code de NT est issu d'un travail financé par IBM qui était le portage d'OS/2 vers l'architecture RS/6000 (PowerPC), abandonné quinze jours après sa mise sur le marché. Elle n'est pas fondée sur MS-DOS, ce qui la rendait à l'origine incompatible avec les jeux et applications spécifiques DOS. Elle était principalement destinée aux serveurs et aux stations de travail professionnelles, bien que son interface soit semblable aux versions grand public de Windows. Sa disponibilité pour le grand public à eu lieu avec la sortie de Windows XP, première version familiale à être fondée sur cette branche unifiée après le succès de Windows 2000 dans sa version professionnelle. Voici l'évolution des systèmes d'exploitation de Microsoft: Image:Winhistorique.JPG

Le futur de Windows

La prochaine évolution, Windows Vista, ne devrait pas sortir avant l'été 2006. Il apportera de grandes nouveautés, comme le très critiqué NGSCB (Next Generation Secure Computing Base), anciennement connu sous le nom de code Palladium. Microsoft a annoncé au WinHEC 2005, ou Windows Hardware Engineers Conference 2005, avoir repris le développement de Windows Vista sur la base de Windows Server 2003, auquel auraient été ajoutées les fonctions principales de Windows XP Service Pack 2 avant de reprendre le développement officiel. Ces versions sont estampillées selon la série 5000 (5xxx). La branche Pré-Beta 1 forme la série 50xx, le développement de la Beta 1 la série 51xx, et post-Beta 1, la série 52xx, dont la fameuse build 5203 (possiblement fausse). Le premier signe de ce changement majeur est la build 5048, également distribuée au WinHEC 2005. Une des fonctionnalités les plus attendues était le nouveau service de recherche, WinFS. Ce service, anciennement désigné comme un nouveau système de fichiers, sera en fait une surcouche pour NTFS. Ce service de Windows Vista est basé sur un véritable moteur de base de données en plus du traditionnel NTFS. Il ne sera cependant pas disponible immédiatement et sera l'objet d'une mise à jour ultérieure. Une autre version est également en projet très préliminaire, au nom de code Blackcomb, qui serait, selon certaines sources, le successeur de Windows Vista.

Branche Windows CE


- Windows CE 1 : Novembre 1996
- Windows CE 2 : Novembre 1997
- Windows CE 2.1 : Juillet 1998
- Windows CE 3 : 1999
- Windows CE .NET
- Pocket PC 2000
- Pocket PC 2002
- Pocket PC 2003 Cherchant à s'imposer sur le marché en pleine croissance des assistants personnels (PDA), Microsoft a développé une version légère de son système d'exploitation et s'est associé aux grands constructeurs d'ordinateurs personnels pour pénétrer ce marché jusque là dominé par Palm. Les produits exploitant ce type de plateforme sont appelés Pocket PC. Adapté aux contraintes de ces machines (affichage, mémoire), Windows CE présente une interface similaire à celle de systèmes d'exploitation pour PC bien que son noyau soit différent. Avec la sophistication croissante des appareils ménagers, le but avoué de Microsoft est d'installer Windows CE (ou une version ultérieure) sur tous les appareils de la maison, créant ainsi un univers domotique intégré. Des versions de Windows CE sont d'ores et déjà disponibles pour les téléphones portables. Depuis 2003, l'appellation Pocket PC a été remplacée par Windows Mobile. Il existe donc Windows Mobile 2003 pour Pocket PC et Windows Mobile 2003 pour SmartPhone.

Système de fichiers

Le système de fichiers FAT (ou FAT32) est utilisé dans la branche 9x, hérité de MS-DOS. C'est avec l'introduction de NTFS depuis Windows NT que Windows s'est doté d'un système de fichiers plus moderne (avec la journalisation des métadonnées, le support de plusieurs streams par fichier, etc.).

Systèmes non distribués par Microsoft

Certains autres systèmes assurent une compatibilité plus ou moins complète avec Windows :
- DR-DOS de Digital Research (DRI), racheté par Novell et commercialisé par la suite sous le nom de Novell DOS, est un système d'exploitation compatible avec Windows 3, 3.1 et 95.
- FreeDOS est un système d'exploitation compatible avec Windows 3, 3.1 et 95.
- ReactOS est un système d'exploitation en développement visant à être compatible avec NT 4.
- WINE est un ensemble de bibliothèques permettant d'exécuter certains logiciels conçus pour Windows sur les systèmes Unix.

Un système d'exploitation controversé

Au cours des années 1990, en particulier avec la version 95, Windows s'est acquis le quasi-monopole du marché des systèmes d'exploitation et des applications bureautiques pour PC. Il est actuellement installé dans plus de 90% des ordinateurs personnels. La plupart des ordinateurs vendus ont un système Windows préinstallé par le manufacturier (licence OEM). En conséquence de son monopole et des pratiques commerciales controversées de Microsoft, Windows est un produit très critiqué. Il est notamment reproché à ce système son instabilité (voir les «écrans bleus») et sa vulnérabilité. Pourtant, sa popularité n'a jamais été menacée. En janvier 2004, le commissaire européen à la concurrence Mario Monti a ordonné à Microsoft de remédier à la fourniture systématique de son lecteur multimédia Windows Media Player dans Windows XP. Pour contourner l'interdiction, Microsoft a mis en vente Windows Limited Media Edition au même prix que la version normale avec WMP. Cette décision n'a pas plu à la Commission, qui envisage de recondamner Microsoft. Pour éviter ce retour devant les tribunaux, la firme de Redmond à proposé de fournir un CD-ROM contenant des logiciels concurrents. Certains considèrent que sa position dominante sur le marché des particuliers est due à la volonté présumée de Microsoft de le rendre incompatible avec les autres systèmes d'exploitation (notamment en ne respectant que très peu les normes permettant l'interopérabilité entre programmes) et au fait qu'il est le plus souvent fourni avec les ordinateurs à l'achat. Le quasi-monopole de Microsoft dans le domaine des systèmes d'exploitation pour PC oblige les développeurs d'applications à offrir leur logiciel pour la plateforme Windows, car c'est le moyen le plus sûr de toucher de nombreux clients, ce qui renforce d'autant sa situation dominante. Ainsi une personne qui désirerait changer de système d'exploitation ne pourrait conserver ses anciens programmes. De plus, il est difficile pour un programmeur de porter son programme fait pour Windows vers un autre système d'exploitation. Il existe pour remédier à ces problèmes des bibliothèques facilitant la portabilité (OpenGL, Qt, SDL…). D'autres bibliothèques permettent de faire fonctionner des applications Windows (Win32) sur des systèmes de type Unix (comme GNU/Linux ou FreeBSD), par exemple WINE. l'utilisation de ces bibliothèques se font de manière transparentes pour l'utilisateur.

Logiciels livrés avec Windows


- Explorateur : gestionnaire de fichiers, qui est maintenant confondu avec Microsoft Internet Explorer, le navigateur Web livré par défaut avec Windows.
- Notepad, éditeur de texte simple.
- Wordpad, traitement de texte sommaire.
- Paint, programme de dessin simple livré avec Microsoft Windows. Dans de précédentes versions, il y avait une version allégée de ZSoft Paintbrush
- Windows Media Player, lecteur de fichiers audio et vidéo - Absence de ce logiciel dans les versions Windows XP N
- Outlook Express, gestionnaire de courrier par défaut de Windows
- Windows Messenger, logiciel de messagerie instantanée de Windows, version allégée de MSN Messenger
- Windows Movie Maker, éditeur vidéo simplifié de Windows
- La Calculatrice, permet de faire des calculs basiques avec Windows
- Démineur, jeux de cartes (Solitaire, FreeCell, Dame de pique), de plateau (Dames sur Internet, Reversi)

Liens externes


- [http://www.microsoft.com/france/windows Le site web officiel de Windows]
- [http://members.fortunecity.com/pcmuseum/windows.htm L'histoire de Windows] avec photos d'écran des différentes versions (en anglais).
- [http://www.levenez.com/windows/ Windows History] une ligne du temps reprenant les différentes versions de Windows (en anglais)
- [http://www2.aful.org/sections/wikis/detaxe/PageAccueil Le Groupe Detaxe qui lutte contre la vente forcée de Windows sous contrat OEM et l'abusivité du procédé]
- [http://www.malekal.com Site d'aide pour Windows] - Site d'aide pour Windows Catégorie:Microsoft Windows Catégorie:Système d'exploitation Catégorie:Progiciel ja:Microsoft Windows ko:마이크로소프트 윈도우즈 ms:Microsoft Windows simple:Microsoft Windows th:ไมโครซอฟท์วินโดวส์ zh-min-nan:Microsoft Windows

Compatible PC

Catégorie:Ordinateur personnel Le terme compatible PC, ou simplement le sigle PC, est généralement utilisé en français pour faire référence aux ordinateurs compatibles avec l’IBM PC (PC pour Personal Computer littéralement « ordinateur personnel ») produit par IBM en 1981. On utilise alors le sigle PC par opposition aux autres ordinateurs personnels qui ne sont pas compatibles avec ce premier PC : Macintosh, Amiga, Commodore 64, Sinclair, Tandy, etc. Ainsi, la catégorie des ordinateurs personnels nommés PC n’est qu’un sous-ensemble des ordinateurs personnels. Les PC sont construits sur l'architecture de microprocesseur x86 d'Intel (aussi développé par NEC au début, puis Cyrix et AMD ensuite). On parle aussi depuis la fin des années 1990 de la plate-forme WinTel pour faire référence à Windows et Intel, les deux acteurs les plus importants du marché des PC depuis cette époque. Cette appellation PC est utilisée même en France, pays où pourtant le PC d’IBM avait été lancé (presque deux ans après sa sortie mondiale de 1981, en raison du volume de traduction à effectuer, puis des corrections nombreuses à y apporter) sous le nom dOrdinateur personnel et non pas de Personal Computer.

Historique

À l’origine,
PC était le nom donné par IBM aux premiers micro-ordinateurs qu’elle commercialisa dès 1981 :
- En 1981 : l’IBM PC/G animé par le processeur Intel 8088 (variante meilleur marché du 8086) fréquence d'horloge 4,7 MHz. L'équipement de démarrage et de stockage était composé de 1 à 2 lecteurs 360 Ko sur disque souple 5" 1/4.
- En 1982 : l’IBM PC/XT qui se voyait adjoindre en équipement de série un disque dur de 10 Mo et une
carte de communication RS232. L'équipement d'archivage était composé de 1 à 2 lecteurs 360 Ko sur disque souple 5" 1/4.
- En 1983 : l’IBM PC/AT avec le processeur Intel 80286. L'équipement d'archivage était composé de 1 à 2 lecteurs 360 Ko ou 1,2 Mo sur disque souple 5" 1/4. Pour des raisons de vitesse de développement, mais aussi de demande du marché pour des
secondes sources, IBM avait préféré créer son PC en assemblant des composants standards de constructeurs différents, plutôt que créer les siens comme le faisaient ses concurrents et, comme il le faisait pour ses autres ordinateurs. Le listing du BIOS étant publié, il devenait très facile de cloner l’IBM PC : il suffisait en effet d’acheter les composants aux mêmes fabricants puis de recopier (avec quelque différence) la mémoire morte (ROM) du BIOS pour obtenir un micro-ordinateur dit « compatible PC ». À terme, IBM ayant perdu tout pouvoir d’influence sur les compatibles PC, on les a plus simplement appelés PC, et c’est un document publié chaque année par Intel et Microsoft qui définit quelle machine, selon les critères de cette année-là, est ou n’est déjà plus un PC (si ce que vous croyez être un de vos PC n’a pas de prises USB, par exemple, ce n’est stricto sensu plus un PC au sens d’Intel et Microsoft). Bref, le standard a simplement changé de propriétaire. À l’origine, le système d'exploitation livré avec ces premières machines était soit :
- PC-DOS (Microsoft commercialisant, lui, le MS-DOS qui désignait juste deux fichiers vitaux sous un nom différent : IBM.SYS devenait MSDOS.SYS et IBMIO.SYS devenait IO.SYS),
- CP/M 86 de Digital Research
- le PC/IX, clone lent et sans protections mémoire hardware d’UNIX, vite abandonné. En 1987, IBM tenta de changer cette architecture en créant les modèles IBM PS/2 munis d’un nouveau bus plus rapide (ouverts, mais cette fois-ci contre paiement d’une licence), et fonctionnant soit sous DOS, soit avec son système d’exploitation OS/2. Le matériel restant toutefois très proche des PC, les PS/2 pouvaient fonctionner avec d’autres systèmes d’exploitation. Mais l’architecture PC avait déjà créé un
standard de fait, car elle avait été copiée par un grand nombre de constructeurs, et même améliorée sur quelques points (carte graphiques Hercules et Ericsson). Seuls furent donc conservés du PS/2 par les autres constructeurs :
- Les résolutions d’écran VGA et XGA (bien qu’elles fussent très lentes sur un bus AT, rebaptisé en l’occurrence ISA)
- Les disquettes 3,5 pouces 1,44 Mo, bien que Compaq n’y soit pas favorable et l’ait fait savoir.
- Le standard de connexion du clavier et de la souris (mini-Din 9 broches, connu sous le nom de port PS/2) par opposition aux souris sur port série et aux claviers avec port « AT » (prise DIN standard). Le bus devait toutefois être changé pour supporter de façon acceptable les nouvelles résolutions d’écran. On essaya tour a tour le
VESA local bus, l’EISA, le PCI, qui fut un succès, l’AGP, et enfin le PCI Express.

Aujourd’hui

La grande force de l’architecture PC est que la concurrence joue à tous les niveaux : on peut choisir la marque du microprocesseur, de la carte mère, de la carte vidéo, la compatibilité entre les composants étant assurée.
- À l’inverse, les ordinateurs Macintosh sont ceux vendus par la société Apple Computer, cette firme ayant résilié en 1997 les licences de son système d’exploitation concédées aux autres constructeurs.
On parle parfois de « la plate-forme Wintel », pour un ordinateur fonctionnant avec un microprocesseur de la famille x86/Pentium d’Intel et utilisant un système d’exploitation Windows de chez Microsoft. Le terme PC désigne bien le matériel, mais la confusion entre PC et PC/Windows est restée très courante. Les nouvelles versions des distributions GNU/Linux avec leurs Mozilla et OpenOffice bien rodés pourraient changer la donne pour une partie des postes de travail.
- Intel n’est pas le seul à fournir des microprocesseurs pour PC : AMD, Via et Transmeta produisent des microprocesseurs compatibles fonctionnellement (mais pas en brochage) avec ceux de la famille x86/Pentium.
- Au milieu des années 1990, le fondeur (fabricant de puces électroniques) Cyrix proposait également des processeurs pour PC, mais ne s’est pas intéressé à l’implémentation d'un coprocesseur de calcul en virgule flottante (avec raison, techniquement, car même des produits graphiques comme Corel Draw n’en faisaient nul usage). Sur le plan marketing, toutefois, cette lacune torpilla ses produits face au 80486 qui en était équipé en standard.
- La principale alternative aux PC est l’ordinateur Macintosh (ou Mac) de la société Apple Computer.
- Les principaux concurrents de Windows (en tant que système d’exploitation) sur architecture i386 sont GNU/Linux, FreeBSD et Solaris.
- Les principaux concurrents de Windows (en tant qu’interface graphique) sont KDE et GNOME, tous deux inclus dans les distributions GNU/Linux.

Logiciel

Du point de vue de l’utilisateur, l’architecture de l'ordinateur ou même le système d'exploitation importent peu : ce sont les
applications qui sont vues par les utilisateurs. Les interfaces graphiques proprement dites ne diffèrent pas beaucoup.
- Si un PC/Windows et un PC/Linux sont tout à fait différents en coulisse, cela ne se ressent en rien quand on utilise OpenOffice ou Mozilla
- un PC/Linux et un Mac/Linux seront presque indiscernables.
- Certains systèmes d’exploitation ont des couches de compatibilités : par exemple, GNU/Linux et FreeBSD sont très proches (bien que Linux ne soit pas toujours très compatible avec lui-même selon les distributions!). Mac OS X est également assez compatible avec ces deux derniers systèmes. La compatibilité vient de leur base POSIX, mais celle-ci n’a pas plus d’importance pour l’utilisateur que le fait qu’un même vilebrequin soit commun à deux modèles de voitures.
- Il n’existe aucun système d’exploitation compatible avec Windows, les fichiers sources de Microsoft étant tenus secrets. L'environnement Wine sous Linux propose toutes les API documentées de Windows, mais les produits applicatifs de Microsoft utilisent aussi des
astuces non documentées que Wine ne propose pas encore.

Anecdotes

Pourquoi le clavier français a-t-il une touche µ ?

Le responsable marketing du produit
Ordinateur personnel en France, Marcel Boulogne, refusa de donner un avis favorable au lancement du produit tant que le clavier n’en comprendrait pas non seulement les touches muettes (^ et ¨), mais également la touche µ. Son idée était que le PC remplacerait rapidement les machines à écrire et qu’il ne voulait pas voir se reproduire la doléance universelle de ne pas pouvoir désigner certaines unités de mesure : microseconde (µs), microfarad (µF), micromètre (µm). La solution habituellement adoptée d’écrire us, uF et u lui paraissait un inacceptable bricolage. Il escalada sa demande au terme d’un véritable bras de fer, et eut en fin de compte gain de cause : le µ fut inclus dans la page de codes du PC, et porté sur son clavier. Toutefois une place devait être choisie pour cette touche, et donc un caractère reporté dans les incommodes Alt-Ctrl (dispositif utilisé avant l’ajout de la touche AltGr). Ce fut le « \ » totalement inutilisé en DOS 1 qui semblait trop peu utilisé pour mériter une place au premier rang. Ce fut hélas le caractère choisi par Microsoft pour indiquer les séparateurs de répertoires dans le DOS 2, qui admettait les hiérarchies de répertoires.

Voir aussi

[ PC/G et PC/XT | ordinateur personnel | ordinateur | Microsoft Windows | Intel | AMD | Linux | Informatique ] ja:PC/AT互換機

Bytecode

Le bytecode est un code intermédiaire plus abstrait que le code machine non directement executable. Il est contenu dans un fichier binaire qui représente un programme ,tout comme un fichier objet produit par un compilateur. Il est appelé bytecode du fait de son format ou chaque instruction est codeée sur un byte, parfois suivi d'un nombre variable de paramètres comme des registres ou des adresses mémoire. Puisque c'est un code qui n'est pas exécutable directement par un processeur, il est utilisé par les créateurs de langages de programmation comme un code intermédiaire réduisant la dépendance avec le matériel et faciltant son interprétation sur plusieurs architectures. Certains compilateurs utilisent le bytecode comme représentation intermédiaire. Certains systèmes, appelés traducteurs dynamiques, ou compilateurs "JIT (just-in-time)", traduisent le bytecode en code machine juste avant l'exécution, afin d'en augmenter la vitesse. Un programme à base de bytecode est exécuté par un interpréteur appelé machine virtuelle, du fait qu'il s'agit d'un programme qui exécute le code tout comme un microprocesseur. L'avantage est la portabilité : le même bytecode peut etre exécuté sur diverses plate-formes ou architectures pour laquelle un interpréteur existe. Un programme sous forme de bytecode peut donc etre transmis d'une machine à une autre et être exécuté sans modification par la machine receptrice quelle que soit sa plate-forme. L'avantage est le même que pour les scripts, qui sont directement interprétés (et non compilés en bytecode). Cependant, le bytecode est moins abtrait, plus compact et plus facile a manipuler qu'un script, prevu, lui, pour être humainement intelligible. De ce fait les performances des interpréteurs de bytecode sont généralement bien meilleures que celles des interpréteurs de scripts. Pour bénéficier de ces avantages, aujourd'hui de nombreux langages interprétés sont en fait compilés en bytecode avant d'être exécutés par un interpréteur. C'est le cas par exemple de Perl, PHP et de Python. Un programme Java est typiquement transmis sous forme de bytecode a une machine hôte qui utilisera um compilateur JIT pour traduire le bytecode en code machine avant exécution. L'implémentation actuelle de Ruby n'utilise pas de bytecode, mais une structure en arbre qui se rapproche de la représentation intermédiaire des compilateurs. Les p-Codes diffèrent des bytecodes par le codage de leurs opérations, qui peut être de plusieurs bytes avec une taille variable, tout comme les opcodes de nombreux processeurs. Ils ont un plus haut niveau descriptif, comme "afficher cette chaine de caracteres" ou encore "effacer l'ecran". Le basic et quelques version de Pascal (langage) utilisent un p-Code.

Exemples


- O-code de BCPL
- CLISP, une implantation de Common Lisp, ne compile qu'en bytecode
- CMUCL, une implantation de Common Lisp, peut compiler en bytecode ou en code natif ; le code natif est bien plus compact
- OCaml peut compiler un bytecode compact
- Microsoft .NET Common Intermediate Language, executé par le Common Language Runtime (CLR)
- java de Sun Microsystems. ja:バイトコード

Java (langage)

left Java est une technologie composée d'un langage de programmation orienté objet et d'un environnement d'exécution. Préalablement nommé Oak, il a été créé par James Gosling et Patrick Naughton chez Sun Microsystems avec le soutien de Bill Joy.
Le langage Java fut officiellement présenté le 23 mai 1995 au SunWorld.

Concepts de Base

Le système Java est basé sur le langage Java, la machine virtuelle Java et l'API Java (ces deux derniers composants forment l'environnement d'exécution, ou JRE, pour Java Runtime Environment). Quatre buts primaires présidaient la création du langage Java. Il devait :
- Être orienté objet ;
- Être indépendant de la plate-forme du client ;
- Contenir des aides et des bibliothèques pour le réseau informatique;
- Avoir la capacité d'exécuter du code de source extérieure de façon sécurisée. Java est habituellement compilé vers une machine virtuelle standardisée, sous forme de bytecode. Cette machine peut fonctionner avec un interpréteur, un compilateur just-in-time (à la volée), ou, le plus couramment, avec un mélange des deux. Il existe des variantes de ce schéma :
- permettant de compiler le langage Java nativement, c’est-à-dire de produire un exécutable capable de fonctionner hors de l'environnement Java, et même de produire un exécutable capable de fonctionner dans l'environnement CLR de Microsoft .NET, grâce à la variante J# de Java, créée par Microsoft.
- permettant de produire un exécutable Java à partir d'autres langages, comme Python à l'aide du compilateur Jython, ou encore Groovy.

Un langage orienté objet

La première caractéristique, l'orienté objet, réfère à une méthode moderne de programmation et de conception de langage. Sa principale caractéristique est de rassembler (encapsuler) en une seule entité logique (Classe) un ensemble de données (Propriétés) et les fonctions qui les traitent (Méthodes). Le code devient ainsi plus facilement réutilisable, car il est intrinsèquement modulaire. D'autres mécanismes tels l' héritage permettent d'exploiter toutes les caractéristiques d'une Classe précédemment écrite (la plupart du temps par quelqu'un d'autre) dans ses propres programmes sans même avoir à en connaître le fonctionnement interne, on en voit que linterface (les principales commandes). Ce paradigme de programmation vise à rendre les grands projets logiciels plus faciles à gérer, à améliorer la qualité des logiciels et à réduire le nombre d'échecs de projet. Dans la version 1.5 du langage ont été rajouté les génériques, un mécanisme de polymorphisme semblable (mais différent) aux templates du langage C++ ou aux foncteurs d'Objective Caml. Les génériques permettent d'exprimer d'une façon plus simple et plus sûre les propriétés d'objets comme des conteneurs (listes, arbres..) : le type liste est alors considéré génériquement par rapport au type d'objet contenu dans la liste.

Indépendance face à la plate-forme

La seconde caractéristique du langage, l'indépendance vis-à-vis de la plate-forme, signifie que les programmes écrits en Java peuvent fonctionner sur divers types de matériel informatique sans réécriture, selon le slogan
write once, run anywhere (écrire le programme une seule fois, et le faire fonctionner sur n'importe quel ordinateur). Ceci est permis en compilant le code source d'un programme Java dans un pseudo-code intermédiaire appelé bytecode Java -- des instructions machine standardisées et destinées à un processeur virtuel. Le code est par la suite exécuté par une implémentation de cette machine virtuelle (JVM), un programme écrit en code natif sur le matériel cible qui traduit le pseudo-code Java en code utilisable pour le matériel concerné. De plus, des bibliothèques sont offertes pour fournir l'accès à des fonctionnalités propres à la machine cible -- comme le graphisme ou le réseau -- d'une manière unifiée. Le langage Java offre aussi le support des programmes avec plusieurs processus légers (threads). La première implémentation du langage utilisait une machine virtuelle pour offrir la portabilité, et plusieurs implémentations le font encore. Ces dernières produisent des programmes qui fonctionnent plus lentement que les programmes compilés nativement, comme ceux écrits en C. Cette situation a conféré une réputation de lenteur aux programmes Java. Toutefois, des implémentations plus récentes de la machine virtuelle Java produisent des programmes qui s'exécutent beaucoup plus vite grâce à l'utilisation de diverses techniques. La première technique consiste à compiler directement en code natif, comme les compilateurs traditionnels, sans passer par le pseudo-code. Cette méthode permet une meilleure performance, mais au prix de la portabilité (cf. GCJ). Une autre technique, la compilation à la volée (just-in-time ou JIT), compile le pseudo-code Java en code natif à l'exécution du programme. Les machine virtuelles plus sophistiquées utilisent également la recompilation dynamique, qui permet à la machine d'analyser le comportement du programme et de recompiler et d'optimiser les parties critiques. Ces deux techniques permettent à l'application de prendre avantage de la vitesse d'exécution du code natif tout en conservant la portabilité. La portabilité est un but techniquement difficile à atteindre, et le succès de Java à ce but est sujet à controverse. Même s'il est en effet possible d'écrire des programmes pour les machines virtuelles Java qui se comportent de façon cohérente sur différentes plates-formes, le grand nombre de plates-formes avec des petites erreurs ou incohérences a mené à une parodie du slogan de Sun Write once, run anywhere (écrire une fois, exécuter n'importe où) en Write once, debug everywhere (écrire une fois, déboguer partout).
Les machines virtuelles développées sous licence par Microsoft ne sont pas étrangères à cette réputation. En effet,
l'éditeur de Redmond avait singulièrement 'adapté' ses machines virtuelles à ses besoins propres. Il a été condamné à cesser l'exploitation de la licence et à retirer les machines virtuelles non conformes de ses produits.

Exécution sécurisée de code distant

La plate-forme Java fut l'un des premiers systèmes à offrir le support de l'exécution du code à partir de sources distantes. Une applet peut fonctionner dans le navigateur Web d'un utilisateur, exécutant du code téléchargé d'un serveur HTTP. Le code d'une applet fonctionne dans un espace très restrictif, ce qui protège l'utilisateur des codes erronés ou mal intentionnés. Cet espace est délimité par un objet appelé gestionnaire de sécurité. Un tel objet existe aussi pour du code local, mais il est alors par défaut inactif. Le gestionnaire de sécurité (la classe SecurityManager) permet de définir un certain nombre d'autorisations d'utilisation des ressources du système local (système de fichiers, réseau, propriétés système,...). Une autorisation définit # un code accesseur (typiquement, une applet - éventuellement signée - envoyée depuis un serveur web); # une ressource locale concernée (par exemple un répertoire); # un ensemble de doits (par exemple lire/écrire). Les éditeurs d'applet peuvent demander un certificat pour leur permettre de signer numériquement une applet comme sûre, leur donnant ainsi potentiellement (moyennant l'autorisation adéquate) la permission de sortir de l'espace restrictif et d'accéder aux ressources du système local.

Mécanisme du ramasse-miettes (Garbage Collection)

Dans les langages tels que C la gestion de la mémoire se fait manuellement. La mémoire y est assignée par le programmeur pour créer des objets et celui-ci doit la libérer pour supprimer l'objet. Si le programmeur oublie de désaffecter cette mémoire, le programme va consommer de plus en plus de mémoire (fuites de mémoire ou Memory leak) et ne sera pas libérée après l'exécution du programme. Des problèmes d'instabilité peuvent également survenir si l'on libère deux fois une affectation en mémoire. Dans Java, ce problème potentiel est évité par le ramasse-miettes (Garbage Collection). Lorsqu'un objet est crée en Java, la référence de cet objet est gardée en mémoire. Lorsque l'objet n'est plus référencé nul part dans le programme et que le ramasse-miettes le juge approprié, il va détruire l'objet et libérer la mémoire qui lui avait été affecté. Par ce mécanisme, on évite des fuites de mémoire. Ce mécanisme fonctionne seulement si les références à l'objet sont détruites. Donc, si l'on garde des références à un objet qui n'est plus utilisé, la mémoire ne sera pas libérée. Mais globalement la gestion de la mémoire est plus simple et plus sûre que dans C.

Le langage

Voici un exemple d'un programme
Hello world typique écrit en Java : public class HelloWorld Le fichier source doit s'appeler HelloWorld.java. Vous pouvez le tester avec les commandes suivantes (sous Linux) : javac HelloWorld.java CLASSPATH=. java HelloWorld Le prefixe « CLASSPATH=. » est nécessaire pour indiquer à Java qu'il doit également chercher les programmes class dans le répertoire courant.

Mots réservés, primitifs et littéraux

abstract else instanceof strictfp while boolean false assert (JDK 1.4) enum (JDK 1.5) interface super byte null break extends native switch char true case final new synchronized double catch finally package this float class for private throw int const (Non utilisé) goto (Non utilisé) protected throws long continue if public transient short default implements return try void do import static volatile

Structures de contrôle

Boucles

Structure
tant que : while () Structure faire... tant que : do while (); Structure pour : for ( ; ; ) Structure pour (java 1.5): for(<Objet récupérant l'occurance suivante de la collection> : <Collection d'objets>)

Structures conditionnelles

Structure
si : condition simple if () Structure si... sinon : condition avec alternative unique if () else Structure si... ou si... ou si... : condition avec alternatives multiples if () else if () else if () else Structure cas x... cas y... " : embranchement vers une condition énumérée switch () La commande break sort immédiatement la boucle en cours (for, while, do), et permet de sortir d'une clause contenue dans un switch. Une expression continue termine l'itération en cours et continue à la prochaine. Elle s'écrit comme suit : continue L'énoncé return termine une méthode. Avec return uneValeur, uneValeur sera renvoyée à la méthode appelante.

Traitement des exceptions

try catch ( ) [...] finally Le bloc de code "finally" sera exécuté quel que soit le résultat lorsque le programme sortira du bloc "try-catch". Voici un exemple de capture d'une exception: FileOutputStream fos ; try catch (IOException e) finally Cet exemple permet d'illustrer le mécanisme des exceptions en Java. Dans le cas d'une erreur d'entrée/sortie dans le bloc "try", l'exécution reprend dans le bloc "catch" correspondant à cette situation (exception de type "IOException"). Dans ce bloc "catch", la variable "e" référence l'exception qui s'est produite. Ici, nous invoquons la méthode "printStackTrace()" qui affiche dans la console des informations sur l'exception qui s'est produite : nom, motif, état de la pile d'appels au moment de la levée de l'exception et, éventuellement, numéro de ligne auquel l'erreur s'est produite. Le bloc finally est ensuite exécuté (ici pour refermer les resources utilisées). Il ne s'agit ici que d'un exemple, l'action à mettre en œuvre lorsqu'une exception survient dépend du fonctionnement général de l'application et de la nature de l'exception.

Versions

Java est une marque déposée de Sun Microsystems. Kits de développement Java (Java development kit ou JDK) publiés par Sun, utilisables gratuitement :
- JDK 1.0, 1996
- JDK 1.1, 1997
- JDK 1.2, 1998 dite Java 2
- JDK 1.3, 2000
- JDK 1.4, 2002
- JDK 1.5, 2004 dite Java 5.0 (nom de code Tiger) Le langage est stable depuis le JDK 1.0; les bibliothèques de classes fournies se sont agrandies et ont changé en partie. À partir de la version 1.2, les JDK ont été renommés en J2SDK (Java 2 Software Development Kit, kit de développement de logiciels Java 2) et on appelle souvent ces versions Java 2. Du fait de l'accroissement des bibliothèques et des changements entre version, la compatibilité est assurée dans un seul sens : les programmes Java compilés avec une version antérieure du JDK (par exemple 1.2) continueront à fonctionner avec un JRE plus récent (par exemple 1.5), mais le contraire n'est pas vrai. Ceci contribue à remettre aussi en question la slogan de Sun Write once, run anywhere (écrire une fois, exécuter n'importe où) du fait de l'hétérogénéité des versions de Java déployées dans le monde.

Frameworks et API

Sun fournit un grand nombre de frameworks et d'API afin de permettre l'utilisation de Java pour des usages très diversifiés. On distingue essentiellement 4 grands frameworks :
- J2SE : Ce framework est destiné aux applications pour poste de travail.
- J2EE : Ce framework est spécialisé dans les applications serveurs. Il contient pour ce faire un grand nombre d'API et d'extensions.
- J2ME : Ce framework est spécialisé dans les applications mobiles.
- JavaCard : Ce framework est spécialisé dans les applications liées aux cartes à puces et autres SmartCards On trouve toutefois de nombreuses autres technologies, API et extensions optionnelles pour Java :
- JavaMedia : Framework multimédia, contenant notamment les API Java2D, Java3D, JavaSound, Java advanced Imaging
- Java Telephony
- Java TV
- JXTA : Système de peer-to-peer reposant sur Java
- Jini
- Jiro
- JAIN
- JDMK
- JavaSpeech
- JMI
- JavaSpaces
- Java Telematics

Version interprétée

Il y a une version interprétée de Java appelée beanshell, qui peut être utilisée comme un langage de script shell. L'interpréteur peut aussi être embarqué dans une application Java pour la rendre scriptable.

Appellation

Oak ("Chêne") est le nom qui est donné à Java dans un premier temps. Mais comme celui-ci est déjà utilisé on lui donne le nom de Java en l'honneur du nom argotique (en amérique du Nord) du breuvage le plus consommé par les programmeurs, c'est-à-dire le café, dont une partie de la production vient de l'île de Java. On peut remarquer que si l'on décalle d'une lettre chaque consonne on obtient kawa qui est aussi un nom argotique pour café !

Programmation

La programmation peut se faire pour des exemples simples avec le compilateur javac, mais pour avoir plus de confort il est préférable d'utiliser un environnement de développement intégré ou IDE, certains sont gratuits.
- Environnements existants
  - [http://www.bluej.org BlueJ]
  - Eclipse
  - [http://www.jetbrains.com/idea/ Idea]
  - [http://www.borland.com/jbuilder/ JBuilder]
  - [http://www.jcreator.com JCreator]
  - NetBeans
  - [http://www.oracle.com/technology/products/jdev/index.html jDeveloper]

Approfondissement : tout n'est pas objet en Java

Java n’est pas un langage totalement objet pour plusieurs raisons :
- Tout n’est pas objet en Java; on retrouve entre autres des types primitifs qui ne sont pas des objets (int, double, etc.), même si depuis J2SE 5.0, l'autoboxing rend interchangeables les types primitifs et leurs wrappers.
- Une classe n'est pas un objet (seulement en apparence). Toutes les classes en Java héritent d’Object, sauf Object. Les classes sont manipulées comme des objets en Java. Elles peuvent être passées en paramètre, etc. Toutefois, les classes ont un traitement spécifique dans la machine virtuelle.
- Il est impossible de redéfinir ou modifier la métaclasse Class.
- L’introspection est la capacité d’un programme de s’observer et de raisonner sur son propre état. L’intercession est la capacité d’un programme de modifier son propre état d’exécution et d’altérer son interprétation ou son sens. Java ne procure qu’une certaine capacité d’introspection. On peut savoir quelle méthode détient une classe, les invoquer, analyser la structure d’un objet, mais il est impossible de modifier la métaclasse Class ou d’ajouter d’autre méta niveaux. Des langages comme Smalltalk et ObjVLisp supportent certaines formes d’intercession : on peut contrôler totalement l’interprétation d’un programme, car le compilateur est lui-même écrit en Smalltalk. On peut également changer l’ordre de recherche des méthodes, etc. On peut changer le comportement des classes en modifiant les métaclasses. Tout ceci est impossible en Java. Ceci peut se comprendre parce que Java est un langage industriel. En Java des objets peuvent transiger par internet, etc. Il est donc important dans ce contexte d’avoir une certaine protection contre d’autres programmes pouvant rouler dans la même machine virtuelle. Il y aussi certaines modifications qui ont été faites pour des fins d’optimisation. Ainsi, il existe des types primitifs qui ne sont pas des objets pour assurer de meilleures performances. En Java, il existe des extensions réflexives pour lui procurer de plus grande capacité réflexive. Par exemple, OpenJava, Javassist, Reflective Java, pour n’en nommer que quelques-uns. On dénote principalement trois approches principales parmi ces extensions : un changement du chargeur de classes (class loader), un préprocesseur de code Java et un changement de la machine virtuelle. On note que l’utilisation d’une machine virtuelle modifiée rend le code non portable vers une machine virtuelle standard. Ces approches permettent d'augmenter les capacités de Java, si cela s’avère nécessaire.

Voir aussi

Articles connexes


- API Java
- Bluejay
- Machine virtuelle Java
- Bytecode Java
- Java et logiciel libre
- Servlet Java
- Navigateur HotJava
- GNU Compiler Collection (inclut un compilateur de code Java vers code natif, GCJ)

Liens externes


- [http://java.sun.com Site Web officiel de Java pour les développeurs]
- [http://www.java.com Site Web officiel de Java pour les utilisateurs]
- [http://www.java.net/ Site collaboratif officiel pour Java], avec un wiki
- [http://java.sun.com/docs/white/langenv/ Document de présentation original de Java]
- [http://www.apache.org/ The Apache Software Foundation] : Organisation regroupant de nombreux projets libres, dont un grand nombre en java. Les plus célèbres de ces projets sont :
  - [http://jakarta.apache.org/tomcat/index.html Tomcat] (Moteur de Servlet)
  - [http://struts.apache.org/ Struts] (Framework de développement JSP/Servlet)
  - [http://ant.apache.org/ Ant] (Ant est un outil de compilation comme Make)
  - [http://maven.apache.org/ Maven] (Maven est un outil de gestion de projet)
- [http://www.eclipse.org/ Eclipse] (un IDE libre développé initialement par IBM et utilisant SWT)
- [http://www.netbeans.org NetBeans] (autre IDE libre)
  - il existe également une [http://fr.netbeans.org/index.html page dédiée aux francophones]
- [http://www.beanshell.org BeanShell] (version interprétée)
- [http://www.jboss.org JBoss] (serveur d'application open source)
- [http://JavaToolbox.com Liste des outils de développement et bibliothèques pour Java] (En)
- [http://www.javafr.com/ JavaFR ] : site de passionnés qui mettent en commun leurs connaissances - [http://www.codes-sources.com/ CodeS-SourceS]
- [http://www.developpez.com/ Developpez.com] : premier site francophone d'entraide entre développeurs - [http://java.developpez.com/ Rubrique Java]

Bibliographie


- Ken Arnold, James Gosling et David Holmes (2001), Le langage Java, ISBN 2-7117-8671-4
- Bruce Eckel, (2002), Thinking in Java, Prentice-Hall, ISBN 0-13-100287-2. [ftp://ftp.irisa.fr/pub/mirrors/Java/index.html version électronique en ligne] [http://penserenjava.free.fr/ traduction francophone : penser en java] Catégorie:Langage de programmation Catégorie:Langage orienté objet
-
ja:Java言語 ko:자바 프로그래밍 언어 th:ภาษาจาวา

Machine virtuelle

Signification originelle

Le sens originel de machine virtuelle est la création de plusieurs environnements d'exécution sur un seul ordinateur, dont chacun émule l 'ordinateur hôte. Cela fournit à chaque utilisateur l'illusion de disposer d'un ordinateur complet alors que chaque machine virtuelle est isolée des autres. Le logiciel hôte qui fournit cette fonctionnalité est souvent dénommé superviseur.
- VM/370 permettait d'avoir plusieurs systèmes d'exploitation simultanés sur le même mainframe. Pour éviter les duplications inutiles de code, on pouvait définir des segments de mémoire partagés de façon invisible (en mode de lecture seule, bien sûr) entre deux de ces systèmes ou plus.
- Windows NT et ses successeurs incorporent une machine virtuelle pour simuler un environnement MS-DOS

Machine virtuelle émulant des systèmes d'exploitation

Le terme de machine virtuelle est maintenant utilisé pour désigner un environnement créé par un émulateur. Celui-ci est un logiciel qui émule un système d'exploitation pour l'utilisateur final. Ce logiciel est un surcouche qui se greffe sur le système d'exploitation natif.

Exemples


- QEMU
- Xen
- VMware permet la virtualisation non seulement d'un PC à architecture Intel/AMD (sur lequel on peut alors utiliser simultanément des Windows et des Linux, éventuellement de plusieurs générations différentes), mais de tous les périphériques d'un réseau : un périphérique distant peut apparaître si on le désire comme local !!

Machine virtuelle parallèle

Plus récemment, le terme de machine virtuelle a été utilisé pour désigner une machine virtuelle parallèle (PVM). Dans ce cas, une machine virtuelle crée un environnement qui semble être un seul ordinateur alors que les ressources de plusieurs ordinateurs sont utilisées.

Exemples


- PVM est une machine virtuelle permettant d'exécuter un programme sur plusieurs o

Machine virtuelle applicative

Dans son second sens, maintenant le plus commun, une machine virtuelle désigne un logiciel ou interpréteur qui isole l'application utilisée par l'utilisateur des spécificités de l'ordinateur, c’est-à-dire de celles de son architecture ou de son système d'exploitation. Cette indirection permet au concepteur d'une application de la rendre disponible sur un grand nombre d'ordinateur sans les contraintes habituelles à la rédaction d'un logiciel portable tournant directement sur l'ordinateur. La technologie JIT permet dans bien des cas à l'application d'avoir des performances comparables à une application native.

Exemples


- La Machine virtuelle Java permet d'exécuter du code Java
- CLR, dans la plateforme .NET
- Parrot

Voir aussi


- Interpréteur
- Virtualisation (informatique) Catégorie:Système d'exploitation Catégorie:Émulation ja:仮想機械

Langage de programmation

ko:프로그래밍 ja:プログラミング La programmation dans le domaine informatique est l'ensemble des activités qui permettent l'écriture des programmes informatiques. C'est une étape importante de la conception de logiciel (voire de matériel, cf. VHDL).

Pratiques


- Algorithmique
- Codage
- Contrôle de version
- Optimisation du code
- Programmation système
- Refactoring
- Test unitaisre

Techniques de programmation


- Programmation impérative
  - Programmation orientée objet
  - Programmation par contrat
- Programmation déclarative
  - Programmation fonctionnelle
  - Programmation logique
  - Programmation par contraintes
- Programmation orientée composant
- Programmation orientée aspect
- Programmation concurrente

Langages de programmation

Les langages de programmation permettent de définir les ensembles d'instructions effectuées par l'ordinateur lors de l'exécution d'un programme. Il existe des milliers de langages de programmation, la plupart d'entre eux étant réservés à des domaines spécialisés. Ils font l'objet de recherches constantes dans les universités et dans l'industrie. Les langages de programmation peuvent être classifiés de nombreuses manières : généraliste/spécialisé, haut niveau/bas niveau, interprété/compilé, avec ou sans gestion de mémoire automatisée, système de gestion d'exceptions, typage fort/typage faible, typage statique/typage dynamique, syntaxe fixe/extensible ; non objet/orienté objet/purement objet, impératif/fonctionnel/déclaratif, fonctionnel pur/impur, etc. Nous incluons ci-dessous une classification sommaire des langages de programmation les plus connus. Il faut garder à l'esprit que de nombreux langages appartiennent simultanément à plusieurs catégories - ils sont dits « multi-paradigmes ». Par exemple, C++ permet la programmation impérative, orientée objet et la programmation générique (à base de classes et de fonctions paramétrées nommées templates). Common Lisp est à la fois impératif, fonctionnel, orienté objet -- et de par son caractère « programmable » (un langage de programmation programmable...), il peut intégrer d'autres « paradigmes » de programmation en son sein (par exemple la programmation logique, ou par contraintes). Ci-dessous, nous listons les langages les plus connus (nous mettons entre parenthèses certains langages dérivés ou les extensions requises).

Langages déclaratifs


- Oz
- Mercury
- Prolog pour PROgrammation LOGique
- Clips Ci-dessous, nous listons les langages spécialisés, c'est-à-dire dont l'utilisation est réservée à des domaines bien spécifiques ; les plus connus sont :

Langages de définition de données


- ASN.1
- DTD SGML
- DTD XML
- XML Schéma
- Relax NG

Langages spécialisés pour la communication avec une base de données


- 4GL

Langages de manipulation de chaînes de caractères


- SNOBOL StriNg Oriented symBOlic Language (Langage Symbolique Orienté Chaînes de Caractères)
- awk
- Perl
- sed

Langages spécialisés Web


- Exécution par le serveur HTTP (côté serveur) :
  - ASP
  - JSP (issu de Java, basé sur des Servlets)
  - PHP
  - XSP (issu de XML, soutenu par Apache)
  - D'une manière générale, les langages non spécialisés (notamment Perl et C) peuvent également être utilisés via Common Gateway Interface
- Exécution par le navigateur Web (côté client) :
  - JavaScript ou ECMAScript
  - VBScript
  - applets écrites en Java
  - ActionScript de Macromedia Flash

Langages de description de page

voir Langage de balisage

Langages de programmation théorique


- Lambda-calcul
- Pi-calcul
- Join-Calcul
- Récursion Primitive
- Système T de Kurt Gödel
- BNF

Langages de programmation de Commande Numérique (C.N.)

Une machine-outil automatisée, ou Commande Numérique (C.N.), a besoin d'un langage de programmation pour réaliser les opérations de tournage, ou de fraisage
- Programmation de Commande Numérique

Pour rendre la programmation plus difficile


- Brainfuck (ou encore F
- ckF
- ck
, Ook ou spoon)
- Intercal
- Malbolge
- Unlambda

Non classés


- Nosica
- SAS
- Langage K
- GOTO++

Langages spécialisés


- ABEL : langage pour la programmation électronique des PLD
- R : langage pour l'outil de statistiques du même nom
- VHDL : langage de description matérielle, permettant de synthétiser de l'électronique numérique (descriptions de portes logiques)
- VRML : description de scènes en trois dimensions

Bibliothèques graphiques


- Allegro - multi-plateforme, Multimédia, Jeux
- DirectX - 3D, Multimédia
- GTK+ - multi-plateforme, Environnement graphique
- JFC - Environnement graphique, 2D
- OpenGL - 3D
- Qt - multi-plateforme, Interface utilisateur
- Quartz - Environnement graphique
- SDL - Video
- SWT - multi-plateforme, Interface utilisateur
- Tk - multi-plateforme - Interface graphique associée à Tcl
- wxWidgets - multi-plateforme - Environnement graphique
- Xlib - 2D

Voir aussi

Liens internes


- Chronologie des langages de programmation
- [http://fr.wikibooks.org/wiki/Programmation Wikilivre sur la programmation]
- ABAP
- RIP

Liens externes


- [http://www.codes-sources.com/ CodeS-SourceS ] : site de passionnés qui partagent leurs connaissances
- [http://www.developpez.com/ Developpez.com, le club des développeurs] (de nombreux forums, cours et tutoriels de programmation)
- [http://www.levenez.com/lang/ Computer Languages History]
- [http://www.techbooksforfree.com/perlpython.shtml Free Python Books]
- [http://www.a525g.com/programmation/index-fr.htm A525G - Programmation]
- [http://www.99-bottles-of-beer.net/ 99 Bouteilles de Bière - Un même programme en plus de 780 langages]
- [http://coding.romainl.com Programmation Network Security]
- [http://rmdiscala.developpez.com/cours/ Package pédagogique multimédia V4.1] Catégorie:Programmation informatique

Compilateur

Un compilateur est un programme informatique qui traduit un langage, le langage source, en un autre, appelé le langage cible, en préservant la signification du texte source. Ce schéma général décrit un grand nombre de programmes différents ; et ce que l'on entend par « signification du texte source » dépend du rôle du compilateur. Lorsque l'on parle de compilateur, on suppose aussi en général que le langage source est, pour l'application envisagée, de plus haut niveau que le langage cible, c'est-à-dire qu'il présente un niveau d'abstraction supérieur. En pratique, un compilateur sert le plus souvent à traduire un code source écrit dans un langage de programmation en un autre langage, habituellement un langage d'assemblage ou un langage machine. Le programme en langage machine produit par un compilateur est appelé code objet. Le premier compilateur a été écrit par Grace Hopper.

Structure d'un compilateur

La tâche principale d'un compilateur est de produire du code objet correct. La plupart des compilateurs permettent d'optimiser le code (le code objet optimisé s'exécutera plus rapidement, ou aura une occupation mémoire moindre). Un compilateur fonctionne par analyse-synthèse, c'est-à-dire qu'au lieu de remplacer chaque construction du langage source par une suite équivalente de constructions du langage cible, il commence par analyser le texte source pour en construire une représentation intermédiaire qu'il traduit à son tour en langage cible. Il est donc naturel de séparer — au moins conceptuellement, mais aussi en pratique — le compilateur en une partie avant (ou frontale), parfois appelée « souche », qui lit le texte source et produit la représentation intermédiaire, et une partie arrière (ou finale), qui parcourt cette représentation pour produire le texte cible. Dans un compilateur idéal, la partie avant est indépendante du langage cible, tandis que la partie arrière est indépendante du langage source. Certains compilateurs effectuent de plus sur la forme intermédiaire des traitements substantiels, que l'on peut regrouper en une partie centrale, indépendante à la fois du langage source et de la machine cible. On peut ainsi écrire des compilateurs pour toute une gamme de langages et d'architectures en partageant la partie centrale, à laquelle on attache une partie avant par langage et une partie arrière par architecture. Les étapes de la compilation incluent
- le découpage du programme en lexèmes (analyse lexicale) ;
- la vérification de la correction de la syntaxe du programme (analyse syntaxique) ;
- l'analyse des structures de données (analyse sémantique) ;
- la transformation du code source en code intermédiaire ;
- l'application de techniques d'optimisation sur le code intermédiaire ;
- l'allocation de registres et la traduction du code intermédiaire en code objet, avec éventuellement l'insertion de données de débogage et d'analyse de l'exécution ;
- enfin vient la phase d'édition des liens. Ces différentes étapes expliquent que les compilateurs fassent toujours l'objet de recherches, particulièrement dans le domaine de l'optimisation du code produit.

Compilateurs particuliers

Compilateur croisé

Un compilateur croisé (en anglais cross compiler) est un programme capable de traduire un code source en code objet ayant un environnement d'exécution (architecture matérielle, système d'exploitation) différent de celui où la compilation est effectuée. Ces compilateurs sont principalement utilisés en informatique industrielle.

Byte code

Certains compilateurs traduisent un langage source en langage machine virtuel, c'est-à-dire en un code exécuté par une machine virtuelle : un programme émulant les principales fonctionnalités d'un ordinateur. Le portage d'un programme ne requiert ainsi que le portage de la machine virtuelle. C'est le cas du compilateur Java, qui traduit du code Java en bytecode Java (code objet). Une machine virtuelle DotNet peut exécuter du bytecode MSIL produit par les langages de Microsoft C#, Visual Basic ou autres.

Autres compilateurs

Si la plupart des compilateurs traduisent un code d'un langage de programmation vers un autre, ce n'est pas le cas de tous les compilateurs. Par exemple, le logiciel LaTeX compile un code écrit dans le langage de formatage de texte LaTeX, pour le convertir en un autre langage, par exemple DVI, HTML, PostScript...

Le problème de l'amorçage (bootstrap)

Les premiers compilateurs étaient écrits directement en langage assembleur, un langage symbolique élémentaire correspondant aux instructions du processeur cible et quelques structures de contrôle légèrement plus évoluées. Ce langage symbolique doit être assemblé (et non compilé) et lié pour obtenir une version exécutable. En raison de sa simplicité, un programme simple suffit à le convertir en instructions machines. Les compilateurs actuels sont généralement écrits dans le langage qu'ils doivent compiler ; par exemple un compilateur C est écrit en C, SmallTalk en SmallTalk, Lisp en Lisp, etc. Dans la réalisation d'un compilateur, une étape décisive est franchie lorsque le compilateur pour le langage X est suffisamment complet pour se compiler lui-même : il ne dépend alors plus d'un autre langage (fut-ce de l'assembleur) pour être produit. Les bugs des compilateurs sont parfois très complexes à détecter. Si un compilateur de langage C comporte un bug, les programmeurs en langage C auront naturellement tendance à mettre en cause leur propre code source, non pas le compilateur. Pire, si ce compilateur bogué (version V1) compile un compilateur (version V2) non bogué, l'exécutable compilé (par V1) du compilateur V2 sera bogué. Pourtant son code source est bon. Le bootstrap oblige donc les programmeurs de compilateurs à contourner les bugs des compilateurs existants.

Articles connexes


- Interpréteur
- Informatique
- compilateur de compilateur

Lien externe


- [http://perso.club-internet.fr/cdridi Exemple d'interpréteur et de partie-avant d'un compilateur].
- [http://www.idiom.com/free-compilers Liste de compilateurs gratuits et/ou libres] Catégorie:Compilateur ja:コンパイラ ko:컴파일러 simple:Compiler th:ตัวแปลโปรแกรม

Perl (langage)

ko:펄 ja:Perl Catégorie:Langage de programmation Catégorie:Langage impératif Catégorie:Langage de script Perl (Practical Extraction and Report Language ou langage pratique d'extraction et de génération de rapports ; ce nom est un rétro-acronyme) est un langage de programmation créé par Larry Wall en 1987 et reprenant des fonctionnalités du langage C et des langages de scripts sed, awk et shell (sh). On écrit généralement le nom de ce langage avec un P majuscule pour désigner le langage et un p minuscule en parlant de l'interpréteur. « Seul perl analyse correctement Perl. »

Origines et implémentation

Le but

Perl est né du besoin de disposer d'un langage optimisé pour l'extraction d'informations de fichiers textes et la génération de rapports. Voici quelques-unes des devises qui lui sont couramment associées :
- There Is More Than One Way To Do It (TIMTOWTDI) qui pourrait se traduire par Il y a plus d'une façon de le faire.
- Perl : la tronçonneuse suisse des langages de programmation.
- Perl : l'assistant idéal des administrateurs de système. Sa souplesse autorise l'emploi de plusieurs modèles de programmation : programmation procédurale, programmation fonctionnelle et POO.
- Les puristes moyens de l'OO ne considèrent pas Perl comme un « vrai » langage objet
- les puristes stricts, eux, ne considèrent aucun autre langage que Smalltalk ou Common lisp, où tout est objet, comme "vrais" langages objet.

Les moyens

Perl vise la commodité pour le programmeur (existence de raccourcis qui le font qualifier de langage "diagonal") plutôt qu'un souhait esthétique d'architecture stricte (langages « orthogonaux »). Perl est considéré surtout comme un langage de script et a été qualifié de "ciment assurant la cohésion du web", étant un des langages CGI les plus populaires. Compte-tenu du rôle qu'a eu Perl dans le développement de la "nouvelle économie", une boutade prêtait à la mairie de New York l'intention de rebaptiser Wall Street du nom de son inventeur, ce qui aurait au moins le mérite de ne pas entraîner du tout de frais pour le contribuable ! Perl a un statut de logiciel libre, distribué sous licence artistique et GPL. Perl est porté sur la plupart des systèmes d'exploitation mais excelle particulièrement en environnement POSIX (Cygwin sous Microsoft Windows, Linux, Mac OS X etc.) ; il devient populaire aussi sous Microsoft Windows sans Cygwin grâce à la facilité d'installation de la distribution gratuite ActivePerl (dont la version 5.8 permet l'usage de l'interface graphique) et d'environnements de développement gratuits comme SciTE.

L'intégration dans l'existant

Cygwin Les programmes Perl sont intégralement portables entre Linux, Mac OS X (ou autre UNIX) et Windows malgré les désignations de fichiers différentes de ces systèmes (Perl remplace tout seul si besoin les « / » par des « \ »). Un exemple du champ d'action de Perl est son utilisation comme script CGI pour faire tourner Wikipedia jusqu'en janvier 2002. Il constitue en effet un bon langage de prototypage. Perl permet l'usage du moteur d'interface graphiques Tk pour effectuer des entrées-sorties conformes à l'état de l'art. On désigne parfois l'ensemble sous le nom générique Perl/Tk. L'extension Tk est intégrée à ActivePerl depuis la version 5.8 du langage.

Les ressources

Plus de 15 millions de lignes de modules Perl d'utilisation libre, allant des mathématiques avancées aux connexions aux bases de données, en passant par les réseaux, la simulation d'un calculateur quantique et bien davantage, peuvent être téléchargées depuis un réseau de sites appelé CPAN : Comprehensive Perl Archive Network.
- http://www.cpan.org/

Le mécanisme

Bien que Perl profite de la plupart des facilités d'un langage interprété, à proprement parler il n'interprète et n'exécute pas (aucun interpréteur ne le fait, d'ailleurs) le code source une ligne à la fois. Perl compile d'abord le programme entier dans un bytecode intermédiaire (assez dans l'esprit du code objet Java), l'optimisant au passage, et exécute alors ce bytecode. Il est ainsi possible de compiler un programme Perl en bytecode pour s'épargner les phases de compilation lors d'exécutions ultérieures, bien que l'"interpréteur" reste requis pour exécuter ce code. Les phases de traduction des noms de variables en adresses, traduction de libellés d'opération en code binaire et de traduction en binaire des constantes exprimées en caractères sont d'ailleurs bien connues depuis le milieu du XX siècle, puisque ce sont très précisément les trois fonctions principales d'un assembleur.

L'avenir proche

Perl 6 est en cours de développement. Il tournera dans la machine virtuelle Parrot. Un canular organisé par l'équipe de direction de l'éditeur O'Reilly avec la complicité de Larry Wall et Guido van Rossum (avec annonce d'un livre imaginaire dont l'annonce donnait le fac-simile) a annoncé à une époque la fusion en un langage unique nommé aussi Parrot de Perl 6 et de Python, à la grande panique de certains aficionados des deux langages. En parallèle, Autrijus Tang, aidé d'un petit groupe de développeurs, est en train de développer un interpréteur Perl 6 en Haskell nommé Pugs.

Exemples de code

Certaines personnes affirment avec humour que Perl veut dire 'Pathologically Eclectic Rubbish Lister' (collectionneur pathologique de déchets variés) à cause de l'utilisation intensive de caractères spéciaux chargés de sens dans la syntaxe du langage, comme on peut le voir dans cet exemple de programme affichant une salutation: # Un exemple de programme en Perl $message = "À l'endroit : 'camel'.\n"; print $message; $message =~ s/endroit/envers/; $message =~ s/('\w+')/reverse($1)/e; print $message; exit 0 et sa sortie à l'écran : À l'endroit : 'camel'. À l'envers : 'lemac'. Les troisième et quatrième lignes de cet exemple montrent l'usage d'expressions régulières. Ces caractères spéciaux sont liés à la puissance de traitement de Perl :
- scalaires désignés par $ : $nom = "Toto"; $z=3;
- tableaux désignés par @, indexés par [] : $nom[95] = "Val d'Oise"; (le 96e élément du tableau est comme les autres un scalaire!)
- tableaux associatifs, ou hashs désignés par %, indexés par : $code = 95; (leurs éléments sont des scalaires aussi)

Aspects communautaires

Perl a une base d'utilisateurs vaste et diversifiée. Pour plusieurs types d'utilisateurs du langage, c'est d'ailleurs leur seul point commun. Les administrateurs système en sont friands, les développeurs en apprécient la concision et la puissance, des linguistes et des biologistes - habituellement peu enclins à se pencher sur le code - l'utilisent comme langage de référence dans leurs applications métiers. Perl est particulièrement apprécié en bioinformatique où les programmes font l'objet de remaniements constants. La base CPAN regroupe et met gratuitement à la disposition des utilisateurs de Perl du monde entier 15,4 millions de ligne de code (juil