А что если убрать new в C# ?
От: Shmj Ниоткуда  
Дата: 23.08.23 22:14
Оценка:
В С++ new имеет смысл, т.к. без него выделяется память на объект в стеке, а new создает в куче и возвращает указатель.

В C# этот new никакой смысловой нагрузки не несет. Так зачем же он?
Re: Kotlin
От: Qbit86 Кипр
Дата: 23.08.23 22:23
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Так зачем же он?


...Так подумал Андрей Бреслав, и убрал new из Kotlin.
Глаза у меня добрые, но рубашка — смирительная!
Re[2]: Kotlin
От: Shmj Ниоткуда  
Дата: 23.08.23 23:16
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>...Так подумал Андрей Бреслав, и убрал new из Kotlin.


В Dart изначально был, потом сделали опциональным.
Re: А что если убрать new в C# ?
От: IT Россия linq2db.com
Дата: 24.08.23 00:22
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>В C# этот new никакой смысловой нагрузки не несет. Так зачем же он?


И конструктор уровнять в правах с обычным методом.
Если нам не помогут, то мы тоже никого не пощадим.
Re: А что если убрать new в C# ?
От: Разраб  
Дата: 24.08.23 05:44
Оценка:
Здравствуйте, Shmj, Вы писали:

S>В С++ new имеет смысл, т.к. без него выделяется память на объект в стеке, а new создает в куче и возвращает указатель.


S>В C# этот new никакой смысловой нагрузки не несет. Так зачем же он?


Убрали уже. F#
open System
let o = Object()
o.ToString() |> printfn "%s"
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: А что если убрать new в C# ?
От: Разраб  
Дата: 24.08.23 05:49
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Shmj, Вы писали:


S>>В C# этот new никакой смысловой нагрузки не несет. Так зачем же он?


IT>И конструктор уровнять в правах с обычным методом.

функцией, и void заменить на Option<T>(Some(T)|None)
https://github.com/readme/featured/functional-programming
Можно прямо сейчас, только добавить статик класс с методами-конструкторами
using static Some.Constructors; 
var person = Person();
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: А что если убрать new в C# ?
От: _NN_ www.nemerleweb.com
Дата: 24.08.23 08:14
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>В С++ new имеет смысл, т.к. без него выделяется память на объект в стеке, а new создает в куче и возвращает указатель.


S>В C# этот new никакой смысловой нагрузки не несет. Так зачем же он?


Кхм, в Nemerle нет и конструктор просто называется this.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: А что если убрать new в C# ?
От: Sharov Россия  
Дата: 24.08.23 08:20
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>В С++ new имеет смысл, т.к. без него выделяется память на объект в стеке, а new создает в куче и возвращает указатель.

S>В C# этот new никакой смысловой нагрузки не несет. Так зачем же он?

Ну так со всеми DI контейнерами его и так уже не сыщешь.
Кодом людям нужно помогать!
Отредактировано 24.08.2023 11:31 Sharov . Предыдущая версия .
Re[3]: А что если убрать new в C# ?
От: IT Россия linq2db.com
Дата: 24.08.23 13:31
Оценка:
Здравствуйте, Разраб, Вы писали:

IT>>И конструктор уровнять в правах с обычным методом.

Р>функцией, и void заменить на Option<T>(Some(T)|None)
Р>https://github.com/readme/featured/functional-programming
Р>Можно прямо сейчас, только добавить статик класс с методами-конструкторами

Это типа как выкривлять кривизну зеркалом с обратной кривизной?
Если нам не помогут, то мы тоже никого не пощадим.
Re: А что если убрать new в C# ?
От: Ночной Смотрящий Россия  
Дата: 26.08.23 15:47
Оценка:
Здравствуйте, Shmj, Вы писали:

S>В C# этот new никакой смысловой нагрузки не несет. Так зачем же он?


В текущей грамматике он конфликты разрешает. А если более обще, то сделали чтобы по сравнению с С++ не сильно резало глаз.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: А что если убрать new в C# ?
От: Shmj Ниоткуда  
Дата: 26.08.23 15:51
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>В текущей грамматике он конфликты разрешает. А если более обще, то сделали чтобы по сравнению с С++ не сильно резало глаз.


