langages de programmation logique ont été autour pendant plus de vingt ans. Malgré les avantages attendus d'une langue très élevé de la programmation au niveau basée sur des théories bien développés de la logique plus de langages de programmation classiques (tels que C, C ++, Pascal et Ada) ils ne ont pas eu un impact significatif sur l'industrie informatique.
Le mercure est un nouveau langage de programmation logique / fonctionnel, qui combine la clarté et l'expressivité de la programmation déclarative avec analyse et de détection d'erreur caractéristiques statiques avancées.
Le mercure est hautement optimisé algorithme d'exécution offre une efficacité bien au-delà des systèmes de programmation logique existants, et à proximité de systèmes de programmation classiques.
Mercury se attaque aux problèmes de développement de programme à grande échelle, permettant modularité, compilation séparée, et de nombreux optimisation / temps arbitrages
Ce qui est nouveau dans cette version:.
- Cette version de maintenance corrige construire problèmes sur Solaris et NetBSD et ajoute le support pour sélectionner le compilateur C # lors de la configuration.
- Divers autres bugs mineurs ont été corrigés.
- Il ya aussi quelques ajouts mineurs à la bibliothèque standard.
Quoi de neuf dans la version 13.05:
- Génération d'exécutables 64 bits sous Windows est maintenant supporté.
- les temps de compilation pour les très grands programmes ont été améliorés.
- Plusieurs nouvelles optimisations de représentation de type ont été ajoutés.
- Le débogueur a maintenant un meilleur support pour la manipulation d'appels cliques mutuellement récursives sur la pile.
- Une liaison à la bibliothèque GLFW a été ajouté à la distribution de suppléments.
- Assemblées générés avec le C # backend peuvent maintenant être signé avec un nom fort.
Quoi de neuf dans la version 11.01:
- Nous avons ajouté deux nouveaux types de champs à la langue.
- Une application introduite par l'un des nouveaux mots clés require_det, require_semidet, require_multi, require_nondet, require_cc_multi, require_cc_nondet, require_erroneous et require_failure, comme son nom l'indique, exige l'objectif à l'intérieur du périmètre d'avoir le déterminisme donné.
- Un champ introduit par le require_complete_switch mots clés nécessite l'objectif à l'intérieur du champ d'application, se il ya un interrupteur sur la variable nommée par la portée, à être un changement complet, ce est à dire d'avoir des armes pour tous les symboles de fonction dans le type de la commuté sur variable.
- Nous avons ajouté modes semidet pour hash_table.fold / 4 et version_hash_table.fold / 4.
- Nous avons ajouté de nouvelles fonctions et prédicats au module de assoc_list. Les prédicats map_keys_only / 3 map_values_only / 3 et map_values / 3 complément les fonctions du même nom. Les prédicats filtrent / 3, negated_filter / 3, filtrent / 4, fusionner / 3, qui ont également des versions de fonction, faire des travaux très similaires aux prédicats du même nom dans le module de liste, mais le font les opérations pertinentes sur les touches au lieu de l'ensemble de éléments de la liste.
- Nous avons déplacé le module d'évaluation paresseuse de la distribution des extras et dans un nouveau module standard de bibliothèque appelée `paresseux». Il a également été fait backend-agnostique.
- Nous avons apporté des modifications au module de liste de la bibliothèque standard:
- Nous avons ajouté un nouveau prédicat list.member_index0 / 3. Ce est comme list.member / 2 sauf qu'elle prend également un paramètre représentant l'index de l'élément dans la liste de base zéro.
- Nous avons ajouté un nouveau prédicat list.map3_foldl / 7 qui mappe sur une liste produisant trois listes et une valeur plié.
- Nous avons ajouté modes semidet avec accumulateurs uniques pour list.foldl3 / 8, list.foldl4 / 10, list.foldl5 / 12 et list.foldl6 / 14.
- Nous avons ajouté les prédicats divisent / 4 et divide_by_set / 4 au module de tree_bitset de la bibliothèque standard.
- Nous avons ajouté les prédicats set_ctree234.member / 2 et set_ctree234.non_empty / 1. Nous avons ajouter la fonction set_ctree234.from_list / 1.
- Nous avons ajouté le prédicat set_bbbtree.count / 2 et la fonction set_bbbtree.count / 1. Ceux-ci remplacent le prédicat set_bbbtree.size / 2 qui est maintenant obsolète.
- Nous avons ajouté le. prédicat set_ordlist.non_empty / 1
- Nous avons ajouté le prédicat set_tree234.non_empty / 1 et la fonction set_tree234.from_list / 1.
- Nous avons ajouté les prédicats set_unordlist.non_empty / 1 et set_unordlist.count / 2, et de la. fonction set_unordlist.count / 1
- Tous les modules de la bibliothèque standard qui mettent en œuvre l'ensemble ADT, (ensemble, set_ordlist, set_unordlist, set_bbbtree, set_tree234 et set_ctree234), désormais en charge de pliage sur des ensembles avec un maximum de six accumulateurs. Modes qui fournissent des accumulateurs uniques et souvent uniques pour voir fois ont également été ajoutées.
- Nous avons apporté les changements suivants au module de tableau de la bibliothèque standard:
- Nous avons ajouté les fonctions unsafe_elem / 2 et ajouter / 2.
- Nous avons ajouté les prédicats svset / 4, unsafe_svset / 4, foldl2 / 4, foldl2 / 6, FOLDR / 4, foldr2 / 6, map_foldl / 5, map_corresponding_foldl / 6, et membre / 2.
- Nous avons ajouté les prédicats version_array.foldl2 / 6, version_array.foldr / 4, et version_array.foldr2 / 6 à la bibliothèque standard.
- Nous avons ajouté modes semidet avec accumulateurs uniques et souvent uniques pour les prédicats suivants:
- bimap.foldl2 / 6
- bimap.foldl3 / 8
- cord.foldl_pred / 4
- cord.map_foldl / 5
- list.map_corresponding_foldl2 / 8
- list.map_corresponding_foldl3 / 10
- list.map_corresponding3_foldl / 7
- map.foldl3 / 8
- Nous avons ajouté le prédicat unsorted_aggregate2 / 6 au module de solutions de la bibliothèque standard.
- Nous avons ajouté plusieurs prédicats et fonctions au module exiger de la bibliothèque standard. Les prédicats désolé / 2 et désolé rapport / 3 l'absence d'une fonction, tandis que les prédicats inattendus / 2 et inattendus / 3 Rapport une erreur interne dans le programme; ont toutes les versions de fonction aussi. Le prédicat attendre / 3 appels inattendue si une condition ne est pas satisfaite. Nous avons maintenant attendre / 4 ainsi que se attendre / 3. Pour attendent / 4 ainsi que se attendre / 3, les premiers et derniers arguments sont l'état prévu et le message d'erreur, respectivement, mais avec attendre / 4, il ya deux arguments dans le milieu pour spécifier l'emplacement de l'erreur (normalement le nom du module et du prédicat respectivement). Nous avons également ajouté expect_not / 3 et expect_not / 4, qui sont comme attendre / 3 et se attendre / 4 respectivement, sauf qu'ils se attendent à la condition d'être fausse * *, pas vrai.
Quoi de neuf dans la version 10.04.2:
- Cette version est une version corrigeant des bogues. Un certain nombre de problèmes qui ont causé le compilateur d'avorter ont été fixés, certaines opérations RTTI brisées dans le grade de java ont été corrigés, et nous avons ajouté une solution de contournement pour un problème avec la version de GCC 4.4.
Limites :
- L'implémentation actuelle ne implémente pas complètement la langue Mercury. Les principales limites de la mise en œuvre actuelle sont les suivants:
- Nous ne permettons pas aliasing définie dans le système de mode. Sans cela, les modes partiellement instanciés sont inutilisables, et ainsi sont imbriqués modes uniques.
- Le compilateur ne utilise pas encore la structure réutilisation ou compiler temps la collecte des ordures à exploiter modes uniques.
- type et le mode inférence sont un peu imparfait.
- bbli En outre, les décisions de conception dans ce implemenation ont imposées les limites suivantes:
- Les prédicats et fonctions peut avoir au plus environ 1,000 arguments.
- d'ordre supérieur termes peuvent avoir au plus environ 500 arguments.
Commentaires non trouvées