William Dode a écrit :Quand je tape "python mon_script.py"
D'abord 1) un compilateur compile le source "mon_script.py"
en bytecode et 2) ce bytecode est interprété par la machine
virtuelle Python. C'est bien ça ?
Mais le compilateur dont il est question dans 1), ce n'est
pas un JIT justement ? Ou alors le JIT est un autre
compilateur qui intervient dans l'étape 2) (au moment de
l'interprétation du bytecode) pour à nouveau compiler
certaines partie du bytecode en langage machine, c'est ça ?
Du coup, avec un JIT, il y aurait alors deux phases de
compilation ?
Tout juste. La première compilation en bytecode écrit sur disque (le
.pyc) tandis que la deuxième, le jit c'est en mémoire, d'où le terme 'in
time'.
D'accord. Merci bien. Juste une remarque, le .pyc n'est pas
toujours sur le disque mais en mémoire RAM également il me
semble, non ? C'est quand le code est un module que le .pyc
est copié sur le disque. Enfin je crois.
William Dode a écrit :
Quand je tape "python mon_script.py"
D'abord 1) un compilateur compile le source "mon_script.py"
en bytecode et 2) ce bytecode est interprété par la machine
virtuelle Python. C'est bien ça ?
Mais le compilateur dont il est question dans 1), ce n'est
pas un JIT justement ? Ou alors le JIT est un autre
compilateur qui intervient dans l'étape 2) (au moment de
l'interprétation du bytecode) pour à nouveau compiler
certaines partie du bytecode en langage machine, c'est ça ?
Du coup, avec un JIT, il y aurait alors deux phases de
compilation ?
Tout juste. La première compilation en bytecode écrit sur disque (le
.pyc) tandis que la deuxième, le jit c'est en mémoire, d'où le terme 'in
time'.
D'accord. Merci bien. Juste une remarque, le .pyc n'est pas
toujours sur le disque mais en mémoire RAM également il me
semble, non ? C'est quand le code est un module que le .pyc
est copié sur le disque. Enfin je crois.
William Dode a écrit :Quand je tape "python mon_script.py"
D'abord 1) un compilateur compile le source "mon_script.py"
en bytecode et 2) ce bytecode est interprété par la machine
virtuelle Python. C'est bien ça ?
Mais le compilateur dont il est question dans 1), ce n'est
pas un JIT justement ? Ou alors le JIT est un autre
compilateur qui intervient dans l'étape 2) (au moment de
l'interprétation du bytecode) pour à nouveau compiler
certaines partie du bytecode en langage machine, c'est ça ?
Du coup, avec un JIT, il y aurait alors deux phases de
compilation ?
Tout juste. La première compilation en bytecode écrit sur disque (le
.pyc) tandis que la deuxième, le jit c'est en mémoire, d'où le terme 'in
time'.
D'accord. Merci bien. Juste une remarque, le .pyc n'est pas
toujours sur le disque mais en mémoire RAM également il me
semble, non ? C'est quand le code est un module que le .pyc
est copié sur le disque. Enfin je crois.
William Dode writes:On 29-07-2009, Alain Ketterlin wrote:[...] Je ne serai donc pas étonné qu'on nous parle bientôt de typage
statique dans Python, au-delà des annotations qui apparaissent dans
P3.
C'est un peu déjà ce qui est fait avec shedskin, pyrex, cython... A mon
avis pareil, on n'y coupera pas, mais tant que ça restera en option ce
n'est pas très gênant.
Juste pour préciser mon point de vue : je pense que le typage statique
est une excellente chose, et je regrette vraiment que Python n'y attache
pas plus d'importance. Et pas seulement pour des raisons d'efficacité...
En tout cas il me semble que c'est la première fois qu'il y a autant de
boulot en cours focalisé sur les perfs de python. Je ne sais pas si ça
me servira souvent mais en tout cas c'est passionnant à suivre !
Tu as parfaitement résumé le dilemme : dans un script qui passe 90% de
son temps à attendre des entrées sorties, le gain sera négligeable s'il
est perceptible. Et j'ai l'impression que les gens qui font du calcul
avec python ont déjà passé tout ce qui est long en C. Mais quand c'est
google qui a besoin de quelque chose...
William Dode <wilk@flibuste.net> writes:
On 29-07-2009, Alain Ketterlin wrote:
[...] Je ne serai donc pas étonné qu'on nous parle bientôt de typage
statique dans Python, au-delà des annotations qui apparaissent dans
P3.
C'est un peu déjà ce qui est fait avec shedskin, pyrex, cython... A mon
avis pareil, on n'y coupera pas, mais tant que ça restera en option ce
n'est pas très gênant.
Juste pour préciser mon point de vue : je pense que le typage statique
est une excellente chose, et je regrette vraiment que Python n'y attache
pas plus d'importance. Et pas seulement pour des raisons d'efficacité...
En tout cas il me semble que c'est la première fois qu'il y a autant de
boulot en cours focalisé sur les perfs de python. Je ne sais pas si ça
me servira souvent mais en tout cas c'est passionnant à suivre !
Tu as parfaitement résumé le dilemme : dans un script qui passe 90% de
son temps à attendre des entrées sorties, le gain sera négligeable s'il
est perceptible. Et j'ai l'impression que les gens qui font du calcul
avec python ont déjà passé tout ce qui est long en C. Mais quand c'est
google qui a besoin de quelque chose...
William Dode writes:On 29-07-2009, Alain Ketterlin wrote:[...] Je ne serai donc pas étonné qu'on nous parle bientôt de typage
statique dans Python, au-delà des annotations qui apparaissent dans
P3.
C'est un peu déjà ce qui est fait avec shedskin, pyrex, cython... A mon
avis pareil, on n'y coupera pas, mais tant que ça restera en option ce
n'est pas très gênant.
Juste pour préciser mon point de vue : je pense que le typage statique
est une excellente chose, et je regrette vraiment que Python n'y attache
pas plus d'importance. Et pas seulement pour des raisons d'efficacité...
En tout cas il me semble que c'est la première fois qu'il y a autant de
boulot en cours focalisé sur les perfs de python. Je ne sais pas si ça
me servira souvent mais en tout cas c'est passionnant à suivre !
Tu as parfaitement résumé le dilemme : dans un script qui passe 90% de
son temps à attendre des entrées sorties, le gain sera négligeable s'il
est perceptible. Et j'ai l'impression que les gens qui font du calcul
avec python ont déjà passé tout ce qui est long en C. Mais quand c'est
google qui a besoin de quelque chose...
C'est bien cela. Le point important est que c'est une machine virtuelle
(un programme comme un autre) qui joue le rôle de... machine : cett e MV
doit donc interpéter une à une les instructions du bytecode, f ournir une
zone de mémoire, une pile d'exécution, etc.
Oui, c'est vraiment comme une machine dont le code machine est le
bytecode. De telles machines existent elles pour de vrai, je veux dire
physiquement ?
C'est bien cela. Le point important est que c'est une machine virtuelle
(un programme comme un autre) qui joue le rôle de... machine : cett e MV
doit donc interpéter une à une les instructions du bytecode, f ournir une
zone de mémoire, une pile d'exécution, etc.
Oui, c'est vraiment comme une machine dont le code machine est le
bytecode. De telles machines existent elles pour de vrai, je veux dire
physiquement ?
C'est bien cela. Le point important est que c'est une machine virtuelle
(un programme comme un autre) qui joue le rôle de... machine : cett e MV
doit donc interpéter une à une les instructions du bytecode, f ournir une
zone de mémoire, une pile d'exécution, etc.
Oui, c'est vraiment comme une machine dont le code machine est le
bytecode. De telles machines existent elles pour de vrai, je veux dire
physiquement ?
Juste pour préciser mon point de vue : je pense que le typage stati que
est une excellente chose, et je regrette vraiment que Python n'y attache
pas plus d'importance. Et pas seulement pour des raisons d'efficacità ©...
Juste pour préciser une chose: hormis pour des raisons d'efficacit é,
je pense que le typage statique tend à créer plus de problà ¨mes qu'il
n'en résouds - particulièrement avec un système de type d éclaratif Ã
la Java
(après, si tu penses inférence de type, c'est un autre dé bat).
Juste pour préciser mon point de vue : je pense que le typage stati que
est une excellente chose, et je regrette vraiment que Python n'y attache
pas plus d'importance. Et pas seulement pour des raisons d'efficacità ©...
Juste pour préciser une chose: hormis pour des raisons d'efficacit é,
je pense que le typage statique tend à créer plus de problà ¨mes qu'il
n'en résouds - particulièrement avec un système de type d éclaratif Ã
la Java
(après, si tu penses inférence de type, c'est un autre dé bat).
Juste pour préciser mon point de vue : je pense que le typage stati que
est une excellente chose, et je regrette vraiment que Python n'y attache
pas plus d'importance. Et pas seulement pour des raisons d'efficacità ©...
Juste pour préciser une chose: hormis pour des raisons d'efficacit é,
je pense que le typage statique tend à créer plus de problà ¨mes qu'il
n'en résouds - particulièrement avec un système de type d éclaratif Ã
la Java
(après, si tu penses inférence de type, c'est un autre dé bat).
Bruno Desthuilliers a écrit :Juste pour préciser mon point de vue : je pense que le typage statique
est une excellente chose, et je regrette vraiment que Python n'y attache
pas plus d'importance. Et pas seulement pour des raisons d'efficacité...
Juste pour préciser une chose: hormis pour des raisons d'efficacité, je
pense que le typage statique tend à créer plus de problèmes qu'il n'en
résouds - particulièrement avec un système de type déclaratif à la Java
(après, si tu penses inférence de type, c'est un autre débat).
Ça serait possible d'avoir quelques explications.
Personnellement, je trouve que le typage statique permet
plus de vérification du compilateur et que ça c'est bien
pour le programmeur pour corriger du code plus facilement.
Es-tu d'accord avec ceci ?
Tu parlais peut-être "d'efficacité" dans le sens rapidité
d'exécution peut-être ?
Heu, sinon c'est quoi "l'inférence de type" ? L'explication
sur Wikipédia n'est pas très claire.
Bruno Desthuilliers a écrit :
Juste pour préciser mon point de vue : je pense que le typage statique
est une excellente chose, et je regrette vraiment que Python n'y attache
pas plus d'importance. Et pas seulement pour des raisons d'efficacité...
Juste pour préciser une chose: hormis pour des raisons d'efficacité, je
pense que le typage statique tend à créer plus de problèmes qu'il n'en
résouds - particulièrement avec un système de type déclaratif à la Java
(après, si tu penses inférence de type, c'est un autre débat).
Ça serait possible d'avoir quelques explications.
Personnellement, je trouve que le typage statique permet
plus de vérification du compilateur et que ça c'est bien
pour le programmeur pour corriger du code plus facilement.
Es-tu d'accord avec ceci ?
Tu parlais peut-être "d'efficacité" dans le sens rapidité
d'exécution peut-être ?
Heu, sinon c'est quoi "l'inférence de type" ? L'explication
sur Wikipédia n'est pas très claire.
Bruno Desthuilliers a écrit :Juste pour préciser mon point de vue : je pense que le typage statique
est une excellente chose, et je regrette vraiment que Python n'y attache
pas plus d'importance. Et pas seulement pour des raisons d'efficacité...
Juste pour préciser une chose: hormis pour des raisons d'efficacité, je
pense que le typage statique tend à créer plus de problèmes qu'il n'en
résouds - particulièrement avec un système de type déclaratif à la Java
(après, si tu penses inférence de type, c'est un autre débat).
Ça serait possible d'avoir quelques explications.
Personnellement, je trouve que le typage statique permet
plus de vérification du compilateur et que ça c'est bien
pour le programmeur pour corriger du code plus facilement.
Es-tu d'accord avec ceci ?
Tu parlais peut-être "d'efficacité" dans le sens rapidité
d'exécution peut-être ?
Heu, sinon c'est quoi "l'inférence de type" ? L'explication
sur Wikipédia n'est pas très claire.
Juste pour préciser une chose: hormis pour des raisons d'efficacit é,
je pense que le typage statique tend à créer plus de problà ¨mes qu'il
n'en résouds - particulièrement avec un système de type d éclaratif Ã
la Java (après, si tu penses inférence de type, c'est un autre
débat).
Personnellement, je trouve que le typage statique permet plus de
vérification du compilateur et que ça c'est bien pour le progra mmeur
pour corriger du code plus facilement.
Tu parlais peut-être "d'efficacité" dans le sens rapidité d'exécution
peut-être ?
Heu, sinon c'est quoi "l'inférence de type" ? L'explication sur
Wikipédia n'est pas très claire.
Juste pour préciser une chose: hormis pour des raisons d'efficacit é,
je pense que le typage statique tend à créer plus de problà ¨mes qu'il
n'en résouds - particulièrement avec un système de type d éclaratif Ã
la Java (après, si tu penses inférence de type, c'est un autre
débat).
Personnellement, je trouve que le typage statique permet plus de
vérification du compilateur et que ça c'est bien pour le progra mmeur
pour corriger du code plus facilement.
Tu parlais peut-être "d'efficacité" dans le sens rapidité d'exécution
peut-être ?
Heu, sinon c'est quoi "l'inférence de type" ? L'explication sur
Wikipédia n'est pas très claire.
Juste pour préciser une chose: hormis pour des raisons d'efficacit é,
je pense que le typage statique tend à créer plus de problà ¨mes qu'il
n'en résouds - particulièrement avec un système de type d éclaratif Ã
la Java (après, si tu penses inférence de type, c'est un autre
débat).
Personnellement, je trouve que le typage statique permet plus de
vérification du compilateur et que ça c'est bien pour le progra mmeur
pour corriger du code plus facilement.
Tu parlais peut-être "d'efficacité" dans le sens rapidité d'exécution
peut-être ?
Heu, sinon c'est quoi "l'inférence de type" ? L'explication sur
Wikipédia n'est pas très claire.
Personnellement, je trouve que le typage statique permet
plus de vérification du compilateur et que ça c'est bien
pour le programmeur pour corriger du code plus facilement.
Franchement je pense que c'est un faux problème. Car soit on se fout
complètement de vérifier le type, par exemple si on fait une bo ucle for
i in range(10), soit on s'inquiète du type pour un tas de raisons, p ar
ex éviter un sql injection, hors dans ce cas le type ne suffira
généralement pas, il faudra surement vérifier d'autres cho ses. Que
l'entier est compris entre telles et telles valeurs, qu'une chaine ne
contient pas de guillemets etc... Ce sont des cas beaucoup plus
fréquents, il vaut mieux ne pas perdre de temps avec les déclar ations
inutiles et utiliser ce temps pour des vérifications réellement
complètes.
Heu, sinon c'est quoi "l'inférence de type" ? L'explication
sur Wikipédia n'est pas très claire.
Le compilateur va deviner tout seul le type d'une variable d'un bout
à l'autre du code et faire les vérifications en conséquenc e. Du coup on
a un peu l'avantage des deux, pas de déclaration mais une vérif ication
automatique. C'est aussi ce que doit faire le JIT pour un morceau de
code j'imagine.
Personnellement, je trouve que le typage statique permet
plus de vérification du compilateur et que ça c'est bien
pour le programmeur pour corriger du code plus facilement.
Franchement je pense que c'est un faux problème. Car soit on se fout
complètement de vérifier le type, par exemple si on fait une bo ucle for
i in range(10), soit on s'inquiète du type pour un tas de raisons, p ar
ex éviter un sql injection, hors dans ce cas le type ne suffira
généralement pas, il faudra surement vérifier d'autres cho ses. Que
l'entier est compris entre telles et telles valeurs, qu'une chaine ne
contient pas de guillemets etc... Ce sont des cas beaucoup plus
fréquents, il vaut mieux ne pas perdre de temps avec les déclar ations
inutiles et utiliser ce temps pour des vérifications réellement
complètes.
Heu, sinon c'est quoi "l'inférence de type" ? L'explication
sur Wikipédia n'est pas très claire.
Le compilateur va deviner tout seul le type d'une variable d'un bout
à l'autre du code et faire les vérifications en conséquenc e. Du coup on
a un peu l'avantage des deux, pas de déclaration mais une vérif ication
automatique. C'est aussi ce que doit faire le JIT pour un morceau de
code j'imagine.
Personnellement, je trouve que le typage statique permet
plus de vérification du compilateur et que ça c'est bien
pour le programmeur pour corriger du code plus facilement.
Franchement je pense que c'est un faux problème. Car soit on se fout
complètement de vérifier le type, par exemple si on fait une bo ucle for
i in range(10), soit on s'inquiète du type pour un tas de raisons, p ar
ex éviter un sql injection, hors dans ce cas le type ne suffira
généralement pas, il faudra surement vérifier d'autres cho ses. Que
l'entier est compris entre telles et telles valeurs, qu'une chaine ne
contient pas de guillemets etc... Ce sont des cas beaucoup plus
fréquents, il vaut mieux ne pas perdre de temps avec les déclar ations
inutiles et utiliser ce temps pour des vérifications réellement
complètes.
Heu, sinon c'est quoi "l'inférence de type" ? L'explication
sur Wikipédia n'est pas très claire.
Le compilateur va deviner tout seul le type d'une variable d'un bout
à l'autre du code et faire les vérifications en conséquenc e. Du coup on
a un peu l'avantage des deux, pas de déclaration mais une vérif ication
automatique. C'est aussi ce que doit faire le JIT pour un morceau de
code j'imagine.
Un programme bien typé statiquement est en général plus efficace parce
qu'il y a moins de choix à faire à l'exécution. Par exemple, si tu écris
a+b, à l'exécution l'interpréteur python doit aller chercher la
définition de l'opérateur + dans la classe de a (je choisis l'exemple à
dessein parce qu'en fait c'est plus compliqué que cela). Avec le typage,
il saurait d'entrée qu'il s'agit de la méthode __add__ de ma classe
Machin (après avoir vu le code qui précède).
Un programme bien typé statiquement est en général plus efficace parce
qu'il y a moins de choix à faire à l'exécution. Par exemple, si tu écris
a+b, à l'exécution l'interpréteur python doit aller chercher la
définition de l'opérateur + dans la classe de a (je choisis l'exemple à
dessein parce qu'en fait c'est plus compliqué que cela). Avec le typage,
il saurait d'entrée qu'il s'agit de la méthode __add__ de ma classe
Machin (après avoir vu le code qui précède).
Un programme bien typé statiquement est en général plus efficace parce
qu'il y a moins de choix à faire à l'exécution. Par exemple, si tu écris
a+b, à l'exécution l'interpréteur python doit aller chercher la
définition de l'opérateur + dans la classe de a (je choisis l'exemple à
dessein parce qu'en fait c'est plus compliqué que cela). Avec le typage,
il saurait d'entrée qu'il s'agit de la méthode __add__ de ma classe
Machin (après avoir vu le code qui précède).
Bruno Desthuilliers writes:Juste pour préciser mon point de vue : je pense que le typage statique
est une excellente chose, et je regrette vraiment que Python n'y attache
pas plus d'importance. Et pas seulement pour des raisons d'efficacité...
Juste pour préciser une chose: hormis pour des raisons d'efficacité,
je pense que le typage statique tend à créer plus de problèmes qu'il
n'en résouds - particulièrement avec un système de type déclaratif à
la Java
Plus de problème que ceux posés par l'absence totale de typage ? Tu as
quelques exemples ?
Bruno Desthuilliers <bruno.42.desthuilliers@websiteburo.invalid> writes:
Juste pour préciser mon point de vue : je pense que le typage statique
est une excellente chose, et je regrette vraiment que Python n'y attache
pas plus d'importance. Et pas seulement pour des raisons d'efficacité...
Juste pour préciser une chose: hormis pour des raisons d'efficacité,
je pense que le typage statique tend à créer plus de problèmes qu'il
n'en résouds - particulièrement avec un système de type déclaratif à
la Java
Plus de problème que ceux posés par l'absence totale de typage ? Tu as
quelques exemples ?
Bruno Desthuilliers writes:Juste pour préciser mon point de vue : je pense que le typage statique
est une excellente chose, et je regrette vraiment que Python n'y attache
pas plus d'importance. Et pas seulement pour des raisons d'efficacité...
Juste pour préciser une chose: hormis pour des raisons d'efficacité,
je pense que le typage statique tend à créer plus de problèmes qu'il
n'en résouds - particulièrement avec un système de type déclaratif à
la Java
Plus de problème que ceux posés par l'absence totale de typage ? Tu as
quelques exemples ?
Alain Ketterlin wrote:
[snip]Un programme bien typé statiquement est en général plus e fficace parce
qu'il y a moins de choix à faire à l'exécution. Par exemp le, si tu écris
a+b, à l'exécution l'interpréteur python doit aller cherc her la
définition de l'opérateur + dans la classe de a (je choisis l' exemple Ã
dessein parce qu'en fait c'est plus compliqué que cela). Avec le ty page,
il saurait d'entrée qu'il s'agit de la méthode __add__ de ma c lasse
Machin (après avoir vu le code qui précède).
Sauf qu'en fait non, parce qu'on est dans un langage orienté objet et
que a, déclaré comme instance de Machin, peut très bien être une
instance d'une sous-classe de Machin avec une autre implémentation de
__add__. Donc il y aura de toutes façons une recherche de la mé thode Ã
l'exécution. La seule chose qui peut être garantie par le typage
statique, c'est que la méthode existe bien.
Alain Ketterlin wrote:
[snip]
Un programme bien typé statiquement est en général plus e fficace parce
qu'il y a moins de choix à faire à l'exécution. Par exemp le, si tu écris
a+b, à l'exécution l'interpréteur python doit aller cherc her la
définition de l'opérateur + dans la classe de a (je choisis l' exemple Ã
dessein parce qu'en fait c'est plus compliqué que cela). Avec le ty page,
il saurait d'entrée qu'il s'agit de la méthode __add__ de ma c lasse
Machin (après avoir vu le code qui précède).
Sauf qu'en fait non, parce qu'on est dans un langage orienté objet et
que a, déclaré comme instance de Machin, peut très bien être une
instance d'une sous-classe de Machin avec une autre implémentation de
__add__. Donc il y aura de toutes façons une recherche de la mé thode Ã
l'exécution. La seule chose qui peut être garantie par le typage
statique, c'est que la méthode existe bien.
Alain Ketterlin wrote:
[snip]Un programme bien typé statiquement est en général plus e fficace parce
qu'il y a moins de choix à faire à l'exécution. Par exemp le, si tu écris
a+b, à l'exécution l'interpréteur python doit aller cherc her la
définition de l'opérateur + dans la classe de a (je choisis l' exemple Ã
dessein parce qu'en fait c'est plus compliqué que cela). Avec le ty page,
il saurait d'entrée qu'il s'agit de la méthode __add__ de ma c lasse
Machin (après avoir vu le code qui précède).
Sauf qu'en fait non, parce qu'on est dans un langage orienté objet et
que a, déclaré comme instance de Machin, peut très bien être une
instance d'une sous-classe de Machin avec une autre implémentation de
__add__. Donc il y aura de toutes façons une recherche de la mé thode Ã
l'exécution. La seule chose qui peut être garantie par le typage
statique, c'est que la méthode existe bien.