Информация об изменениях

Сообщение Re[5]: Дефолтная инициализация структур от 19.03.2017 13:56

Изменено 19.03.2017 13:57 vdimas

Re[5]: Дефолтная инициализация структур
Здравствуйте, Qbit86, Вы писали:

V>>Дефолтная инициализация структур — это дыра в системе типов.

Q>Обсуждаемые безаргументные конструкторы — это не про дефолтную инициализацию структур.

Не надо меня поправлять, я выразился ровно так, как и собирался.


Q>Семантика `default(S)` не поменяется — это зануление. Речь про `new S()`.


Это и есть дыра. Потому что var s = default(S); или return default(S);
Дырой я называю такую ситуацию, когда обнулённое значение структуры невалидно.

Но желательно иметь такую систему типов, которая позволит конструировать объекты лишь в валидном состоянии, верно?


Q>Безаргументные конструкторы изначально были в CLI. И даже в превью C# побывали в течение небольшого времени в 2015 году, насколько я помню. Но в релизе C# 6.0 их выпилили из-за нюансов совместимости.


Из-за того, что уже 2015-й год не 2005-й.
Надо было раньше...
Но они к этому всё-равно придут.
Просто релиз поджимал, некоторые фичи к релизу не успевали.
Не успели к этому, сделают к одному из последующих.

Я пока вообще не уверен, что они правильно поняли проблему-то.
Давайте будем честными — дотнет изобилует детскими инженерными ошибками.
Т.е. там ой не боги горшки обжигают, а местами ровно наоборот.
Т.е., им еще потребуется некоторое время на осмысление ситуации и на нахождение такого решения, чтобы победить проблему целиком за один раз.

Там ведь слишком много зависимых моментов тянутся влед за всеми этими вещами.
Например, в С++ std::vector<T> может предвыделить память, а инициализировать значениями позже.
Аналогичный List<T> в дотнете под собой имеет вполне типизированный array в кач-ве буфера, элементы которого надо как-то инициализировать не позже, а прям сразу. Вот тебе достойная задачка для пошевелить шестерёнками, размять мозжечок, такскаать. ))
Re[5]: Дефолтная инициализация структур
Здравствуйте, Qbit86, Вы писали:

V>>Дефолтная инициализация структур — это дыра в системе типов.

Q>Обсуждаемые безаргументные конструкторы — это не про дефолтную инициализацию структур.

Не надо меня поправлять, я выразился ровно так, как и собирался.


Q>Семантика `default(S)` не поменяется — это зануление. Речь про `new S()`.


Это и есть дыра. Потому что var s = default(S); или return default(S);
Дырой я называю такую ситуацию, когда обнулённое значение структуры невалидно.

Но желательно иметь такую систему типов, которая позволит конструировать объекты лишь в валидном состоянии, верно?


Q>Безаргументные конструкторы изначально были в CLI. И даже в превью C# побывали в течение небольшого времени в 2015 году, насколько я помню. Но в релизе C# 6.0 их выпилили из-за нюансов совместимости.


Из-за того, что уже 2015-й год, а не 2005-й.
Надо было раньше...
Но они к этому всё-равно придут.
Просто релиз поджимал, некоторые фичи к релизу не успевали.
Не успели к этому, сделают к одному из последующих.

Я пока вообще не уверен, что они правильно поняли проблему-то.
Давайте будем честными — дотнет изобилует детскими инженерными ошибками.
Т.е. там ой не боги горшки обжигают, а местами ровно наоборот.
Т.е., им еще потребуется некоторое время на осмысление ситуации и на нахождение такого решения, чтобы победить проблему целиком за один раз.

Там ведь слишком много зависимых моментов тянутся влед за всеми этими вещами.
Например, в С++ std::vector<T> может предвыделить память, а инициализировать значениями позже.
Аналогичный List<T> в дотнете под собой имеет вполне типизированный array в кач-ве буфера, элементы которого надо как-то инициализировать не позже, а прям сразу. Вот тебе достойная задачка для пошевелить шестерёнками, размять мозжечок, такскаать. ))