Agena 4.6.2
Agena est un langage de programmation qui utilise un type de syntaxe comparable à Algol 68, tout en comprenant également des caractéristiques de LUA, SQL ou Maple. Il fonctionne comme un langage impératif, ce qui signifie qu'il exige la saisie de chaque étape qu'une application doit franchir pour atteindre un état ou produire un résultat.
Ce langage de programmation est principalement destiné à des usages scientifiques, linguistiques et éducatifs, mais il peut même être utilisé pour la création de scripts, selon les intentions et les exigences de ses utilisateurs. Il offre une vitesse de traitement satisfaisante pour les opérations mathématiques et graphiques réelles et complexes.
Agena supporte une variété de fonctions de base spécifiques à ce type de langage de programmation, telles que les affectations, les conditions ('If', 'Then', 'Elif', 'OnSuccess', 'Else'), les boucles ('For', 'In', 'While', 'Do / As', 'Do / Until'), les procédures et bien d'autres.
Ce langage peut travailler avec plusieurs types de données, allant des nombres complexes et rationnels aux booléens, en passant par les valeurs nulles, les vecteurs, les threads, dont les plus basiques sont intégrés dans son noyau pour des raisons de performance. En même temps, le logiciel Agena supporte les procédures avec une portée lexicale complète.
Agena propose diverses fonctions de contrôle de flux, telles que : - Les conditions if/then/elif/onsuccess/else. - Des conditions case of/onsuccess/else similaires aux instructions switch/case du C. - Opérateur if pour renvoyer des valeurs alternatives. - Boucles numériques for/from/to/by où les valeurs de départ, d'arrêt et de pas sont facultatives, et correction automatique des erreurs d'arrondi des variables d'itération. - Les boucles numériques for/from/downto/by où les valeurs de pas sont facultatives, les boucles numériques combinées for/while. - Les boucles for/in sur des chaînes de caractères et des structures de données complexes. - Des boucles while, do/as et do/until identiques aux itérateurs while et repeat/until not() de Modula. - Une instruction skip pour déclencher prématurément l'itération suivante d'une boucle. - Une instruction break pour quitter prématurément une boucle. - Une instruction redo pour redémarrer l'itération actuelle d'une boucle. - Une instruction relaunch pour redémarrer une boucle depuis le début. - Try/catch pour gérer les exceptions. - Les nombres rationnels et complexes, avec des extensions telles que l'infini et l'indéfini. - Les chaînes de caractères. - Les booléens tels que true, false et fail. - La valeur null qui signifie "rien". - Des tableaux polyvalents implémentés sous forme de tableaux associatifs pour contenir tout type de données, tirés de Lua. - Les ensembles de Cantor en tant que collections d'éléments uniques. - Des séquences, c'est-à-dire des vecteurs, pour stocker en interne des éléments dans un ordre séquentiel strict. - Les paires pour contenir deux valeurs ou passer des arguments dans n'importe quel ordre aux procédures. - Des registres, autrement dit des vecteurs de taille fixe qui peuvent également contenir des données grâce à leur pointeur vers le sommet. - Des types définis pour les séquences, les tableaux, les registres et les paires afin de permettre des manipulations spécifiques. - La validation des types de données à l'aide des opérateurs : : et :- et la possibilité d'utiliser les deux-points dans les listes de paramètres. - Les threads, userdata et lightuserdata hérités de Lua. - Les multisets (sacs), les listes à liaison simple, simple, non enroulée et double, les tas, les cartes bidirectionnelles et les nombres doubles.
avec un scoping lexical complet sont aussi supportés, et fournissent les extensions suivantes : - La syntaxe << (args) -> expression >> pour définir facilement des fonctions simples. - Des tables de mémorisation pour effectuer une récursion à grande vitesse et à faible consommation de mémoire, pour se souvenir des résultats déjà calculés, et pour utiliser des résultats prédéfinis. - Des types définis par l'utilisateur. - La variable système nargs qui contient le nombre d'arguments réellement passés à une procédure. - Des métaméthodes héritées à l'origine de Lua pour définir des opérations pour les tables, les ensembles, les séquences, les registres, les paires et les données utilisateur. - Des méthodes de style OOP pour les tables. - Des opérateurs binaires auto-définis.
|
|