Hello world

Une page de Vikidia, l’encyclopédie junior
(Redirigé depuis Hello World)
Aller à la navigation Aller à la recherche
Création, affichage, compilation puis exécution d'un Hello World! en C sous Linux.

Hello World (en français Bonjour le monde) est un programme simple qui est traditionnellement écrit pour donner un exemple rapide d'un langage de programmation (lors de l'apprentissage de celui-ci ou d'un simple test).

La longueur de ce programme varie en fonction du langage de programmation utilisé : il peut d'ailleurs être utilisé pour savoir si le langage est de bas niveau (proche du langage machine, Hello World long) ou de haut niveau (plus abstrait, Hello World court).

Le Hello World fut lancé pour la première fois comme exemple de programme dans le livre The C Programming Language de Brian Kernighan et Dennis Ritchie.

Exemples[modifier | modifier le wikicode]

Voici des Hello World! pour divers langages de programmation. Ces programmes sont minimaux mais complets : il n'est pas nécessaire de leur rajouter du code pour les faire fonctionner, mais on ne peut en général pas leur en enlever.

Ada[modifier | modifier le wikicode]

with Ada.Text_IO;
use Ada.Text_IO;

procedure Bonjour is
begin -- Bonjour
  Put("Hello world!");
end Bonjour;

Assembly[modifier | modifier le wikicode]

MODEL SMALL
STACK 100H
.DATA
    HW      DB      "hello, world", 13, 10, '$'
.CODE
.STARTUP
    MOV AX, @data
    MOV DS, AX
    MOV DX, OFFSET HW
    MOV AH, 09H
    INT 21H
    MOV AX, 4C00H
    INT 21H
END

Awk[modifier | modifier le wikicode]

BEGIN { print "Hello World!" }

C[modifier | modifier le wikicode]

#include <stdio.h>
int main(void)
{
 printf("%s", "Hello World!\n");
 return 0;
}

C++[modifier | modifier le wikicode]

