π
<-
Chat plein-écran
[^]

QCC 2020 épisode 3 : Python et pile (stack)

QCC 2020 épisode 3 : Python et pile (stack)

Message non lude critor » 07 Aoû 2020, 21:39

5409
Quelle Calculatrice programmable Choisir 2020
(index des épisodes)

Episode 3 - Python et pile (stack)

Dans l'épisode précédent nous avons donc vu quelles calculatrices étaient programmables en langage Python parmi celles conformes ou se prétendant conformes pour les examens 2021 et au-delà.

Les interpréteurs MicroPython ou similaires qu'elles font tourner font appel à 3 types de mémoires avec les rôles suivants :
  • la mémoire de stockage qui accueille et conserve tes scripts
  • le stack (pile) qui, à l'exécution, accueille les références vers les objets créés
  • le heap (tas) qui, à l'exécution, accueille le contenu de ces objets

En gros le stack limite donc le nombre d'objets différents pouvant exister simultanément en mémoire, alors que le heap limite la taille globale occupée par le contenu de ces objets.

Hors besoins très spécifiques ce n'est habituellement pas le facteur le plus limitant dans les projets pour qui sait optimiser son code, mais aujoud'hui nous allons commencer par nous intéresser au stack.



A ce jour nous ne savons pas mesurer exactement la capacité du stack. Mais par contre nous pouvons en déclencher une consommation massive, afin de pouvoir comparer et voir quels modèles s'en sortent le mieux.

Une situation très simple qui peut être grand consommatrice de stack c'est la récursivité, soit les fonctions qui se rappellent elles-mêmes. Notre protocole de test aujourd'hui va consister à lancer test(compte_r) à partir du script suivant :
Code: Tout sélectionner
def compte_r(n):
  return n>0 and 1 + compte_r(n-1)

def test(f):
  n = 0
  try:
    while 1:
      n = f(n) + 1
  except Exception as e:
    print(e)
  return n

compte_r(n) est donc ici notre fonction récursive qui compte récursivement de 1 à n.

test(f) quant à elle va donc tester des appels f(n) avec n de plus en plus grand, jusqu'à déclenchement d'une erreur qui sera précisée.



Commençons donc avec les Casio Graph 35+E II et Graph 90+E et leur application Python officielle.

Le paramètre d'appel doit monter jusqu'à 82 pour permettre comme indiqué l'épuisement du stack.

Restons chez Casio mais cette fois-ci avec l'application tierce CasioPython. Elle est compatible avec différents modèles monochromes :

Sur les deux premiers nous obtenons une valeur limite extraordinaire de 5362.

Par contre un bug de CasioPython hélas toujours pas corrigé depuis l'année dernière lui fait prendre la Graph 35+E II pour un ancien modèle et réduire sa consommation mémoire, pour une valeur limite quand même relativement impressionnante de 655.

Il est à noter ici que le stack n'est a priori pas forcément épuisé, car la raison de l'erreur est différente. Ici c'est en effet la limite de récursivité configurée qui a été franchie.

Certes en Python on peut consulter cette limite via sys.getrecursionlimit() et même l'ajuster dynamiquement via sys.setrecursionlimit().

Mais ici l'application CasioPython utilise une implémentation MicroPython, ce qui fait que le module sys n'inclut pas ces accesseurs.

Passons maintenant aux TI-83 Premium CE Edition Python et TI-84 Plus CE-T Python Edition. Il y a visiblement du mieux par rapport à l'année dernière ! :D

Texas Instruments a en effet repoussé la limite de 23 à 28 via ses dernières mises à jour 5.5.1 et 5.5.5 ! :bj:

L'ancienne TI-83 Premium CE permet également la programmation Python si munies du module externe TI-Python, module interdit aux examens français mais parfaitement utilisable en classe ainsi qu'aux évaluations si l'enseignant le permet.

Le firmware TI-Python officiel nous permet ici d'aller jusqu'à 20 limite des niveaux de récursion et non du stack ici encore.

Le firmware tiers fourni par Lionel Debroux, bien que proposant nombre d'améliorations, a le défaut de baisser cette valeur limite à 15.

Ici il ne s'agit pas d'une implementation MicroPython mais propriétaire TI-Python, en réalité construite à partir de l'implémentation libre CircuitPython. En tous cas cela ne change rien, le module sys n'a pas ce qu'il faut pour nous permettre d'explorer plus loin via cette méthode.

1274012739Sur NumWorks ici aussi il y a eu du nouveau depuis l'année dernière, le constructeur ayant annoncé avoir quadruplé la taille du stack lors de la mise à jour intermédiaire 13.1.0. :)

Effectivement nous avons ici une progression formidable de la valeur limite, de 33 à 128 ! :bj:

