Événements liés
  • [Tuto] Le langage OCaml Jour 1: 01 Octobre 2007
Pages: [1] 2   Bas de page
Imprimer
Auteur Fil de discussion: [tuto/ocaml] Le langage OCaml day-1  (Lu 6050 fois)
0 Membres et 1 Invité sur ce fil de discussion.
Darkmath Hors ligne
Administrateur
*****
Messages: 521


Voir le profil WWW
« 01 Octobre 2007, 18:24:08 »

http://www.dev-fr.org/images/ocaml.jpg

Ceux qui me connaissent savent qu'il existe un langage que j'affectionne particulièrement. Ce langage, c'est OCaml. Probablement pas le plus connu, ni le plus utilisé, il reste néanmoins un langage très puissant.

OCaml ?? C'est quoi ?

OCaml est un langage de programmation fonctionnel, c'est-à-dire que pour lui les fonctions sont des valeurs comme les autres. On peut utiliser une fonction comme paramètre ou bien comme valeur de retour d'une autre fonction. Ceci est très pratique par exemple lorsqu'on a besoin de faire de la récursion.
OCaml est typé statiquement, c'est-à-dire qu'il détermine "tout seul" le type de vos variables/valeurs (fonction, entier, double, etc.) en fonction de la manière dont vous les utilisez. Ceci permet de s'assurer de la cohérence de son programme, OCaml refusant de compiler si on utilise un type à la place d'un autre (Il n'y a pas de transtypage à proprement parler en OCaml)
OCaml est un langage objet (le O veut dire Objective). Azn
OCaml est un langage impératif.
OCaml s'utilise de trois manières différentes, soit comme langage interprété par une boucle d'interaction, soit compilé vers du code octet interprété par une Machine Virtuelle, soit compilé en code natif exécutable sur sa machine.
OCaml est français (COCORICO). Créé par Xavier Leroy au sein de l'INRIA.

À quoi ça sert ?

Je laisse la parole à l'INRIA
Citation
Le langage Caml a initialement été utilisé pour développer des applications réalisant des calculs symboliques: prouveurs de théorèmes, compilateurs et interprètes, analyseurs de programmes, etc. Il est maintenant utilisé pour réaliser toutes sortes de logiciels dans de nombreux domaines d'application. Cette variété est illustrée par notre sélection de quelques succès.

Le langage Caml est largement utilisé pour l'enseignement de la programmation. Il est également utilisé dans de nombreux projets universitaires en Europe, en Asie et en Amérique. Plusieurs grosses entreprises développent des applications industrielles significatives en Caml, par exemple Dassault, France Télécom, Microsoft, IBM et le CEA (Commissariat à l'Énergie Atomique).

Le consortium Caml offre à nos partenaires industriels et universitaires une structure formelle pour participer au développement, à la maintenance et à l'évolution de Caml. Les membres du consortium bénéficient également de conditions de licence très souples pour le logiciel Caml.

Je rajoute quelques mots : OCaml est beaucoup utilisé dans les universités françaises pour apprendre l'utilisation des langages fonctionnels, la récursion, etc.
Dans le domaine industriel, c'est son côté très fortement typé assurant des risques de plantage minimum qui plait. En effet lorsqu'un programme OCaml est compilé dans la plupart des cas il tourne et fait ce qu'on attend de lui (je pars du principe que le code et les algos sont bons).
Une des principales faiblesses d'OCaml dans le monde de l'entreprise est qu'il n'est pas normé, en effet la dernière version d'OCaml n'assure pas que les anciens programmes tourneront s'ils sont compilés avec le nouveau compilateur, etc. Bien entendu, cela n'arrive pas, mais rien ne l'empêche et les entreprises sont frileuses. Azn
Microsoft pourrait démocratiser un peu OCaml grâce au F# (mais c'est un autre sujet)

Comment ça marche ?

Comme dit plus haut, il y a trois façons d'utiliser du code OCaml :

Boucle d'interaction :

Tapez 'ocaml' dans votre console (pour les windowsiens (erf) je n'ai jamais testé OCaml sur cet OS donc je vous laisse trouver tout seuls Azn)
Vous venez d'entrer dans la boucle d'interaction.
Tapez votre code, celui-ci sera interprété et exécuté.
Petit rappel une expression OCaml dans la boucle d'interaction se termine par ';;'.
Le petit message du type
_ : unit = () qui apparaît lorsque vous exécutez le code vous permet de vérifier que vos typages sont corrects (mais nous étudierons tout ça dans un prochain tuto).

Bytecode :

Pour compiler vers du bytecode interprétable par une machine virtuelle OCaml (et donc exportable sur n'importe quelle machine (avec une faible perte d'efficacité)) vous devez utiliser la commande suivante :

ocamlc -o monProg.exe monProg.ml

L'utilisation de librairies supplémentaires ou la compilation de code répartie sur plusieurs fichiers sera vue ultérieurement.

Natif :

Pour obtenir l'exécutable le plus rapide, mais non-exportable il faut utiliser le compilateur ocamlopt (opt pour optimisé) :

