presentation

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
presentation [2026/07/27 20:32] – [Appel de méthode] rootpresentation [2026/10/18 13:31] (Version actuelle) – root
Ligne 38: Ligne 38:
    ; bloc exception    ; bloc exception
 end           ; fin du programme hello end           ; fin du programme hello
 +
  
 </code> </code>
Ligne 43: Ligne 44:
 A l'exécution, le traitement démarre à l'instruction de début du bloc principal, puis exécute toutes les instructions jusqu'à l'instruction //except//. A ce moment là, le traitement passe directement à l'instruction de fin puis il se termine.\\ A l'exécution, le traitement démarre à l'instruction de début du bloc principal, puis exécute toutes les instructions jusqu'à l'instruction //except//. A ce moment là, le traitement passe directement à l'instruction de fin puis il se termine.\\
 La deuxième instruction de début possible est ''background <nom>'' : le traitement fonctionne de manière identique à celui avec ''begin'' à la seule différence que le traitement s'exécute en tâche de fond, et donc qu'il rend la main immédiatement. Dans ce mode, toutes les écritures et lectures depuis la console sont automatiquement inhibées par l'exécuteur (''echonl'' ''echo'' ''input'').\\ La deuxième instruction de début possible est ''background <nom>'' : le traitement fonctionne de manière identique à celui avec ''begin'' à la seule différence que le traitement s'exécute en tâche de fond, et donc qu'il rend la main immédiatement. Dans ce mode, toutes les écritures et lectures depuis la console sont automatiquement inhibées par l'exécuteur (''echonl'' ''echo'' ''input'').\\
-La troisième et dernière instruction de début possible est ''library <nom>(<parametres>)''. Elle permet au programme d'être appelé depuis n'importe quel autre programme ou library, mais la bibliothèque ne peut pas être le premier programme lancé. Lors de l'appel, le chargement de la bibliothèque se fait à la volée, à l'exécution uniquement.+La troisième et dernière instruction de début possible est ''library(<parametres>)''. Elle permet au programme d'être appelé depuis n'importe quel autre programme ou library, mais la bibliothèque ne peut pas être le premier programme lancé. Lors de l'appel, le chargement de la bibliothèque se fait à la volée, à l'exécution uniquement. 
 + 
 ==== Include et appels externes ==== ==== Include et appels externes ====
  
-L'instruction //include// permet d'inclure un autre source dans le flux du source courant. La récursion n'est pas autorisée et provoquera une exception.\\+L'instruction //include// permet d'inclure un autre source dans le flux du source courant. La récursion n'est pas autorisée et provoquera une erreur à la compilation.\\
 Le fichier source à inclure doit se trouver dans l'arborescence [[:install|WSRC]]. Le fichier source à inclure doit se trouver dans l'arborescence [[:install|WSRC]].
  
Ligne 53: Ligne 56:
 include "calcul.w" include "calcul.w"
 ; ;
 +
 +
 </code> </code>
  
