Merci Nicolas pour tes précisions. <br />Tes explications répondent à ma curiosité sur les raisons de limitation.<br /><br />La méthode trop longue est une méthode existante qui a été écrite en utilisant une autre implantation Smalltalk.<br />Je l&#39;ai divisée en plusieurs sous-méthodes.<br /><br />Bonne journée,<br />Houssam<br /><br /><br />Le 12 mars 2009 22:18, Nicolas Cellier &lt;ncellier@ifrance.com&gt; a écrit :<br />&gt; &gt; <br />&gt; &gt; On 12 mars 09, at 15:26, Houssam Fakih wrote:<br />&gt; &gt; Merci pour ta réponse.<br />&gt; &gt; J&#39;ai envoyé un peu vite mon courriel.. Squeak traite bien des fichiers dont la<br />&gt; taille dépasse 1 KO.<br />&gt; &gt; Je voulais parler des blocs de code qui dépassent 1 KO que Squeak ne compile pas.<br />&gt; <br />&gt; &gt; Ma question : est ce que cette limitation est imposée pour éviter des méthodes<br />&gt; avec un nombre de lignes important ou bien y a t-il une autre raison pour cela ?<br />&gt; &gt;<br />&gt; <br />&gt; <br />&gt; Il y a en effet pleins de limitations sur les méthodes...<br />&gt; <br />&gt; ...et ceci est lié à la conception de l&#39;interpreteur.<br />&gt; <br />&gt; Le code Smalltalk est convertit en une séquence d&#39;instructions élémentaires.<br />&gt; Il utilise un langage de bas niveau de type langage à pile.<br />&gt; La plupart de ces instructions sont codées sur un ou deux octets.<br />&gt; <br />&gt; On parle de bytecode.<br />&gt; <br />&gt; Les instructions principales sont push/pop/send message/return.<br />&gt; push et pop servent à empiler/dépiler des objects...<br />&gt; ...échange entre la pile et variables temporaires, d&#39;instances, litéraux.<br />&gt; <br />&gt; send message envoie un message (évidemment)...<br />&gt; ...et laisse la valeur de retour sur la pile.<br />&gt; return quitte la méthode (la valeur de retour est empilée avant).<br />&gt; <br />&gt; De plus il y a des instructions de branchement conditionnelles ou non:<br />&gt; <br />&gt; jump jumpIfTrue jumpIfFalse.<br />&gt; Ces instructions jump ne sont pas strictement nécessaire au langage.<br />&gt; Elles sont là pour optimiser l&#39;implémentation.<br />&gt; Tout jump forward peut être remplacé par un message ifTrue:<br />&gt; <br />&gt; (envoyé à un booléan avec un bloc de code en argument).<br />&gt; Tout jump backward peut être remplacé par une méthode récursive.<br />&gt; <br />&gt; Les limitations viennent:<br />&gt; - du codage des instruction (bytecode) sur un nombre de bit limités<br />&gt; <br />&gt; - du codage de l&#39;entête des méthodes avec un nombre de bit limités<br />&gt; <br />&gt; Il ne peut y avoir plus de :<br />&gt; m variables d&#39;instances, superclasses comprises,<br />&gt; n variables temporaires,<br />&gt; p litéraux différents dans une méthode,<br />&gt; <br />&gt; les jump ne peuvent pas être longs, (c&#39;est là ton problème je pense)<br />&gt; Peut être que la profondeur de pile est limitée aussi...<br />&gt; <br />&gt; Quand on écrit dans la philosophie Smalltalk, cela pose rarement un problème.<br />&gt; <br />&gt; Les méthodes font rarement plus de quelques lignes.<br />&gt; Mais si on veut générer du code, ou que l&#39;on vient avec d&#39;autres habitudes...<br />&gt; <br />&gt; Le nouveau compilateur pourrait contourner certaines limitations.<br />&gt; Par exemple générer un tableau de litérales si il n&#39;y a plus de slot libre.<br />&gt; <br />&gt; Ou bien un tableau de &quot;variables temporaires&quot;...<br />&gt; <br />&gt; VisualWorks Smalltalk peut contourner le jump trop long aussi...<br />&gt; ...car les blocs de codes n&#39;utilisent pas de jump.<br />&gt; Ce sont des objets séparés placés dans les litérales de la méthodes...<br />&gt; <br />&gt; Le compilateur execute turnOffOptimisationOfBlock quand il rencontre l&#39;erreur.<br />&gt; Malheureusement, l&#39;implémentation des blocs de code en Squeak utilise jump!<br />&gt; (le code des blocs de code se trouve fondu dans la méthode qui les héberge).<br />&gt; <br />&gt; <br />&gt; Voilà, tu as la raison: c&#39;est très technique, et pas très précis...<br />&gt; Mais tu es invité à creuser la question si cela t&#39;intéresse.<br />&gt; <br />&gt; Mais pourquoi une méthode si longue?<br />&gt; <br />&gt; Nicolas<br />&gt; <br />&gt;  <br />&gt; &gt; <br />&gt; <br />&gt; &gt; Certes, ce n&#39;est pas de l&#39;ordre du bon style d&#39;écrire des méthodes avec plus<br />&gt; d&#39;une dizaine de ligne.<br />&gt; &gt; Mais, c&#39;est un pb d&#39;implantation. Je me demande si cela n&#39;a pas été corrigé<br />&gt; <br />&gt; dans le nouveau compilo.<br />&gt; &gt; Mais, je crois c&#39;est l&#39;ancien qui est toujours utilisé dans Squeak.<br />&gt; &gt; As-tu essayé avec Pharo ? Probablement, que le nouveau compilateur y est<br />&gt; utilisé (ou au moins il devrait l&#39;être).<br />&gt; <br />&gt; &gt; A noter que rien n&#39;empêche d&#39;avoir des méthodes avec de grands tableaux de<br />&gt; literaux ou de longues chaînes de caractères, même avec l&#39;ancien compilo.<br />&gt; &gt; Noury<br />&gt; &gt; <br />&gt; &gt; <br />&gt; &gt; <br />&gt; &gt; Houssam<br />&gt; <br />&gt; &gt; 2009/3/11 Noury Bouraqadi bouraqadi-saG5RXAdi9254UkRPGbdpA@public.gmane.org&gt;<br />&gt; &gt; On 11 mars 09, at 15:44, Houssam Fakih wrote:<br />&gt; &gt; Bonjour la liste,<br />&gt; <br />&gt; &gt; J&#39;essaye de faire fileIn d&#39;un fichier .st.<br />&gt; &gt; J&#39;ai une exception avec le message suivant : &#39;A block compiles more than 1K<br />&gt; bytes of code&#39;.<br />&gt; &gt; Est ce que vous pourriez m&#39;aider pour comprendre pourquoi il y a cette limitation<br />&gt; <br />&gt; &gt; et qu&#39;est ce que je peux faire pour &quot;fileIn&quot; des fichiers qui dépassent 1 KO.<br />&gt; &gt; Oui. A priori, il n&#39;y a pas de limite de taille de fichier .ST.<br />&gt; &gt; La limite que je connais est dans certains compilateurs une limite sur le<br />&gt; <br />&gt; nombre de littéraux.<br />&gt; &gt; C&#39;est pour cela que les méthodes dans le .ST sont suivies par un point<br />&gt; d&#39;exclamation.<br />&gt; &gt; Peut-être qu&#39;il n&#39;y en a pas dans ton fichier .ST. Ca peut poser problème.<br />&gt; &gt; Nouryhttp://vst.ensm-douai.fr/noury/<br />&gt; <br />&gt; &gt; --------------<br />&gt; &gt; -ESUG 17th International Smalltalk Conference -  Brest, France, August 31 -<br />&gt; September 4, 2009http://www.esug.org/Conferences/2009<br />&gt; &gt; -17èmes Journées Francophones sur les Systèmes Multi-Agents (JFSMA’09). Lyon,<br />&gt; <br />&gt; 21-23 Octobre 2009http://bat710.univ-lyon1.fr/~sycosma/JFSMA09/<br />&gt; &gt; _______________________________________________<br />&gt; &gt; Squeak-fr mailing<br />&gt; listSqueak-fr-bD51WKytQuJI8mQ4nJOOf3xJsTq8ys+cHZ5vskTnxNA@public.gmane.orghttp://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr<br />&gt;