ocamlopt -o monProg.exe monProg.ml

Vous remarquerez que des fichiers .mli (pour le bytecode) et .cmi (pour le code natif) sont générés lors de la compilation. Encore une fois nous étudierons tout cela dans un prochain tuto.


Un exemple commenté : le "hello world"


Code
(ocaml):
print_string "Hello World\n";;
 

ou

Code
(ocaml):
print_string "Hello World";;
print_newline();;
 

ou

Code
(ocaml):
print_endline "Hello World";;
 

ou

Code
(ocaml):
open Printf;;
printf "Helo World\n";;
 

Oui ça fait beaucoup de façons de faire la même chose.
On va étudier dans le détail toutes ces possibilités (et il en existe d'autres Azn).

_______________________________

Première méthode :

Code
(ocaml):
print_string "Hello World\n";;
 

Très simple, on voit qu'OCaml gère directement l'affichage de texte sur la sortie standard (plus d'explication sur les systèmes d'entrée/sortie un jour peut-être)
print_string est une fonction qui prend une string et ne retourne rien (en OCaml on dit unit, c'est un peu plus compliqué, mais on verra tout ça plus tard)
on peut voir que le retour chariot est le même que partout (ou presque) '\n'
Comme dit précédemment, la fin de la commande est matérialisée par un double ; faites-y bien attention car le ; simple existe aussi en OCaml mais n'a pas la même fonction.
Vous noterez aussi que les arguments des fonctions sont passés directement à la suite de la fonction sans parenthèsages, etc.

Seconde méthode :

Code
(ocaml):
print_string "Hello World";;
print_newline();;
 

Ici, rien d'extraordinaire on n'écrit pas le retour chariot dans la string, mais on utilise la fonction print_newline pour le faire.

Troisième méthode :

Code
(ocaml):
print_endline "Hello World";;
 

Toujours pareil : ici print_endline force le retour chariot après l'affichage de la string passée en paramètre.

Quatrième méthode :

Code
(ocaml):
open Printf;;
printf "Hello World\n";;
 

Ici c'est plus intéressant, le open Printf permet d'ouvrir le module Printf (c'est un peu le #include du C).
Printf est un module intégré à OCaml donc vous n'avez pas à vous soucier de son emplacement.
Une fois le module ouvert, on a accès à toutes les fonctions qu'il contient. Ce qui nous permet donc d'utiliser la fonction printf qui prend une string en argument et l'affiche sur la sortie standard.
L'utilisation des modules en OCaml peut se faire de deux manières :
  • soit avec un open comme dans l'exemple présenté ici
  • soit en ajoutant comme préfixe le nom du module à la fonction que l'on souhaite utiliser.
    Par exemple ici on aurait pu obtenir le même résultat en écrivant :
Code
(ocaml):
Printf.printf "Hello World\n";;
 

Synthèse

Qu'a-t-on vu aujourd'hui ?
  • ce qu'est le langage OCaml (brièvement)
  • dans quels domaines il est utilisé
  • l'utilisation impérative simple de ce langage

La prochaine fois on pourrait jouer avec des fichiers ou afficher de jolis dessins, le tout en fonctionnel récursif.
Dites-moi si vous préférez les fichiers ou le graphisme. Azn Ou si vous me trouvez trop ambitieux pour un tuto 2....

Voilà, c'est tout pour aujourd'hui.
Si ce tuto vous plait, si vous avez un problème ou si vous souhaitez une suite n'hésitez pas à en faire part ici.

Pour finir une phrase de mon prof d'aujourd'hui concernant la vitesse d'exécution :
"Le C c'est plus rapide...
... pour faire des conneries.
Le Caml c'est plus lent...
... pour faire bien"
© E. Chailloux

Pour installer OCaml : http://caml.inria.fr/download.fr.html

Tuto2
« Dernière édition: 30 Octobre 2007, 09:04:02 par Darkmath » Journalisée

Doud Hors ligne
Full Member
***
Messages: 246


Voir le profil
Chasseur de bug

« Réponse #1 : 01 Octobre 2007, 18:36:49 »

Eheh, merci Dark Smiley

Demain Scheme?  whistle
Journalisée

Darkmath Hors ligne
Administrateur
*****
Messages: 521


Voir le profil WWW
« Réponse #2 : 01 Octobre 2007, 18:52:55 »

Héhé, pourquoi pas...
Plus sérieusement non, rien de prévu de ce côté, OCaml reste (goût personnel) plus agréable à utiliser que Scheme...
Journalisée

Minishlink Hors ligne
Mega Member
***
Messages: 1439


Voir le profil WWW
Quand on veut, on peut !

« Réponse #3 : 01 Octobre 2007, 20:06:34 »

Franchement j'aimerais bien pour les graphismes Azn
Journalisée

thoduv Hors ligne
Sr. Member
****
Messages: 364


Voir le profil WWW
Hello world...

« Réponse #4 : 01 Octobre 2007, 20:49:12 »

Merci de nous faire découvrir un langage ! Smiley
Bon, le simple tuto "Hello World" est trop peu pour juger le l'interet de celui-ci par contre.
Petite question: c'est pas chiant le ;; ? Déjà que le ; en C ça m'énerve plus ou moins...  whistle
Journalisée

Darkmath Hors ligne
Administrateur
*****
Messages: 521


Voir le profil WWW
« Réponse #5 : 01 Octobre 2007, 21:17:22 »

Oui et non, perso le ;; ou le ; peu m'importe, ça se tape vite qd même.
Et puis en OCaml des fois y a rien aussi, enfin comme d'hab on verra tout ça plus tard.
Alors, pour la prochaine fois: graphismes, fichiers, les deux, aucun?
Journalisée

Yus Hors ligne
Relecteur et
Administrateur
*****
Messages: 349


Voir le profil WWW
« Réponse #6 : 01 Octobre 2007, 21:21:47 »

J'adore la citation de ton prof. Grin

PS : merci de m'avoir donné envie d'en savoir plus sur ce langage. Wink
Journalisée


Il est dangereux de frôler les arbres, mais vous serez récompensé si vous prenez des risques.
Toiletking Hors ligne
Mega Member
***
Messages: 1293


Voir le profil WWW
"Caca Boudin!"

« Réponse #7 : 01 Octobre 2007, 22:21:50 »

moi maintenant, j'ai envie de faire du pyton, et du ocaml... pis du php (depuis longtemps)... Avec tous vos Tutos, je ne saurais plus par quel pied danser - la salsa - Azn

Mais voilà, je fais plein de conneries en c  Grin
Journalisée
Starcom Hors ligne
Jr. Member
**
Messages: 85


Voir le profil WWW
« Réponse #8 : 02 Octobre 2007, 07:04:57 »

Faudra que je regarde ça Ocalm mais ça à l'air fumant  Azn

Ok, je sors  whistle
Journalisée

Pitt Hors ligne
Administrateur
*****
Messages: 575


Voir le profil WWW
« Réponse #9 : 02 Octobre 2007, 19:14:44 »

Bon j'avoue que je connaissais pas du tout OCaml ... Et je dois dire que ça *pourrait* être prometteur Azn Mais bon comme dit plus haut, juger un langage sur un hello world serait plus que stupide. Azn
Je vais me renseigner un peu sur le sujet, mais merci pour le tuto (et continue, mais ça va de soi whistle).
Journalisée
Darkmath Hors ligne
Administrateur
*****
Messages: 521


Voir le profil WWW
« Réponse #10 : 02 Octobre 2007, 19:56:00 »

Bien sur que je continue.

Et OUI ce langage est prometteur Azn
Probablement le prochain tuto lundi prochain, mais je garantie rien (comme d'hab)...
Journalisée

Cid2Mizard Hors ligne
Super Mega Member
****
Messages: 4064


Voir le profil WWW
Disciple Kukulcanien

« Réponse #11 : 02 Octobre 2007, 20:11:39 »

Moi j 'ai qu'un truc à dire ... http://i20.servimg.com/u/f20/11/16/46/09/ocaml10.png
Journalisée

Noda Hors ligne
Full Member
***
Messages: 208


Voir le profil WWW
« Réponse #12 : 02 Octobre 2007, 20:40:47 »

Argh non pas du Caml Cheesy j'en ai trop bouffé en 1e année Langue c'est vrai que c'est bien pratique pour faire des moulinettes, mais alors pour coder une app avec quelle horreur  whistle

sinon ptite bourde: le OCaml n'est pas un langage à typage statique mais au contraire dynamique, car comme tu le précise le type est déterminé suivant l'utilisation qui est faite d'un variable Wink
Journalisée
Darkmath Hors ligne
Administrateur
*****
Messages: 521


Voir le profil WWW
« Réponse #13 : 02 Octobre 2007, 20:55:43 »

Citation de: inria
Objective Caml fut le premier langage de programmation (et est toujours le seul) qui combine toute la puissance de la programmation par objets avec un typage statique avec inférence dans le style de ML.

Citation de: wikipedia
OCaml est un langage à typage statique et automatique avec synthèse de types.

Je t'assure noda le typage est statique Azn, de même c'est pas si mauvais pour faire une app, faut juste savoir s'en servir whistle
« Dernière édition: 02 Octobre 2007, 21:00:30 par Darkmath » Journalisée

Bobiwan Hors ligne
Full Member
***
Messages: 184


Voir le profil
Core

« Réponse #14 : 14 Février 2008, 13:09:29 »

 a propos d'ocaml, vu que c'est un lanage pouvant etre interprété ou compilé , il dois etre possible de'avoir un interpreteur "online" genre une applet ou un vieux service ajax qui qui fait du client serveur.

vous connaitriez un truc comme ca de dispo ? (je ne peux installé d'interpreteur au boulot Sad )
Journalisée

--
std::cout << "Zbob" << std::endl
Pages: [1] 2   Haut de page
Imprimer

Aller à: