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