30

et a Epita on en parle pas smile un espace en fin de ligne tu te prenais 0 smile Alors la norme t'avais interet à la respecter grin Mais bon je ne dis pas que toutes les normes sont jolie. Elle était même plutot trop contraignante
avatar
https://air-gaming.com/tests/ si vous voulez de la bonne lecture :=)

31

Manoloben (./31) :
un espace en fin de ligne tu te prenais 0


non mais eux ils se touchent un peu le kiki, hein, c'est pas pareil triso #pastaper#

32

un espace en fin de ligne tu te prenais 0

Même si tous les éditeurs de texte un peu malins savent enlever les espaces en fin de ligne lors de la sauvegarde, je trouve que c'est n'importe quoi, cette norme grin
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

33

Ouai enfin ca c'est du détail, un indenteur est c'est fini on en parle plus.
Alors que le design avec des dépendances de partout pour rien et en plus cyclique ca c'est la joie.

34

JackosKing (./33) :
Ouai enfin ca c'est du détail, un indenteur est c'est fini on en parle plus.

Bah l'indenteur, il commente rarement ton code grin
avatar

35

du bon code n'a pas besoin de commentaires, si ce n'est a quelques endroits cles ...

36

Rintintin (./35) :
du bon code n'a pas besoin de commentaires, si ce n'est a quelques endroits cles ...

Au moins le SE, ou une documentation de ce que font les fonctions (Entrées/Sorties). L'idéal étant d'utiliser un standard comme javaDoc, PHPDoc, ou autre pour pouvoir compiler une doc (sinon tu te retrouves à réécrire la fonction que le gars a déjà écrite il y a trois semaines).
Et du "bon code" pour toi ne l'est pas forcément pour un autre (par exemple, pour la lecture, je développe systématiquement mes blocs, même s'ils ne font qu'une ligne et que c'est facultatif ; et je ne supporte pas l'accolade qui commence sur la même ligne que le mot clé).
avatar

37

Nil (./36) :
Au moins le SE, ou une documentation de ce que font les fonctions (Entrées/Sorties). L'idéal étant d'utiliser un standard comme javaDoc, PHPDoc, ou autre pour pouvoir compiler une doc (sinon tu te retrouves à réécrire la fonction que le gars a déjà écrite il y a trois semaines).

Si les fonctions et leurs parametres sont explicites, meme pas besoin de commenter quoi que ce soit, tu genere le javadoc sur le code de base et puis c'est bon
Et du "bon code" pour toi ne l'est pas forcément pour un autre (par exemple, pour la lecture, je développe systématiquement mes blocs, même s'ils ne font qu'une ligne et que c'est facultatif ; et je ne supporte pas l'accolade qui commence sur la même ligne que le mot clé).

La par contre je trouve ca illisible, developper a tout va et pour rien (mettre toutes les accolades a la ligne) ca oblige a scroller comme un porc des qu'on cherche qqch dans le code ...

38

Rintintin (./37) :
Et du "bon code" pour toi ne l'est pas forcément pour un autre (par exemple, pour la lecture, je développe systématiquement mes blocs, même s'ils ne font qu'une ligne et que c'est facultatif ; et je ne supporte pas l'accolade qui commence sur la même ligne que le mot clé).
La par contre je trouve ca illisible, developper a tout va et pour rien (mettre toutes les accolades a la ligne) ca oblige a scroller comme un porc des qu'on cherche qqch dans le code ...

