La new
palabra clave 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 ++.
Entonces, viniendo de un fondo C ++, la new
palabra clave en lenguajes como Java, Javascript y C # me pareció natural y obvia. Entonces comencé a aprender Python, que no tiene la new
palabra clave. 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 lo tenga new
, porque todo es un objeto, por lo que no hay necesidad de desambiguar entre varias sintaxis de constructor.
Pero luego pensé: ¿de qué sirve realmente new
Java? ¿Por qué deberíamos decir Object o = new Object();
? ¿Por qué no solo Object o = Object();
? En C ++ definitivamente hay una necesidad new
, ya que necesitamos distinguir entre la asignación en el montón y la asignación en la pila, pero en Java todos los objetos se construyen en el montón, entonces, ¿por qué incluso tener la new
palabra clave? La misma pregunta podría hacerse para Javascript. En C #, con el que estoy mucho menos familiarizado, 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.
De todos modos, me parece que muchos lenguajes que vinieron después de C ++ simplemente "heredaron" la new
palabra clave, sin realmente necesitarla. Es casi como una palabra clave vestigial . No parece que lo necesitemos por ningún motivo y, sin embargo, está ahí.
Pregunta: ¿Estoy en lo correcto sobre esto? ¿O hay alguna razón convincente que new
deba estar en lenguajes administrados en memoria inspirados en C ++ como Java, Javascript y C # pero no Python?
f
no escapa de la función, asigne espacio de pila.
f
cuando la función de cierre regresa.
new
palabra clave. ¡Por supuesto que quiero crear un nuevo compilador variable y estúpido! Un buen lenguaje sería en mi opinión, tienen una sintaxis comof = heap Foo()
,f = auto Foo()
.