Champ de données Haskell


Original: http://www.mrtc.mdh.se/projects/DFH/docs/

Index

Introduction

De nombreuses applications informatiques nécessitent indexés structures de données, telles que des tableaux, des séquences imbriquées, tables de hachage, ou des données distribuées des entités parallèles. Langages orientés-Collection offrent un moyen pratique de spécifier des calculs sur de telles structures, à travers des opérations qui agissent directement sur les structures plutôt que sur les éléments individuels. Champ de données Haskell est une tentative pour étendre Haskell avec des fonctionnalités flexibles et génériques pour les programmes de collecte orientée.
Champs de données

Champ de données Haskell fournit un exemple de champs de données. Les champs de données généralisent tableaux: ils sont des paires (f, b) où f est une fonction et b est une “limite”, une entité qui peut être interprété comme un prédicat (ou réglé). La borne peut y avoir deux tuples de nombres définissant l’étendue d’un tableau: cependant, le modèle de champ de données permet également de limites définissant autres “formes” (par exemple imbriqué, rares, et même pour les indices non numériques). Le modèle est conçu pour ne pas faire de suppositions injustifiées sur les limites: au contraire, elle postule certaines propriétés qui sont nécessaires pour rendre les opérations de collecte orientée communs bien définis. Ainsi, les limites et les champs de données peuvent être considérés comme des types de données abstraits.

Un champ de données peut être appliquée à un indice et définit une fonction partielle du domaine d’indice de domaine de valeur ainsi. Fonction partielle sont convenablement défini par la lambda-syntaxe, et une syntaxe similaire est défini pour les champs de données: comme \ x> t définit une fonction (en utilisant la syntaxe Haskell pour le lambda-expressions), l’expression forall x> t définit un ensemble de données domaine. Ici, la limite n’est pas donné explicitement, mais est plutôt dérivée des limites dans les champs de données apparaissant dans t selon un ensemble de règles. Limites correspondent à fonctionner domaines: ainsi, ces règles sont conçues pour calculer des bornes pour forall-expressions correspondant aux domaines de fonction pour les lambda-expressions correspondantes. Par exemple, forall x – (! (F, b1) X + (g, b2) X)> obtient la borne b1 `b2 meet` depuis (en supposant que” + “est stricte dans les deux arguments) \ x -> (fx + gx) est défini à l’intersection des domaines de f et de g. (Ici, “!” Indique application sur le terrain de données, et “rencontrer” une opération abstraite sur des bornes qui correspond à mettre en intersection.) Un certain nombre de règles de ce type peut être défini. Ils font l’forall-syntaxe commode pour l’expression de nombreux algorithmes de collecte orienté avec un minimum de manipulation explicite de bornes.

Limites des champs de données peuvent être surapproximations du domaine de la fonction partielle correspondante. Sémantiquement, une valeur d’erreur particulier représente le résultat de la baisse des appels en dehors des limites. Cette valeur peut être mémorisée dans un champ de données, qui représente alors une fonction partielle d’un domaine strictement plus petit que le jeu défini par la borne. Il est ainsi possible de, par exemple, d’utiliser des champs de données pour modéliser des données SIMD, comme entités parallèles, qui sont souvent des réseaux réguliers dont certains éléments peuvent être «éteints».

Il ya une théorie des champs de données qui comprend un calcul formel pour “forall-abstraction”. La page d’accueil du projet Champ de données, qui englobe l’effort champ de données Haskell, contient un certain nombre de références.
Champ de données Haskell – Un Haskell dialecte de champs de données

Champ de données Haskell est un dialecte Haskell où les tableaux ont été remplacés par une instance de champs de données. Ce cas particulier fournit, les champs denses “traditionnels” de tableau comme données, champs de données éparses, des champs de données infinies, et les champs de données multidimensionnelles qui peuvent être rares dans une dimension, dense en certains, et infini dans d’autres. Le type de champ de données est déterminée par le type de borne, qui peut être dense finis (paire d’indices), clairsemé finis (ensemble d’indices), prédicat générale, qui est infinie, et des produits qui sont des bornes multidimensionnels formés à partir des bornes plus simples. Il ya aussi les limites spéciales vides et de l’univers qui représentent l’ensemble vide et universelle, respectivement.

Champ de données Haskell fournit un certain nombre d’opérations sur les champs de données et des limites. Il existe des fonctions pour créer des champs de données et extraire leurs limites, et d’appliquer des champs de données à des indices. Pour les données finies champs il ya deux autres types d’opérations: les évaluateurs des champs de données, qui obligent une évaluation à des degrés divers de tous les éléments dans les champs de données, et un certain nombre de plis sur les champs de données. Il ya aussi un certain nombre d’opérations sur les limites: rejoindre et rencontrer, ce qui correspond à l’union et l’intersection des ensembles, restriction explicite d’un champ de données d’un bond, un test pour la finitude, une énumération de l’ensemble défini par un ensemble fini limite, la taille, et un test si un index appartient à l’ensemble défini par une limite ou non. Toutefois, l’intention est que le programmeur ne devrait pas avoir à utiliser ces opérations explicitement souvent. Champ de données Haskell fournit forall-abstraction qui fonctionne comme esquissé ci-dessus, et l’idée est que le programmeur, en utilisant ce mécanisme, pourrait éviter beaucoup manipulation explicite des limites. La syntaxe de forall-abstraction est précisément analogue à celle de la lambda-abstraction et le typage est similaire. Pour une description concise des extensions de champs de données dans Champ de données Haskell, voir ici. Une description plus détaillée est disponible ici.

L’implémentation actuelle de données de terrain Haskell est basé sur nhc98 et s’étend donc Haskell 98 Il ya aussi une version antérieure Haskell 1.3, qui est basé sur nhc13.
Un compilateur pour champ de données Haskell

Il s’agit d’un compilateur expérimental basé sur nhc98 pré-version 19 (2000-06-05). Nhc signifie “Près d’un compilateur Haskell”. Il a été écrit par Nicklas Röjemo, et a depuis été étendu et maintenu par le groupe de la programmation fonctionnelle à York. Notez que ni Nicklas Röjemo ni le groupe York prend toute la responsabilité de notre version modifiée.
Obtenir le compilateur
Binaires

Il ya des binaires pour Linux et Solaris Sparc-2:

Le code source

Haskell code source.
Haskell 1.3 Version

Ce compilateur est basé sur nhc13 libérer 980327. Il ya des binaires pour Linux et Solaris 5.5.1:

Voici le code source Haskell pour cette version.
Documentation

Exemples de code
Il ya des exemples de code simples.
Links

nhc98, la version actuelle de nhc de York.

Comments are closed.