Mais nous n'en avons pas encore terminé avec les NumWorks. Il est possible de leur installer très facilement un firmware tiers, Omega, qui leur rajoute plein de fonctionnalités y compris en mode examen ! :bj:

Sur la dernière édition matérielle NumWorks N0110, Omega permet notamment l'ajout d'applications. Plusieurs sont disponibles dont l'application de mathématiques intégrée KhiCAS par Bernard Parisse, enseignant chercheur à l'Université de Grenoble, une version adaptée aux plateformes nomades qui s'inspire de son propre logiciel de Mathématiques intégré Xcas, et en reprend notamment le moteur de calcul formel GIAC.

12741Et bien Bernard est justement en train de te préparer une mise à jour majeure de KhiCAS pour l'année scolaire 2020-2021, déjà accessible en version de test. Au menu des nouveautés une sous-application tableur / feuille de calculs, ainsi que l'intégration d'un véritable interpréteur MicroPython ! :bj:

Donc pour information, dans le mode interpréteur Python de KhiCAS, la limite est impactée mais très légèrement, passant à 126. Un bien maigre prix à payer par rapport à tous les avantages ! :D

Pour les TI-Nspire CX II, nous ne disposons hélas pas encore de préversion de la mise à jour qui devrait sortir mi-septembre 2020 et rajouter la programmation Python.

Pour les anciens modèles TI-Nspire CX et TI-Nspire monochromes par contre, si non encore mis à jour en version 4.5.1 ou supérieure, il est possible d'installer le jailbreak Ndless qui autorise à son tour par la suite l'installation d'applications tierces. :)
Attention toutefois, contrairement aux applications Omega pour NumWorks, les applications Ndless ont le gros défaut de ne pas rester disponibles en mode examen ! :mj:


Une fois Ndless installé, on peut par exemple rajouter l'application MicroPython, pour une limite ici de 130.

Mais pour les seules anciennes TI-Nspire CX, ce n'est pas tout. Bernard Parisse est également en train de préparer ici la même mise à jour majeure de l'application KhiCAS que pour NumWorks, avec feuille de calcul / tableur et véritable interpréteur MicroPython intégrés, également disponible en version de test ! :bj:

Ici la valeur limite monte même à 155 ! :)

Une mise à jour HP Prime rajoutant une application Python est dans les tuyaux. Aucune date de sortie connue à ce jour, mais une version intégrant cette fonctionnalité a été publiée par erreur en octobre 2019.
Cela a sûrement été corrigé depuis, mais cette vieille version est en pratique très instable, les fonctionnalités Python se payant bien cher... Nous te déconseillons fortement de l'installer dans le contexte d'évaluations.


Nous ne pourrons pas la classer en l'état, mais rien n'empêche d'en parler et de te donner un avant-goût de ce qui t'attend. ;)

Donc ici, la limite est de 77.




Résumé donc des capacités des différents modèles autour du stack Python, avec :
  • en haut les possibilités hors mode examen ou à venir dans de prochaines mises à jour lorsque connues (HP Prime, mais nous ignorons quand...)
  • en bas les capacités de la machine en mode examen sur les versions actuellement à notre disposition
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.4%
 
Messages: 41455
Images: 14353
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: QCC 2020 épisode 3 : Python et pile (stack)

Message non lude Afyu » 07 Aoû 2020, 22:22

C'est original, comme sujet d'article. J'aime bien ! :)

A ce jour nous ne savons pas mesurer exactement la capacité du stack.

Nous, qui ? Est-ce que tu veux dire "nous, utilisateur" ? Ou est-ce que c'est général ? Est-ce que tu veux dire qu'il n'existe aucune technique pour mesurer ça ?
Est-ce que l'équipe NumWorks connaît la taille du stack ?

Je trouve que le choix d'une échelle logarithmique pour la partie basse du graphique est peu adaptée ou peu pertinente. Elle masque un peu le grand écart entre le 28 et le 128 et comme il n'y a pas de grande valeur (contrairement à la partie haute du graphique) je trouve ce choix moins justifié que pour l'autre axe. Entre 28 et 128, est-ce que ça fait une grande différence, d'un point de vue programmation ?

Edit : en même temps, si tu choisis une échelle logarithmique pour la partie haute du graphique mais pas pour la partie basse, ça parait bizarre...
Dernière édition par Afyu le 07 Aoû 2020, 22:28, édité 1 fois.
Avatar de l’utilisateur
AfyuVIP++
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 89.2%
 
Messages: 339
Images: 18
Inscription: 30 Oct 2019, 19:17
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: plutôt, oui :)

Re: QCC 2020 épisode 3 : Python et pile (stack)

Message non lude critor » 07 Aoû 2020, 22:27

