> <br>> On 12 mars 09, at 15:26, Houssam Fakih wrote:<br>> Merci pour ta réponse.<br>> J'ai envoyé un peu vite mon courriel.. Squeak traite bien des fichiers dont la<br>taille dépasse 1 KO.<br>> Je voulais parler des blocs de code qui dépassent 1 KO que Squeak ne compile pas.<br>
> 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>><br><br><br>Il y a en effet pleins de limitations sur les méthodes...<br>
...et ceci est lié à la conception de l'interpreteur.<br><br>Le code Smalltalk est convertit en une séquence d'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'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'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'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'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'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'on vient avec d'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'y a plus de slot libre.<br>
Ou bien un tableau de "variables temporaires"...<br><br>VisualWorks Smalltalk peut contourner le jump trop long aussi...<br>...car les blocs de codes n'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'erreur.<br>Malheureusement, l'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'est très technique, et pas très précis...<br>Mais tu es invité à creuser la question si cela t'intéresse.<br><br>Mais pourquoi une méthode si longue?<br><br>Nicolas<br><br> <br>> <br>
> Certes, ce n'est pas de l'ordre du bon style d'écrire des méthodes avec plus<br>d'une dizaine de ligne.<br>> Mais, c'est un pb d'implantation. Je me demande si cela n'a pas été corrigé<br>
dans le nouveau compilo.<br>> Mais, je crois c'est l'ancien qui est toujours utilisé dans Squeak.<br>> As-tu essayé avec Pharo ? Probablement, que le nouveau compilateur y est<br>utilisé (ou au moins il devrait l'être).<br>
> A noter que rien n'empêche d'avoir des méthodes avec de grands tableaux de<br>literaux ou de longues chaînes de caractères, même avec l'ancien compilo.<br>> Noury<br>> <br>> <br>> <br>> Houssam<br>
> 2009/3/11 Noury Bouraqadi <<a href="mailto:bouraqadi-saG5RXAdi9254UkRPGbdpA@public.gmane.org">bouraqadi-saG5RXAdi9254UkRPGbdpA@public.gmane.org</a>><br>> On 11 mars 09, at 15:44, Houssam Fakih wrote:<br>> Bonjour la liste,<br>
> J'essaye de faire fileIn d'un fichier .st.<br>> J'ai une exception avec le message suivant : 'A block compiles more than 1K<br>bytes of code'.<br>> Est ce que vous pourriez m'aider pour comprendre pourquoi il y a cette limitation<br>
> et qu'est ce que je peux faire pour "fileIn" des fichiers qui dépassent 1 KO.<br>> Oui. A priori, il n'y a pas de limite de taille de fichier .ST.<br>> La limite que je connais est dans certains compilateurs une limite sur le<br>
nombre de littéraux.<br>> C'est pour cela que les méthodes dans le .ST sont suivies par un point<br>d'exclamation.<br>> Peut-être qu'il n'y en a pas dans ton fichier .ST. Ca peut poser problème.<br>> Nouryhttp://<a href="http://vst.ensm-douai.fr/noury/">vst.ensm-douai.fr/noury/</a><br>
> --------------<br>> -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>> -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>> _______________________________________________<br>> 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>