newКлючевые слова в языках , как Java, JavaScript и C # создают новый экземпляр класса.
Этот синтаксис, по-видимому, унаследован от C ++, где newон используется специально для выделения нового экземпляра класса в куче и возврата указателя на новый экземпляр. В C ++ это не единственный способ создания объекта. Вы также можете создать объект в стеке, не используя new- и на самом деле этот способ создания объектов гораздо более распространен в C ++.
Итак, исходя из фона C ++, newключевое слово в таких языках, как Java, Javascript и C #, показалось мне естественным и очевидным. Затем я начал изучать Python, у которого нет newключевого слова. В Python экземпляр создается просто путем вызова конструктора, например:
f = Foo()
Поначалу мне это показалось немного странным, пока мне не пришло в голову, что у Python нет никаких оснований для этого new, потому что все является объектом, поэтому нет необходимости устранять неоднозначность между различными синтаксисами конструктора.
Но потом я подумал - какой смысл newв Java? Почему мы должны говорить Object o = new Object();? Почему не просто Object o = Object();? В C ++ это определенно необходимо new, так как мы должны различать распределение в куче и распределение в стеке, но в Java все объекты создаются в куче, так почему же даже есть newключевое слово? Тот же вопрос можно задать для Javascript. В C #, с которым я гораздо менее знаком, я думаю, что newможет иметь какую-то цель с точки зрения разграничения между типами объектов и типами значений, но я не уверен.
Несмотря на это, мне кажется, что многие языки, появившиеся после C ++, просто «унаследовали» newключевое слово - без особой необходимости. Это почти как рудиментарное ключевое слово . Кажется, нам это не нужно по какой-либо причине, и все же оно есть.
Вопрос: я прав по этому поводу? Или есть какая-то веская причина, которая newдолжна быть в C ++ - вдохновленные языки с управлением памятью, такие как Java, Javascript и C #, но не Python?
fне выходит из функции, выделяйте место в стеке.
fпри возврате вмещающей функции.
newключевое слово. Конечно, я хочу создать новую переменную, тупой компилятор! Хороший язык будет по - моему есть синтаксис , какf = heap Foo(),f = auto Foo().