Больно у них применение другое было. Проблема то не в том что есть они или нет. Проблема в том что не было у них такого использования, семантический смысл другой был. Новые разработчики видят неконсистентный синтаксис. Когда в языке for используется и для цикла и для расширения. Но для расширения не всегда, а только если не наследование и не реализация. Это очень сильно усложняет язык, не делая его понятными и простым для изучения.
Про extension types: - Я думаю, все уже знают, но implicit и explicit есть в языке - Согласен что : вместо for лучше и слово extension должно помочь парсеру однозначно распознать конструкцию... Мне кажется, они просто на коленке до билда эту фичу подлатали. Много вопросов, потому что ее имплементация годами лежала в форках, и была не одна (еще были concepts and roles). - Жду расширения UnsafeAccessAttribute для работы поверх экстеншена, чтобы доступаться к non public типам.
В обсуждении пропозала на GH очень подробно расписано про то, почему ввели for. Если вкратце, то ради избежания неоднозначности: после расширяемого типа могут указываться реализуемые данным экстеншеном интерфейсы.
Да, есть implicit и explicit, но они настолько редко используют обычными людьми, что этим можно пренебречь. Давайте переформулируем так: в большинстве проектов их нет, большенство разработчиков их никогда в жизни не использовало и вряд ли будет. Тоже самое, что и unsafe, fixed, extern, они конечно есть, но в повседневной жизни вы их не встретите.
@@zachemny Да, был такой разговор. Но, опять же, для однозначности достаточно было бы выдумать какой-то один признак, допустим ключевое слово `extension`. Его наличие - достаточный признак для компилятора, чтобы устранить все последующие неоднозначности. Зачем было так сильно извращаться и закапываться, не ясно. Зачем так много признаков, костылей и избыточностей. for прекрасно эмулируется двоеточием. Расширение наследования, через множественное наследование от интерфейсов (оно уже есть в языке). implicit и explicit эмулируются синтаксисом явных и неявных реализаций интерфейса (он уже есть в языке). Устранить все эти неоднозначности (в самом ленивом случае) можно добавив едино единственное новые слово extension. Сравните с LINQ. Авторы встроили отдельный язык в C#, со своим синтаксисом, ключевыми словами, операторами и не было никакой неоднозначности. Была сложная и продуманная работа над реализацией. А так получается, что сново, проблемы в Roslyn Team спихнули на разработчиков. Вместо того чтобы сделать хорошо (пусть и сложно) в компиляторе, родили уродливый, избыточный, неконсистентный синтаксис с которым теперь придётся жить всем вечно.
@@tt0nix На все эти сомнения в пропозале отвечено. Если вкратце: extension A: B, C, D. Что такое B, C, D - не ясно. Если при обычном наследовании порядок членов не важен, то здесь получается, что B - это всегда должен быть расширяемый тип, а C и D - реализуемые интерфейсы. То есть порядок следования теперь уже важен, что является нарушением логики языка.
к вопросу о for вместо : вроде в c# после 13 реализация интерфейсов через экстеншены (может завезут в c# 13, но маловероятно) поэтому : заменили на for
Только на это и надежда. Но почему тогда нельзя было воспользоваться существующим синтаксисом двоеточия, который позволяет после "базового" класса указать (через запятую) все интерфейсы которые мы хотим реализовать (расширить)?
За ссылки на обсуждаемый контент и тайм-коды в описание - моё уважение и поклон.
implicit/explicit - эти ключевые слова уже есть. for - тоже. Итого только 1 новое ключевое слово
Больно у них применение другое было. Проблема то не в том что есть они или нет. Проблема в том что не было у них такого использования, семантический смысл другой был.
Новые разработчики видят неконсистентный синтаксис. Когда в языке for используется и для цикла и для расширения. Но для расширения не всегда, а только если не наследование и не реализация. Это очень сильно усложняет язык, не делая его понятными и простым для изучения.
Про extension types:
- Я думаю, все уже знают, но implicit и explicit есть в языке
- Согласен что : вместо for лучше и слово extension должно помочь парсеру однозначно распознать конструкцию... Мне кажется, они просто на коленке до билда эту фичу подлатали. Много вопросов, потому что ее имплементация годами лежала в форках, и была не одна (еще были concepts and roles).
- Жду расширения UnsafeAccessAttribute для работы поверх экстеншена, чтобы доступаться к non public типам.
В обсуждении пропозала на GH очень подробно расписано про то, почему ввели for. Если вкратце, то ради избежания неоднозначности: после расширяемого типа могут указываться реализуемые данным экстеншеном интерфейсы.
@@zachemny Ок, тогда нет вопросов.
Да, есть implicit и explicit, но они настолько редко используют обычными людьми, что этим можно пренебречь. Давайте переформулируем так: в большинстве проектов их нет, большенство разработчиков их никогда в жизни не использовало и вряд ли будет. Тоже самое, что и unsafe, fixed, extern, они конечно есть, но в повседневной жизни вы их не встретите.
@@zachemny Да, был такой разговор. Но, опять же, для однозначности достаточно было бы выдумать какой-то один признак, допустим ключевое слово `extension`. Его наличие - достаточный признак для компилятора, чтобы устранить все последующие неоднозначности. Зачем было так сильно извращаться и закапываться, не ясно. Зачем так много признаков, костылей и избыточностей.
for прекрасно эмулируется двоеточием. Расширение наследования, через множественное наследование от интерфейсов (оно уже есть в языке). implicit и explicit эмулируются синтаксисом явных и неявных реализаций интерфейса (он уже есть в языке). Устранить все эти неоднозначности (в самом ленивом случае) можно добавив едино единственное новые слово extension.
Сравните с LINQ. Авторы встроили отдельный язык в C#, со своим синтаксисом, ключевыми словами, операторами и не было никакой неоднозначности. Была сложная и продуманная работа над реализацией. А так получается, что сново, проблемы в Roslyn Team спихнули на разработчиков. Вместо того чтобы сделать хорошо (пусть и сложно) в компиляторе, родили уродливый, избыточный, неконсистентный синтаксис с которым теперь придётся жить всем вечно.
@@tt0nix На все эти сомнения в пропозале отвечено. Если вкратце: extension A: B, C, D. Что такое B, C, D - не ясно. Если при обычном наследовании порядок членов не важен, то здесь получается, что B - это всегда должен быть расширяемый тип, а C и D - реализуемые интерфейсы. То есть порядок следования теперь уже важен, что является нарушением логики языка.
Спасибо за обзор !
к вопросу о for вместо :
вроде в c# после 13 реализация интерфейсов через экстеншены (может завезут в c# 13, но маловероятно)
поэтому : заменили на for
Только на это и надежда. Но почему тогда нельзя было воспользоваться существующим синтаксисом двоеточия, который позволяет после "базового" класса указать (через запятую) все интерфейсы которые мы хотим реализовать (расширить)?
Да, мы любим короткие выпуски
А короткие, это сколько по времени?