23 juin 2011

Vala: Les fonctions qui retournent null et les fonctions qui plantent avec null

Je vais lister sur ce billet les fonctions et opérations qui peuvent générer une erreur de segmentation (segmentation fault) avec Vala. Cette liste sera complétée à l'occasion. A - Fonction qui plante lorsqu'elle reçoit une chaine non référencée (null): int.parse(str)  si str = null alors un segment fault est généré. var strB = strA si strA = null et que valac traduit cette affectation par un g_strdup (ce n'est pas systèmatique). B - Opération qui plante lorsque les bornes sont dépassées: string[] strA={"abc","def","ghi"} ... [Lire la suite]
Posté par InPhilly à 14:25 - - Commentaires [0] - Permalien [#]

23 juin 2011

les risques d'erreur de segmentation en Vala

Vala est moins succeptible aux erreurs d'allocation mémoire, aux erreurs de segmentation que le C. Mais quelques risques subsistent. Dans mon précédent billet, je vous ai parlé du problème du split, dans celui-ci je vais abordé le problème des tableaux, et en particulier lorsqu'on dépasse les limites du tableaux. Prenons le petit exemple qui suit: string[] str = {"ABC","DEF","GHI"};message(str[5]); La table str ne contient que 3 chaines, et on tente d'accèder à une chaine en position 5. À l'execution du programme, on obtiendra un... [Lire la suite]
Posté par InPhilly à 09:18 - - Commentaires [0] - Permalien [#]
22 juin 2011

string.split n'aime pas le pointeur null

Les trois lignes ci-dessous vont générer un 'segmentation fault" string strA = null; var strB = strA.split(" "); var strC = strB[0]; g_strsplit détecte que le pointeur sur la chaine est nulle et donc le pointeur sur strB se retrouve non initialisé. Lorsque le programme va tenter un g_strdup  ( pour copier strB[0] dans strC ), le programme crash. Voici l'extrait du code C produit par Valac:     gchar* strA;    gchar** _tmp0_;    gchar** _tmp1_ = NULL;    gchar**... [Lire la suite]
Posté par InPhilly à 19:03 - - Commentaires [0] - Permalien [#]
15 juin 2011

Vala, c'est trop bien!

J'ai passé trois jours à developper un petit programme avec Vala. Un vrai plaisir a écrire environ 400 lignes de code sans aucun pointeur, sans avoir à gérer l'allocation et la désallocation de la mémoire, avec des instructions puissantes. Bref, en codant pratiquement en C#, tout en conversant les performances du C.Vala, c'est vraiment bien! Le code est là: http://sourceforge.net/projects/openbotamsr/files/decision-linear-classifier-based/  
Posté par InPhilly à 13:08 - - Commentaires [0] - Permalien [#]
31 décembre 2008

Vala évolue rapidement

Il suffit de jetter un coup d'oeil sur les 'releases' http://live.gnome.org/Vala/Release pour constater que Vala évolue vite. Aussitôt que j'aurai un peu plus de temps, j'écrirais un petit traducteur C# vers Vala pour faciliter le portage des applications développées en C#.
Posté par InPhilly à 17:47 - - Commentaires [0] - Permalien [#]
30 décembre 2008

Différence entre vala et c#: string as indexer

Voici un exemple c# que j'ai pris dans la doc de Micro$oft qui ne marche pas en vala.  Je vais me plonger de nouveau dans la doc de vala pour trouver ce qui ne va pas. Le message d'erreur généré par valac: /media/hda3/vala/daycollection.vala:22.16-22.19: error: syntax error, unexpected this /media/hda3/vala/daycollection.vala:29.1-29.1: error: syntax error, unexpected } /media/hda3/vala/daycollection.vala:38.1-38.1: error: syntax error, unexpected } Le code: // Using a string as an indexer valueusing GLib;class... [Lire la suite]
Posté par InPhilly à 17:19 - - Commentaires [0] - Permalien [#]

30 décembre 2008

Différence entre vala et c#: Property

Le code qui suit compile sans problème, mais plante à l'éxecution.  La correction est à la fin: Il faut introduire une variable private avec un nom différent du nom donné en Property // Exemple Property c# - plante en valausing GLib;namespace Essai_property {    class Property {        public int valeur {            get {                return valeur;          ... [Lire la suite]
Posté par InPhilly à 15:56 - - Commentaires [0] - Permalien [#]
30 décembre 2008

Différence entre vala et c#: Hashtable

Ce code ne marche pas avec Vala (8 erreurs à la compilation):  Voir en-dessous le code modifié // statements_foreach_hashtable.cs// Using the Hashtable collection classusing GLib;public class MainClass {   public static void Main(string [] args)    {      // Declare a Hashtable object:      Hashtable ziphash = new Hashtable();       // Add entries using the Add() method:      ziphash.Add("98008",... [Lire la suite]
Posté par InPhilly à 06:06 - - Commentaires [0] - Permalien [#]
30 décembre 2008

Différence entre vala et c#: foreach sur une collection

L'itération sur une collection n'est pas possible avec Vala // statements_foreach_collections.cs// Using foreach with C#-specific collections:using GLib; // Declare the collection:public class MyCollection {   int[] items;    public MyCollection()    {      items = new int[5] {12, 44, 33, 2, 50};   }    public MyEnumerator GetEnumerator()    {      return new MyEnumerator(this);   }    // Declare the... [Lire la suite]
Posté par InPhilly à 05:53 - - Commentaires [0] - Permalien [#]
30 décembre 2008

Similitude entre vala et c#: foreach

Une boucle foreach sur une table (array) a la même syntaxe en c# et vala. Le code: // Utilisation de la boucle foreach sur une tableusing GLib; class foreach_table {    public static void main() {      int impair = 0, pair = 0;      int[] table = new int [] {0,1,2,5,7,8,11};      foreach (int element in table) {         if (element%2 == 0)  pair++;               else... [Lire la suite]
Posté par InPhilly à 05:40 - - Commentaires [0] - Permalien [#]