Сообщение 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 в кач-ве буфера, элементы которого надо как-то инициализировать не позже, а прям сразу. Вот тебе достойная задачка для пошевелить шестерёнками, размять мозжечок, такскаать. ))
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 в кач-ве буфера, элементы которого надо как-то инициализировать не позже, а прям сразу. Вот тебе достойная задачка для пошевелить шестерёнками, размять мозжечок, такскаать. ))
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 в кач-ве буфера, элементы которого надо как-то инициализировать не позже, а прям сразу. Вот тебе достойная задачка для пошевелить шестерёнками, размять мозжечок, такскаать. ))