La palabra clave new
en lenguajes como Java, Javascript y C # crea una nueva instancia de una clase.
Esta sintaxis parece haber sido heredada de C ++, donde new
se usa específicamente para asignar una nueva instancia de una clase en el montón y devolver un puntero a la nueva instancia. En C ++, esta no es la única forma de construir un objeto. También puede construir un objeto en la pila, sin usar new
, y de hecho, esta forma de construir objetos es mucho más común en C ++.
Por lo tanto, provenientes de un fondo de C ++, la palabra clave new
en lenguajes como Java, Javascript y C # me pareció natural y obvio. Luego empecé a aprender Python, que no tiene la palabra clave new
. En Python, una instancia se construye simplemente llamando al constructor, como:
f = Foo()
Al principio, esto me pareció un poco extraño, hasta que se me ocurrió que no hay razón para que Python tenga new
, porque todo es un objeto, por lo que no es necesario desambiguar entre las distintas sintaxis del constructor.
Pero luego pensé: ¿cuál es realmente el punto de new
en Java? ¿Por qué deberíamos decir Object o = new Object();
? ¿Por qué no solo Object o = Object();
? En C ++ definitivamente hay una necesidad de new
, ya que necesitamos distinguir entre asignar en el montón y asignar en la pila, pero en Java todos los objetos se construyen en el montón, ¿por qué incluso tener la palabra clave new
? La misma pregunta se puede hacer para Javascript. En C #, con el que estoy mucho menos familiar, creo que new
puede tener algún propósito en términos de distinguir entre tipos de objetos y tipos de valores, pero no estoy seguro.
En cualquier caso, me parece que muchos idiomas que vinieron después de C ++ simplemente "heredaron" la palabra clave new
, sin que realmente la necesitaran. Es casi como una palabra clave vestigial . Parece que no lo necesitamos por ninguna razón, y sin embargo, está ahí.
Pregunta: ¿Estoy en lo correcto al respecto? ¿O hay alguna razón convincente para que new
tenga que estar en lenguajes de gestión de memoria inspirados en C ++ como Java, Javascript y C # pero no en Python?