Formation un Caml Light Distribué, tutoriel & guide de travaux pratiques en pdf.
Un Aperçu du Langage Caml Light
Caml Light (Categorical Abstract Machine Language) est un langage de programmation de haut niveau à usage général statiquement typé dans la famille ML, qui combine les caractéristiques fonctionnelles et impératives. Caml Light a été publié en France en 1995 par Xavier Leroy [4]. Caml Light est une implémentation légère et portable du langage Caml, avec un compilateur bytecode. Le système Caml Light est un logiciel libre (open source). En raison de son état stable, il est très utilisé dans l’éducation et l’expérimentation. Caml Light adopte le typage statique pour améliorer la sécurité, alors que ERLANG utilise le typage dynamique. Caml Light est un langage strict et, par conséquent, est meilleure, en termes de performance, que les langages paresseux comme Haskell. Caml Light est un langage sûr qui garantit l’intégrité des données manipulées par un programme. Il dispose d’un système d’inférence de type qui permet d’éviter les déclarations explicites dans la plupart des cas, l’information de type est automatiquement déduit par le compilateur. Caml Light est un langage de programmation fonctionnelle: les fonctions sont des valeurs de première classe, c’est-à-dire les fonctions peuvent être passées comme arguments à d’autres fonctions ou retournées comme résultats. Il supporte également le style impératif, ce qui inclut les boucles, ainsi que des structures de données mutables, tels que des tableaux. Il dispose aussi du traitement des exceptions pour la gestion des erreurs.
Caml Light possède les types de données de base habituels: entiers, nombres flottants, booléens, caractères et chaînes de caractères. Les structures de données prédéfinies incluent les n-uplets, les tableaux et les listes. Des mécanismes généraux de définition d’autres structures de données sont également fournis. Le langage peut aussi être utilisé pour le traitement symbolique: manipulation formelle des expressions arithmétiques contenant des variables. Il dispose d’une bonne capacité de calcul symbolique par le biais du filtrage de motif qui est une généralisation de l’analyse par cas traditionnelle. Le filtrage fournit un moyen concis et élégant pour analyser et nommer les données simultanément. Le compilateur Caml Light tire avantage de ce trait pour soumettre le code à plusieurs vérifications : branches superflues et branches manquantes sont détectées et signalées, ce qui permet souvent d’éliminer des subtiles. Lorsqu’aucune erreur n’est signalée, on peut avoir la certitude qu’aucun cas n’a été oublié. Le filtrage apporte un confort inégalé et un niveau de sécurité dans le traitement des données de nature symbolique. Caml Light connait le polymorphisme, ce qui signifie que nous pouvons formuler des fonctions qui prennent des valeurs d’entrée ou de produire des résultats de type quelconque. Un programme dans ce langage est formé par des unités de compilation que le compilateur traite séparément. Son système de modules est puissant et sûr: toutes les interactions entre modules sont vérifiées statiquement lors du contrôle de type. Enfin Caml Light dispose d’un gestionnaire automatique de mémoire, c’est-à-dire qu’on n’a pas besoin d’allouer ou de libérer de la mémoire, ceci est laissé à la charge du compilateur.
Un Caml Light Concurrent : ACCL
Les caractéristiques les plus importantes d’un langage de programmation concurrent sont la synchronisation et les primitives de communication. Celles-ci peuvent être divisées en deux grandes catégories: les primitives à mémoire partagée et les primitives à mémoire distribuée (ou échange de messages). Les langages à mémoire partagée utilisent un état partagé mutable pour implémenter la communication entre processus, de telle manière qu’il est nécessaire de verrouiller la mémoire alors qu’elle est utilisée. Lorsqu’il ya des verrous, il y a des clés qui peuvent se perdre. Nous considérons que les verrous sont un mécanisme de bas niveau qui n’a pas sa place dans un langage de haut niveau comme Caml Light. Aussi, les langages concurrents à mémoire partagée reposent sur un état mutable pour la communication interprocessus. Cela conduit à un style impératif, qui va à l’encontre du style essentiellement fonctionnel des programmes Caml Light. Pour ces raisons, nous pensons que les primitives à mémoire partagée ne sont pas adaptées à une extension concurrente de Caml Light, et que nous n’allons pas utiliser. L’autre classe des primitives de concurrence est la mémoire distribuée (ou échange de messages). Les primitives ou opérations de base dans la communication par échange de messages sont « envoyer un message » et « recevoir un message », et sont toutes les deux utilisées pour la communication et la synchronisation. Il existe deux grandes classes pour la sémantique de l’échange de messages: l’envoi de messages non bloquant (ou échange asynchrone de messages), et l’envoi de messages bloquant (ou échange synchrone de messages). L’échange asynchrone de messages dans les systèmes distribués, est aussi le plus souvent asynchrone, et la communication asynchrone ne limite pas le parallélisme [9]. C’est pourquoi nous avons opté pour l’échange asynchrone de messages (c’est-à-dire « envoyer ne-pas-attendre »), en Caml Light, et d’ici, ACCL [1] sera un exemple de langage de programmation, comme ERLANG, basé sur l’échange asynchrone de messages, dans la classe des langages à mémoire distribuée. ACCL [1] sera alors une extension concurrente du langage fonctionnel Caml Light, avec deux nouveaux ingrédients ajoutés à Caml Light:
• Les processus, et un mécanisme pour la création et le lancement de processus
• La communication interprocessus