Но C++ -ников вводит в заблуждение, т.к. возвращает ссылку а не указатель.
Отредактировано 26.08.2023 16:17 Shmj . Предыдущая версия .
Re[3]: А что если убрать new в C# ?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 26.08.23 20:02
Оценка:
Здравствуйте, Shmj, Вы писали:


НС>>В текущей грамматике он конфликты разрешает. А если более обще, то сделали чтобы по сравнению с С++ не сильно резало глаз.


S>Но C++ -ников вводит в заблуждение, т.к. возвращает ссылку а не указатель.


http://xoofx.com/blog/2015/10/08/stackalloc-for-class-with-roslyn-and-coreclr/
и солнце б утром не вставало, когда бы не было меня
Re: А что если убрать new в C# ?
От: CRT  
Дата: 29.08.23 09:39
Оценка:
Здравствуйте, Shmj, Вы писали:


S>В C# этот new никакой смысловой нагрузки не несет. Так зачем же он?


Ну как бы привычно что new это то что выделяет память в куче и возвращают ссылку (или указатель в С++) на это место в памяти. Я к этому привык в C++ и поэтому new в C# мне показалось логичным.

А вот new для структур в C# мне всегда казалось какой-то странной конструкцией. Ссылку не возвращает. Объект в куче не создает.
Да еще и без new можно создавать структуры и использовать. Могли бы для структур в C# использовать с++ный синтаксис вызова конструктора.
Отредактировано 29.08.2023 9:40 CRT . Предыдущая версия .
Re[2]: А что если убрать new в C# ?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.08.23 10:56
Оценка:
Здравствуйте, CRT, Вы писали:

CRT>А вот new для структур в C# мне всегда казалось какой-то странной конструкцией. Ссылку не возвращает. Объект в куче не создает.

CRT>Да еще и без new можно создавать структуры и использовать. Могли бы для структур в C# использовать с++ный синтаксис вызова конструктора.

туц это просто конструктор. В том же Delphi это статическтй метод Constructor Create, который кстати может быть и виртуальным!
и солнце б утром не вставало, когда бы не было меня
Re[3]: А что если убрать new в C# ?
От: CRT  
Дата: 29.08.23 11:12
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>туц это просто конструктор. В том же Delphi это статическтй метод Constructor Create, который кстати может быть и виртуальным!


Еще раз, new это оператор выделения памяти, создания объекта в куче, возвращающий ссылку но созданный объект. В Java, в С++, в C# том же. А для структур в C# они приспособили его только для вызова конструктора и всё — никакой объект в куче не создается, ссылка не возвращается. В этом противоречие. В разном смысле вызова new для структур и классов.
Так понятно о чем я говорю?

А дельфи тут при чем? Как оно к моему комментарию относится? Что, разве в дельфи у record (аналог структур) есть конструктор Create?
Отредактировано 29.08.2023 11:15 CRT . Предыдущая версия . Еще …
Отредактировано 29.08.2023 11:14 CRT . Предыдущая версия .
Отредактировано 29.08.2023 11:13 CRT . Предыдущая версия .
Re[4]: А что если убрать new в C# ?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.08.23 11:37
Оценка:
Здравствуйте, CRT, Вы писали:


S>>туц это просто конструктор. В том же Delphi это статическтй метод Constructor Create, который кстати может быть и виртуальным!


CRT>Еще раз, new это оператор выделения памяти, создания объекта в куче, возвращающий ссылку но созданный объект. В Java, в С++, в C# том же. А для структур в C# они приспособили его только для вызова конструктора и всё — никакой объект в куче не создается, ссылка не возвращается. В этом противоречие. В разном смысле вызова new для структур и классов.

CRT>Так понятно о чем я говорю?

CRT>А дельфи тут при чем? Как оно к моему комментарию относится? Что, разве в дельфи у record (аналог структур) есть конструктор Create?


