[ Précédent :: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 :: Suivant ]
Re: Drivers ATI proprio
<puéril> Donner, c'est donner ! Reprendre c'est voler ! </puéril>
[jesors]
[ Répondre ]
Re: Question con...
Il faut prendre ceux en papier glacé. Mais ça peut aussi en laisser plein les doigts.
[ Répondre ]
petite correction
C'est http://www.benzedrine.cx/pf/msg00634.html(...) en fait.
C'est un premier pas vers le failover : un device pour récupérer les modifs sur la table d'états.
Sinon, pour les cables ethernet en Y je suis preneur, j'en ai juste un en T qui ne marche pas en 100baseTX :)
[ Répondre ]
Re: ERCIM et les brevets
C'est pas gagné, vu la volonté anti-brevet de l'INRIA et des gros pontes planqués derrière chaque organisation un peu européenne ... le pognon c'est comme la coke, on dirait.
[ Répondre ]
Re: Si j'ai bien tout compris
Oui une pile avec comme conteneur un tableau, aucun problème.
Donc si tu t'en fous d'accéder à la partie "tableau" tu déclares la variable comme une pile et tu y met une instance de ARRAYED_STACK. Et voilou.
Le fait que si la variable a comme type statique ARRAYED_STACK on puisse violer la sémantique de STACK avec array_put, etc. est normal, c'est le contrat. Une ARRAYED_STACK n'est pas une STACK ni un ARRAY, c'est une ARRAYED_STACK. Pour avoir une vraie STACK dont le contenu est géré en tableau, il faut soit un type statique STACK soit en faire rouler une avec un ARRAY comme conteneur privé si tu veux être sûr.
En tous cas, ce type de construction (ARRAYED_STACK) ne me choque pas du tout, la plupart de mes cours cours de POO étaient autour de structures comme celle-ci (bon, en autres profs j'avais D. Colnet, un des auteurs de SmallEiffel, donc forcément ayant appris comme ça ne me choque pas).
La logique du truc c'est que si tu veux une ARRAYED_STACK ayant un comportement uniquement de STACK vis à vis d'autres (notamment du cas dont tu parles) il faut lui foutre comme type statique STACK et comme type dynamique ARRAYED_STACK en instanciant avec !ARRAYED_STACK[G]!. C'est la méthode classique utilisée très souvent dans des libs Eiffel.
[ Répondre ]
Re: Si j'ai bien tout compris
On s'y fait. ISE eiffel est super bien foutu (le compilo en ligne de commande, pas l'IDE). Ce qui est chiant c'est que je n'ai pas pratiqué depuis le mois de mars et que les petits détails partent vite :(
[ Répondre ]
Re: Si j'ai bien tout compris
Bon, en fait je me relis et je ne me comprends pas, c'est mauvais signe :)
Le bout de code Mal correspond à un code où l'on désire explicitement que s soit accessible en tant qu'array et que stack sous la forme d'une arrayed_stack. Avec le bout de code Bien, on montre explicitement que l'on désire que s soit une pile, accessoirement une pile gérée dans un tableau _mais_ c'est un détail qui ne doit pas transparaitre à l'extérieur.
En fait, c'est au programmeur de savoir ce qu'il veut.
Pour limiter la remontée dans l'arbre d'héritage il faut fixer le type de la variable, c'est tout. À moins de tricher (ce qui n'est pas toujours possible) il n'est pas possible de remonter l'arbre comme ça.
Pour se protéger encore plus, il faut passer par un intermédiaire, c'est tout (pattern proxy).
Bon, sinon je ne vois pas pourquoi foutre un ARRAY_STACK[G] dans un COLLECTION[ARRAY[G]] mettrais le souk ?
s : ARRAYED_STACK[G]
a : ARRAY[G]
c : COLLECTION[ARRAY[G]]
--
a := s
c.put(a)
--
Et donc
c.item est de type ARRAY[G]
s est de type ARRAYED_STACK[G]
Où est le problème ? En posant le type de s à ARRAYED_STACK, on demande explicitement à ce que la pile soit accessible des deux manières, c'est ainsi. En modifiant c on modifie la structure de la pile s, et alors ? C'est voulu dans le code ! Normalement, c devra quand même respecter les assertions (l'invariant notamment) de s donc en théorie il ne devrait même pas y avoir de casse ...
Bon, il faut absolument que je déterre un compilo eiffel pour vérifier ... grmbl.
[ Répondre ]
Re: Ouaurde...
Pas d'accord, excel® c'est pas mal du tout. C'est LA killer app de MS Office, le seul truc qui aie un intérêt.
[ Répondre ]
Re: Si j'ai bien tout compris
Ah non pas du tout, si le type mis entre !! n'est pas ramenable à STACK, ça ne fonctionne pas, et à l'exécution ça ne sera manipulable que comme une stack (un bourrin pourra tenter de forcer en arrayed_stack mais c'est Mal®). Les assertions seront vérifiées, etc. comme d'hab.
Si s est de type STACK[OURS], je ne peux pas instancier s comme !ARRAYED_STACK[VACHE]! ou !ARRAYED_STACK[ANY]!, juste comme !ARRAYED_STACK[G -> OURS]! (si on peut dire).
La vérification de type n'est pas supprimée du tout, au contraire. En déclarant s comme ARRAYED_STACK, par contre, on veut montrer que s sera accéder en tant que ARRAYED_STACK, pas comme STACK du coup il est nromal d'avoir accès à la structure tableau. Si on ne veut pas ça, on déclare s comme STACK et puis c'est tout, le type non abstrait utilisé n'entre pas en ligne de compte dans la vérif de type, l'interface est celle d'une STACK et rien de plus.
Bref, l'exemple correspond aussi au style de porgrammation préconisé dans Eiffel, the language et autres de ses bouquins :
s : ARRAYED_STACK[PLOP]
do
create s.make
-- Mal®
s : STACK[PLOP]
do
!ARRAYED_STACK[PLOP]!s.make
-- Bien©
Juste mes 2.10-2 EUR (et mon cours de poo de d.colnet).
[ Répondre ]
Re: Si j'ai bien tout compris
Après réflexion c'est vrai que le type est forcé en ARRAY[G] ... il doit y avoir un truc, ça m'étonnerait que ça soit innocent.
s est déclarée comme STACK[G], ça se fait comme ça :
plop is
local
s : STACK[G]
do
!ARRAYED_STACK[G]!s.make
-- ou autre syntaxe avec create
end -- plop
L'arrayed stack est un détail d'implantation, c'est sensé être utilisé avec une sémantique STACK et quand on code en eiffel on pose pour les variables un type "générique", plus comportemental qu'orienté implantation.
Dans ce cas, je ne peux pas ramener s à un ARRAY[WHATEVER]. Peut-être avec des typage dégueux à base de ?= (c'est ça, non ?) mais là c'est du gruïkage donc bon, c'est normal de tout faire foirer.
Bref, ça ne me viendrais pas à l'idée de déclarer une variable en tant qu'ARRAYED_STACK en dehors d'ARRAYED_STACK.
[ Répondre ]
Re: Enfin !
\o/ Ouééé !
Ça fait bizarre de surfer sur ce site sans voir de gros pans qui disparaissent en passant sur les liens :)
C'est toujours du code de merde en revanche ... en être rendu à foutre du javascript pour simuler l'effet d'un lien de base je trouve ça très très con (le lien vers le site bouygtel en bas à droite de 6sens.com, sans doutes entre autres).
[ Répondre ]
Re: Si j'ai bien tout compris
Il faudrait que je m'installe un chtit compilo eiffel pour tester mais je doute que ton s puisse être passé en array avec des méthodes redéfinies et surtout un export none du reste ... en tout cas que ça passe sans casse.
Si mes souvenirs sont bons les redéfinitions de méthodes ne sont pas shuntées en tentant de remonter l'arbre d'héritage donc put n'aura pas le bon profil (pour une stack put est du genre put(item : like G)).
[ Répondre ]
Re: Mplayer capable de faire tourner emacs
M-x play-sound-file
(avec XEmacs)
[ Répondre ]
Re: Se connecter à Internet du bout du monde
Reuters : Bayer Pharmaceutics se prend un procès pour concurrence déloyale par la Cogema AREVA.
[ Répondre ]
Re: Re:
<pinaille>[...] viennent de fusionner</pinaille> :)
[ Répondre ]
Re: Se connecter à Internet du bout du monde
News AFP : EDF rachète les clubs moving' et peut ainsi fermer deux centrales thermiques ...
[ Répondre ]
Re: un jeu 64 bits...
Tant qu'on est dans le cambouis, Intel et AMD font toujours le concours idiot du plus long pipeline ? Qui est-ce qui pisseurine le plus loin pour l'instant ? (en bousillant la latence)
[ Répondre ]
[ Précédent :: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 :: Suivant ]



Re: Pure curiosite aussi ...
Proxad, c'est dans le forum.
[ Répondre ]