@kurah
La notion de pointeurs te semble obscure ? Pourtant, tu n'as jamais manipulé que ça. Pas vraiment, en fait, tu as toujours manipulé des références. Voici comment on fait une référence :
Code PseudoCode : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class Reference: pointeur m_objet; entier m_compteurDeRéférences;
Comme tu le vois, c'est une simple paire (pointeur, compteur). Toutes ces références sont stockées dans une grande "table", unique pour l'application, qui contient les références de tous tes objets en mémoire. Et ton "langage" prend soin pour toi de faire deux choses :
* Chaque fois que tu assignes une référence à une variable, le compteur est modifié : l'ancienne valeur voit compteur décrémenté, la nouvelle voit le sien incrémenté. Si une variable a son compteur a 10, cela signifie qu'il y a dix variables en mémoire qui ont cette référence.
* Régulièrement, ton programme fait le tour de la table des références. Dès qu'il en repère une dont le compteur est à zéro, cela signifie qu'elle n'est plus accessible par ton programme. Alors il la nettoie (libération de l'adresse contenue dans le pointeur) et la retire de la table.
Donc, un pointeur, c'est comme une référence, sauf que ce n'est pas automatiquement détruit. Et là tu peux comprendre à quoi ça sert : à faire tout ce que tu fais aujourd'hui avec des références mais beaucoup plus rapidement puisque :
1) Tu n'as pas besoin, à chaque assignation, de faire un à deux tests (vérifier que c'est différent de null) et deux incrémentations/décrémentations (des incrémentations "magiques" pour que deux threads puissent faire ça en même temps sans verrou)
2) Tu n'as pas besoin d'avoir régulièrement un ramasse-miettes qui vienne bouffer du CPU, voire interrompre ton programme, pour parcourir et modifier une structure de données lourde et complexe et réarranger la mémoire dans tous les sens, une opération très coûteuse en bande passante mémoire et incompatible avec les besoins de programmes devant fonctionner en temps réel.
Est-ce que c'est complexe pour un amateur ? Peut-être mais c'est nécessaire pour maximiser les performances. Cela dit j'ai appris ça tout seul à 16 ans depuis un bouquin en essayant de réaliser un arbre binaire. Effectivement, je crois me souvenir m'être bien pris la tête au début mais, au bout de quelques jours, c'était rentré pour de bon.
Maintenant, C, C++, C# et Objective-C n'ont pas grand chose à voir et tous ne présentent pas du tout le même niveau de difficulté. Commence donc par le C#, c'est un langage simple et puissant. Comme php, tu y manipuleras des références et non des pointeurs, ce qui te simplifiera la vie. Ta seule vraie difficulté sera d'apprendre à manier un langage au typage statique fort (contrairement à php & co) et à coder prorprement en objet.
Et, avec le temps, tu comprendras que tout ce qui te semble obscur a sa raison d'être.
@Souviron34
Attention, le fait que certains paradigmes a priori abscons aient une faible pénétration dans l'industrie ne signifie pas que, dans les domaines où ils sont employés, ils ne seraient que de peu d'intérêt et aisément substituables par autre chose. Si on regarde Erlang par exemple...
Partager