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

В C# этот new никакой смысловой нагрузки не несет. Так зачем же он?
=сначала спроси у GPT=
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 изначально был, потом сделали опциональным.
=сначала спроси у GPT=
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_  
Дата: 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++ -ников вводит в заблуждение, т.к. возвращает ссылку а не указатель.
=сначала спроси у GPT=
Отредактировано 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 . Предыдущая версия .
Re: А что если убрать new в C# ?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 29.08.23 20:17
Оценка: 5 (1)
Здравствуйте, Shmj, Вы писали:

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

Target-typed new?
Или ты все еще живешь в 2010 году?
Re[3]: А что если убрать new в C# ?
От: Teolog  
Дата: 30.08.23 08:35
Оценка: +1
R>Переменные совпадающие с названием класса — это чтобы жизнь медом не казалось?

Многие ли вместо Network напишут NetworkImplementationRefObject — потому как нафига такое извращение которое еще поди вспомни?
Re[3]: А что если убрать new в C# ?
От: Sharov Россия  
Дата: 30.08.23 08:57
Оценка:
Здравствуйте, rameel, Вы писали:

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

R>Переменные совпадающие с названием класса — это чтобы жизнь медом не казалось?

Увы, у меня регулярно.
Кодом людям нужно помогать!
Re[2]: А что если убрать new в C# ?
От: sergii.p  
Дата: 30.08.23 09:03
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Target-typed new?

G>Или ты все еще живешь в 2010 году?

ну вопрос наверное подразумевает почему изначально внесли такое требование. Да и тот же target-typed new. В C++ например обходятся без new (хотел написать прекрасно обходятся, но признаться честно не так всё прекрасно).

Dictionary<string, List<int>> field = new() {
    { "item1", new() { 1, 2, 3 } }
};


=>

std::unordered_map<std::string, std::vector<int>> field = {
    { "item1", { 1, 2, 3 } }
};
Re[4]: А что если убрать new в C# ?
От: sergii.p  
Дата: 30.08.23 09:34
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Увы, у меня регулярно.


пора переставать есть кактус. Название класса — UpperCamelCase, название переменной — lowerCamelCase и никаких коллизий не возникает.
Re[5]: А что если убрать new в C# ?
От: Sharov Россия  
Дата: 30.08.23 09:40
Оценка: +1
Здравствуйте, sergii.p, Вы писали:

S>>Увы, у меня регулярно.

SP>пора переставать есть кактус. Название класса — UpperCamelCase, название переменной — lowerCamelCase и никаких коллизий не возникает.

А пропертя? Собственно, только с ними такие проблемы.
Кодом людям нужно помогать!
Re[6]: А что если убрать new в C# ?
От: sergii.p  
Дата: 30.08.23 10:13
Оценка:
Здравствуйте, Sharov, Вы писали:

S>А пропертя? Собственно, только с ними такие проблемы.


в ветке говорили изначально про "переменные, совпадающие с названием класса", но в остальном согласен, со свойствами беда.
Re[3]: А что если убрать new в C# ?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 30.08.23 11:02
Оценка: +1
Здравствуйте, sergii.p, Вы писали:

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


G>>Target-typed new?

G>>Или ты все еще живешь в 2010 году?

SP>ну вопрос наверное подразумевает почему изначально внесли такое требование. Да и тот же target-typed new. В C++ например обходятся без new (хотел написать прекрасно обходятся, но признаться честно не так всё прекрасно).


Конечно же в 2001 году, когда придумывал C# такое требование внесли потому что надо было походить на Java (в первую очередь) и C++ (во вторую). 20 лет назад на плюсах нельзя было так написать и вообще о выводе типов мало кто думал.
Почему не убрали new из C# на этом пути — очевидно чтобы не сломать совместимость. Худшее что можно придумать в языке, что подавляющее большинство программ перестанет компилироваться в версии N+1.
Почему не сделали new опциональным, наверное потому что с момента появления Roslyn target-typed new был в планах, да и не сильно сложно этот new писать, он помогает чтению кода
Re[4]: А что если убрать new в C# ?
От: rameel https://github.com/rsdn/CodeJam
Дата: 30.08.23 13:41
Оценка:
Здравствуйте, Teolog, Вы писали:

R>>Переменные совпадающие с названием класса — это чтобы жизнь медом не казалось?


T>Многие ли вместо Network напишут NetworkImplementationRefObject — потому как нафига такое извращение которое еще поди вспомни?


Вот именно, извращение, ибо никто в здравом уме так не пишет как и не пишет var Network = Network. Переменные и аргументы метода должны начинаться со строчной буквы!
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[4]: А что если убрать new в C# ?
От: rameel https://github.com/rsdn/CodeJam
Дата: 30.08.23 13:49
Оценка:
Здравствуйте, Sharov, Вы писали:

R>>Переменные совпадающие с названием класса — это чтобы жизнь медом не казалось?


S>Увы, у меня регулярно.


Мда, такое я видел либо в говноблогах, либо у тех, кто только учится программировать /(на C#)?/g. Вторым простительно, но в любом случае, зачем на них оглядываться? Если же такой бардак в компании, то увы и ах, но опять же — это не повод теперь принимать его за эталон.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[5]: А что если убрать new в C# ?
От: Teolog  
Дата: 31.08.23 08:24
Оценка:
R>Вот именно, извращение, ибо никто в здравом уме так не пишет как и не пишет var Network = Network. Переменные и аргументы метода должны начинаться со строчной буквы!
А публичные поля и пропертя — с большой. Вот и будет заботы чтобы ни в одном классе не завести поле с таким именем.
Re[6]: А что если убрать new в C# ?
От: rameel https://github.com/rsdn/CodeJam
Дата: 31.08.23 12:08
Оценка:
Здравствуйте, Teolog, Вы писали:

T>А публичные поля и пропертя — с большой. Вот и будет заботы чтобы ни в одном классе не завести поле с таким именем.


И?! Поля и свойства не могут пересекаться с названием класса, в котором они объявлены, о чем вообще речь? А если в других классах, то в чем собственно проблема?

Напомню с чего речь пошла

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


Если что, ничто не мешает и сейчас переменную так же как и аргументы с названием типа объявлять в одной области видимости, и наличие new или его отсутствие на это никак не влияет.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Отредактировано 31.08.2023 12:10 rameel . Предыдущая версия .
Re: А что если убрать new в C# ?
От: Baiker  
Дата: 12.09.23 16:15
Оценка: +1
Здравствуйте, Shmj, Вы писали:

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


Для наглядности. А вот чего в шарпе не нужно, так это дебильный break. Вот он вообще ниачом.
Ну и switch для паттерн матчинга я бы переименовал в match, чтобы не "перегружать смыслами" ключевые слова.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.