π
<-
Chat plein-écran
[^]

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

Online

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

Unread postby critor » 07 Aug 2020, 21:39

5409
Quelle Calculatrice programmable Choisir 2020


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: Select all
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 . 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 ! :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 , 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 . :)

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, , 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 , 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 , pour une limite ici de
130
.

Mais pour les seules anciennes
TI-Nspire CX
, ce n'est pas tout. 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
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 9.1%
 
Posts: 36043
Images: 9856
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti
GitHub: critor

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

Unread postby Afyu » 07 Aug 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...
Last edited by Afyu on 07 Aug 2020, 22:28, edited 1 time in total.
User avatar
AfyuGénéreux
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 91.3%
 
Posts: 120
Images: 3
Joined: 30 Oct 2019, 19:17
Gender: Male
Calculator(s):
Class: plutôt, oui :)

Online

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

Unread postby critor » 07 Aug 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
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 9.1%
 
Posts: 36043
Images: 9856
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti
GitHub: critor

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

Unread postby Afyu » 07 Aug 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 ?
User avatar
AfyuGénéreux
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 91.3%
 
Posts: 120
Images: 3
Joined: 30 Oct 2019, 19:17
Gender: Male
Calculator(s):
Class: plutôt, oui :)

Online

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

Unread postby critor » 07 Aug 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
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 9.1%
 
Posts: 36043
Images: 9856
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti
GitHub: critor

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

Unread postby redgl0w » 07 Aug 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
User avatar
redgl0wGénéreux
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Level up: 83.7%
 
Posts: 94
Joined: 30 Oct 2019, 20:36
Gender: Male
Calculator(s):
Class: 2nde
GitHub: RedGl0w

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

Unread postby Afyu » 07 Aug 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 :)
User avatar
AfyuGénéreux
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 91.3%
 
Posts: 120
Images: 3
Joined: 30 Oct 2019, 19:17
Gender: Male
Calculator(s):
Class: plutôt, oui :)

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

Unread postby redgl0w » 07 Aug 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
User avatar
redgl0wGénéreux
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Level up: 83.7%
 
Posts: 94
Joined: 30 Oct 2019, 20:36
Gender: Male
Calculator(s):
Class: 2nde
GitHub: RedGl0w

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

Unread postby redgl0w » 07 Aug 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
User avatar
redgl0wGénéreux
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Level up: 83.7%
 
Posts: 94
Joined: 30 Oct 2019, 20:36
Gender: Male
Calculator(s):
Class: 2nde
GitHub: RedGl0w

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

Unread postby Afyu » 07 Aug 2020, 23:01

D'accord. Comment fais-tu pour savoir que ce n'est pas le 1024 ?
User avatar
AfyuGénéreux
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 91.3%
 
Posts: 120
Images: 3
Joined: 30 Oct 2019, 19:17
Gender: Male
Calculator(s):
Class: plutôt, oui :)

Next

Return to News Divers

Who is online

Users browsing this forum: No registered users and 18 guests

-
Search
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Découvre les nouvelles fonctionnalités en Python de l'OS 5.2 pour les Nspire CX II
Découvre les nouvelles fonctionnalités en Python de l'OS 5.5 pour la 83PCE/84+C-T Python Edition
Omega, le fork étendant les capacités de ta NumWorks, même en mode examen !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...

Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
471 utilisateurs:
>462 invités
>3 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)

-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)