Что-то я не понимаю. C# 7 доступен в VS 2015?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.03.17 22:29
Оценка:
Что-то у меня пашет фичи из C# 7 в 2015-й студии. При этом я вроде ничего не ставил. Например, вот сейчас скомпилилось вот такое:
    static void XmlToString(StringBuilder builder, XContainer container)
    {
      foreach (var n in container.Nodes())
      {
        switch (n)
        {
          case XElement   e when e.Name == "br" || e.Name == "bl": builder.AppendLine(); break;
          case XContainer c: XmlToString(builder, c); break;
          case XText      t: builder.Append(t.Value); break;
        }
      }
    }

Ну, и там вот такое тоже:
if (_wpfTextView.Properties.TryGetProperty<TextViewModel>(Constants.TextViewModelKey, out var textViewModel))
  ...


Разве это не фичи 7-го Шарпа?

Почему они доступны в 2015-й студии?

Вот гифка показывающая проходящее:
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 08.03.2017 13:36 VladD2 . Предыдущая версия .
Re: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: _NN_ www.nemerleweb.com
Дата: 08.03.17 08:13
Оценка:
Здравствуйте, VladD2, Вы писали:

Студия 2017 установлена ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: fddima  
Дата: 08.03.17 09:06
Оценка:
Здравствуйте, VladD2, Вы писали:

У меня — не пашет. Создал проект в 2017, и 2015-ая отвергает ПМ. Компилирование приводит к ошибкам. Попытка вручную установить LangVersion в проекте — сообщает invalid option '7' for /langversion.

Впрочем, сегодня с утра создал пустой ConsoleApp в 2017. Попытался его открыть в 2015 и получил серию крешей раза три. Пошаманил с файлами проектов. Вроде начало открываться. Но теперь нет крешей если повторить процедуру с самого начала и без шаманств... Жесть какая-то.
Re[2]: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.03.17 13:03
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Студия 2017 установлена ?


Я же сказал — нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.03.17 13:10
Оценка:
Здравствуйте, fddima, Вы писали:

F>У меня — не пашет. Создал проект в 2017, и


У меня 2017–й не стоит.

F>Но теперь нет крешей если повторить процедуру с самого начала и без шаманств... Жесть какая-то.


У меня не падает. Вот эдит энд континю на новых конструкциях не пашут.

А апдэйты на 2015–й Студии стоят?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.03.17 13:14
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Студия 2017 установлена ?


Я как–то ради эксперемента ставил что–то вроди Розлин СДК, но потом еготгрохнул.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.03.17 13:36
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Студия 2017 установлена ?


Добавил в тематическое сообщение гифку демонстрирующую проходящее.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: fddima  
Дата: 08.03.17 16:15
Оценка:
Здравствуйте, VladD2, Вы писали:

F>>У меня — не пашет. Создал проект в 2017, и

VD>У меня 2017–й не стоит.
Хочу как у тебя.

VD>А апдэйты на 2015–й Студии стоят?

2015u3. Проблем до установки 2017 не было ни разу. Ну отваливающийся дебаггер (креш) при отладке хрома — это норма и ре считается.
Re[4]: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.03.17 16:34
Оценка:
Здравствуйте, fddima, Вы писали:

VD>>У меня 2017–й не стоит.

F> Хочу как у тебя.

Собственно, если кто не верит, вот список установленного отфильтрованный по "Vis":


F> 2015u3. Проблем до установки 2017 не было ни разу. Ну отваливающийся дебаггер (креш) при отладке хрома — это норма и ре считается.


у меня все как часы работает. Просто я с дуру начал юзать 7-й шарп, и только потом понял, что это аномалия. А вообще я не понимаю как люди без ПМ мучались все это время. Даже включенный огрызок сильно упрощает жизнь. Хотя конечно, полноценный МП куда приятнее.

Вот думаю, может перейти на 2017-ю студи, благо ее вчера зарелизили вроде? А то у меня один проект на шарпе и я в нем уже заиспользовал фич C# 7.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.03.17 17:56
Оценка:
Здравствуйте, fddima, Вы писали:

F> 2015u3. Проблем до установки 2017 не было ни разу. Ну отваливающийся дебаггер (креш) при отладке хрома — это норма и ре считается.


Наверное дело в том что я не ставил 2017–ю. Еще бы понять откуда поддержка C# 7 взялась?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: fddima  
Дата: 08.03.17 18:40
Оценка:
Здравствуйте, VladD2, Вы писали:

F>> 2015u3. Проблем до установки 2017 не было ни разу. Ну отваливающийся дебаггер (креш) при отладке хрома — это норма и ре считается.


VD>у меня все как часы работает.

