« Caml » : différence entre les versions

Un article de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
Elopash (discuter | contributions)
mAucun résumé des modifications
Bob08 (discuter | contributions)
m infobox
 
(45 versions intermédiaires par 31 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
{{Infobox Logiciel}}
'''Caml''' (prononcé camel, signifie Categorical Abstract Machine Language) est un [[langage de programmation]] généraliste conçu pour la sécurité et la fiabilité des programmes. Il se prête à des styles de programmation [[Programmation fonctionnelle|fonctionnelle]], [[Programmation impérative|impérative]] et [[Programmation orientée objet|orientée objet]]. C'est de plus un langage [[typage fort|fortement typé]].
'''Caml''' (prononcé ''camel'', signifie ''Categorical Abstract Machine Language'') est un [[langage de programmation]] généraliste conçu pour la sécurité et la fiabilité des programmes. Il se prête à des styles de programmation [[Programmation fonctionnelle|fonctionnelle]], [[Programmation impérative|impérative]] et [[Programmation orientée objet|orientée objet]]. C'est de plus un langage [[typage fort|fortement typé]].


Le style fonctionnel rapproche le langage Caml de l’écriture mathématique, notamment grâce à la [[algorithme récursif|récursivité]] et au [[filtrage par motif]] ''(pattern matching)''. Ce dernier, particularité de la famille ML, offre une syntaxe au cas par cas claire et lisible, et est aussi utilisé dans le rattrapage des [[Système de gestion d'exceptions|exceptions]], en particulier pour la gestion des erreurs. Le [[typage fort]] rend l’usage sûr mais moins souple pour le programmeur. Enfin, Caml pratique l’[[inférence de types]] pour déterminer automatiquement le type des variables et expressions et permet la [[généricité]].
Le Caml est développé depuis 1985 par les équipes Formel puis Cristal de l'[[Institut national de recherche en informatique et en automatique|INRIA]] et notamment pendant cinq ans par le professeur [[Guy Cousineau]]<ref>[http://www.aeres-evaluation.fr/content/download/15025/248183/file/Cousineau%20Guy-CV.pdf Guy Cousineau - AERES - CV], consulté sur www.aeres-evaluation.fr le {{Date|15|février|2011}}</ref> ([[Université Paris Diderot]]). Il existe deux implémentations de Caml&nbsp;:


Descendant du [[ML (langage)|langage ML]], le Caml est développé depuis 1985 par les équipes Formel puis Cristal de l'[[Institut national de recherche en informatique et en automatique|Inria]] et l'a notamment été pendant cinq ans par le professeur [[Guy Cousineau]] ([[université Paris-Diderot]])<ref name="CV-Cousineau"/>. La variante active de Caml est '''[[OCaml]]'''. Par rapport à l'ancienne variante '''[[Caml Light]]''', aujourd'hui obsolète, elle ajoute de nombreuses fonctionnalités, comme un système de [[Module (programmation)|modules]] beaucoup plus poussé et le support de la programmation orientée objet (reposant sur le ''[[duck typing]]'') dont elle tire son nom.
* [[OCaml]] est l'implémentation la plus avancée,
* [[Caml Light]] est une implémentation légère, souvent utilisée dans les milieux pédagogiques.

Le Caml est, dans sa version '''[[Caml Light]]''', enseigné en option informatique dans la plupart des [[Classe préparatoire aux grandes écoles|classes préparatoires aux grandes écoles]], en filière [[Classes préparatoires mathématiques, physique et sciences de l'ingénieur|MPSI]] / [[Classes préparatoires mathématiques, physique|MP]]. Le style fonctionnel le rend relativement proche des mathématiques, notamment grâce à la [[algorithme récursif|récursivité]], le typage fort rend son usage sûr mais moins souple pour le programmeur. De plus, la particularité des [[ML (langage)|langages ML]], à savoir la [[Filtrage par motif|reconnaissance de motifs]] (''pattern matching''), permet une syntaxe au cas par cas claire et lisible dans les fonctions récursives. Elle est aussi utilisée dans le rattrapage des [[Système de gestion d'exceptions|exceptions]], en particulier pour la gestion des erreurs.


== Consortium ==
== Consortium ==
La conception et le développement du langage Caml ainsi que son environnement sont fédérés par un [[consortium]] dirigé par [[Inria]]<ref>{{Lien web |langue=fr |titre=Une histoire de Caml |url=https://caml.inria.fr/about/history.fr.html |site=caml.inria.fr |date=28/01/2005}}</ref>.


== Extensions ==
La conception et le développement du Caml et de son environnement sont fédérés par un [[consortium]] dirigé par l'INRIA.


{{article connexe|OCaml#Langages dérivés}}
== Les extensions Caml ==


Il existe un grand nombre d'extension du Caml, permettant au langage de recouvrir le plus de concepts possibles.
Il existe un grand nombre d'extensions de Caml, permettant au langage de couvrir beaucoup de concepts.

*{{en}} [http://www.cs.princeton.edu/~dpw/papers/icfp2005.pdf PolyAML] : A Polymorphic Aspect-oriented Functional Programming Language. Extension pour la [[Programmation orientée aspect|programmation par aspect]].
*'''Aspectual Caml''' : [[Programmation orientée aspect|programmation par aspects]]<ref name="PolyAML"/>{{,}}<ref name="Aspectual-Caml"/>.
*{{en}} [http://www.cs.iastate.edu/~leavens/FOAL/papers-2005/tatsuzawa-masuhara-yonezawa.pdf Aspectual Caml]: an Aspect-Oriented Functional Language. Extension pour la programmation par aspect.
* '''OCamlDuce''' : manipulation robuste de [[XML]] et d’[[expression régulière|expressions régulières]], ''via'' l’intégration du langage [[CDuce]]<ref name="OCamlDuce"/>.
*{{fr}} [http://www.lri.fr/~signoles/mvc.fr.html MVC] en OCaml.
* '''MetaOcaml''' et sa réimplémentation '''BER MetaOCaml''' : [[métaprogrammation]] et [[macro-définition|macros]]<ref name="MetaOCaml"/>{{,}}<ref name="BER-MetaOCaml"/>.
*{{en}} [http://www.cduce.org/ocaml.html OCamlDuce] : XML et typage.
* '''OCaml-templates''' : génération de code à partir des types<ref name="OCaml-templates"/>.
*{{en}} [http://metaocaml.org/ Meta-ocaml] : types et macros.
* '''FreshML''' : manipulation de données de syntaxe comportant des [[variable liée|variables liées]]<ref name="FreshML"/>.
*{{en}} [http://www.pps.jussieu.fr/~maurel/programmation/ Ocaml-templates] : génération de code à partir des types.
* des extensions de ML pour supporter le [[polymorphisme ad-hoc]]<ref name="Furuse"/>.
*{{en}} [http://www.cl.cam.ac.uk/users/amp12/papers/frepbm/frepbm.pdf FreshML]: Programming with Binders Made Simple
* '''O’Jacare''' : interfaçage entre OCaml et [[Java (langage)|Java]] (basé sur camljava)<ref name="O’Jacare"/>.
*{{en}} [http://jfla.inria.fr/2001/actes/07-furuse.ps Generic Polymorphism in ML]
* '''ocamllex''' et '''ocamlyacc''' : génération d’[[analyse lexicale|analyseurs lexicaux]] et [[analyse syntaxique|syntaxiques]] (équivalents des traditionnels [[lex (logiciel)|lex]] et [[yacc (logiciel)|yacc]])<ref name="lexyacc"/>.
*{{fr}} [http://www.pps.jussieu.fr/~henry/ojacare/ O'Jacaré] (basé sur camljava) pour lancer un main en Java
*{{en}} [http://caml.inria.fr/pub/docs/manual-ocaml/manual026.html Lex/Yacc] lexer and parser generators, pour faire de l'analyse lexicale et syntaxique.


== Voir aussi ==
== Voir aussi ==
Ligne 31 : Ligne 29 :


=== Liens externes ===
=== Liens externes ===
* {{fr}} {{officiel|http://caml.inria.fr/}}
* {{Site officiel|fr|http://caml.inria.fr/}}
* {{fr}} [http://www.pps.jussieu.fr/Livres/ora/DA-OCAML/index.html ''Développement d'applications avec Objective Caml''], livre O'Reilly en ligne (publié en 2002 mais reste très complet).
* {{fr}} [http://www.france-ioi.org/algo/chapters.php Cours de programmation en Caml pour débutants]
* {{fr}} [http://www.france-ioi.org/algo/chapters.php Cours de programmation en Caml pour débutants]
* {{en}} [http://www.pps.jussieu.fr/~cousinea/Caml/caml_history.html A brief history of Caml (as I remember it)]
* {{en}} [http://www.pps.jussieu.fr/~cousinea/Caml/caml_history.html A brief history of Caml (as I remember it)]
* {{fr}} [http://www.cadichonne.net/CAML.htm Exercices de programmation en Caml], avec corrigés
* {{fr}} [http://www.cadichonne.net/CAML.htm Exercices de programmation en Caml], avec corrigés
* {{fr}} [http://pauillac.inria.fr/~quercia/cdrom/cours/index.html#tp-caml Exercices en Caml avec corrigés]
* {{fr}} [http://pauillac.inria.fr/~quercia/cdrom/cours/index.html#tp-caml Exercices en Caml avec corrigés]


=== Références ===
=== Notes et références ===

<references />
== Notes ==
{{Références|groupe=note}}

== Références ==
{{Références|références=
<ref name="CV-Cousineau">{{lien web
|url=http://www.aeres-evaluation.fr/content/download/15025/248183/file/Cousineau%20Guy-CV.pdf
|titre={{abréviation|CV|curriculum vitæ|la}} de Guy Cousineau
|site=aeres-evaluation.fr
|consulté le=15 février 2011
}}</ref>
<ref name="PolyAML">{{Article
|langue=en
|langue périodique=en
|prénom1=Daniel S.
|nom1=Dantas
|prénom2=David
|nom2=Walker
|prénom3=Geoffrey
|nom3=Washburn
|prénom4=Stephanie
|nom4=Weirich
|titre=PolyAML
|sous-titre=A Polymorphic Aspect-oriented Functional Programming Language
|périodique=Proceedings of the ACM SIGPLAN International Conference on Functional Programming (ICFP)
|volume=40
|numéro=9
|année=2005
|mois=09
|page=306-319
|url=http://www.cs.princeton.edu/~dpw/papers/icfp2005.pdf
|doi=10.1145/1086365.1086404
|format=PDF
}}</ref>
<ref name="Aspectual-Caml">{{Article
|langue=en
|langue périodique=en
|prénom1=Hidehiko
|nom1=Masuhara
|prénom2=Hideaki
|nom2=Tatsuzawa
|prénom3=Akinori
|nom3=Yonezawa
|prénom4=Stephanie
|nom4=Weirich
|titre=Aspectual Caml
|sous-titre=An Aspect-Oriented Functional Language
|périodique=Proceedings of the ACM SIGPLAN International Conference on Functional Programming (ICFP)
|volume=40
|numéro=9
|année=2005
|mois=09
|page=320-330
|url=http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.115.5891&rep=rep1&type=pdf
|doi=10.1145/1086365.1086405
|format=PDF
}}</ref>
<ref name="OCamlDuce">{{Lien web
|url=http://www.cduce.org/ocaml.html
|site=cduce.org
|langue=en
|titre={{langue|en|CDuce: OCamlDuce}}
<!-- |date=???-->
|consulté le=19 août 2016
}}</ref>
<ref name="MetaOCaml">{{Lien web
|url=http://www.cs.rice.edu/~taha/MetaOCaml/
|site=cs.rice.edu
|langue=en
|titre={{langue|en|MetaOCaml}}
|sous-titre={{langue|en|A compiled, type-safe, multi-stage programming language}}
<!-- |date=???-->
|consulté le=19 août 2016
}}</ref>
<ref name="BER-MetaOCaml">{{Lien web
|url=http://okmij.org/ftp/ML/MetaOCaml.html
|site=okmij.org
|langue=en
|titre={{langue|en|MetaOCaml}}
|sous-titre={{langue|en|An OCaml dialect for multi-stage programming}}
<!-- |date=???-->
|consulté le=19 août 2016
}}</ref>
<ref name="OCaml-templates">{{Lien brisé
|url=http://www.pps.jussieu.fr/~maurel/programmation/
|site=pps.jussieu.fr
|langue=en
|titre=Ocaml-templates
<!-- |date=???-->
|consulté le={{date-|2015-06-14}}
|brisé le=19 août 2016
}}</ref>
<ref name="FreshML">{{Article
|langue=en
|langue périodique=en
|prénom1=Mark R.
|nom1=Shinwell
|prénom2=Andrew M.
|nom2=Pitts
|prénom3=Murdoch J.
|nom3=Gabbay
|titre=FreshML: Programming with Binders Made Simple
|périodique=Proceedings of the ACM SIGPLAN International Conference on Functional Programming (ICFP)
|volume=38
|numéro=9
|année=2003
|mois=09
|page=263-274
|url=http://www.cl.cam.ac.uk/users/amp12/papers/frepbm/frepbm.pdf
|doi=10.1145/944705.944729
|format=PDF
}}</ref>
<ref name="Furuse">{{Article
|langue=en
|langue périodique=fr
|prénom1=J.
|nom1=Furuse
|titre=Generic Polymorphism in ML
|périodique=Journées francophones des langages applicatifs (JFLA)
|année=2001
|mois=01
|page=75-96
|url=http://jfla.inria.fr/2001/actes/07-furuse.ps
|isbn=2-7261-1180-7
<!-- |doi=10.1145/944705.944729-->
|format=PDF
}}</ref>
<ref name="O’Jacare">{{Lien brisé
|url=http://www.pps.jussieu.fr/~henry/ojacare
|site=pps.jussieu.fr
|langue=fr
|titre=O’Jacare : Une interface objet entre O’Caml et Java
<!-- |date=???-->
|consulté le={{date-|2013-12-04}}
|brisé le=19 août 2016
}}</ref>
<ref name="lexyacc">{{Lien web
|url=http://caml.inria.fr/pub/docs/manual-ocaml/lexyacc.html
|site=caml.inria.fr
|langue=en
|titre={{langue|en|The OCaml system, § 12. Lexer and parser generators (ocamllex, ocamlyacc)}}
<!-- |date=???-->
|consulté le=19 août 2016
}}</ref>
}}


{{Portail|programmation informatique}}
{{Portail|programmation informatique}}


[[Catégorie:Langage de programmation]]
[[Catégorie:Langage fonctionnel]]
[[Catégorie:Théorie des types]]
[[Catégorie:Théorie des types]]
[[Catégorie:ML]]

[[Catégorie:Invention française]]
[[en:Caml]]
[[fi:Caml]]
[[it:CAML]]
[[nn:Caml]]
[[no:Caml]]
[[pt:Caml]]
[[ru:Caml]]
[[tr:Caml]]
[[uk:Categorical Abstract Machine Language]]

Dernière version du 2 mars 2024 à 15:29

Caml

Informations
Développé par InriaVoir et modifier les données sur Wikidata
Première version Voir et modifier les données sur Wikidata
Dernière version 4.07 ()[1]Voir et modifier les données sur Wikidata
Type Dialecte (en)Voir et modifier les données sur Wikidata
Site web caml.inria.frVoir et modifier les données sur Wikidata

Caml (prononcé camel, signifie Categorical Abstract Machine Language) est un langage de programmation généraliste conçu pour la sécurité et la fiabilité des programmes. Il se prête à des styles de programmation fonctionnelle, impérative et orientée objet. C'est de plus un langage fortement typé.

Le style fonctionnel rapproche le langage Caml de l’écriture mathématique, notamment grâce à la récursivité et au filtrage par motif (pattern matching). Ce dernier, particularité de la famille ML, offre une syntaxe au cas par cas claire et lisible, et est aussi utilisé dans le rattrapage des exceptions, en particulier pour la gestion des erreurs. Le typage fort rend l’usage sûr mais moins souple pour le programmeur. Enfin, Caml pratique l’inférence de types pour déterminer automatiquement le type des variables et expressions et permet la généricité.

Descendant du langage ML, le Caml est développé depuis 1985 par les équipes Formel puis Cristal de l'Inria et l'a notamment été pendant cinq ans par le professeur Guy Cousineau (université Paris-Diderot)[2]. La variante active de Caml est OCaml. Par rapport à l'ancienne variante Caml Light, aujourd'hui obsolète, elle ajoute de nombreuses fonctionnalités, comme un système de modules beaucoup plus poussé et le support de la programmation orientée objet (reposant sur le duck typing) dont elle tire son nom.

Consortium[modifier | modifier le code]

La conception et le développement du langage Caml ainsi que son environnement sont fédérés par un consortium dirigé par Inria[3].

Extensions[modifier | modifier le code]

Il existe un grand nombre d'extensions de Caml, permettant au langage de couvrir beaucoup de concepts.

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]

Notes et références[modifier | modifier le code]

Notes[modifier | modifier le code]

Références[modifier | modifier le code]

  1. « http://caml.inria.fr/pub/distrib/ocaml-4.07/ »
  2. « CV de Guy Cousineau », sur aeres-evaluation.fr (consulté le )
  3. « Une histoire de Caml », sur caml.inria.fr,
  4. (en) Daniel S. Dantas, David Walker, Geoffrey Washburn et Stephanie Weirich, « PolyAML : A Polymorphic Aspect-oriented Functional Programming Language », Proceedings of the ACM SIGPLAN International Conference on Functional Programming (ICFP), vol. 40, no 9,‎ , p. 306-319 (DOI 10.1145/1086365.1086404, lire en ligne [PDF])
  5. (en) Hidehiko Masuhara, Hideaki Tatsuzawa, Akinori Yonezawa et Stephanie Weirich, « Aspectual Caml : An Aspect-Oriented Functional Language », Proceedings of the ACM SIGPLAN International Conference on Functional Programming (ICFP), vol. 40, no 9,‎ , p. 320-330 (DOI 10.1145/1086365.1086405, lire en ligne [PDF])
  6. (en) « CDuce: OCamlDuce », sur cduce.org (consulté le )
  7. (en) « MetaOCaml : A compiled, type-safe, multi-stage programming language », sur cs.rice.edu (consulté le )
  8. (en) « MetaOCaml : An OCaml dialect for multi-stage programming », sur okmij.org (consulté le )
  9. (en) « Ocaml-templates »(Archive.orgWikiwixArchive.isGoogleQue faire ?), sur pps.jussieu.fr (consulté le )
  10. (en) Mark R. Shinwell, Andrew M. Pitts et Murdoch J. Gabbay, « FreshML: Programming with Binders Made Simple », Proceedings of the ACM SIGPLAN International Conference on Functional Programming (ICFP), vol. 38, no 9,‎ , p. 263-274 (DOI 10.1145/944705.944729, lire en ligne [PDF])
  11. (en) J. Furuse, « Generic Polymorphism in ML », Journées francophones des langages applicatifs (JFLA),‎ , p. 75-96 (ISBN 2-7261-1180-7, lire en ligne [PDF])
  12. « O’Jacare : Une interface objet entre O’Caml et Java »(Archive.orgWikiwixArchive.isGoogleQue faire ?), sur pps.jussieu.fr (consulté le )
  13. (en) « The OCaml system, § 12. Lexer and parser generators (ocamllex, ocamlyacc) », sur caml.inria.fr (consulté le )