Je ne dis pas que c'est impossible, mais à ce jour je ne sais pas mesurer le stack en tant qu'utilisateur non, c'est-à-dire sans accès au code source.

Mais pourquoi pas un jour, j'en apprends tous les jours en Python, je creuse de plus en plus profond. ;)

Or, comme seul NumWorks donne l'accès au code source, ça ne permettra pas de comparer aux autres constructeurs.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.4%
 
Messages: 41455
Images: 14353
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: QCC 2020 épisode 3 : Python et pile (stack)

Message non lude Afyu » 07 Aoû 2020, 22:33

D'accord. Alors un jour, peut-être... :)

Et quelle valeur trouve-t-on dans le code source d'Epsilon ?


Toujours concernant la NumWorks, tu parles de KhiCAS et de
l'intégration d'un véritable interpréteur Python !

Ça veut dire un interpréteur Python et pas MicroPython ?
Avatar de l’utilisateur
AfyuVIP++
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 89.2%
 
Messages: 339
Images: 18
Inscription: 30 Oct 2019, 19:17
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: plutôt, oui :)

Re: QCC 2020 épisode 3 : Python et pile (stack)

Message non lude critor » 07 Aoû 2020, 22:35

C'est un interpréteur MicroPython, je vais préciser, merci.

C'est relatif au comportement actuel de KhiCAS, qui utilise une simple compatibilité syntaxique Python et non un véritable interpréteur.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.4%
 
Messages: 41455
Images: 14353
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

En ligne

Re: QCC 2020 épisode 3 : Python et pile (stack)

Message non lude redgl0w » 07 Aoû 2020, 22:39

Le stack sur numworks a bien une valeure écrite dans le code : on peut la trouver sur ces lignes là https://github.com/numworks/epsilon/blob/edafa0e15555bdd024660e78e36756651bd85438/python/port/port.cpp#L120-L144.
N'ayant pas d'IDE sous la main (je suis sur mobile), je ne pourrais pas te dire quelle valeur (taille max du stack - taille utilisé du stack, ou 29000) est utilisé pour chaque platformes
Image
Avatar de l’utilisateur
redgl0wVIP+
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 56.8%
 
Messages: 283
Images: 0
Inscription: 30 Oct 2019, 20:36
Localisation: Centre Val de Loire
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: MP2I
Twitter/X: Gl0wRed
GitHub: RedGl0w

Re: QCC 2020 épisode 3 : Python et pile (stack)

Message non lude Afyu » 07 Aoû 2020, 22:46

Oh. D'accord. (la déception ^^)

Merci pour ce lien extrêmement précis, redgl0w :)
Si tu me dis comment faire, je veux bien regarder pour toi :)
Avatar de l’utilisateur
AfyuVIP++
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 89.2%
 
Messages: 339
Images: 18
Inscription: 30 Oct 2019, 19:17
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: plutôt, oui :)

En ligne

Re: QCC 2020 épisode 3 : Python et pile (stack)

Message non lude redgl0w » 07 Aoû 2020, 22:53

De ce que j'ai vu, le simu web utilise pystack, une alternative au heap, qui a moins besoin d'appeler souvent le garbage collector, qui visiblement cause des problèmes dans la version compilé avec emscripten.
Pour
Image
Avatar de l’utilisateur
redgl0wVIP+
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 56.8%
 
Messages: 283
Images: 0
Inscription: 30 Oct 2019, 20:36
Localisation: Centre Val de Loire
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: MP2I
Twitter/X: Gl0wRed
GitHub: RedGl0w

En ligne

Re: QCC 2020 épisode 3 : Python et pile (stack)

Message non lude redgl0w » 07 Aoû 2020, 22:55

Donc de ce que j'ai vu, le simu web utilise pystack, qui permet de moins utiliser le heap, et d'appeller donc moins souvent le garbage collector, qui a l'air de parfois crash sur simu web.
Sinon, la limite semble clairement être à 29152 réccursion.
Edit : déso pour la duplication
Image
Avatar de l’utilisateur
redgl0wVIP+
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 56.8%
 
Messages: 283
Images: 0
Inscription: 30 Oct 2019, 20:36
Localisation: Centre Val de Loire
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: MP2I
Twitter/X: Gl0wRed
GitHub: RedGl0w

Re: QCC 2020 épisode 3 : Python et pile (stack)

Message non lude Afyu » 07 Aoû 2020, 23:01

D'accord. Comment fais-tu pour savoir que ce n'est pas le 1024 ?
Avatar de l’utilisateur
AfyuVIP++
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 89.2%
 
Messages: 339
Images: 18
Inscription: 30 Oct 2019, 19:17
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: plutôt, oui :)

Suivante

Retourner vers News Divers

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 18 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
789 utilisateurs:
>773 invités
>12 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)