Le new
mot clé dans des langages tels que Java, Javascript et C # crée une nouvelle instance d'une classe.
Cette syntaxe semble avoir été héritée de C ++, où elle new
est utilisée spécifiquement pour allouer une nouvelle instance d'une classe sur le tas et renvoyer un pointeur sur la nouvelle instance. En C ++, ce n'est pas le seul moyen de construire un objet. Vous pouvez également construire un objet sur la pile, sans utiliser new
- et en fait, cette manière de construire des objets est beaucoup plus courante en C ++.
Alors, venant d’un fond C ++, le new
mot clé dans des langages tels que Java, Javascript et C # me paraissait naturel et évident. Ensuite, j'ai commencé à apprendre Python, qui n'a pas le new
mot clé. En Python, une instance est construite simplement en appelant le constructeur, comme suit:
f = Foo()
Au début, cela me paraissait un peu déroutant, jusqu'à ce que je réalise qu'il n'y avait aucune raison pour que Python en ait new
, car tout est un objet, il n'est donc pas nécessaire de lever les ambiguïtés entre les différentes syntaxes de constructeur.
Mais ensuite, j'ai pensé: à quoi sert vraiment new
Java? Pourquoi devrions-nous dire Object o = new Object();
? Pourquoi pas juste Object o = Object();
? En C ++, il est absolument nécessaire new
, car nous devons distinguer entre l’allocation sur le tas et l’allocation sur la pile, mais en Java, tous les objets sont construits sur le tas, pourquoi même le new
mot-clé? La même question pourrait être posée pour Javascript. En C #, que je connais beaucoup moins bien, je pense qu’il new
peut être utile de distinguer les types d’objet des types de valeur, mais je ne suis pas sûr.
Quoi qu'il en soit, il me semble que de nombreux langages ayant succédé à C ++ ont simplement "hérité" du new
mot clé - sans en avoir réellement besoin. C'est presque comme un mot-clé vestigial . Nous ne semblons en avoir besoin pour aucune raison, et pourtant, il est là.
Question: Ai-je raison à ce sujet? Ou y a-t-il une raison impérieuse qui new
doit être dans des langages à gestion de mémoire inspirés du C ++ tels que Java, Javascript et C #, mais pas Python?
f
n'échappe pas à la fonction, allouez de l'espace de pile.
f
lorsque la fonction englobante revient.
new
mot clé. Bien sûr, je veux créer une nouvelle variable, un compilateur stupide! Une bonne langue serait à mon avis une syntaxe commef = heap Foo()
,f = auto Foo()
.