On 2008-04-04, Bruno Desthuilliers wrote:
> Marc Boyer a écrit :
>> La plupart des règles de codage viennent à essayer de permettre
>> le passage à l'échelle (cf autre longue discussion sur fclc et les
>> variables globales).
>
> Pas vu - je ne suis plus fclc que sporadiquement.
Ce fut un peu long en plus.
>>>> Non, désolé, le but premier du typage statique n'est pas que le ompilo
>>>> puisse mieux optimiser (c'est juste un effet de bord du typage
>>>> statique). Le but premier, c'est la fiabilité.
>>> Je ne suis pas historien et n'ait pas 50 ans d'expérience dans le
>>> domaine (juste une dizaine), donc je peux bien sûr me tromper (auquel
>>> cas merci de me pointer vers les chapitres et versets appropriés !-),
>>> mais il me semble que tu inverses les causes et effets au regard de la
>>> réalité historique.
>>
>> Ca dépend du point de vue...
>> Je pense que le typage "à la C" (int/float/char*) vient d'un
>> mappin efficace sur le processeur, contrairement à Lisp, où
>> l'interpréteur doit dynamiquement regarder ce qu'il manipule.
>>
>> Mais ensuite, les ajouts de typage, à la Ada, C++, veulent
>> eux fiabiliser en évitant d'ajouter des pommes et des poires
>> (à moins de déclarer explicitement l'opérateur de compote).
>
> C'était déjà le cas en Pascal, non ?
C'était semble-t-il l'intention. Mais on pouvait tout
à fait ajouter des pommes et des oranges.
http://www.cs.virginia.edu/~evans/cs655-S00/readings/bwk-on-pascal.html
type
apple = integer;
orange = integer;
then any arbitrary arithmetic expression involving apples and oranges is
perfectly legal.
>> Quant aux débutants... Ils confondent (je prends la syntaxe C)
>> 0, 0.0, "0", '0' et '\0'. Alors, si tu ne leur impose pas
>> de dire quel est le type de valeur qu'ils manipulent (lors de
>> la déclaration de variable), ben, c'est la panique.
>
> Heu... J'ai commencé à bricoler mes premiers bouts de code en 1990 avec
> HyperCard / HyperTalk (typage dynamique, et pas spécialement fort). Sans
> internet, et sans personne pour me mentorer. Et j'ai très vite appris à
> faire la différence entre une chaine et un nombre (ne serait-ce qu'en
> voyant le résultat des calculs...).
La question du "très vite" est toute relative, dépendante de la
personne, et de sa motivation.
> Bon, le langage suivant (si on omet un peu d'assembleur 68k) était un
> basic objet à typage statique déclaratif, et je reconnais que dans un
> premier temps, j'ai de moi-même considéré ça comme une aide et un
> progrès par rapport à HyperTalk - peut-être simplement parce que ça
> m'obligeait à structurer un peu plus ma réflexion vu que dans la
> pratique je n'avais en fait guère de pb de typage, ayant déjà appris à
> être attentif à ces aspects.
Ce qui va dans ce sens.
>> J'ai fait d'ailleurs un TP édifiant sur le sujet il y a 3 jours:
>> on leur demande d'extraire une sous image d'une image PGM, dont le
>> format est
>> P5
>> largeur hauteur
>> profondeur
>> bitmap
>>
>> Ben, le passage du stockage de valeurs 'humaines' à binaire
>> les rend extrèmement perplexe. Quand en projet je leur fait
>> envoyer des entier 32bits en grand boutiste, j'en ai qui
>> envoyent "0012" au lieu de 12...
>>
>> Que le programmeur expérimenté puisse laisser le type comme
>> information implicite, pourquoi pas. Mais pas le débutant.
>
> Tu a certainement plus d'expérience que moi dans ce domaine. D'un autre
> côté, j'ai appris autrement, et je ne sais pas si j'aurais appris quoi
> que ce soit s'il m'avait fallu me coltiner des déclarations de types et
> autres boilerplate dès le début - j'aurais probablement laissé tombé en
> me disant que c'était trop compliqué et trop chiant.
Toujours le problème de la "courbe d'apprentissage". Quand un
grand débutant à le choix entre le navigateur de fichiers gnome
et un shell, il choisit le clickodrome.
Dans le cadre d'une formation, on peut le contraindre à passer
par la partie pénible jusqu'au moment où l'investissement paye.
> Le fait d'avoir pu
> réaliser dès les premiers jours avoir des petits programmes
> *fonctionnels* est certainement pour beaucoup dans ma "vocation". Et une
> fois motivé, je n'ai pas eu de problème majeur à passer à des technos
> bien plus contraignantes.
Et oui... Si les étudiants choisissaient un cursus conforme à
leurs envies, l'enseignement supérieur serait plus simple.
>>> Ceci étant, on parle de typage statique et dynamique en faisant comme si
>>> la notion même de "type" était la même dans les deux cas, ce que n'est
>>> peut-être pas vraiment le cas. Du point du vue du typage statique, dans
>>> des langages comme Python ou Ruby, il n'existe en fait qu'un seul type,
>>> le type 'objet' - pas de types "primitifs", "scalaires" etc...
>>
>> Heuh... Faut quand même pas confondre les concepts et leur
>> implantation. Je suis 0 en python, mais je lis sur Wikipédia:
>> points = 3.2 # points est du type float
>> print "Tu as " + points + " points !" # Génère une erreur de typage
>>
>> Que la notion de type (flottant, chaine) soit englobée dans un attribut
>> dynamique en python, ok, mais la notion reste là, non ?
>
> La notion de "type" est là, oui, je ne dis pas le contraire. Mais
> pointe-t-elle sur le même concept ?
Ben, une variable transporte une donnée, qui est un couple
(valeur,type), un type étant l'ensemble des opérations permises
sur le type.
> En C, un "type" est une information précisant un offset à partir de
> l'adresse mémoire de la variable, et la façon dont doivent être
> interprétés les bits contenus entre cette adresse et l'offset.
Oui et non.
> En Python, un "type" (en tous cas ce que renvoie la fonction type()...)
> est une référence sur un autre objet (la classe), lequel contient
> d'autres références sur d'autres objets - les superclasses, la
> metaclasse, et les attributs de classe, lesquels comprennent les
> méthodes (je m'arrête là le but n'étant pas de détailler le modèle objet
> de Python).
Donc, de manière dynamique et complexe, tout celà dit comment
interpréter les bits contenus dans la variable.
Python fait des choses biens plus riches que le C, personne n'en
doute.
Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)