Есть https://sergworks.wordpress.com/2012/03/13/record-constructors-in-delphi/
Мало того есть аналог сишного класса на стеке с наследованием
и солнце б утром не вставало, когда бы не было меня
Re[5]: А что если убрать new в C# ?
От: CRT  
Дата: 29.08.23 12:57
Оценка:
Здравствуйте, Serginio1, Вы писали:


S>Есть https://sergworks.wordpress.com/2012/03/13/record-constructors-in-delphi/


а, ну значит я отстал. Давно дельфи не занимался. Раньше не было.

Изначально (и очень долгое время) в дельфи все классы создавались только динамически (в куче). У структур конструкторов не было.
Create именно создавал объект в куче и возвращал ссылку.
поэтому вызов
v:=TMyClass.Create;
выглядел логически. Ты создаешь объект, попутно его инициализируя, и возвращаешь ссылку, которую присваиваешь переменной которая будет хранить эту ссылку. Поэтому и назвали конструктор словом Create (хотя насколько помню имя может быть любое)


Потом они решили присобачить к структурам конструктор и решили оставить синтаксис вызова конструктора для структур таким же как и при создание объектов в динамической памяти (в куче) — то есть та же самая шляпа что и в C#.



Кстати раньше в Turbo Pascal был другой синтаксис, без оператора присваивания, и конструкторы было принято называть Init а деструкторы Done

выглядело это так при создании на стеке
var 
 s: TMyClass;
begin
  s.Init;
  s.Done;
end.


То есть ты только инициализируешь уже существующий на стеке класс

а при динамическом создании объекта выглядело по другому (через new)
Отредактировано 29.08.2023 13:26 CRT . Предыдущая версия . Еще …
Отредактировано 29.08.2023 13:20 CRT . Предыдущая версия .
Отредактировано 29.08.2023 13:18 CRT . Предыдущая версия .
Отредактировано 29.08.2023 13:17 CRT . Предыдущая версия .
Отредактировано 29.08.2023 13:15 CRT . Предыдущая версия .
Отредактировано 29.08.2023 13:06 CRT . Предыдущая версия .
Отредактировано 29.08.2023 13:05 CRT . Предыдущая версия .
Отредактировано 29.08.2023 13:02 CRT . Предыдущая версия .
Отредактировано 29.08.2023 13:02 CRT . Предыдущая версия .
Отредактировано 29.08.2023 13:01 CRT . Предыдущая версия .
Отредактировано 29.08.2023 12:58 CRT . Предыдущая версия .
Отредактировано 29.08.2023 12:58 CRT . Предыдущая версия .
Re[6]: А что если убрать new в C# ?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.08.23 14:19
Оценка:
Здравствуйте, CRT, Вы писали:

Конструктор для структур это инициализатор.
Мне больше нравится вместо new TObject() TObject.New() так понятнее.
и солнце б утром не вставало, когда бы не было меня
Re: А что если убрать new в C# ?
От: Teolog  
Дата: 29.08.23 14:49
Оценка:
Здравствуйте, Shmj, Вы писали:

S>В С++ new имеет смысл, т.к. без него выделяется память на объект в стеке, а new создает в куче и возвращает указатель.


S>В C# этот new никакой смысловой нагрузки не несет. Так зачем же он?


Иначе будет мымрыц при нахождении в области видимости переменной совпадающей с названием класса.
Либо потом блох ловить, либо вообще запретить имена совпадающие с типами. Что при наличии using — боль дырка заднее основание.
Нет уж — пусть будет ясно видно где обьект создаеться — нафиг всех экономистов-оптимизаторов, пусть на питоне с яваскртиптом пришут и там оптимизируют- хуже уже не будет.
Re[2]: А что если убрать new в C# ?
От: rameel https://github.com/rsdn/CodeJam
Дата: 29.08.23 15:45
Оценка:
Здравствуйте, Teolog, Вы писали:

T>Иначе будет мымрыц при нахождении в области видимости переменной совпадающей с названием класса.


Переменные совпадающие с названием класса — это чтобы жизнь медом не казалось?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Отредактировано 29.08.2023 15:46 rameel . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.