Ligne 59: Ligne 64:
    * appel de sub/méthode d'objet : ''do <var>(param1, param2, …)'', écrits en W et déclarés dans le même source que le source courant (fichiers //include//  compris).    * appel de sub/méthode d'objet : ''do <var>(param1, param2, …)'', écrits en W et déclarés dans le même source que le source courant (fichiers //include//  compris).
   * appel de bibliothèque, externe au source en cours : ''call <nom biblio>(param1, param2, …)'', bibliothèque écrite en W, bloc principal de type //library//, et disponible dans le répertoire [[:install|WLIB]] (le compilé).   * appel de bibliothèque, externe au source en cours : ''call <nom biblio>(param1, param2, …)'', bibliothèque écrite en W, bloc principal de type //library//, et disponible dans le répertoire [[:install|WLIB]] (le compilé).
-  * appel de module, type plugins : ''invoke <module>&<fonction>(parametre)'', écrits en C et dont le binaire se trouve dans [[:install|WBIN]]. 3 paramètres maximum.+  * appel de module, type plugins : ''invoke <module>&<fonction>(parametre)'', écrits en C et dont le binaire se trouve dans [[:install|WBIN]].
  
-Tous les passages de paramètres se font par référence : dans les sous-programmes appelées, les accès aux variables agissent sur la variable origine.+Tous les passages de paramètres, 8 au maximum, se font par référence : dans les sous-programmes appelés, les accès aux variables agissent sur la variable origine.
  
  
 ==== Types de données ==== ==== Types de données ====
  
-Les variables se déclarent obligatoirement, mais sans type, et à n'importe quel endroit du code. Elle ne deviennent utilisable qu'à partir de leur déclaration, sous peine de déclencher une exception. Attention à ne pas mettre une déclaration de variable dans un corps de boucle, car la re déclaration de la même variable génèrera une exception.+Les variables se déclarent obligatoirement, mais sans type, et à n'importe quel endroit du code. Elles ne deviennent utilisable qu'à partir de leur déclaration, sous peine de déclencher une exception. Attention à ne pas mettre une déclaration de variable dans un corps de boucle, car la re déclaration de la même variable génèrera une exception.
  
 <code wlang> <code wlang>
Ligne 72: Ligne 77:
 declare x, y, tmp declare x, y, tmp
 ; ;
 +
  
 </code> </code>
Ligne 89: Ligne 95:
 === Portée === === Portée ===
  
-Les variables déclarées dans le bloc principal (begin/background) du programme ont une portée globale. \\ Les variables déclarées dans les bibliothèques (library) et sous-programmes (sub) ont une portée locale au sous-programme. \\ Les //sub//  et classes ont une portée globale, même si ils apparaissent dans un sous-programme (**__A Préciser__**  quand créés depuis une //library//). \\ Les variables appartenant à une hashtable ne sont accessible que via la hashtable, sauf les classes et //sub//  accessibles globalement.+Les variables déclarées dans le bloc principal (begin/background) du programme ont une portée globale. \\ Les variables déclarées dans les bibliothèques (library) et sous-programmes (sub) ont une portée locale au sous-programme. \\ Les //sub//  et classes ont une portée globale, même s'ils apparaissent dans un sous-programme ou dans une //library//. \\ Les variables appartenant à une hashtable ne sont accessible que via la hashtable, sauf les classes et //sub//  accessibles globalement.
  
 === Utilisation === === Utilisation ===
  
-Les variables s'affectent avec l'instruction ''let''. Il est possible de //dés-affecter//  une variable avec l'instruction ''delet''. Dans ce cas, le contenu de la variable est supprimé mais elle reste déclarée, sans type (même état qu'après sa déclaration avec ''declare''). L'ajout de variables dans une Hashtable n'a pas besoin de déclaration, mais elles s'affectent et se dés-affectent comme les autres ; cependant l'instruction ''delete''  d'un membre d'une hashtable supprime la variable de la hastable (contrairement aux autres). La syntaxe à utiliser est ''<varht>.<membre>''.+Les variables s'affectent avec l'instruction ''let''. Il est possible de //dés-affecter//  une variable avec l'instruction ''delet''. Dans ce cas, le contenu de la variable est supprimé mais elle reste déclarée, sans type (même état qu'après sa déclaration avec ''declare''). L'ajout de variables dans une Hashtable n'a pas besoin de déclaration, mais elles s'affectent et se dés-affectent comme les autres ; cependant l'instruction ''delet'' d'un membre d'une hashtable supprime la variable de la hashtable (contrairement aux autres). La syntaxe à utiliser est ''<varht>.<membre>''.
  
 <code wlang> <code wlang>
Ligne 104: Ligne 110:
 let h.x = 10 let h.x = 10
 let h.y = 20 let h.y = 20
 +
  
 </code> </code>
 +
 +L'instruction ''let''  permet d'effectuer des opérations (liste des [[:reference#operateurs|opérateurs ]]et leur priorité) et d'affecter le résultat à la variable indiquée. De nombreuses [[:reference#fonctions|fonctions ]]sont disponibles dans les expressions.
 +
  
 ==== Exceptions ==== ==== Exceptions ====
Ligne 133: Ligne 143:
  
   * condition ''if-then-elseif-else-endif''  : même fonctionnement que dans les autres langages   * condition ''if-then-elseif-else-endif''  : même fonctionnement que dans les autres langages
-  * boucle ''loop-endloop''  : boucle inconditionnelle (infinie). La sortie se fait avec les instructions ''break''  et ''breakon <condition>'', à n'importe quelle endroit dans la boucle. De manière similaire, il est également possible de forcer le retour au début de la boucle avec les instructions ''continue''  et ''continueon <condition>''+  * boucle ''loop-endloop''  : boucle inconditionnelle (infinie). La sortie se fait avec les instructions ''break''  et ''breakon <condition>'', à n'importe quel endroit dans la boucle. De manière similaire, il est également possible de forcer le retour au début de la boucle avec les instructions ''continue''  et ''continueon <condition>''
   * itérateur ''foreach-endfor''  : permet d'itérer de trois manières différentes selon le type de la variable itérée :   * itérateur ''foreach-endfor''  : permet d'itérer de trois manières différentes selon le type de la variable itérée :
-      * numérique : pour compter en boucle+      * numérique : pour compter
       * dynamic (chaîne) : pour extraire de manière séquentielle chaque champ       * dynamic (chaîne) : pour extraire de manière séquentielle chaque champ
       * hashtable : pour lire la clé de chaque élément de la hashtable       * hashtable : pour lire la clé de chaque élément de la hashtable
 +
  
 ==== Appel de méthode ==== ==== Appel de méthode ====
Ligne 148: Ligne 159:
 ==== Interactions console ==== ==== Interactions console ====
  
-affichage dans la console : les instructions ''echo <expression>'' et ''echonl <expression>'' envoient le résultat de l'expression dans la console, comme le fait ''printf'' en C. ''echonl'' écrit à la fin de l'expression un saut de ligne (''\n''), ce que ne fait pas ''echo''.+  * affichage dans la console : les instructions ''echo <expression>''  et ''echonl <expression>''  envoient le résultat de l'expression dans la console, comme le fait ''printf''  en C. ''echonl''  écrit à la fin de l'expression un saut de ligne (''\n''), ce que ne fait pas ''echo''. 
 +  * lecture depuis la console : l'instruction ''input <variable>''  permet de récupérer dans la variable les caractères tapés au clavier dans la console. La variable est de type //dynamic//. 
 + 
 +==== Debugger ====
  
-lecture depuis la console : l'instruction ''input <variable>'' permet de récupérer dans la variable les caractères tapés au clavier dans la console. La variable est de type //dynamic//.+Le langage dispose d'un debugger intégré à la machine virtuelle qui exécute le pcode W. Le mode s'active en exécutant un programme w avec l'option ''-d''. Il peut aussi être déclenché pendant l'exécution d'un programme, en envoyant un signal au processus, différemment sous Linux et Windows (**A PRECISER**). Le debugger dispose de nombreuses [[:debugger|commandes ]](pas à pas, points d'arrêt, visualisation des variables,etc.).
  
  
  • presentation.1785184379.txt.gz
  • Dernière modification : 2026/07/27 20:32
  • de root