Re: function ... return <objet li mité>;

Thomas De Contes <[email protected]>
Newsgroups gmane.comp.lang.ada.france
Message-ID <[email protected]>
Le 25 oct. 07 à 16:47, Jean-Pierre Rosen a écrit :

> Thomas De Contes a écrit :
>> D'après les messages d'erreur que j'ai, je crois deviner que
>> - en ada 95, on avait le droit de faire une fonction qui renvoie  
>> un  objet limité,
>> - en ada 2005, on n'a plus le droit
> Effectivement. Le problème est qu'en Ada 95, on était obligé de  
> faire des acrobaties pas possibles: normalement une fonction  
> renvoie une *valeur*, or on ne peut pas copier une valeur limitée.

des acrobaties, tu veux dire au niveau du compilateur ?


> Il y avait donc un cas particulier pour les types limités, où les  
> fonctions renvoyaient de façon cachée une référence sur la valeur:  
> c'était les "by reference types".

(c'était que pour les types limités ? c'était pas aussi pour des  
choses comme les gros record ?)

> Avec la généralisation des accès anonymes en Ada2005, on a préféré  
> dire la vérité. Donc il faut remplacer:
>    function F return Lim;
> par
>    function F return access Lim;
>
> En pratique, ça fait la même chose, mais l'utilisateur est au  
> courant (et doit gérer) le fait qu'on retourne une référence.

Personnellement, je préférais largement ce que proposait Ada 95,  
parce que


Je me suis donné comme règle de programmation de ne jamais utiliser  
de pointeurs dans la partie publique des paquetages
J'ai tjr peur de me retrouver avec un pointeur non nul qui pointe sur  
un espace désalloué (je suppose que la nouveauté "not null" ne règle  
pas le pb) suite à une mauvaise utilisation du paquetage
(alors que si ça reste à l'intérieur, une fois que le paquetage est  
bien ficelé, on est sur de pas avoir de pb quelle que soit son  
utilisation)

Alors que si le compilateur fait bien son travail, c'est sans aucun  
danger même si il utilise des pointeurs "par en dessous", non ?


D'ailleurs, on peut tjr utiliser des types limités dans des  
paramètres de n'importe quel mode (in/in out), et c'est bien des  
pointeurs qui sont utilisés aussi dans ce cas là, non ?

En fait, j'aurais tendance à dire "tant pis si ça donne du travail au  
compilateur, il est là pour ça", son but c'est de simplifier la tache  
du programmeur en vérifiant tout ce qui est droit de modifier, droit  
d'affectation, etc ...


Et ce changement, avec cette interdiction, m'ennuient un peu, parce  
que j'avais fait un paquetage pour "enrober" les types limités, pour  
pouvoir les manipuler plus facilement :

generic
	type objetLimite is limited private;
package objetNonLimites is
	type objetNonLimite is private;
	function contenu (onl : objetNonLimite) return objetLimite;
private
	type objetNonLimite is record
		p : access objetLimite;
	end record;
end objetNonLimites;

(j'ai raccourci la structure de données)

Et j'avais donc fait une fonction pour accéder à objetLimite à  
l'intérieur de objetNonLimite,
pas pour le copier bien sur :-) ,
mais on peut tjr avoir besoin d'accéder à une propriété ... accéder à  
la valeur d'un champ si c'est un limited record, ... voire le mettre  
dans un paramètre "in" !


Tant pis, je met de coté pour l'instant, et le jour où j'en aurai  
besoin je trouverais bien qqch ... peut être une procédure générique :-)


>
>> Pourquoi le compilateur ne fait une erreur que quand il voit   
>> l'instruction return à la fin du corps ?
>> Pourquoi il n'en fait pas des qu'il voit la spécification de la   
>> fonction ?
> Faudrait nous donner le source et les messages d'erreur...

pas la peine :-)
http://www.adacore.com/2007/09/24/ada-gem-10/
(merci Jérôme Haguet :-) )

Donc en fait, on a tjr le droit de faire des fonctions qui renvoient  
un objet limité, mais on n'a pas le droit d'écrire les mêmes choses  
dedans


D'ailleurs (encore), je viens de penser,
si ça se trouve, la restriction dont on parle plus haut a été faite  
(aussi) parce que c'était incompatible avec cette nouvelle forme,  
"return statement" (?)



J'espère que c'était pas trop confus :-)


-- 
j'agis contre l'assistanat, je travaille dans une SCOP !


_______________________________________________
Site WWW de l'association Ada-France: http://www.ada-france.org/
[email protected]
http://www.ada-france.org/mailman/listinfo/ada-france
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.