У меня тоже. Отладка хрома отваливается только потосу что не пережевывает объем отладочной информации. Хотя скорее всего инспектор пару раз отваливается за собой и валит студию. Символ-сервер то в 15-й отлельный и он справляется хоть и медленно (натурально с fastlink он может отладочную инфу грузить минут 5-15 в зависимости от IO). Даж юзеры на SSD предпочитают выждать. Всё остальное по части шарпа — даже с набором некотопых плагинов — проблем не было. С установкой 17-й пояаились рандомные крэши обоих студий. Мне кажется преимущественно до той стадии когда всё хорошенько прогрузится. Но казалось бы — как 15-ю зацепили? В общем не знаю. Я перегружаю хост раз в неделю или две, так что побоку.


VD>Даже включенный огрызок сильно упрощает жизнь. Хотя конечно, полноценный МП куда приятнее.

if-else писать никто не запрещает, а типичный прикладной код — линейка о перекладывании данных. Ты же на это смотришь совершенно под иным углом. В мои последние 100К шарпового кода — есть ровно два места куда вставлю новый шарповый ПМ. Поэтому — да, полноценный — куда приятнее. Хорошо, что сделали хоть какой-то. Плохо, что засорили switch. Имхо match — это то что нужно. Пофигу, но как-то традиционней и понятнее.

Ты мне вот что скажи лучше — есть ли такой язык где бы возвращаемый параметр мог быть именован? Ну т.е. HashSet.Add returns bool added или success, а не безликий bool?
И можно ли считать тупл с одним элементом — так, как буд-то его вовсе нет? Чисто теоретически.

VD>Вот думаю, может перейти на 2017-ю студи, благо ее вчера зарелизили вроде? А то у меня один проект на шарпе и я в нем уже заиспользовал фич C# 7.

Я поставил, но не спешу переходить. Если можешь потерпеть — потерпи неделю-две до первых фиксов. Я сейчас вообще в ксамарин студии колбашусь — и плююсь в основном.
В целом — переходить однозначно нужно.
Re[5]: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: fddima  
Дата: 08.03.17 18:42
Оценка:
Здравствуйте, VladD2, Вы писали:

F>> 2015u3. Проблем до установки 2017 не было ни разу. Ну отваливающийся дебаггер (креш) при отладке хрома — это норма и ре считается.

VD>Наверное дело в том что я не ставил 2017–ю. Еще бы понять откуда поддержка C# 7 взялась?
Я не ставил RC или каких либо SDK из "новой" эры. Очевидно, что что-то не так. Согласись — новый компилятор откуда-то должен был появиться. Может я проморгал обновление если оно было. Не знаю. Сегодня уже лень проверить.
Re[5]: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: TK Лес кывт.рф
Дата: 08.03.17 19:25
Оценка: :)))
Здравствуйте, VladD2, Вы писали:

F>> 2015u3. Проблем до установки 2017 не было ни разу. Ну отваливающийся дебаггер (креш) при отладке хрома — это норма и ре считается.

VD>Наверное дело в том что я не ставил 2017–ю. Еще бы понять откуда поддержка C# 7 взялась?

Попробуй макрос сделать. Может это просто мутация какая
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[3]: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: _NN_ www.nemerleweb.com
Дата: 08.03.17 19:35
Оценка:
Здравствуйте, VladD2, Вы писали:

Поищи все csc.exe на компе.
Или открой 'Developer command prompt' и проверь (where csc).
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[6]: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.03.17 22:36
Оценка: :)
Здравствуйте, TK, Вы писали:

TK>Попробуй макрос сделать. Может это просто мутация какая


Ну, это лет через 15.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.03.17 22:41
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Поищи все csc.exe на компе.

_NN>Или открой 'Developer command prompt' и проверь (where csc).

Есть путь проще. Поднял уровень диагностики в студии до уровня Normal. Пишет:
CoreCompile:

C:\Users\vc_000\AppData\Local\Microsoft\VisualStudio\14.0\Extensions\q3vtunre.o2z\csc.exe /noconfig /nowarn:1701,1702,2008 /nostdlib+ /errorreport:prompt /warn:4 /define:DEBUG;TRACE /errorendlocation /preferreduilang:en-US /highentropyva+ /reference:"C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\PublicAssemblies\EnvDTE.dll" /reference:"C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\PublicAssemblies\EnvDTE100.dll" /reference:"C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\PublicAssemblies\EnvDTE80.dll" /reference:"C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\PublicAssemblies\EnvDTE90.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Microsoft.Build.Framework.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Microsoft.CSharp.dll" /reference:"C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\PublicAssemblies\Microsoft.VisualStudio.CommandBars.dll" /reference:"C:\!\Nitra\packages\Microsoft.VisualStudio.CoreUtility.14.3.25407\lib\net45\Microsoft.VisualStudio.CoreUtility.dll"
...


Т.е. это вот это доброе расширение https://oz-code.com/ отладчика мне C# 7 поставило.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.03.17 22:53
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Т.е. это вот это доброе расширение https://oz-code.com/ отладчика мне C# 7 поставило.


