ref var в for
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.06.17 20:40
Оценка:
Почему не допускается объявления ссылочной переменной в инициализаторе цикла?

Как-то глупо получается.

Так можно:
ref var x = ref X;
for (; ; )
{
  x = 100;
}


А так — нет:
for (ref var x = ref X; ; )
{
  x = 100;
}
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: ref var в for
От: alexzzzz  
Дата: 17.06.17 18:18
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Почему не допускается объявления ссылочной переменной в инициализаторе цикла?


Вероятно, потому что

As I’m fond of pointing out, the answer to every question of the form “why doesn’t product X have feature Y?” is the same. It’s because in order for a product to have a feature, that feature must be:

  • thought of in the first place
  • desired
  • designed 
  • specified
  • implemented
  • tested
  • documented
  • shipped to customers
    You’ve got to hit every single one of those things, otherwise, no feature.

  • (с) Эрик Липперт
    Re: ref var в for
    От: Философ Ад http://vk.com/id10256428
    Дата: 18.06.17 02:38
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Так можно:

    VD>
    VD>ref var x = ref X;
    VD>


    Ух ты, а это в какой студии такое работает?
    Всё сказанное выше — личное мнение, если не указано обратное.
    Re[2]: ref var в for
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 18.06.17 05:44
    Оценка:
    Здравствуйте, alexzzzz, Вы писали:

    A>(с) Эрик Липперт


    Это набор отмазок. Фичей это назвать нельзя. Просто в грамматике C# есть 3 места где можно объявлять локальные переменные:
    1. Statment.
    2. using
    3. Инициализатор for.

    Если в случае 2 ref может вызвать проблемы, то 3 ничем не отличается от 1. Это просто объявление переменной в области видимости.

    Все что надо было сделать для ее поддержки — вызвать нужную функцию в нужном месте (добавить правило в грамматику).
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[2]: ref var в for
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 18.06.17 05:46
    Оценка:
    Здравствуйте, Философ, Вы писали:

    Ф>Ух ты, а это в какой студии такое работает?


    В 2017.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[2]: ref var в for
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 18.06.17 05:49
    Оценка:
    Здравствуйте, Философ, Вы писали:

    Ф>Ух ты, а это в какой студии такое работает?


    Если интересуют фичи 7-го Шарпа, вот.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[3]: ref var в for
    От: Философ Ад http://vk.com/id10256428
    Дата: 18.06.17 12:55
    Оценка: :)
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, Философ, Вы писали:


    Ф>>Ух ты, а это в какой студии такое работает?


    VD>Если интересуют фичи 7-го Шарпа, вот.


    Из всех фишечек которые я там увидел, это самая полезная.
    И полезно оно в основном для вот таких применений:
    private A[] m_arrayOfA;
    public ref A PropA0
    {
       get {return ref m_arrayOfA[0];}
    }


    PS: а вообще, это именно "фишечки"
    Всё сказанное выше — личное мнение, если не указано обратное.
    Re[4]: ref var в for
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 18.06.17 13:59
    Оценка:
    Здравствуйте, Философ, Вы писали:

    Ф>Из всех фишечек которые я там увидел, это самая полезная.


    Значит тебе еще есть куда расти в профессиональном плане.

    Возможно потом поймаешь, что там все фичи полезные. Я ими уже 10 лет пользуюсь (точнее их улучшенными версиями из Nemerle) и, на мой взгляд, без них язык был очень неудобен. Особенно без паттерн-матчинга и локальных функций. Жаль, что их довольно ограниченно реализовали.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re: ref var в for
    От: Sinix  
    Дата: 18.06.17 17:59
    Оценка: 52 (1)
    Здравствуйте, VladD2, Вы писали:

    VD>Почему не допускается объявления ссылочной переменной в инициализаторе цикла?


    Есть подозрение, что связано с правилами определения single assignment restriction, но точного объяснения у меня нет. Если действительно важно — лучше в issues Roslyn-а спросить.
    Re[2]: ref var в for
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 19.06.17 09:36
    Оценка:
    Здравствуйте, Sinix, Вы писали:

    S>Есть подозрение, что связано с правилами определения single assignment restriction, но точного объяснения у меня нет. Если действительно важно — лучше в issues Roslyn-а спросить.


    Мысль интересная. В принципе инициализатор цикла тоже один раз присваивается. Но может это для того, чтобы не вводить людей в заблуждение.
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.