Scripts Qubes 2012
Avec la version Qubes 2010.6 (5.6), le langage de script Qubes évolue.
Syntaxe
La syntaxe reste dans le cadre général des langages "Pascal Objet", et introduit des éléments empruntés à Delphi, Prism et FreePascal.
Nouvelles fonctionnalités du langage
- opérateur new: les instances peuvent désormais être construites avec l'opérateur "new", qui effectuera un appel au constructeur par défaut.
sl := new TStringList;ets équivalent àsl := TStringList.Create; - Tableaux dynamiques: les tableaux dynamiques sont désormais directement supportés par le language, indépendamment des classes et collections.
- Constantes de type record: les constantes de type records peuvent désormais être initialisées en ligne.
- Implémentation de méthodes en ligne: les méthodes peuvent désormais être implémentées après leur déclaration, au sein de la déclaration de classe.
Seuls les membres de classe déjà déclarés au point d'implémentation seront accessibles. - Délégués / pointeurs de fonction: une version généralisée des pointeurs de fonctions est disponibles. Un type pointeur vers un fonction acceptant un entier et retournant une chaîne sera ainsi décrite par
type TMyDelegate = function (i : Integer) : String
une variable de ce type acceptera des référence de fonction comme de méthodes de classes. - Délimiteurs guillemets pour les chaînes: le délimiteur guillemets <"> est désormais accepté en alternative à l'apostrophe <'> pour délimiter les chaînes de caractères, celles-ci sont multi-lignes..
PrintLn("Bonjour l'ami!"); - Chaînes multi-lignes: un délimiteur #' ou #" permet d'indiquer une chaîne multi-lignes dont les indentations initiales communes seront automatiquement supprimées.
- Polymorphisme paramétrique: ou "overload" est désormais supportées pour les fonctions isolées et les méthodes de classe.
- Surcharges finales: le qualificatif final est désormais supporté pour indiqué qu'une méthode surchargée ne pourra plus être surchargée par ses descendants.
- Directives de messages: les directives {$HINTS ON/OFF} et {$WARNINGS ON/OFF} permettent de controler l'apparition des conseils et des avertissements respectivement.
- Directive d'inclusion unique: $INCLUDE_ONCE permet d'inclure un script similairement à $INCLUDE, mais n'effectue l'inclusion que si le script à inclure n'a pas déjà été inclus.
- Classes statiques: le qualificateur static peut être appliqué à une classe. Une classe statique ne pourra pas être instanciées, et ne pourra contenir que des membres de classe (méthodes de classe, propriétés de classe, etc.).
- Classes partielles: les classes peuvent désormais être déclarées comme partielles avec le mot clef partial, leur déclaration et leur implémentation peut alors être fragmentée dans plusieurs unités, et elles peuvent être étendues librement.
- Méthodes statiques: les méthodes de classe peuvent désormais être marquées comme static, auquel cas elle n'auront plus de paramètre Self implicite, et se comportent comme des fonctions globales, mais attachées à l'espace de nom de leur classe.
- Unités: les unités au sens Pascal (uses/unit/interface/implementation) sont désormais supportées.
- Surcharge d'opérateurs binaires: les opérateurs binaires peuvent désormais être surchargés.
- Interfaces: les interfaces pures sont désormais supportées.
- Résolution manuelle: une clause "uses" en début de script sera désormais comprise comme indiquant une résolution manuelle des dépendances, la compilation sera alors accélérée, et l'utilisation mémoire réduite. Si la clause est absente ou n'est pas en début de script, la résolution universelle (cas précédent) sera utilisée (elle est équivalente à faire un "uses" de toutes les dépendances possibles).
- Variables et constantes de classe: déclarables au sein d'une classe par "class var" et "const"/"class const" respectivement, elles sont rattachées à l'espace de nom de la classe.
- Littéraux binaires: des littéraux binaires peuvent être déclarés avec le préfixe 0b, par ex. 0b111 vaut 7. Les littéraux hexadécimaux peuvent aussi être préfixés par 0x en alternative à $.
- Énumération de caractères: les boucles For In peuvent être utilisées pour énumérés les caractères ou les points de code d'une chaîne.