A newpalavra-chave em linguagens como Java, Javascript e C # cria uma nova instância de uma classe.
Essa sintaxe parece ter sido herdada do C ++, onde newé usada especificamente para alocar uma nova instância de uma classe na pilha e retornar um ponteiro para a nova instância. No C ++, essa não é a única maneira de construir um objeto. Você também pode construir um objeto na pilha, sem usar new- e, de fato, essa maneira de construir objetos é muito mais comum em C ++.
Portanto, vindo de um background em C ++, a newpalavra - chave em linguagens como Java, Javascript e C # parecia natural e óbvia para mim. Então comecei a aprender Python, que não tem a newpalavra - chave. No Python, uma instância é construída simplesmente chamando o construtor, como:
f = Foo()
No começo, isso me pareceu um pouco complicado, até que me ocorreu que não havia razão para o Python ter new, porque tudo é um objeto, então não há necessidade de desambiguar as várias sintaxes dos construtores.
Mas então eu pensei - qual é realmente o sentido disso newem Java? Por que deveríamos dizer Object o = new Object();? Por que não apenas Object o = Object();? No C ++, há definitivamente uma necessidade new, pois precisamos distinguir entre alocar na pilha e alocar na pilha, mas em Java todos os objetos são construídos na pilha, então por que ter a newpalavra - chave? A mesma pergunta pode ser feita para Javascript. Em C #, com o qual estou muito menos familiarizado, acho que newpode ter algum objetivo em termos de distinguir entre tipos de objeto e tipos de valor, mas não tenho certeza.
Independentemente disso, parece-me que muitas linguagens que vieram depois do C ++ simplesmente "herdaram" a newpalavra-chave - sem realmente precisar dela. É quase como uma palavra-chave vestigial . Parece que não precisamos dele por nenhum motivo, e ainda está lá.
Pergunta: Estou correto sobre isso? Ou existe algum motivo convincente que newprecisa estar em linguagens gerenciadas por memória inspiradas em C ++, como Java, Javascript e C #, mas não Python?
fnão escapar da função, aloque espaço na pilha.
fquando a função envolvente retornar.
newpalavra - chave? Claro que quero criar uma nova variável, compilador estúpido! A boa linguagem seria, em minha opinião tem uma sintaxe comof = heap Foo(),f = auto Foo().