А может и не оно.

Список файлов следующий:

_rels\
package\
CertificateInformation.dat
csc.exe
csc.rsp
csc.exe.config
extension.packcomponent
extension.vsixmanifest
Microsoft.Build.Tasks.CodeAnalysis.dll
Microsoft.CodeAnalysis.dll
Microsoft.CodeAnalysis.CSharp.dll
Microsoft.CodeAnalysis.VisualBasic.dll
Microsoft.CSharp.Core.targets
Microsoft.DiaSymReader.Native.amd64.dll
Microsoft.DiaSymReader.Native.arm.dll
Microsoft.DiaSymReader.Native.x86.dll
Microsoft.VisualBasic.Core.targets
Microsoft.Win32.Primitives.dll
Roslyn.Compilers.Extension.dll
Roslyn.Compilers.Extension.pdb
Roslyn.Compilers.Extension.pkgdef
System.AppContext.dll
System.Collections.Immutable.dll
System.Console.dll
System.Diagnostics.FileVersionInfo.dll
System.Diagnostics.Process.dll
System.IO.Compression.dll
System.IO.FileSystem.dll
System.IO.FileSystem.DriveInfo.dll
System.IO.FileSystem.Primitives.dll
System.IO.Pipes.dll
System.Reflection.Metadata.dll
System.Runtime.InteropServices.RuntimeInformation.dll
System.Security.AccessControl.dll
System.Security.Cryptography.Algorithms.dll
System.Security.Cryptography.Encoding.dll
System.Security.Cryptography.Primitives.dll
System.Security.Cryptography.X509Certificates.dll
System.Security.Principal.Windows.dll
System.Text.Encoding.CodePages.dll
System.Threading.Thread.dll
System.Xml.XmlDocument.dll
System.Xml.XPath.XDocument.dll
vbc.exe
vbc.rsp
vbc.exe.config
VBCSCompiler.exe
VBCSCompiler.exe.config


Все же это похоже шаповский экстеншон.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.03.17 23:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Разве это не фичи 7-го Шарпа?


Проверил работу локальных функций:
    static string ToText(string text)
    {
      if (!text.StartsWith("<hint>", StringComparison.InvariantCultureIgnoreCase))
        return text;

      void XmlToString(StringBuilder builder, XContainer container)
      {
        foreach (var n in container.Nodes())
        {
          switch (n)
          {
            case XElement e when e.Name == "br" || e.Name == "bl": builder.AppendLine(); break;
            case XContainer c: XmlToString(builder, c); break;
            case XText t: builder.Append(t.Value); break;
          }
        }
      }

      var sb = new StringBuilder();
      XmlToString(sb, XElement.Parse(text));
      return sb.ToString();
    }

Работают. Но вывода типов для них нет, по сему типы параметров надо указывать всегда. Лажает Майкрософт. До Немерла 2006-го не дотягивают.

А с кортежами проблема:
      (int x, string y) foo()
      {
        return (42, "yaho!");
      }


Пишет:

C:\!\Nitra\Ide\NitraCommonVSIX\Models\FileModel.cs(209,16,209,29): error CS8179: Predefined type 'System.ValueTuple`2' is not defined or imported
C:\!\Nitra\Ide\NitraCommonVSIX\Models\FileModel.cs(207,7,207,24): error CS8137: Cannot define a class or member that utilizes tuples because the compiler required type 'System.Runtime.CompilerServices.TupleElementNamesAttribute' cannot be found. Are you missing a reference?
C:\!\Nitra\Ide\NitraCommonVSIX\Models\FileModel.cs(207,7,207,24): error CS8179: Predefined type 'System.ValueTuple`2' is not defined or imported


то есть нужна какая-то дополнительная либа...

Ага. С этим тоже разобрался. Надо было поставить NuGet-пакет System.ValueTuple.

return ref тоже пашет:
      ref int foo(int[] ary)
      {
        return ref ary[2];
      }

      var ary2 = new[] { 2, 4, 6, 8 };
      foo(ary2) = 42;


Бинарные константы работают (хотя и не особо нужны):
      const int X = 0b010_1010;


Рекорды не пашут. Но вроде их не осилили.

В общем, осталось понять как C# 7 попал на мою машину.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 08.03.2017 23:23 VladD2 . Предыдущая версия .
Re[2]: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: hardcase Пират http://nemerle.org
Дата: 09.03.17 08:25
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В общем, осталось понять как C# 7 попал на мою машину.


Вирус
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Что-то я не понимаю. C# 7 доступен в VS 2015?
От: KRT Украина  
Дата: 09.03.17 09:58
Оценка: 8 (1) +2
Здравствуйте, VladD2, Вы писали:

VD>В общем, осталось понять как C# 7 попал на мою машину.


Этот пакет не устанавливался? https://www.nuget.org/packages/Microsoft.Net.Compilers/
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.