Ben moi je trouve ça plus lisible hehe ça évite de se retrouver dans des situations où tu ne sais pas au premier coup d'oeil si tu est dans le cas d'un bloc avec une simple ligne, où si tu as loupé une accolade mal placée (je viens d'ailleurs d'avoir le problème à l'instant, où j'ai eu ce type de truc (c'est la dernière fois que je suis volontaire pour reprendre du code, la prochaine fois, je me fais désigner...) :
  if ($rep <> ""){srand((double) microtime () * 1000000);
  $boundary = md5 (uniqid (rand ()));
  $titre = nomcongres." informations";
  $header = "From: ".nomcongres." <".nomcongres."@********.fr>\n";
  $header. = "Reply-To: ".nomcongres."@univ-lyon1.fr \n";
  $header. = "MIME-Version: 1.0\n";
  $header. = "Content-Type: multipart/alternative;boundary=$boundary\n";
  $message = "\nThis is a multi-part message in MIME format.";
[insérer encore plein de choses]
  }
avatar

39

C'est surtout mal indenté.

40

Oui, ça on est d'accord grin
avatar

41

Si c'était indenté correctement selon K&R:
  if ($rep <> "") {
    srand((double) microtime () * 1000000); 
    $boundary = md5 (uniqid (rand ())); 
    $titre = nomcongres." informations"; 
    $header = "From: ".nomcongres." <".nomcongres."@********.fr>\n"; 
    $header. = "Reply-To: ".nomcongres."@univ-lyon1.fr \n"; 
    $header. = "MIME-Version: 1.0\n"; 
    $header. = "Content-Type: multipart/alternative;boundary=$boundary\n"; 
    $message = "\nThis is a multi-part message in MIME format."; 
[insérer encore plein de choses] 
  }

on s'y retrouverait bien.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

42

Kevin Kofler (./41) :
if ($rep "") {

sick heureusement qu'on revient de cette norme avec l'accolade sur la ligne du mot-clé...
avatar

43

Manoloben (./30) :
et a Epita on en parle pas smile un espace en fin de ligne tu te prenais 0 smile Alors la norme t'avais interet à la respecter grin

S'ils essayaient d'appliquer cette norme ici en Autriche, il n'y aurait que des zéros...
Nil (./42) :
Kevin Kofler (./41) :
if ($rep "") {

sick heureusement qu'on revient de cette norme avec l'accolade sur la ligne du mot-clé...

C'est l'accolade à part qui est sick, sauf pour les fonctions:
void foo(void)
{
  ...
}

comme prévu par K&R.

La seule chose qui est nulle dans la norme K&R est leur système d'indentation (utilisation de tabs pour "compresser" 8 espaces), mais du K&R indenté purement aux espaces (et avec 1, 2 ou maximum 4 espaces par niveau d'indentation, pas 5), c'est parfait.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

44

Nil (./42) :
Kevin Kofler (./41) :
if ($rep "") {

sick heureusement qu'on revient de cette norme avec l'accolade sur la ligne du mot-clé...

C'est quoi le problème ? confus Surtout que si le code est correctement indenté y a jamais besoin de regarder autre chose que l'indentation pour savoir si y a une accolade ou pas happy (alors après, si votre code est suffisamment dégueulasse pour qu'il soit souvent indenté n'importe comment ça peut être une bonne idée de faire sauter aux yeux le fait que c'est mal indenté, mais bon...)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

45

Oué K&R c'est bien ^^
je suis d'accord avec Kevin tongue (j'utilise 3 espaces, 2 c'est trop faible je trouve)
Et sinon pour les affectations j'utilise un truc que Thibaut m'avait présenté :
var= value ;
Je trouve que le déséquilibre reflète bien l'idée d'affectation.

46

(ouais mais c'est très moche sick; var = value powa embarrassed)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

47

Pollux (./44) :
Nil (./42) :
Kevin Kofler (./41) :
if ($rep "") {

sick heureusement qu'on revient de cette norme avec l'accolade sur la ligne du mot-clé...

C'est quoi le problème ? confus Surtout que si le code est correctement indenté y a jamais besoin de regarder autre chose que l'indentation pour savoir si y a une accolade ou pas happy (alors après, si votre code est suffisamment dégueulasse pour qu'il soit souvent indenté n'importe comment ça peut être une bonne idée de faire sauter aux yeux le fait que c'est mal indenté, mais bon...)

Ben moi j'aime bien savoir quand commence mon bloc. La première chose qui accroche mon oeil, c'est pas l'indentation (surtout quand il y a plein de blocs imbriqués), c'est l'accolade. Si je ne la vois pas clairement (et surtout, alignée par rapport à la fermante, c'est surtout ça qui heurte le côté cartésien de mon esprit), je me sens mal à l'aise.
Puis en xml, par exemple, il ne viendra jamais à l'idée de ne pas aligner au même niveau une balise ouvrante et une fermante. Pour moi, c'est le même problème. Pour moi, ce n'est pas le mot clé (if, while ou autre) qui "ouvre" le bloc. Il est juste une information sur la façon dont le bloc suivant va être traité, c'est tout.
avatar

48

Pen^2 (./45) :
t sinon pour les affectations j'utilise un truc que Thibaut m'avait présenté :
var= value ; Je trouve que le déséquilibre reflète bien l'idée d'affectation.

Pollux (./46) :
(ouais mais c'est très moche sick.gif var = value; powa redface.gif )


C'est rigolo, je fais comme Pollux (parce que c'est plus joli ^^) mais j'ai longtemps fait comme Pen² (Thibaut) pour les mêmes raisons. Par contre, je mets aussi un espace avant le point virgule, l'habitude de la syntaxe française grin
avatar

49

./47>
Ah tiens, pour moi au contraire c'est plus ou moins le mot-clé qui ouvre le bloc, donc c'est exactement comme en XML sauf que pour plus de concision le bloc fermant ne précise pas le nom du tag smile (et les blocs isolés, i.e. qui ne correspondent à aucun if/for/while/else, sont clairement une exception plutôt que la règle -- si tu veux tu peux dire qu'ils correspondent à un mot-clé vide)

(mais je suis d'accord que du point de vue de l'implémentation du compilo c'est plutôt ta façon de voir les choses qui est choisie)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

50

Nil (./47) :

Ben moi j'aime bien savoir quand commence mon bloc. La première chose qui accroche mon oeil, c'est pas l'indentation (surtout quand il y a plein de blocs imbriqués), c'est l'accolade. Si je ne la vois pas clairement (et surtout, alignée par rapport à la fermante, c'est surtout ça qui heurte le côté cartésien de mon esprit), je me sens mal à l'aise. Puis en xml, par exemple, il ne viendra jamais à l'idée de ne pas aligner au même niveau une balise ouvrante et une fermante. Pour moi, c'est le même problème. Pour moi, ce n'est pas le mot clé (if, while ou autre) qui "ouvre" le bloc. Il est juste une information sur la façon dont le bloc suivant va être traité, c'est tout.


Grosso modo, j'étais pareil que toi il y a 4 ans. Puis j'ai du travailler sur un écran en mode texte (pas de serveur graphique, tout çà).
Depuis je fais comme Pollux, parce que ca permet de mieux compacter son code, et tu en vois plus à l'écran.

51

comme pollux aussi... mais ca vient surement du fait que je fasse pas mal de python, ca me permet de retrouver a peu pres le mm style en C/C++/Java

52

Puisque tout le monde montre sa façon de mettre en page son code, voici la mienne :

int fast_and_perfect_hash(const char *str, int length)  // works only with HASH_TABLE_SIZE = 256 or 512 or 1024
{   // very good Daniel Julius Bernstein's algorithm
    // speed optimized by Pollux
    // unrolled by Thibaut for more speed
    // many other speed optimizations by Pen2
    // generates very uniform hash tables even with non prime modulos

    register unsigned int hash  = 5381;  // DJB Hash
    register unsigned int hash5 = 0;
    register const char  *s;
    register int          i;


    s= str;

    i= (unsigned)length / 4;
    while (i--) {
        hash5+= hash;   hash+= *s++;
        hash5+= hash;   hash+= *s++;
        hash5+= hash;   hash+= *s++;
        hash5+= hash;   hash+= *s++;
    }

    i= (unsigned)length % 4;
    while (i--) {
        hash5+= hash;
        hash+= *s++;
    }

    return (hash + (hash5<<5)) % HASH_TABLE_SIZE;
}

Pour résumer :

- Alignement des déclarations : on voit immédiatement quels sont les types et quels sont les identifiants ;
- Indentation avec 4 espaces : la hiérarchie des blocs saute beaucoup plus aux yeux ;
- Notion de "paragraphes" : en programmation, une opération est souvent réalisée par plusieurs instructions. Je regroupe ces suites d'instructions en paragraphes (lignes blanches entre les paragraphes).
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

53

tiens, j'ai quasiment le même style que Thibaut (surtout les trois points en bas du post), sauf que je mets systématiquement les { à la ligne </mylife>
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

54

En dehors du passage du { à la ligne, j'ai un peu de mal avec l'organisation des commentaires de Thibaut.
Ce qu'il indique en haut devrait avoir plus de place avant la fonction (ce sont des observations générales - licence, spécifications externes - qui n'ont rien à faire dans le code lui-même ; en outre, il gagnerait peut-être à utiliser un bloc de commentaires plutôt qu'une succession de lignes.

(Sinon, voilà le début d'un fichier ; il y aurait encore beaucoup de choses à améliorer - en particulier, il faut que je me mette à phpDocumentation - mais au moins, je trouve ça clair)

/* ----------------------                                                        */
/* -- DEBUT DU FICHIER --                                                        */
/* ---------------------------------------------------------------- */
/* Scripts de gestion d'authentification LDAP                       */
/* (c) 2005 Centre de Ressources Informatiques - XXXXXXXXXXXX       */
/* (c) 2006 Centre de Ressources Informatiques - XXXXXXXXXXXX       */
/* Jxxxxxxx Dxxxx, portions Fxxxxxxx                                */
/* Certains scripts sont basés sur les scripts Perl d'Idealix.org   */
/* la fonction fputcsv est tirée du site www.php.net                */
/* ---------------------------------------------------------------- */
     
     require_once 'CHAP.php';
     require_once 'ldap_connect.php' ;
     require_once 'globals.php' ;
     $hash = new Crypt_CHAP_MSv2();

     //Variables définies en "dur"
     //TODO : les passer à l'état de constantes et les migrer vers constantes.php
     $org = "IUFM Lyon";
     $dir = "/home/";
     $unix_group = 513;
     $shell = "/bin/null" ; //"/bin/bash" si on veut autoriser l'authentification Unix;
     $time = time();

/* ----------------------------------------------------------
/* Gestion des groupes LDAP
/* ------------------------
/*
/* Les groupes LDAP ne sont pas vraiment des groupes au sens où on pourrait l'entendre.
/* Un utilisateur est affecté à un groupe si son attribut 'description' a pour valeur l'intitulé du groupe.
/* Un groupe ne peut être qu'un alphanumérique. Le caractère souligné est toléré.
/* 
/* Liste des fonctions de gestion :
/*
/* group_create($groupe)     : crée un groupe (ajoute $groupe à l'attribut 'description' de root)
/* group_syntax($groupe)     : vérifie que $groupe est un alphanumérique débutant par un alpha uniquement. Le caractère souligné est toléré.
/* group_exist($groupe)          : retourne 1 si le groupe existe, 0 sinon
/* group_purge($groupe)          : supprime tous les membres d'un groupe, même s'ils appartiennent aussi à un autre groupe, puis supprime la valeur $groupe des attributs 'description' de l'utilisateur root
/* group_list()                    : retourne la liste des groupes sous forme d'un tableau à une entrée
/* group_users($group)          : retourne la liste des utilisateurs d'un groupe donné sous forme d'un tableau
/* group_delete($group)          : supprie l'existence d'un groupe de la liste gérée par root
/*
/* ----------------------------------------------------------*/

/* group_syntax($groupe)     : vérifie que $groupe est un alphanumérique débutant par un alpha uniquement. Le caractère souligné est toléré.
/*          Requiert     : rien
/*           Vérifie      : la syntaxe de la chaine $groupe (un alpha, suivi d'au moins un aphanumérique ou d'un souligné
/*           Retourne      : 1  si la variable vérifie l'expression régulière
/*                            0  sinon
*/ 
function group_syntax($groupe)
{
     if (!$groupe)
     {
          return 0 ;
     }
     $preg_matchGroup = "(^[A-Za-z]+[A-Za-z0-9\-_-]+$)";
     if (preg_match($preg_matchGroup, $groupe))
     {
          return 1;
     }
     return 0;
}

(par contre, c'est rigolo ces merdes au niveau des tabulations... dans mon source ce sont bien des tabs, mais elles ne sont pas converties de façon homogènes lors d'un c/c ?!)
avatar

55

parceque la taille des tabs dans l'éditeur que tu utilises n'est pas la même que la taille des tabs de ton navigateur, peut-être ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

56

Les tabulations c'est le côté obscur de la force yel
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

57

Nil> argh c'est moche de mettre des /* au milieu d'un commentaire sorry (pas mal de compilos font un warning pour ça, et puis plus généralement ça fait qu'on a du mal à savoir où se termine le commentaire : si tu mets juste une seule * en début de ligne on voit bcp mieux la différence entre deux commentaires consécutifs et un seul commentaire)

sinon t'es pas très consistant dans tes espaces avant le ; (genre return 0 ; et juste après return 1; tongue)
et pourquoi t'indentes le début du fichier ? confus

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

58

Zephyr (./55) :
parceque la taille des tabs dans l'éditeur que tu utilises n'est pas la même que la taille des tabs de ton navigateur, peut-être ?

Ergo l'indentation aux tabs sux, surtout si on mélange tabs et espaces. La seule situation dans laquelle les tabs fonctionnent est si on respecte toujours la consigne d'alignement: tab sous tab, espace sous tout autre caractère, et seuls les tabs sont utilisés pour signaler le prochain niveau d'indentation. (N'importe quelle autre solution va foirer si on change la taille des tabs, par exemple pour la dernière partie, si on passe de 6 espaces à 1 tab, avec une largeur de tab de 4 espaces, ça sera aligné dans le désordre.) Mais ça, les éditeurs ont du mal à le gérer et on s'emmêle très facilement les pinceaux. Donc la seule méthode sure, c'est de n'utiliser que des espaces. Bref:
Thibaut (./56) :
Les tabulations c'est le côté obscur de la force yel

Pour une fois je suis d'accord avec Thibaut. smile
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

59

Je l'écrirais plutot comme cela, mais ca dépend des gouts.
A noter que ton code n'est compatible qu'à partir de C99

/*
\name fastAndPerfectHash
very good Daniel Julius Bernstein's algorithm 
speed optimized by Pollux 
unrolled by Thibaut Barthelemy for more speed 
many other speed optimizations by Julien Monville 
generates very uniform hash tables even with non prime modulos 
\arg pStr_ : Chaine ...
\arg length_ : longueur de chaine (A quoi ca sert?)
\pre HASH_TABLE_SIZE = 256 or 512 or 1024 and length_ <= pStr_'s length
\post nothing
*/
int fastAndPerfectHash(const char *pStr_, unsigned int length_){  
  REQUIRE(    (HASH_TABLE_SIZE == 256 ||  HASH_TABLE_SIZE  == 512 || HASH_TABLE_SIZE == 1024)
           && lenght_ <= strnlen(pStr_, length_));
    { 
      register unsigned int hash  = 5381; // DJB Hash 
      register unsigned int hash5 = 0; 
      register int i; 
 
 
      i = length_ / 4; 
      while (i--){ 
        hash5 += hash;   hash += *pStr_++; 
        hash5 += hash;   hash += *pStr_++; 
        hash5 += hash;   hash += *pStr_++; 
        hash5 += hash;   hash += *pStr_++; 
      } 
 
      i = length_ & 3;
      while (i--){ 
        hash5 += hash;   hash  += *pStr_++; 
      } 
  
      return (hash + (hash5 << 5) ) & (HASH_TABLE_SIZE - 1); 
    }
}

60

Vu qu'on est dans le concours de celui qui a la plus grosse wink


/**
 *  CoreCPU - The Quick6502 Project
 *  corecpu.c
 *
 *  Created by Manoel Trapier on 24/02/08
 *  Copyright 2008 986 Corp. All rights reserved.
 *
 *  $LastChangedDate$
 *  $Author$
 *  $HeadURL$
 *  $Revision$
 *
 */

/* Depending on the OS, one of these provide the malloc function */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

{snap}

/**
 * Initialise the CPU
 *
 * Inputs:
 *
 * - CPU Init structure:
 *  - Memory Read function pointer
 *  - Memory Write function pointer
 *  - Fast memory read function pointer (for opcodes read)
 *  - Fast page 0 function Read/Write
 *  - Fast page 1 function Read/Write
 *
 * Output:
 *
 * (void *): An opaque pointer to the internal structure of the CPU.
 *           NULL if an error occured !
 */
quick6502_cpu *quick6502_init(quick6502_cpuconfig *config)
{
   quick6502_cpu *cpu;

   /* Alloc structure */
   cpu = (quick6502_cpu *) malloc (sizeof (quick6502_cpu));
   if (!cpu)
      return NULL;

   /* Initialise other variables */
   cpu->running = 0; /* CPU is currently NOT running */

   cpu->cycle_done = 0;
   
   /* Initialise registers */
   cpu->reg_A = 0;
   cpu->reg_X = 0;
   cpu->reg_Y = 0;
   cpu->reg_S = 0xFF;
   
   cpu->reg_P = Q6502_D_FLAG | Q6502_I_FLAG;
   
   if (config->memory_read != NULL)
      cpu->memory_read                 = config->memory_read;
   else
      goto init_error;

   if (config->memory_write != NULL)
      cpu->memory_write                = config->memory_write;
   else
      goto init_error;

   if (config->memory_opcode_read != NULL)
      cpu->memory_opcode_read          = config->memory_opcode_read;
   else
      cpu->memory_opcode_read          = config->memory_read;


   if (config->memory_page0_read != NULL)
      cpu->memory_page0_read           = config->memory_page0_read;
   else
      cpu->memory_page0_read           = config->memory_read;

   if (config->memory_page0_write != NULL)
      cpu->memory_page0_write          = config->memory_page0_write;
   else
      cpu->memory_page0_write          = config->memory_write;

   if (config->memory_stack_read != NULL)
      cpu->memory_stack_read           = config->memory_stack_read;
   else
      cpu->memory_stack_read           = config->memory_read;

   if (config->memory_stack_write != NULL)
      cpu->memory_stack_write          = config->memory_stack_write;
   else
      cpu->memory_stack_write          = config->memory_write;
   
   return cpu;

init_error:
   if (cpu)
      free (cpu);

   return NULL;
}

{snap}

/**
 * Run cpu for at least X cycles 
 *
 * Output:
 *
 * int: (Number of cycle really done) - (Number of cycle asked)
 */
int quick6502_run(quick6502_cpu *cpu, int cycles)
{
   cpu->running = !0;

   while(cpu->cycle_done < cycles)
   {
      quick6502_exec_one(cpu);
   }
   cpu->cycle_done -= cycles;

   cpu->running = 0;

   return cycles + cpu->cycle_done;
}
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.