#include <iostream>
int main ()
{
 std::cout {{"| "Hello World!" {{"| std::endl;
}

Haskell[modifier | modifier le wikicode]

main = putStrLn "Hello World!"

HTML[modifier | modifier le wikicode]

Attention HTML n'est pas un langage de programmation mais un langage de balisage.

HTML 5 :

<!DOCTYPE html>
<html>
 <body>
  <p>Hello World</p>
 </body>
</html>

Javascript[modifier | modifier le wikicode]

à l'intérieur d'une page html entre les balise <body> et </body>

<script>
  document.write('Hello World ! <br />');
</script>

INTERCAL[modifier | modifier le wikicode]

INTERCAL (wp) est un langage de programmation fait exprès pour être le plus compliqué et absurde possible. Le code suivant est strictement équivalent au Hello World en C montré plus haut !

DO, 1 <- #13
PLEASE DO, 1 SUB #1 <- #238
DO, 1 SUB #2 <- #108
DO, 1 SUB #3 <- #112
DO, 1 SUB #4 <- #0
DO, 1 SUB #5 <- #64
DO, 1 SUB #6 <- #194
DO, 1 SUB #7 <- #48
PLEASE DO, 1 SUB #8 <- #22
DO, 1 SUB #9 <- #248
DO, 1 SUB #10 <- #168
DO, 1 SUB #11 <- #24
DO, 1 SUB #12 <- #16
DO, 1 SUB #13 <- #162
PLEASE READ OUT, 1
PLEASE GIVE UP

Java[modifier | modifier le wikicode]

public class HelloWorld           // Comme tout est {{"|classe}} (c'est-à-dire objet)
{                      // en Java, on doit en créer une.

  public static void main(String[] args)  // Un programme Java commence toujours dans
  {                    // une fonction {{"|main}} comme celle-ci.

    System.out.println("Hello World!"); // On demande au {{"|System}} d'écrire ({{"|println}})
                       // "Hello World!" sur l'écran ({{"|out}}).
  }
}

Assembleur[modifier | modifier le wikicode]

(pour une machine Linux avec un processeur Intel x86)
section	.text
 global _start ; on définit une fonction _start (voir ci-dessous)

_start:     ; {{"|voici ce que fait la fonction _start}}
 mov edx, len ; sélection de la longueur du message
 mov ecx, msg ; sélection de l'adresse du message
 mov ebx, 1  ; sélection de l'endroit d'affichage ({{"|sortie standard}})
 mov eax, 4	; sélection de l'appel système {{"|write}}
 int 0x80	; exécution de cet appel (interruption kernel)

 mov eax, 1	; sélection de l'appel système {{"|exit}}
 int 0x80	; exécution de cet appel (interruption kernel)

section	.data  ; l'endroit où sont rangées les données du programme
 msg db  'Hello, world!', 0xa ; adresse du message
 len equ  $ - msg       ; longueur du message

Un programme est constitué de sections qui séparent ses différentes parties. Ici, on voit deux sections : .text et .data. La section text contient les instructions, tandis que la section data correspond à certaines variables du programme (ici, on peut voir msg et len).

Avant tout, il faut savoir que le processeur de l'ordinateur possède des registres, qui sont de petites cases de mémoire où lui et nous plaçons les valeurs qu'il a produites ou avec lesquelles il doit travailler.

Juste après le début de la section text (tout au début du code), on définit une fonction nommée _start avec l'instruction « global ». C'est par là que commence le programme. Ensuite, à la troisième ligne, on dit quelles instructions contient _start :

  1. mov edx, len : on met (« move », en anglais « déplacer ») la valeur de len (qui est la longueur du message à afficher, « Hello, World! », donc 13) dans le registre edx.
  2. mov ecx, msg : on met msg (l'adresse du message « Hello, World! ») dans le registre ecx.
  3. mov ebx, 1 : on met dans le registre ebx l'endroit où l'on veut afficher le message : 1 correspond à la « sortie standard » (en général l'écran).
  4. mov eax, 4 : on met dans le registre eax le numéro 4, qui correspond à l'appel système write : c'est lui qui va s'occuper d'écrire (en anglais « write ») les caractères de notre message sur la sortie standard.

Il faut bien comprendre que, quand on fait de l'assembleur, on s'adresse aux fonctions les plus basiques du système (le noyau, ou kernel). Ici, on va directement appeler le processeur ! C'est le travail de l'instruction int 0x80 : elle interrompt le processeur en lui disant :

« Hé, processeur, regarde un peu par là ! J'ai mis dans tes registres (eax, ebx, etc.) ce que tu as à faire ! »

Le processeur interrompt alors notre programme et demande au noyau du système d'exploitation d'exécuter l'appel système qui se trouve dans son premier registre (eax) en lui donnant en paramètre ce que contiennent les registres suivants (ebx, ecx, etc.). Le noyau fait ce qu'il faut, puis le processeur reprend l'exécution de notre programme.

Ensuite, c'est pareil, sauf qu'on ne veut plus écrire mais terminer. On va donc utiliser un autre appel système, le numéro 1, qui signifie que notre programme est terminé : encore une fois, on met ce 1 dans le premier registre du processeur eax puis on lui relance une interruption : de la même manière, le noyau va prendre le relais et, cette fois-ci, terminer l'exécution du programme.

Lisp[modifier | modifier le wikicode]

(print "Hello World!")

Les parenthèses sont indispensables : elles créent une liste contenant deux éléments : print et "Hello World!", ce qui signifie en Lisp qu'on applique la fonction print au reste de cette liste (donc à "Hello World!").

Microsoft Small Basic[modifier | modifier le wikicode]

TextWindow.WriteLine("Hello World")

OCaml[modifier | modifier le wikicode]

print_string "Hello World!\n";;


Pascal[modifier | modifier le wikicode]

programme complet

program hello;
begin
  writeln('Hello World!');
end.

Perl[modifier | modifier le wikicode]

Dans les versions inférieures à 5.10, on doit écrire le retour à la ligne :

print "Hello World!\n";

Mais c'est inutile (quoique faisable) dans la version 5.10 et après, ou dans Perl 6 :

say "Hello World!";

PHP[modifier | modifier le wikicode]

<?php echo "Hello World" ?>

Python[modifier | modifier le wikicode]

print "Hello World"

ou, depuis la version 3 du langage :

print ("Hello World")

Ruby[modifier | modifier le wikicode]

puts "Hello World"
Langages de programmation.svg
Les langages de l’informatique
Portail de l'informatique —  Tous les articles sur son histoire, les logiciels, Internet…