Как известно, на коннекте был выпущен RC новой студии. По прежнему имеется абсолютно бесплатная Community Edition, под лицензию которой наш проект подходит на 100%.
Загрузка — https://www.visualstudio.com/downloads/#visual-studio-community-2017-rc
Вопрос: переходим ли мы на C# 7 прямо сейчас?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Вопрос: переходим ли мы на C# 7 прямо сейчас?
В виртуалке VS "15" крутится давно, вроде работает. Visual Studio 2017 RC has a go-live license, так что известных крупных проблем быть не должно. С решарпером — хз как, если завёлся — давайте.
AVK>Решарпер есть, но фичи C# 7 не поддерживает (или я не знаю где что надо включить).
Поправочка — поддерживаются, но не все. В частности:
1) out vars — в полном объеме (вайлдкарды не поддерживаются и компилятором)
2) ПМ. is expression — в полном объеме, type switch — ругается на отсутствие integral type в параметре оператора.
3) Туплы. Требует указания всех имен, хотя компилятор довольствуется любым количеством. Некорректно работает комплит при наличии имен. Деконструкция — само выражение нормально, а вот переменные оттуда в коде не видны. Вайлдкарды не поддержтиваются и компилятором.
4) Локальные функции — в полном объеме
5) Разделители литералов — в полном объеме
6) ref returns and locals — не поддерживаются
7) Generalized async return types пока не поддерживаются и компилятором
8) expression bodied ctors/dtors/prop accessors — не подерживаются
9) throw expression — не поддерживается.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>>Решарпер есть, но фичи C# 7 не поддерживает (или я не знаю где что надо включить).
А кстати, что нам из седьмого шарпа принципиально нужно?
* Тюплы в публичном API — я резко против. Это костыль на один релиз, до появления records в c#8.
В качестве временного решения лучше руками набросать, дел на одну минуту вместе с Deconctruct().
* out vars — по ним непрекращающаяся война идёт из-за слишком широкой области видимости. Народу не нравится
if (dict.TryGet(key, out var value))
{
...
}
// value accessible here.
Т.е. не факт, что текущее поведение сохранится.
* Локальные функции — ок, если следить за отсутствием замыканий. ref returns / locals в public API тож выставлять не стоит. ValueTasks не будут работать в младших студиях и тож не попадают в public API.
* throw expression — нафиг. Как и обсуждалось кучу лет назад, statement as expression неизбежно приводит к говнокоду в духе
var x = TryGetSomething()?.Value ?? throw new InvalidOperationException("...");
это из демки на Connect(), советует ли такое VS2017 RC — не проверял.
Здравствуйте, Sinix, Вы писали:
AVK>>>Решарпер есть, но фичи C# 7 не поддерживает (или я не знаю где что надо включить). S>А кстати, что нам из седьмого шарпа принципиально нужно?
Принципиально только одно — ПМ. Сейчас есть одно больное место для него — меппер.
Второе место — потенциально простенький генератор парсеров, но я уже не уверен что его нужно добавлять — народ пользуется Sprache, и вроде бы он вменяемого качества, так что смысла делать свой нет.
S>* Тюплы в публичном API — я резко против. Это костыль на один релиз, до появления records в c#8.
Спорно, у туплов свое применение, особенно с учетом того что можно указывать имена. Но да, рекорды в публичном АПИ предпочтительнее. С другой стороны, у туплов есть суперфича, о которой я давно мечтал — инлайн декларация типа в сигнатуре метода. В некоторых сценариях просто пипец неа сколько упрощает жизнь.
Опять же, остается внутреннее использование — у нас ValueTuple уже используется.
S>В качестве временного решения лучше руками набросать, дел на одну минуту вместе с Deconctruct().
Ну вот, deconstruct таки нужен
S>* out vars — по ним непрекращающаяся война идёт из-за слишком широкой области видимости.
С наличием у нас GetValueOrDefault для словарей оно уже не особо важно. Остается только ситуация с несколькими аут параметрами, но это суперредкость.
S> ref returns / locals в public API тож выставлять не стоит.
Это очень специфичная штука.
S> ValueTasks не будут работать в младших студиях и тож не попадают в public API.
Оно по факту сейчас и в старшей не работает, орет что Task<T> обязательно.
S>* throw expression — нафиг.
Это в основном для оператора match сделано, которого пока нет. А без оного практически бесполезно.
S>это из демки на Connect(), советует ли такое VS2017 RC — не проверял.
Советовать оно пока ничего не советует, но вполне работает.
S>Как-то так. Чего пропустил?
Разделители литералов, но это вообще баловство. Ну и самое главное — ПМ.
Здравствуйте, AndrewVK, Вы писали:
S>>* Тюплы в публичном API — я резко против. AVK>Спорно, у туплов свое применение, особенно с учетом того что можно указывать имена. Но да, рекорды в публичном АПИ предпочтительнее.
Ну да, я только про публичное API библиотеки. В кишках — почему нет?
Здравствуйте, IT, Вы писали:
AVK>>В нашем случае он и так уже грузится либо эмулируется.
IT>Это не есть гуд. Надо исключать этот компонент из библиотеки как можно быстрее.
Не нужно. Ждём решения вот этого вопроса и проблема с назойливыми зависимостями решится сама.