Commentaires correspondant au document primitif "enVrac" qui a été visiblement modifié ensuite.
------------------------------------------------------------------------
1. Structure des données
1.1 Gestion automatique des types
Pourquoi pas, mais la gestion mémoire est plus complexe et l'extension automatique ne va pas améliorer le temps d'exécution. Du point de vue interne, pour les opérations arithmétiques, il faudra probablement utiliser la même taille mémoire pour les opérandes ... (bytecode style).
1.1 Types récursifs
OK mais imbriqués ou récursifs*?
Une structure dont un élément est de même type que la structure elle-même*?
1.3 Typé non explicitement
En Java (et d'autres langages objets), la définition d'une classe définit un type et une sous-classe un "sous-type", ce qui permet de faire des conversions (...) à partir de la hiérarchie de l'héritage.
Ma pratique de Java (et de C++) me pousse à favoriser l'écriture
MaClass maClass = new MaClass( ...)
(règle de bonne pratique dans la nomination des variables, un peu comme en Java), mais je ne suis peut-être pas le bon "expert" concernant ces aspects lorsqu'il s'agit de R.
b<-3.5 : j'y vois un problème potentiel.
Si b était de type int, l'affectation de 3.5 lui donnerait le type float et si on le passe comme paramètre à une fonction qui attend un argument de type int, n'y aurait-il pas un problème ?
La gestion et le contrôle automatiques des types peuvent-ils résoudre les cas de passage de paramètres aux fonctions ?
OK pour les déclarations sans initialisations.
Mais, si en java on peut faire
MaClass a ; a=new MaClass(...) (ou utiliser le constructeur par défaut avec a =new MaClass() )
alors qu'est-ce qui différencie
1 2
| a<-MaClass() (pour la déclaration et :)
a<-MaClass() (pour instanciation) |
comme proposée, pour simplification, au début de la partie 1.3 (création d'objet) ?
1.6 Déclaration des variables
Oui il faudrait qu'on puisse faire les déclarations partout, et cela doit être réfléchi dans le cadre général de la portée des identificateurs. Mais pour une variables dont le "type est une classe" (parag. "Typé non explicitement" dans le document), il faudrait que la classe soit définie avant la déclaration de la variable.
1.8 Transtypage automatique
Ce que je comprends de ce paragraphe est que cela est lié à la notion de classe (les objets définis par l'utilisateur) : le principe de l'héritage doit pouvoir fonctionner entre classes (et le typage aussi donc -conversion-)
Si les classes ne sont pas dans une même hiérarchie .... ça sera difficile et il faudra écrire alors du code de conversion. Même chose pour des objets qui ne sont pas instances de classe de l'utilisateur (instances d'objets de packages) ; je ne parle pas ici des données de type primitif (type primitif est emprunté à java) .
Dans R, la coercition existe pour résoudre ce type de pb, lorsque les classes n'ont pas la même représentation (page 348 de Programming with R de J.-M. Chambers).
1.10 Type
Ce qui serait bien : un tableau donnant les grandes lignes des correspondances des types, étendue des valeurs pour les types primitifs, … (R, R++ et Java si on prend ce langage comme "modèle" pour le typage)
Concernant les "surtypes", que je rapproche des classes "enveloppes" (wrapper) de Java et la manipulation des données, y a t-il une référence non explicite à l'autoboxing (et l'unboxing) ?
1. 11 Infini
J'ai testé, en Java, l'exemple de la puissance :
en java cela donne :
1 2 3 4
| int a = 250 ;
int b = 250 ;
double c = Math.pow(a, b) ;
System.out.println(c) ; |
===> cela donne Infinity
avec System.out.println(-c), cela donne -Infinity
Donc les résultats en Java sont corrects !
1. 12 Initialisation
En 1.3 on parle de déclaration sans initialisation ....
Je préfère parler de constructeur par défaut que de constructeur vide et à ma connaissance un constructeur par défaut crée un objet non vide mais dont les champs peuvent ne pas avoir été initialisés (que des déclarations par exemple).
1.14 Déclaration d'un tableau
en Java, l'exemple donné est une création plus une initialisation.
1.15 Création de tableaux
Dans l'exemple donné, il y a donc déclaration et création (au sens java)*?
Partager