SWI-Prolog est une implémentation polyvalente et hautement scalable du langage Prolog, initialement populaire dans les environnements éducatifs mais désormais largement utilisé pour le développement d'applications. Son développement est motivé par la nécessité d'intégration avec d'autres composants informatiques, et il offre une interface riche pour divers types de documents et protocoles réseau, ainsi qu'une interface bas-niveau complète vers le langage C, qui sert de base aux interfaces haut-niveau avec des langages comme C++, Java, C#, et Python.
SWI-Prolog étend le langage Prolog avec des types de données avancés tels que les dictionnaires et les chaînes de caractères, ainsi qu'un support complet de l'Unicode et des entiers non bornés, garantissant un échange de données fluide avec d'autres composants. Le système est conçu pour se déployer efficacement, avec un support robuste du multithreading qui exploite pleinement le matériel multicœur, ce qui le rend idéal pour l'intégration dans des applications concurrentes. Son mécanisme d'indexation Just-In-Time (JITI) offre un support efficace pour les prédicats avec des millions de clauses, garantissant que même les applications de grande envergure fonctionnent sans problème.
SWI-Prolog unifie également de nombreuses extensions développées par la communauté Prolog, telles que la mémorisation, les contraintes, les variables globales, l'affectation destructive, les continuations délimitées et les interacteurs, en faisant un outil complet et puissant pour les développeurs.
Fonctionnalités Détails de SWI-Prolog:
- Compilation Rapide et Efficacité:
- Compilation Rapide: SWI-Prolog est optimisé pour une compilation rapide, assurant des délais minimaux lors du développement.
- Gestion de la Mémoire: Le système est robuste et exempt de fuites de mémoire, garantissant des performances stables même pour les applications de longue durée.
- Scalabilité: SWI-Prolog s'adapte efficacement aux grandes applications, gérant de grands ensembles de données et une logique complexe avec aisance.
- Calcul Avancé et Gestion des Données:
- Indexation Just-In-Time (JITI): Offre une indexation efficace du code statique et dynamique sur n'importe quel argument, simplifiant la gestion des relations multi-modales avec de nombreuses clauses.
- Calcul Arithmétique avec Entiers Non Bornés et Nombres Rationnels: Basé sur la bibliothèque GMP, supportant des calculs complexes sans limitations de taille de nombre.
- Support de l'UNICODE: Gestion complète en interne de l'ensemble de caractères UNICODE, assurant la compatibilité avec les jeux de caractères internationaux.
- Extensions du Langage Prolog:
- Modules: Compatible vers le haut avec Quintus et SICStus, facilitant le développement modulaire.
- Collecte des Déchets: Transparente pour le code C/C++, y compris la collecte des atomes et des clauses, assurant une utilisation efficace de la mémoire.
- Optimisation de Dernier Appel: Améliore les performances en optimisant les appels récursifs.
- Expansion Dynamique du Temps d'Exécution: Élargit automatiquement les piles de runtime selon les besoins, évitant les erreurs de dépassement de pile.
- Gestion des Exceptions: Inclut un support complet pour la gestion des exceptions, compatible avec les interfaces C/C++.
- Structures de Programmation Avancées:
- Variables Attribuées et Coroutining: Support pour freeze/2, when/2, et dif/2, permettant des techniques de contrôle de flux et de programmation logique avancées.
- Variables Globales et Termes Cycliques: Fournissent une flexibilité supplémentaire dans la gestion des structures de données et des algorithmes complexes.
- Gestion de l'Occurs-Check: Gestion contrôlée par drapeau de l'Occurs-Check, avec des options pour false, true ou error, assurant la cohérence de l'évaluation logique.
- Multithreading et Concurrence:
- Support du Multithreading: Conçu pour gérer efficacement les applications multi-threadées, exploitant pleinement les processeurs multicœur.
- Moteurs (Interacteurs): Fournissent des coroutines pour l'accumulation d'état et la concurrence massive, idéales pour des applications telles que l'intelligence collective et les simulations.
- Continuations Délimitées: Un outil puissant pour créer de nouvelles structures de contrôle et de programmation orientée aspects.
- Résolution de Requêtes Avancée:
- Mémorisation (Résolution SLG): Une technique de résolution robuste qui assure la terminaison garantie des règles interconnectées complexes, améliorant la fiabilité des résultats des requêtes.
- Sémantique Fondée pour la Négation: Fournit une base solide pour la gestion de la négation dans la programmation logique.
- Mémorisation Incrémentale: Met automatiquement à jour les tables affectées lorsque la base de connaissances change, garantissant que les résultats restent précis et à jour.
- Outils de Développement et Environnement:
- Éditeur Natif: SWI-Prolog inclut un éditeur écrit en Prolog qui ressemble de près à Emacs, offrant des fonctionnalités telles que la mise en surbrillance sémantique basée sur l'analyse du code en temps réel.
- Système de Packs: Un mécanisme de distribution et d'installation d'add-ons, permettant une gestion facile des extensions et des bibliothèques tierces.
- Applications Serveur:
- Cadre de Serveur Web: Inclut un cadre HTTP étendu pour la création d'applications serveur, prenant en charge à la fois les services REST et les applications utilisateur final avec HTML5, CSS, et JavaScript.
- Prolog comme Langage Unificateur:
- Intégration avec d'Autres Composants: SWI-Prolog sert de plateforme polyvalente, agissant comme un langage de liaison qui unifie divers composants dans des systèmes complexes, en faisant un choix idéal pour les applications nécessitant une intégration entre différentes technologies.
SWI-Prolog se distingue comme un outil puissant et polyvalent, tant pour des fins éducatives que pour le développement d'applications professionnelles. Son ensemble riche de fonctionnalités, sa scalabilité robuste et son support étendu pour les structures de programmation modernes en font un choix incontournable pour les développeurs souhaitant exploiter tout le potentiel du langage Prolog.
SWI-Prolog - Journal des modifications :
- Doc : Explique les problèmes et les fonctionnalités des fonctions booléennes de l'API C.
- Correction : Conditions de concurrence dans thread_signal/2 et ses collègues.
- Test : Éviter les interférences entre les tests thread_wait. Les tests envoient des signaux simultanés à l'aide d'un thread détaché qui pourrait toujours être en cours d'exécution, affectant les tests suivants.
- Test : Le test d'obtention d'une erreur d'E/S sur un tube cassé peut réussir. Il s'avère que la taille du tube sur Asahi/Fedoare 40 est de 256 Ko. Écrit maintenant un maximum de 1,2 Mo au lieu de 100 Ko.
- Ajout : Indicateur Prolog dir_sep Complète path_sep et path_max pour obtenir des propriétés sur les conventions et limites de dénomination des fichiers.
- Correction : #1311 Corruption possible de la pile dans PL_unify_text() La cause de ce crash est un échec de vérification du retour de PL_new_term_ref(). Il y avait cependant d'autres problèmes avec le code.
- Le manque d'espace local pouvait corrompre une chaîne se trouvant sur la pile. Nous pouvons abandonner le terme référence.