:: wikimiki.org ::
| Hello World |
Hello worldEn informatique, pour la démonstration rapide d'un langage de programmation ou le test d'un compilateur, il est courant d'écrire un petit programme, aussi simple que possible, dont le seul but soit l'affichage à l'écran des mots hello world (bonjour le monde).
Certains sont étonnamment complexes, particulièrement dans un contexte d'interface graphique. D'autres sont très simples, particulièrement ceux qui utilisent un interpréteur de ligne de commande pour afficher le résultat. Dans plusieurs systèmes embarqués, le texte peut être envoyé sur une ou deux lignes d'un afficheur LCD (ou dans d'autres systèmes, une simple LED peut se substituer à un hello world).
Alors que les petits programmes de test existaient depuis le début de la programmation, la tradition d'utiliser hello world comme message de test a été influencée par le livre The C Programming Language de Brian Kernighan et Dennis Ritchie. Le premier exemple de ce livre affiche hello, world (sans capitale ni point final, mais avec une virgule et un retour à la ligne final). Le premier hello world dont Ritchie et Kernighan se souviennent provient d'un manuel d'apprentissage du langage B écrit par Kernighan [http://cm.bell-labs.com/cm/cs/who/dmr/bintro.html].
Aujourd'hui on affiche plus souvent Hello world! comme une phrase, avec capitale initiale et point d'exclamation final.
Exemples de programmes Hello world!
WRITE "Hello world!"
with STANDARD_IO;
use STANDARD_IO;
procedure bonjour is
begin
Put("Hello world!");
end bonjour;
Alma
&.set_var set hi to 'hello'
&.set_var set you to 'world'
&capitalize &capitalize!
([http://patrick.davalan.free.fr/alma/#Hello Référence])
PROC main()
WriteF('Hello world!')
ENDPROC
'Hello world!'
(L'une des bases d'APL est que toute expression qui, après exécution, n'est pas affectée à une variable voit son contenu affiché au terminal)
<%
Response.Write("Hello World")
%>
Main.java:
public class Main
HelloWorld.aj:
public aspect HelloWorld
Ce code fonctionne avec les assembleurs Jasmin et Oolong.
Les commentaire sont situés après un ';'
.class public Hello
.super java/lang/Object
; spécification du constructeur par défaut
.method public ();
; pousse la référence à l'objet courant sur la pile
aload_0
; appel statiquement lié aux contructeur de la classe de base
invokespecial java/lang/Object/()V
return
.end method
.method public static main([java/lang/String;)V
.limit stack 2
; pousse la réf. à l'objet statique out de la classe System sur la pile
getstatic java/lang/System/out Ljava/io/PrintStream
; pousse la chaîne de caractère sur la pile
ldc "Hello world!"
; appel polymorphe
invokevirtual java/io/PrintStream/println(Ljava.lang.String;)V
return
.end method
cseg segment
assume cs:cseg, ds:cseg
org 100h
main proc
jmp debut
mess db 'Hello world!$'
debut:
mov dx, offset mess
mov ah, 9
int 21h
ret
main endp
cseg ends
end main
Assembleur x86, écrit pour le compilateur TASM sous DOS
.model small
.stack 100h
.data
bonjour db "Hello world!$"
.code
main proc
mov AX,@data
mov DS,AX
mov DX,offset bonjour
mov AX,0900h
int 21h
mov AX,4C00h
mov 21h
main endp
end main
Assembleur x86, sous Linux, écrit pour le compilateur NASM
section .data
helloMsg: db 'Hello world!',10
helloSize: equ $-helloMsg
section .text
global _start
_start:
mov eax,4 ; Appel système "write" (sys_write)
mov ebx,1 ; File descriptor, 1 pour STDOUT (sortie standard)
mov ecx,helloMsg ; Adresse de la chaine a afficher
mov edx,helloSize ; Taille de la chaine
int 80h ; Execution de l'appel système
; Sortie du programme
mov eax,1 ; Appel système "exit"
mov ebx,0 ; Code de retour
int 80h
BEGIN
(à noter que les numéros devant les lignes sont ici injustifiés, ils servent pour des loop)
10 PRINT "Hello world!"
20 END
GET "LIBHDR"
LET START () BE
$(
WRITES ("Hello world! - N")
$)
%TITLE 'hassan'
MODULE HELLO_WORLD (IDENT='V1.0', MAIN=HELLO_WORLD,
ADDRESSING_MODE (EXTERNAL=GENERAL)) =
BEGIN
LIBRARY 'SYS$LIBRARY:STARLET';
EXTERNAL ROUTINE
LIB$PUT_OUTPUT;
GLOBAL ROUTINE HELLO_WORLD =
BEGIN
LIB$PUT_OUTPUT(%ASCID %STRING('Hello world!'))
END;
END
ELUDOM
+++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
#include
int main(void)
#include
int WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow )
using System;
public class HelloWorld
C# (sous Windows)
using System.Windows.Forms;
public class HelloWorld
#include
int main()
Casio (calculatrices graphiques de la gamme «Graph xx»)
"Hello world!"
.method public static void Main() cil managed
module hello
Start :: String
Start = "Hello world!"
PROC 0
WRITE Hello world!
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
DISPLAY "Hello world!".
STOP RUN.
(princ "Hello world!")
import std.stdio;
int main (char[][] args)
Dialog/Xdialog
dialog --title "Hello world!" --ok-label "OK" --msgbox "Hello world!" 0 0
Xdialog --title "Hello world!" --ok-label "OK" --msgbox "Hello world!" 0 0
$ write sys$output "Hello world!"
Ed et Ex (Ed extendu)
a
Hello world!
.
p
ou comme ceci:
echo -e 'a\nHello world!\n.\np'|ed
echo -e 'a\nHello world!\n.\np'|ex
class HELLO_WORLD
creation
make
feature
make is
do
io.put_string("Hello world!%N")
end -- make
end -- class HELLO_WORLD
-module(hello).
-export([hello_world/0]).
hello_world() -> io:fwrite("Hello world!\n").
puts(1, "Hello world!")
type data =
let myData =
let _ =
print_string myData.first;
print_string " ";
print_string myData.second;
print_newline()
begin TOOL HelloWorld;
includes Framework;
HAS PROPERTY IsLibrary = FALSE;
forward Hello;
-- START CLASS DEFINITIONS
class Hello inherits from Framework.Object
has public method Init;
has property
shared=(allow=off, override=on);
transactional=(allow=off, override=on);
monitored=(allow=off, override=on);
distributed=(allow=off, override=on);
end class;
-- END CLASS DEFINITIONS
-- START METHOD DEFINITIONS
------------------------------------------------------------
method Hello.Init
begin
super.Init();
task.Part.LogMgr.PutLine('Hello world!');
end method;
-- END METHOD DEFINITIONS
HAS PROPERTY
CompatibilityLevel = 0;
ProjectType = APPLICATION;
Restricted = FALSE;
MultiThreaded = TRUE;
Internal = FALSE;
LibraryName = 'hellowor';
StartingMethod = (class = Hello, method = Init);
end HelloWorld;
." Hello world!" CR
PROGRAM BONJOUR
WRITE ( - , - ) 'Hello world!'
END
println["Hello world!"]
PUBLIC SUB Main()
Print "Hello world!"
END
In the draw event of some object:
draw_text(x,y,"Hello world!");
#!/usr/bin/gnuplot
print "hello world"
GOTOPRINTDUTEXTE() ; «Hello world!»
module HelloWorld (main) where
main = putStrLn "Hello world!"
program HelloWorld;
functions
end
(calculatrice Hewlett-Packard alphanumérique)
01 LBLTHELLO
02 THELLO, WORLD
03 PROMPT
Sortie de la HP-41
Hello world!
Hello world!
ON ENTER
"Hello world!" print
ou
write("Hello world!\n")
public class HelloWorld
En javascript :
document.write("Hello world!");
Cela peut être inclus dans du HTML de cette manière :
WriteLine "Hello world!"
\documentclass
\begin
\begin
Hello world!
\end
\end
[http://openfacts.berlios.de/index-en.phtml?title=Linotte Linotte]
Livre HelloWord
Paragraphe Afficher le message
Les roles
Message est un texte avec Hello, World!
Les actions
Tu affiches le message
section HEADER
+ name := HELLO_WORLD;
- category := MACRO;
section INHERIT
- parent_object:OBJECT := OBJECT;
section PUBLIC
- make <-
(
"Hello world !\n".print;
);
(write-line "Hello World!")
print [Hello world!]
ou
pr [Hello world!]
en mswlogo seulement
messagebox [Hi] [Hello world!]
print "Hello world!"
echo -a Hello World!
W "Hello world!"
MODULE Hello;
FROM Terminal2 IMPORT WriteLn; WriteString;
BEGIN
WriteString("Hello world!");
WriteLn;
END Hello;
(avec l'interpreteur standard command.com. Le symbole @ est optionel et evite au système de répeter la commande avant de l'executer. Le symboles @ doit être enlevé avec les version de MS-DOS antérieure au 5.0.)
@echo Hello world!
: main
me @ "Hello world!" notify
;
#import
int main (int argc, const char - argv[])
print_string "Hello world!\n";;
#!/usr/bin/octave
disp("hello world")
PROC hello:
PRINT "Hello world!"
ENDP
(object-class request
^action)
(startup
(strategy MEA)
(make request ^action hello)
)
(rule hello
(request ^action hello)
-->
(write |Hello world!| (crlf))
)
program Bonjour;
begin
WriteLn('Hello world!');
end.
print "Hello world!\n";
ou
hello: procedure options(main);
display ('Hello world!');
/ - Ou, variante : put skip list ('Hello world!'); - /
end hello;
'Hello world!' =>
#include "colors.inc"
camera
light_source
text
write('Hello world!'),nl.
print "Hello world!"
say "Hello world!"
ou:
say 'Hello world!'
(Sur les calculatrices Hewlett-Packard HP-28, HP-48 et HP-49.)
<<
CLLCD
"Hello world!" 1 DISP
0 WAIT
DROP
>>
puts "Hello world!"
class HELLO_WORLD is
main is
#OUT+"Hello world!\n";
end;
end;
object HelloWorld with Application
(display "Hello world!")
(newline)
(note: requiert au moins une ligne en entrée)
sed -ne '1s/. - /Hello world!/p'
'Hello world!' print.
#!/bin/sh
echo "Hello world!"
BEGIN
outtext("Hello World!");
outimage;
END;
Intr-aff-Stop-aff-
Transcript show: 'Hello world!'
print "Hello world!\n";
OUTPUT = "Hello world!"
END
create table MESSAGE (TEXT char(15));
insert into MESSAGE (TEXT) values ('Hello world!');
select TEXT from MESSAGE;
drop table MESSAGE;
Ou (ex: en Oracle)
select 'Hello world!' from dual;
Ou (ex en: MySQL )
select 'Hello world!';
Ou, plus simplement
print 'Hello world!.'
Ou (pour le KB-SQL)
select Null from DATA_DICTIONARY.SQL_QUERY
FOOTER or HEADER or DETAIL or FINAL event
write "Hello world!"
RACINE: HELLO_WORLD.
NOTIONS:
HELLO_WORLD : ecrire("Hello world!").
#OUTPUT Hello world!
puts "Hello world!"
Tcl/Tk
pack [button .b -text "Hello world!" -command exit]
put "Hello world!"
Declare @Output varchar(16)
Set @Output='Hello world!'
Select @Output
ou, variation plus simple:
Select 'Hello world!'
Print 'Hello world!'
Ti 80 à Ti 92
:Disp "Hello world!"
ou
:Output(1,1,"Hello world!")
use std.textio.all;
ENTITY hello IS
END ENTITY hello;
ARCHITECTURE Wiki OF hello IS
CONSTANT message : string := "hello world";
BEGIN
PROCESS
variable L: line;
BEGIN
write(L, message);
writeline(output, L);
wait;
END PROCESS;
END ARCHITECTURE Wiki;
Sub Main()
MsgBox("Hello world!")
End Sub
Title Hello World!
Info Hello World!
- [http://www2.latech.edu/~acm/HelloWorld.shtml Hello, World Page!] (Site présentant un programme "Hello World" écrit en 204 langages différents)
- [http://99-bottles-of-beer.ls-la.net/ 99 Bottles of Beer] (Site présentant un programme simple écrit en plus de 700 langages différents)
Catégorie:Programmation informatique
ja:Hello world
ko:Hello world 프로그램
Informatique ko:컴퓨터 과학 ja:情報工学 simple:Computer science th:วิทยาการคอมพิวเตอร์ zh-cn:计算机科学 zh-tw:計算機科學
oc:informatica]
Etymologiquement, Le terme informatique désigne l'automatisation du traitement de l'information par une machine (virtuelle ou physique). Dans son acception courante, l'informatique désigne de façon vague l'ensemble des sciences et techniques en rapport de près ou de loin avec l'information et l'ordinateur. Par exemple, l'informatique désigne aussi bien le matériel informatique que la conception et l'administration de la partie immatérielle d'un ordinateur : les logiciels.
La traduction anglaise étymologique serait informatics, mais l' usage tant en français qu'en anglais fait qu'une meilleure traduction serait probablement computer science, bien que ce terme fasse peut-être référence de façon plus explicite à ce que l'on pourrait appeler informatique fondamentale ou informatique scientifique. En anglais les termes distincts suivants sont utilisés :
- L'informatique fondamentale (Computer Science), ce qui ressort de l' épistémologie procédurale, soit notamment de l'étude des algorithmes, et donc indirectement des logiciels et des ordinateurs.
- L'ingénierie informatique (Computer Engineering), ce qui ressort de la fabrication et de l'utilisation du matériel informatique.
- L'ingénierie logicielle (Software Engineering), ce qui ressort de la modélisation et du développement des logiciels; ceci comprend le traitement des données (Data Processing), ce qui est du domaine de la mise en pratique des traitements de données.
- L'évolution des techniques et des technologies reliées à l'informatique (Information Technology).
Des professions aussi diverses que concepteur, développeur, responsable d'exploitation, ingénieur système, technicien de maintenance, matérielle ou logicielle, chercheur en informatique ou directeur d'un centre de calcul, relèvent du domaine de l'informatique. Néanmoins, le terme informaticien désigne le plus souvent ceux qui conçoivent, déploient et mettent en œuvre des solutions.
Étymologie
Le terme informatique a été créé en mars 1962 par Philippe Dreyfus à partir des mots «information» et «automatique». Il donna ce nom à l'entreprise qu'il venait de fonder, la Société d'Informatique Appliquée, sans breveter le mot informatique.
En France, l'usage officiel du mot a été consacré par Charles de Gaulle qui, en Conseil des ministres, a tranché entre «informatique» et «ordinatique», et le mot fut choisi par l'Académie française en 1967 pour désigner cette nouvelle discipline. En juillet 1968, le ministre fédéral de la Recherche scientifique d'Allemagne, Gerhard Stoltenberg, prononça le mot informatik lors d'un discours officiel au sujet de la nécessité d'enseigner cette nouvelle discipline dans les universités de son pays, et c'est ce mot qui servit aussitôt à nommer certains cours dans les universités allemandes. Le mot informatica fit alors son apparition en Italie et en Espagne, de même quinformatics au Royaume-Uni.
Pendant le même mois de mars 1962 Walter F. Bauer inaugura la société américaine Informatics Inc., qui elle breveta son nom et poursuivit toutes les universités qui utilisèrent ce nom pour décrire la nouvelle discipline, les forçant à se rabattre sur computer science, bien que les diplômés qu'elles formaient étaient pour la plupart des praticiens de l'informatique plutôt que des scientifiques au sens propre. L'Association for Computing Machinery, la plus grande association d'informaticiens au monde, approcha même Informatics Inc. afin de pouvoir utiliser le mot informatics pour remplacer l'expression computer machinery, mais l'entreprise déclina l'offre. La société Informatics Inc. cessa ses activités en 1985, achetée par Sterling Software.
Histoire
Voir l'article détaillé : Histoire de l'informatique
Les origines
Depuis des millénaires, l'Homme a créé et utilisé des outils l'aidant à calculer (abaque, boulier, etc.). Les premières machines mécaniques apparaissent entre le XVIIe et le . La première machine à calculer mécanique réalisant les quatre opérations aurait été celle de Wilhelm Schickard au , mise au point notamment pour aider Kepler à établir les tables rudolphines d'astronomie.
En 1642, Blaise Pascal réalisa également une machine à calculer mécanique qui fut pour sa part commercialisée et dont neuf exemplaires existent dans des musées comme celui des Arts et métiers et dans des collections privées (IBM).
La découverte tardive du mécanisme d'Antikhitère montre que les Grecs de l'Antiquité eux-mêmes avaient commencé à réaliser des mécanismes de calcul en dépit de leur réputation de mépris général pour la technique (démentie d'ailleurs par les travaux d'Archimède).
Cependant, il faudra attendre la définition du concept de programmation (illustrée en premier par Joseph Marie Jacquard avec ses métiers à tisser à cartes perforées, suivi de Boole et Ada Lovelace pour ce qui est d'une théorie de la programmation des opérations mathématiques) pour disposer d'une base permettant d'enchaîner des opérations élémentaires de manière automatique.
L'informatique moderne
L'ère des ordinateurs modernes commença avec les développements de l'électronique pendant la Seconde Guerre mondiale, ouvrant la porte à la réalisation concrète de machines opérationnelles. Au même moment, le mathématicien Alan Turing théorise le premier ce qu'est un ordinateur, avec son concept de machine universelle de Turing.
L'informatique est donc un domaine fraichement développé, même s'il trouve ses origines dans l'antiquité (avec la cryptographie) ou dans la machine à calculer de Blaise Pascal, au . Ce n'est qu'à la fin de la Seconde Guerre mondiale qu'elle a été reconnue comme une discipline à part entière et a développé des méthodes, puis une méthodologie qui lui étaient propres.
Son image a été quelque temps surfaite : parce que les premiers à programmer des ordinateurs avaient été des ingénieurs rompus à la technique des équations différentielles (les premiers ordinateurs, scientifiques, étaient beaucoup utilisés à cette fin), des programmeurs sans formation particulière, parfois d'ailleurs issus de la mécanographie, cherchaient volontiers à bénéficier eux aussi de ce label de rocket scientist afin de justifier des salaires rendus confortables par :
- le prix élevé des ordinateurs de l'époque (se chiffrant en ce qui serait des dizaines de millions d'euros aujourd'hui compte-tenu de l'inflation, il reléguait au second plan les considérations de parcimonie sur les salaires) ;
- l'aspect présenté comme peu accessible de leur discipline et un mythe de difficulté mathématique entretenu autour. En fait, les premiers ordinateurs ne se programmaient pas de façon très différente de celle des calculatrices programmables utilisées aujourd'hui dans les lycées et collèges, et maîtrisées par des élèves de quatorze ans mais le domaine était nouveau et l'algorithmique nécéssite un certain degré de concentration associé, peut-être à tort, à la réflexion pure.
L'émergence d'un aspect réellement scientifique dans la programmation elle-même (et non dans les seules applications scientifiques que l'on programme) ne se manifeste qu'avec la série The Art of Computer Programming de Donald Knuth, professeur à l'Université de Stanford, à la fin des années 1960, travail monumental encore inachevé en 2004. Les travaux d'Edsger Dijkstra, Niklaus Wirth et Christopher Strachey procèdent d'une approche également très systématique et elle aussi quantifiée.
On demandait à Donald Knuth dans les années 1980 s'il valait mieux selon lui rattacher l'informatique (computer science) au génie électrique — ce qui est souvent le cas dans les universités américaines — ou à un département de mathématiques. Il répondit : «Je la classerais volontiers entre la plomberie et le dépannage automobile» pour souligner le côté encore artisanal de cette jeune science.
Toutefois, la forte scientificité des trois premiers volumes de son encyclopédie suggère qu'il s'agit là plutôt d'une boutade de sa part. Au demeurant, la maîtrise de langages comme Haskell ou même APL demande un niveau d'abstraction tout de même plus proche de celui des mathématiques que des deux disciplines citées.
La miniaturisation des composants et la réduction des coûts de production, associées à un besoin de plus en plus pressant de traitement des informations de toutes sortes (scientifiques, financières, commerciales...) a entraîné une diffusion de l'informatique dans toutes les couches de l'économie comme de la vie de tous les jours.
Approche fonctionnelle
Comme énoncé ci-dessus, l'informatique est le traitement automatisé de données par un appareil électronique : l'ordinateur ; les germanophones parlent de elektronisch Daten Verarbeitung / EDV (« traitement électronique de données »), les anglophones dinformation technology / IT (« technologies de l'information »), c'est-à-dire :
- données ou informations : in fine, l'ordinateur manipule des nombres (d'où le terme anglais computer, littéralement « calculateur »), mais ces nombres peuvent représenter divers types d'informations :
- des... nombres bien évidemment, dans le cas de calculs scientifiques (flottants) ou comptables (décimal, ou binaire entier)... ;
- un texte, des lettres (caractères), que l'on peut mettre en forme avec un traitement de texte, imprimer, envoyer par courrier électronique... ;
- du dessin vectoriel (CAO, logiciels d'illustration, et de typographie) ;
- des images statiques (photographies) ou animées (vidéo), des hologrammes ;
- des sons, enregistrés (technique du direct to disk) ou bien fabriqués par l'ordinateur (synthétiseur), que ce soient des bruitages, de la musique (cf. musique et informatique) ou de la parole ;
:la conversion de ces informations en suite de nombres pose le problème du format des données, du codage et des formats normalisés (par exemple, représentations des nombres entiers ou à virgule flottante, format ASCII, Unicode, TeX ou RTF et polices PostScript ou TrueType pour les textes, formats bitmap, TIFF, JPEG, PNG, etc. pour les images fixes, formats QuickTime, MPEG pour les vidéos, interface MIDI pour la musique...).
- automatisé : l'utilisateur n'intervient pas, ou peu, dans le traitement des données ; le traitement est défini dans un programme qui se déroule tout seul, l'utilisateur se contente de fournir des paramètres de traitement ; le programme automatique se déroule selon un algorithme, l'établissement de ce programme est le domaine de la programmation.
- traitement : ces données sont :
- créées :
- nombres : acquisition automatique de données d'une expérience avec un ordinateur ;
- texte : taper un texte au clavier ;
- images : dessins réalisés à la souris ou sur une tablette graphique, synthèse d'image (pour présenter un projet – objet fictif en cours de conception –, imagerie médicale, dessin artistique – infographie –, film d'animation ou pixilation) ou numérisation d'une image existante (scanner, appareil photographique numérique) ou d'images animées (caméra numérique, webcam) ;
- sons enregistrés (microphone) ou recréés à partir d'une partition virtuelle (synthétiseur) ou d'un texte (synthèse vocale).
- analysées :
- nombres : l'analyse des nombres relève du domaine concerné (mathématiques, physique, économie...) ;
- texte : rechercher les occurrences de mots dans un texte pour en tirer des statistiques, aide à la correction orthographique et/ou grammaticale, et, plus généralement, traitement automatique des langues (TAL) ;
- images : on peut vouloir identifier un objet (reconnaissance de forme, reconnaissance des caractères ou OCR), ou bien déterminer la surface couverte par une couleur (par exemple pour quantifier une surface recouverte) ;
- sons : analyse spectrale, reconnaissance vocale.
- modifiées :
- nombres : calculs ;
- texte : modification d'un texte existant, traduction automatique dans une autre langue (ou langage de programmation) ;
- images : modification du contraste, de la luminosité, des couleurs, effets spéciaux ;
- sons : application d'effets (réverbération, distorsion, ajustement de la hauteur) ;
::comme il existe, selon les programmes et les besoins, une grande variété de codages possibles pour représenter chaque type d'information, beaucoup de traitements consistent à convertir les données d'un format vers un autre...
- archivées puis restituées :
- les moyens et techniques d'archivage varient en fonction de la durée de conservation souhaitée et des quantités de données en jeu : mémoires électroniques, bandes magnétiques, disques magnétiques ou optiques ;
- les moyens de restitution dépendent de la nature des données : écrans ou imprimantes pour le texte et les images, haut-parleurs ou instruments MIDI pour les sons...
Approche organisationnelle
L'informatique pour l'organisation est un élément d'un système de traitement d'information (les entrées peuvent être des formulaires papier par exemple) et d'automatisation. Depuis Henry Ford, l'automatisation des tâches ayant été identifiée comme un avantage concurrentiel, la question est : que peut-on automatiser ?
Autant il est relativement facile d'automatiser des tâches manuelles, autant il est difficile d'automatiser le travail intellectuel et parfois créatif. L'approche de l'informatique dans une organisation commence donc par l'élucidation des processus, c'est-à-dire modéliser le métier. Après validation, la MOA (Maîtrise d'Ouvrage) fournit les spécifications fonctionnelles de (l'ouvrage) qui vont servir de référence dans la conception pour la MOE (Maîtrise d'œuvre).
Cette conception sera alors effectuée dans le respect d'un Cycle de développement qui définit les rôles et responsabilités de chaque acteur. Ainsi, les échanges entre MOA et MOE ne se résument pas à la maîtrise des chantiers (tenue des délais et des coûts, et validation des livrables), la MOA et la MOE sont garantes (éventuellement responsables sur un plan juridique) de la cohérence des systèmes d'information, et de l'adéquation des solutions informatiques avec les problèmes utilisateurs finaux initialement constatés.
Matériel
Article détaillé : Matériel informatique
On utilise également le terme anglais hardware (littéralement « quincaillerie ») pour désigner le matériel informatique. Il s'agit de tous les composants que l'on peut trouver dans :
1. Les ordinateurs et leurs périphériques : un ordinateur est un ensemble de circuits électroniques permettant de manipuler des données sous forme binaire, représentées par des variations de signal électrique. Il existe différents types d'ordinateurs :
ordinateur 5150 datant de 1981, Système d'exploitation IBM-DOS 2.0]]
- Les micro-ordinateurs.
De bureau ou portables. Ils sont composés d'une unité centrale : un boîtier contenant la carte mère, l'alimentation, des unités de stockage. On y ajoute une console : un écran et un clavier. Divers périphériques peuvent leur être ajoutés, une souris, une imprimante, un scanner..ect;
scanner
- Les stations de travail.
Des micro-ordinateurs particulièrement puissants et chers, utilisés uniquement pour des besoins professionnels pointus (conception assistée par ordinateur). Ce terme était particulièrement en vogue dans les années 1980-1990. Depuis les années 2000, il n'est guère possible de concevoir une station de travail plus puissante qu'un micro-ordinateur haut de gamme ;
- Les mainframes.
Une armoire abrite l'unité centrale et l'alimentation, une ou plusieurs autres les périphériques de stockage (disque dur, sauvegarde) tandis que les moyens de communication et réseau (routeur, hubs, modem) sont dans la même pièce, mais dans des racks séparés. Une console d'administration (écran, clavier, imprimante) est généralement située dans ce même local ;
administration]
- Les PDA (Personal Digital Assistant, encore appelés organiseurs).
Ce sont des ordinateurs de poche proposant des fonctionnalités liées à l'organisation personnelle (agenda, calendrier, carnet d'adresse, etc.). Ils peuvent être reliés à Internet par différents moyens (réseau Wifi, Bluetooth, etc.).
- Et bien d'autres appareils.
Dans le domaine de l'informatique embarquée : téléphone, électroménager, automobile, armements militaires, etc.
Les cartes à puces, ou l'informatique industrielle.
Logiciel
Le logiciel désigne la partie à première vue immatérielle de l'informatique, l'organisation et le traitement de l'information : les programmes. On s'est en effet vite rendu compte que des machines techniquement très avancées pour leur époque, comme la Bull Gamma 60, restaient invendables tant qu'on n'avait pas de programmes à livrer pour les rendre immédiatement opérationnelles. IBM lança entre 1968 et 1973 une sorte d'ancêtre du logiciel libre avec son ordinateur 1130, politique qui assura à celui-ci par effet boule de neige un succès immédiat et planétaire, mais les conclusions d'un procès antitrust lui interdirent de distribuer bénévolement du logiciel.
Le monde des mainframes classe les logiciels en catégories suivantes :
- systèmes d'exploitation ;
- bases de données, comme DB2, Ingres ou Oracle ;
- programmes de communication, comme NCP ou RSCS ;
- moniteurs de télétraitement ;
- systèmes transactionnels, comme CICS ;
- systèmes de temps partagé, utilisés pour le calcul ou le développement ;
- compilateurs traduisant les langages en instructions machine et appels système ;
- tout le reste entrait en une catégorie nommée Logiciels applicatifs.
Plus simplement on distingue généralement trois types de logiciels (par ordre de proximité du matériel) :
- le firmware
- le système d'exploitation
- les logiciels et applications utilisateur (en anglais software)
On classe aussi les logiciels en libre et propriétaire, bien que les deux soient parfois panachés à des degrés divers. Certains ont une fonction bureautique ou multimédia comme par exemple les jeux vidéo. Certains logiciels ont acquis des noms connus de tous.
Le noyau du système d'exploitation crée le lien entre le matériel et le logiciel. Un logiciel, quand il est fourni sous sa forme binaire, serait utilisable uniquement avec un système d'exploitation donné (car il en utilise les services), et ne fonctionnerait que sur un matériel spécifique (car il en utilise le code d'instructions). Une conception plus récente, depuis le milieu de années 1980, consiste à distribuer les logiciels tous binaires confondus, et à les munir d'un système de licences par jetons ou tokens permettant l'usage de N copies simultanées du logiciel sur le réseau, tous matériels confondus. Cette approche est majoritaire dans le monde UNIX.
À l'initiative de Richard Stallman et du GNU, à partir de 1985, une mouvance de programmeurs refuse cette logique propriétaire et ceux-ci se muent en concepteurs inventifs pour se lancer dans le développement d'outils et de bibliothèques système libres compatibles avec le système UNIX. C'est pourtant le projet indépendant Linux, initié par Linus Torvalds, basé sur les travaux et les outils du GNU, qui aboutira dans la création d'un système d'exploitation complet et libre.
Une bonne partie des logiciels actuels fonctionnent dans un environnement graphique pour interagir avec l'utilisateur.
La diversité des systèmes informatiques a fait apparaître une technique visant à combiner le meilleur de chacun de ces univers : l'émulateur.
Il s'agit d'un logiciel permettant de simuler le comportement d'un autre système dans celui que l'on utilise,
- soit pour qu'une machine semble être une autre (voir IBM 1130),
- soit pour simuler le comportement d'un système d'exploitation (par exemple DOS ou Windows sous Linux).
Le terme anglais est software, à l'origine un jeu de mot entre hardware (« quincaillerie », pour désigner le matériel) et l'opposition soft/hard (mou/dur), opposition entre le matériel (le dur) et l'immatériel (le mou). Les traductions françaises matériel et logiciel rendent parfaitement cette opposition et cette complémentarité.
Le logiciel réalise normalement une fonction attendue de ses utilisateurs. Néanmoins, des effets secondaires (parfois nommés par contresens de traduction effets de bord) existent. Parfois même, certains logiciels sont destinés à nuire, comme les virus informatiques, nommés en anglais, par analogie avec software : malware (qu'on pourrait traduire par le néologisme nuisiciel, ou logiciel malveillant).
La création des logiciels
Un projet informatique s'inscrit dans un cycle de développement qui définit les grandes étapes de la réalisation (planification), de la manière dont on passe d'une étape à l'autre (modèle incrémental, en V, en spirale, etc.). Pour les petits projets (ou les petites équipes de développement), cette réflexion est souvent négligée (on se répartit les modules et chacun développe dans son coin). Ceci est une cause fréquente d'erreurs (bogues) et de non-conformité (le produit final n'est pas conforme aux attentes de l'utilisateur). Mais même les énormes projets, avec beaucoup de moyens, sont victimes de cette négligence ; ainsi, l'échec du premier vol d'Ariane 5 fut dû à un problème de logiciel, etc. Un projet peut alors intégrer une approche de la qualité et de la sûreté de fonctionnement des systèmes informatiques afin de contrôler autant que possible le produit final.
Un projet comprend les étapes suivantes :
- l'établissement d'un cahier des charges qui définit les spécifications auxquelles devra répondre le logiciel ;
- la définition de l'environnement d'exécution (architecture informatique) :
- type(s) d'ordinateur sur lequel le logiciel doit fonctionner (station de calcul, ordinateur de bureau, ordinateur portable, assistant personnel, téléphone portable, guichet automatique de banque, ordinateur embarqué dans un véhicule ;
- type et version du(des) système(s) d'exploitation sous-jacent ;
- périphériques nécessaires à l'enregistrement des données et à la restitution des résultats (capacité de stockage, mémoire vive, possibilités graphiques...) ;
- nature des connexions réseau entre les composants (niveau de confidentialité et de fiabilité, performances, protocoles de communication...) ;
- la conception de l'application et de ses constituants, et notamment de l'interactivité entre les modules développés : structure des données partagées, traitement des erreurs générées par un autre module... : c'est le domaine du génie logiciel ;
- la mise en place d'une stratégie de développement :
- répartition des tâches entre les développeurs ou les équipes de développement, qui vont assurer le codage et les tests ;
- le plan de test du logiciel, pour s'assurer qu'il remplit bien la mission pour laquelle il a été écrit, dans toutes les conditions d'utilisation qu'il pourra normalement rencontrer, mais aussi dans des cas limites.
Après chacune de ces phases, on peut avoir une étape de recette, où le client va valider les choix et les propositions du maître d'œuvre.
La phase de programmation consiste à décrire le comportement du logiciel à l'aide d'un langage de programmation. Un compilateur sert alors à transformer ce code écrit dans un langage informatique compréhensible par un humain en un code compréhensible par la machine, le résultat est un exécutable. On peut également, pour certains langages de programmation, utiliser un interpréteur qui exécute un code au fur et à mesure de sa lecture, sans nécessairement créer d'exécutable. Enfin, un intermédiaire consiste à compiler le code écrit vers du bytecode. Il s'agit également d'un format binaire, compréhensible seulement par une machine, mais il est destiné à être exécuté sur une machine virtuelle, un programme qui émule les principales composantes d'une machine réelle. Le principal avantage par rapport au code machine est une portabilité théoriquement accrue (il « suffit » d'implanter la machine virtuelle pour une architecture donnée pour que tous les programmes en bytecode puissent y être exécutés), portabilité qui a fait, après sa lenteur, la réputation de Java. Il convient de noter que ces trois modes d'exécution ne sont nullement incompatibles. Par exemple, OCaml dispose à la fois d'un interpréteur, d'un compilateur vers du bytecode, et d'un compilateur vers du code natif pour une grande variété de processeurs. Une fois écrit (et compilé si nécessaire), le code devient un logiciel.
Pour des projets de grande amplitude, nécessitant la collaboration de beaucoup de programmeurs, voire de plusieurs équipes, on a souvent recours à une méthodologie commune (par exemple MERISE) pour la conception et à un atelier de génie logiciel (AGL) pour la réalisation.
Au cours de la programmation et avant la livraison du produit final, le programme est testé afin de vérifier qu'il fonctionne bien (y compris dans des cas d'utilisation en mode dégradé) et qu'il est conforme aux attentes de l'utilisateur final. Les tests intermédiaires permettent de s'assurer que chaque module de code réalise correctement une fonction : ce sont les tests unitaires. Les tests finals qui vérifient le bon enchaînement des modules et des traitements sont des tests d'intégration.
Pour certaines applications demandant un haut niveau de sûreté de fonctionnement, les tests sont précédés d'une étape de vérification, où des logiciels spécialisés effectuent (généralement sur le code source, mais parfois aussi sur le code compilé) un certain nombre d'analyses pour vérifier partiellement le bon fonctionnement du programme. Il n'est toutefois pas possible (et des théorèmes mathématiques montrent pourquoi), de garantir la parfaite correction de tout logiciel par ce moyen et la phase de test reste donc nécessaire. Elle se complète aussi, lorsqu'il s'agit d'une évolution d'une application existante, de nombreux tests automatisés de non-régression.
Statistiques : la création d'un logiciel est une tâche ardue ; environ 31 % des projets informatiques sont abandonnés avant d'être terminés, plus de 50 % des projets coûtent le double du coût initialement estimé et seulement 15 % des projets finissent dans les temps et selon le budget défini. Les besoins de seule maintenance de l'existant peuvent prendre jusqu'à 50 % des effectifs d'une équipe chargée d'un logiciel (or, c'est là une fonction pénible, ingrate, peu valorisante et qui rebute et démotive les bons programmeurs).
Traitement de l'information
L'information, pour être traitée, doit être :
- représentée par un codage :
- on utilise un système de numération binaire, où l'élément unitaire informationnel est le bit (contraction de l'anglais binary digit : chiffre binaire). Les bits sont généralement regroupés par huit, pour constituer des octets (ou bytes). Un octet peut être représenté par la séquence des bits qui le constituent (par exemple : 00101110) ou par une paire de valeurs hexadécimales (pour le même exemple : 2E), plus compact. Le choix du binaire ne résulte pas de la mystique, mais tout simplement d'utiliser de simples circuits de commutation, qui ont de très larges tolérances et par conséquent de faibles coûts ;
- on représente la structuration de l'information pour permettre des échanges entre composants logiciels et entre composants matériels. Pour cela, on définit des langages et des formalismes de représentation.
- stockée dans des systèmes permanents (mémoires dites de masse) ou non (mémoires dites volatiles).
Échanges de données : protocoles et normes
Les protocoles définissent une manière de procéder, notamment pour codifier la façon dont deux entités communiquent (modules ou couches logicielles, périphériques, etc.). On parle notamment de protocole de communication lorsqu'on veut définir des mécanismes de contrôle sur la manière dont l'échange d'information est réalisé.
Un protocole peut ainsi définir :
- un langage de description d'instructions et de données graphiques (exemple : AGP) ;
- un standard de commandes et de flux d'information pour une mémoire de masse (exemples : SCSI, FireWire, IDE, Serial ATA) ;
- des échanges entre le processeur et des cartes d'extension (exemples : PCI, PCI Express, ISA) ;
- des modalités de transfert d'information entre périphériques (exemple : USB) ou sur un réseau TCP/IP, Internet, ATM, X.25) ;
- des commandes entre un client et un serveur (exemples : POP3, IMAP, HTTP, FTP …) ;
- des échanges de données informatisés spécifiques (exemples : EDI, EAI, X.400, X.500).
Certains protocoles sont définis par des normes pour permettre l'interopérabilité des matériels ou de logiciels les mettant en œuvre. D'autres normes définissent, toujours dans le domaine de l'échanges de données :
- des langages de représentation d'information sans pour autant définir la manière dont cette information peut être échangée (exemples : ASN.1, XML) ;
- des architectures de réseaux (exemples : Modèle OSI, Wifi, Ethernet, Token-Ring).
Stockage des données
En matière de stockage d'information, on distingue le dispositif permettant de l'enregistrer physiquement (périphériques et composants) de la manière dont on structure et représente l'information pour faciliter son traitement.
Mémoire de masse
:Fichier de cartes perforées
:Bande magnétique
:Disque amovible magnétique (Disquette)
:Disque magnéto-optique
:Disque dur (disque magnétique embarquant le mécanisme, l'électronique et les têtes de lecture)
:Disque optique amovible (CD-ROM, CD-R, CD-RW mais aussi DVD-ROM, DVD-R, DVD-RW, DVD+R, DVD+R DL, DVD+RW, DVD-RAM, GD-ROM, HD-DVD, Blu-ray)
:Mémoire électronique non volatile (Mémoire flash, clé USB)
Mémoire volatile
:RAM
Organisation des données en vue du stockage
:Formats (extensions) de fichiers
:Système de fichiers
:Base de données
:Annuaire
Approches scientifiques
En dehors des aspects industriels et technologiques décrits jusqu'ici, l'informatique est une discipline scientifique à part entière.
:Algorithmique
:Algèbre de Boole
:Calculabilité
:Géométrie algorithmique
:Lambda-calcul
:Logique
:Model checking
:Théorie de l'information
:Théorie des graphes
:Théorie de la complexité
:Théorie de la calculabilité
:Théorie des automates finis
Applications
:Bio-informatique
:Calcul parallèle
:Cryptographie
:Exploration de données (data mining)
:Informatique grand système (mainframe)
:Informatique de gestion
:Informatique industrielle
:Informatique décisionnelle
:Imagerie Informatique
:Intelligence artificielle
:Interface homme-machine
:Micro-informatique
:Traitement du signal
:Hypermédias
:Informatique musicale
Annexes
- Informathèque
- Abréviations en informatique
- Dictionnaire informatique
- Informatique alternative
- Liste des articles d'informatique
- Personnes célèbres en informatique
- Revues informatiques sur papier
- Sécurité informatique
- Sites d'informations sur internet
- Terminologie de la distribution informatique
- Réseaux de neurones
- Musique et informatique
- Ordinateur quantique
- Hello_world
- Visual Information Exploration
-
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
- 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:ตัวแปลโปรแกรม
Interface graphique ko:GUI ja:グラフィカルユーザインターフェース
catégorie:interface utilisateur Catégorie:Environnement graphique Catégorie:Système d'exploitation
Un environnement graphique est, en informatique, ce qui est affiché en mode pixel à l'écran de l'ordinateur et sur lequel l'utilisateur peut agir avec différents périphériques d'entrée comme le clavier, la souris, la dictée vocale, etc. Des images, des animations (en 2 ou 3 dimensions), et même des vidéos peuvent être rendues à l'écran.
Ce type d'interface homme-machine s'oppose à la notion de ligne de commande où la majorité de l'interaction entre l'utilisateur et l'ordinateur se fait au clavier, sans visualisation élaborée, dans un terminal ou dans une fenêtre de terminal en mode texte, comme par exemple dans le cas de DOS. En anglais, GUI est l'abréviation de Graphical User Interface, soit Interface Utilisateur Graphique. Elle s'oppose à CLI pour Command Line Interface, soit Interface en Ligne de Commande.
En France on peut parler d'IHM ou Interface Homme Machine; par extension en anglais continental européen, on parle d'IHM et d'HMI.
Environnement fenêtré
Aussi appelé WIMP, acronyme anglais pour Windows (fenêtres), Icons (icônes), Menus (menus) and Pointing device (dispositif de pointage), ce type d'interface graphique a été inventé par la firme Xerox et rendu célèbre par le Macintosh. Bien qu'il soit aujourd'hui quasiment devenu synonyme d'interface graphique, il ne s'agissait dans les années 1970 que d'une variation parmi beaucoup d'autres projets d'interface.
Les parties les plus typiques d'un environnement fenêtré sont le concept de bureau pour représenter l'espace de travail, de fenêtre pour contrôler les programmes et manipuler les contenants (répertoires), d'icône pour symboliser les fichiers. Plusieurs contrôles graphiques sont couramment utilisés pour interagir avec l'utilisateur, comme les boutons, les menus, les listes déroulantes, les ascenseurs, etc.
Exemples d'environnements fenêtrés
Mac OS, le système d'exploitation des ordinateurs Apple Computer, est généralement reconnu comme l'archétype des environnements fenêtrés.
Sous Microsoft Windows, outre le bureau standard (Explorateur Windows) on peut par exemple utiliser Calmira, Hoverdesk, LiteStep, Talisman.
Sous GNU/Linux et plus généralement tous les systèmes Unix, l'environnement graphique est traditionnellement séparé en plusieurs composants :
- un serveur graphique (généralement X Window System) chargé des primitives de dessin de bas niveau ;
- un gestionnaire de fenêtres comme WindowMaker, IceWM ou encore Enlightenment chargé de partager le serveur graphique entre les différentes application ;
- une bibliothèque de widgets comme GTK+ ou motif chargée de la gestion des différents composants de l'interface : bouton, ascenseurs, zone de texte...
Il existe aujourd'hui des environnements de bureau comme KDE, GNOME, GNUstep ou encore Xfce qui regroupent les différents composants pour assurer un ensemble plus cohérent.
Il y a aussi des projets expérimentaux visant la réalisation d'environnements 3D, comme le Projet Looking Glass.
Environnement graphique d'un poste distant
Il est également possible d'accéder à l'environnement graphique d'un poste distant, en utilisant les protocoles VNC, XDMCP ou Export display par SSH et avec des logiciels adéquats.
Environnement graphique pour applications spécifiques
Il existe aussi des environnements graphiques pour des systèmes dédiés qui ne sont pas toujours basés sur les systèmes d'exploitation standard.
- les écrans tactiles pour les bornes interactives ou les automates de paiement (DAB, billeteries automatiques)
- les machines-outils à commande numérique et autres équipements industriels avec logiciel temps réel (RTOS).
- les derniers modèles de téléphones et de consoles de jeu portables.
Liens internes
- Fenêtre modale
- Gestionnaire de fenêtres
InterpréteurCatégorie:Programmation informatique
En informatique, un interpréteur est un outil ayant pour tâche d'analyser, de traduire, et d'exécuter un programme écrit dans un langage informatique. De tels langages sont dits langages interprétés.
Le cycle d'un interpréteur est le suivant:
- lire et analyser une instruction ;
- si l'instruction est syntaxiquement correcte, l'exécuter ;
- passer à l'instruction suivante.
Ainsi, contrairement au compilateur, l'interpréteur se charge aussi de l'exécution du programme, au fur et à mesure de son interprétation. Du fait de cette phase d'interprétation, l'exécution d'un programme interprété est généralement plus lente que le même programme compilé.
L'intérêt des langages interprétés réside principalement dans la facilité de programmation et dans la portabilité. Les langages interprétés facilitent énormément la mise au point des programmes car ils évitent la phase de compilation, souvent longue, et limitent les possibilités de bogues. Ils permettent ainsi le développement rapide d'applications ou de prototypes d'applications. Ainsi, le langage BASIC fut le premier langage interprété à permettre au grand public d'accéder à la programmation. La portabilité permet d'écrire un programme unique, pouvant être exécuté sur différentes plateformes sans changements, s'il existe un interpréteur spécifique à chaque plateforme matérielle.
Historique
Avec l'apparition du langage compilé Pascal et de compilateurs commerciaux rapides comme Turbo Pascal, les langages interprétés connurent à partir du milieu des années 1980 un fort déclin. Trois éléments changèrent la donne dans les années 1990 :
- avec la nécessité d'automatiser rapidement certaines tâches complexes, des langages de programmation interprétés (en fait, semi-interprétés) de haut niveau comme, entre autres, Tcl, Ruby, Perl ou Python se révélèrent rentables ;
- la puissance des machines, qui doublait tous les dix-huit mois en moyenne (selon la loi de Moore), rendait les programmes interprétés des années 1990 d'une rapidité comparable à celle des programmes compilés des années 1980 ;
- il est bien plus rapide de faire évoluer un programme interprété. Or la vague Internet demandait une réponse très rapide aux nouveaux besoins du marché. amazon.com fut, dans sa première version, développé largement en Perl. Smalltalk permettait un prototypage très rapide d'applications (parfois en moins d'une journée, par exemple, pour tenir compte d'aides fiscales à l'achat de voitures neuves).
Utilisations des langages interprétés
Les langages interprétés trouvent de très nombreuses utilisations :
- dans le domaine éducatif, les langages interprétés permettent de se concentrer sur les algorithmes et les structures de données, et non sur les particularités de tel ou tel langage. Il est à noter toutefois que les structures de données n'ont plus à être enseignées de façon pratique aujourd'hui, sauf aux concepteurs de langages. Elles sont en effet disponibles en standard dans tous les langages objet, et même quelques autres. Ainsi Perl implémente les hashs ou fonctions de hachage comme type d'accès de base, éliminant tout besoin de les programmer ;
- les calculs scientifiques ne demandant pas de calcul intensif (itérations sur de très grandes matrices, par exemple) peuvent s'écrire avec profit dans un langage interprété. Ils permettent d'appeler des algorithmes de calcul performants précompilés. Les systèmes de calcul symbolique utilisent aussi cette possibilité ;
- les interpréteurs de ligne de commande (désignés par le nom shell dans la terminologie Unix). Ces interpréteurs sont capables de comprendre des commandes tapées sur un clavier ou en provenance d'une autre source. Ils disposent d'une syntaxe spécifique à chaque système d'exploitation, et permettent de gérer les ressources matérielles d'une machine (disques, mémoire centrale, entrées/sorties, etc.) ainsi que la communication entre les programmes. Rexx est le langage de commandes des ordinateurs centralisés d'IBM, tandis que les Bourne shell, C-shell, Korn shell sont les shells les plus courants sous Unix ; quant au MS-DOS, le plus rudimentaire des interpréteurs de ligne de commande, il est propre aux systèmes d'exploitation de Microsoft. Des langages de programmation comme Perl ou Rexx sont souvent installés pour disposer d'un environnement plus puissant et plus convivial que les shells d'origine. On conçoit que la compilation ne présenterait pas d'intérêt pour des commandes :
- dont chacune est exécutée en moyenne une fois ;
- ou dont la limitation de performance provient de questions d'accès aux fichiers, et non de calcul ;
- le langage SQL (Standard Query Language) est un langage interprété standardisé qui permet de mettre à jour ou extraire des informations contenues dans des bases de données ;
- les navigateurs web reçoivent des instructions symboliques et les exécutent directement. Les navigateurs courants savent tous interpréter du code HTTP (HyperText Transfer Protocol) pour les instructions de transfert d'une machine à l'autre, du code HTML (HyperText Markup Langage) pour les descriptions des pages web, et du Javascript pour une programmation plus élaborée, offrant la possibilité de manipuler des variables plus ou moins complexes, des structures de contrôle et de manipuler les différents objets entrants dans la composition d'une page Web. Ces pages peuvent être statiques (elles sont écrites une fois pour toutes) ou générées dynamiquement par le serveur qui produit le code HTML au moment de la requête. Il peut ainsi adapter la page en fonction du contexte d'exécution. Les langages les plus couramment utilisés pour la génération dynamique de page Web sont Perl et PHP ;
- de nombreux programmes incluent un langage afin d'automatiser certaines actions ou de créer de nouvelles fonctionnalités. Un des langages les plus utilisés pour cela est Scheme, une variante de Lisp. Le langage de description XML est aussi fortement utilisé pour le formatage des données, que ce soit au niveau de l'interface homme-machine, au niveau du transfert de données ou de leur écriture sous forme de fichiers. Dans ce domaine, on trouve également Perl, Python ou Tcl ;
- le langage PostScript, langage permettant la description de graphiques vectoriels (propriété de la société Adobe), qui est souvent implémenté dans les imprimantes graphiques, les tables traçantes et les photocomposeuses ;
- il existe des extensions permettant la programmation rapide d'interfaces graphiques à l'aide de langages interprétés. Le plus répandu est Tcl/Tk, mais il existe également Python/Tk, Python/wxWidgets, Perl/wxWidgets Python/Qt ou encore Gambas ;
- dans le monde industriel, de plus en plus de machines sont pilotables par un langage interprété : les robots industriels, les machines-outils (APT, langage ISO (ou blocs)), les traceurs de plan, souvent pilotés en PostScript.
Voir Aussi
- Pré-compilateur
ja:インタプリタ
ko:인터프리터
Système embarquéUn système embarqué est un système intégré dans un système plus large avec lequel il est interfacé, et pour lequel il réalise des fonctions particulières (contrôle, surveillance, communication).
Les systèmes embarqués désignent aussi bien le matériel que le logiciel qui permettent de réaliser ces fonctions.
Dans certaines applications, le matériel utilisé est un ordinateur, alors que dans d'autres, il s'agit de matériel dédié.
Domaines d'applications
Les domaines dans lesquels on trouve des systèmes embarqués sont de plus en plus nombreux : aéronautique, automobile, téléphone, électroménager (télévision, four à micro-ondes, etc.).
Particularités
Ces systèmes possèdent souvent la caractéristique principale de fonctionner en temps réel, car ils doivent gérer des informations et en déduire des actions avec un délai maîtrisé (soit un délai connu, soit un délai borné). De plus, ils sont souvent dits « critiques », ce qui signifie qu'ils ne doivent jamais faillir (notion de sécurité de fonctionnement).
Voir aussi
- Informatique embarquée
Liens externes
- [http://www.embeddedtouch.com EmbeddedTouch] : banque de données sur les méthodes et les outils de développement des systèmes embarqués
- [http://www.aerospace-valley.com/ AerospaceValley] : pôle de compétitivité systèmes embarqués
Catégorie:Logiciel
Catégorie:Matériel informatique
ja:組み込みシステム
ko:임베디드 시스템
LED
Une diode électroluminescente (également appelée DEL ou LED : light-emitting diode) est un composant électronique capable d'émettre de la lumière lorsqu'il est parcouru par un courant électrique.
Une LED produit un rayonnement monochromatique incohérent à partir d'une transformation d'énergie. Elle a un spectre d'émission continu et fait partie de la famille des composants optoélectroniques.
Historique
Xavier Jr. (né en 1928) est le premier à avoir créé une diode à spectre visible en 1962.
Mécanisme d'émission
C'est lors de la recombinaison d'un électron et d'un trou dans un semiconducteur qu'il y a émission d'un photon. En effet, la transition d'un électron entre la bande de conduction et la bande de valence peut se faire avec la conservation du vecteur d'onde . Elle est alors radiative (émissive) et elle s'accompagne de l'émission d'un photon. Dans une transition émissive, l'énergie du photon créé est donnée par la différence des niveaux d'énergie avant (Ei) et après (Ef) la transition :
(eV)
Une diode électroluminescente est une jonction PN qui doit être polarisée en sens direct lorsqu'on veut émettre de la lumière. La plupart des recombinaisons sont radiatives. La face émettrice de la led est la zone P car elle est la plus radiative.
vecteur d'onde
Rendement
On définit plusieurs rendements qui mettent en évidence les limites de la LED :
- Le rendement global η (rapport de la puissance lumineuse émise à la puissance électrique absorbée) est le produit des deux rendements quantiques qui suivent à une constante près.
- Le rendement quantique interne ηi (rapport du nombre de photons générés aux nombres de porteurs traversant la jonction) est essentiellement lié aux caractéristiques internes de la diode. Il est le produit des rendements d'injection et d'émission et est en général assez élevé. Sa valeur maximale permet de déterminer le dopage NA à utiliser.
- Le rendement d'injection γ (rapport du courant d'injection susceptible de produire des recombinaisons radiatives au courant total). Comme seule la face P est émettrice, les recombinaisons ayant lieu dans la zone N ne participent pas à l'émission et le courant d'injection des trous est inutile pour l'émission.
- Le rendement d'émission ηe (rapport du taux de recombinaisons radiatives aux taux de recombinaisons globales) est dû au fait que toutes les recombinaisons ne sont pas radiatives.
- Le rendement quantique externe η0 (rapport du nombre de photons émis au nombre de photons créés). C'est ce rendement quantique externe qui limite le rendement global. Pour sortir du dispositif (enveloppe externe et semiconducteur), les photons doivent traverser (sans être absorbés) le semiconducteur, de la jonction jusqu'à la surface, puis traverser la surface du semiconducteur sans subir de réflexion. Pour diminuer les phénomènes de diffraction, les enveloppes externes des diodes sont souvent en forme de dômes.
Techniques de fabrication
La longueur d'onde du rayonnement émis est déterminée par la largeur de la bande interdite et dépend donc du matériau utilisé. Toutes les valeurs du spectre lumineux peuvent être atteintes avec les matériaux actuels. Pour obtenir de l'infrarouge, le matériau adapté est l'arséniure de gallium (GaAs) avec comme dopant du Si ou du Zn. Les fabricants proposent de nombreux types de diodes aux spécificités différentes. On peut citer le type le plus répandu : les diodes à l'GaAs, ce sont les plus économiques et ont un usage général. Bien qu'elles nécessitent une tension directe plus élevée, les diodes à l'GaAlAs offrent une plus grande puissance de sortie, ont une longueur d'onde plus courte (< 950nm, ce qui correspond au maximum de sensibilité des détecteurs au silicium) et présentent une bonne linéarité jusqu'à 1.5A. Enfin, les diodes à double hétérojonction (DH) GaAlAs offrent les avantages des deux techniques précédentes (faible tension directe) en ayant des temps de commutation très courts (durée nécessaire pour qu'un courant croisse de 10% à 90% de sa valeur finale ou pour décroisse de 90% à 10%), ce qui permet des débits de données très élevés dans les transmissions de données numériques par fibres optiques. Les temps de commutation dépendent de la capacité de la jonction dans la diode.
Caractéristiques
Forme
Ce composant peut être encapsulé dans diverses formes destinées à canaliser le flux de lumière émise de façon précise: cylindrique à bout arrondi en 3, 5, 8 et 10mm de diamètre, cylindrique à bout plat, rectangulaire, sur support coudé, en technologie traversante ou à monter en surface (CMS).
Luminosité
- Le rendement lumineux général des leds est assez faible, mais suffisant pour la signalisation sur tableau. Le bâtiment du NASDAQ, à New York possède une façade lumineuse animée entièrement réalisée en leds (quelques dizaines de milliers).
New York
- Des leds dites super lumineuses ont vu le jour à la fin du siècle. Leur rendement est tel, que montées en nombre suffisant, elles sont employées en remplacement de lampes à incandescence classiques :
- Feux de signalisation automobile (clignotant, veilleuses, feux de position).
- Leds noyées dans le bitume pour la matérialisation des pistes la nuit ou par temps de brouillard.
- Signalisation portative individuelle (piéton, cycliste).
- Eclairage de courte portée portatif.
- Les avantages des LED super-lumineuses sont :
- Une très faible consommation électrique due à un très bon rendement (quelques dizaines de milliwatts, mais il faut associer des centaines de leds pour obtenir l'équivalent d'une lampe classique).
- Une durée de vie beaucoup plus longue qu'une lampe à incandescence, et une fin qui se déclare par une baisse de rendement progressive et non par un claquage brusque.
- Un fonctionnement en | | |