[Ann] C# 7, свежие статьи
От: Sinix  
Дата: 26.10.16 09:11
Оценка: 7 (3) +2 :)
На этот раз никакого харкора, просто пара отличных статей:

Пост здорового человека Tuples with C# 7.0 от Christian Nagel
и
настоящий шедевр корпоративной журналистики: InfoQ eMag: A Preview of C# 7. Добавил в избранное, чтоб больше не отвечать на вопрос "почему энтерпрайз называют кговавым?" Не, вот как они это делают? 30 страниц абсолютно нечитабельного текста с кучей повторений, фактических ошибок и вредных советов — это ж специально стараться надо, документацию не проще прочитать было
Отредактировано 26.10.2016 9:11 Sinix . Предыдущая версия .
Re: [Ann] C# 7, свежие статьи
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 26.10.16 11:27
Оценка:
Здравствуйте, Sinix, Вы писали:

S>На этот раз никакого харкора, просто пара отличных статей:


S>Пост здорового человека Tuples with C# 7.0 от Christian Nagel

S>и
S>настоящий шедевр корпоративной журналистики: InfoQ eMag: A Preview of C# 7. Добавил в избранное, чтоб больше не отвечать на вопрос "почему энтерпрайз называют кговавым?" Не, вот как они это делают? 30 страниц абсолютно нечитабельного текста с кучей повторений, фактических ошибок и вредных советов — это ж специально стараться надо, документацию не проще прочитать было

Спасибо интересно!
А можно, получить только часть данных
var r1 = new Rectangle(100, 200);
(int height, int width) = r1;


(int width) = r1;
и солнце б утром не вставало, когда бы не было меня
Re[2]: [Ann] C# 7, свежие статьи
От: Sinix  
Дата: 26.10.16 11:53
Оценка: 2 (1)
Здравствуйте, Serginio1, Вы писали:

S> Спасибо интересно!

S> А можно, получить только часть данных
Нет, только лишние переменные объявлять.

Следствие вот этого (valid c#7):
var a = (start:1, end:2);
(var x, var y) = a;

раз имена могут быть произвольными (важен только порядок), то простого способа вытащить, скажем, только вторую переменную нет.

В планах есть placeholder arg (var * или default) для паттерн-матчинга, но всё застряло на "подобрать хороший синтаксис и не заблокировать им более полезные фичи". По факту отложено до стадии "мы сумели подружить вместе тюплы, records и PM".
А то получится, как с out var — сначала рубанули шашкой — дескать, можно писать
if(dict.TryGetValue(x, out var y) == false) return;

// y is assigned and available
Console.WriteLine(y);


а теперь четвёртый месяц пытаются кучу противоречий разрулить, что не так уж и просто, поскольку проверка на доступность переменной откровенно хромает из-за local functions...

Как правильно подметил ув. Пельмешко: When developers look at C# 7.0 they see "features". I see "job security"
Re: [Ann] C# 7, свежие статьи
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 27.10.16 08:49
Оценка:
Здравствуйте, Sinix, Вы писали:

Кстати вышла превью 1.1 https://blogs.msdn.microsoft.com/dotnet/2016/10/25/announcing-net-core-1-1-preview-1/

Интересно, что пявилис в
https://github.com/dotnet/core/blob/master/release-notes/1.1/1.0-1.1-api-diff/1.0-1.1-api-diff_System.md

public static class TupleExtensions {
+        public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>(this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17, T18, T19, T20, T21>>> value, out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7, out T8 item8, out T9 item9, out T10 item10, out T11 item11, out T12 item12, out T13 item13, out T14 item14, out T15 item15, out T16 item16, out T17 item17, out T18 item18, out T19 item19, out T20 item20, out T21 item21);
+        public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17, T18, T19, T20>>> value, out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7, out T8 item8, out T9 item9, out T10 item10, out T11 item11, out T12 item12, out T13 item13, out T14 item14, out T15 item15, out T16 item16, out T17 item17, out T18 item18, out T19 item19, out T20 item20);
+        public static void Deconstruct<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(this Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8, T9, T10, T11, T12, T13, T14, Tuple<T15, T16, T17, T18, T19>>> value, out T1 item1, out T2 item2, out T3 item3, out T4 item4, out T5 item5, out T6 item6, out T7 item7, out T8 item8, out T9 item9, out T10 item10, out T11 item11, out T12 item12, out T13 item13, out T14 item14, out T15 item15, out T16 item16, out T17 item17, out T18 item18, out T19 item19);
+
и солнце б утром не вставало, когда бы не было меня
Re[2]: [Ann] C# 7, свежие статьи
От: Sinix  
Дата: 27.10.16 09:40
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>https://github.com/dotnet/core/blob/master/release-notes/1.1/1.0-1.1-api-diff/1.0-1.1-api-diff_System.md


Я знаю, у кого они это дело подсмотрели

Гораздо интересней правки в Unsafe, интероп с utf-8, await в valuetask, pipes, MEF и полноценный парсер IL/PE(мне уже влом копировать ссылки).
Re[3]: [Ann] C# 7, свежие статьи
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 27.10.16 10:02
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:


S>>https://github.com/dotnet/core/blob/master/release-notes/1.1/1.0-1.1-api-diff/1.0-1.1-api-diff_System.md


S>Я знаю, у кого они это дело подсмотрели


S>Гораздо интересней правки в Unsafe, интероп с utf-8, await в valuetask, pipes, MEF и полноценный парсер IL/PE(мне уже влом копировать ссылки).


Да я видел. Но если
public static string PtrToStringUTF8(IntPtr ptr);


То с остальным пока для меня темный лес.

Можно поподробнее про valuetask. Я так понимаю, это аналог Task только структура?
и солнце б утром не вставало, когда бы не было меня
Re[4]: [Ann] C# 7, свежие статьи
От: Sinix  
Дата: 27.10.16 10:14
Оценка: 16 (3)
Здравствуйте, Serginio1, Вы писали:


S> Можно поподробнее про valuetask. Я так понимаю, это аналог Task только структура?

http://blog.i3arnon.com/2015/11/30/valuetask/
https://github.com/dotnet/corefx/issues/4708

+ теория от Joe Duffy.

The first key optimization, therefore, is that an async method that doesn’t await shouldn’t allocate anything.

We were able to share this experience with .NET in time for C#’s await to ship. Sadly, by then, .NET’s Task had already been made a class. Since .NET requires async method return types to be Tasks, they cannot be zero-allocation unless you go out of your way to use clumsy patterns like caching singleton Task objects.

Re[5]: [Ann] C# 7, свежие статьи
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 27.10.16 11:23
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:



S>> Можно поподробнее про valuetask. Я так понимаю, это аналог Task только структура?

S>http://blog.i3arnon.com/2015/11/30/valuetask/
S>https://github.com/dotnet/corefx/issues/4708

S>+ теория от Joe Duffy.

S>

S>The first key optimization, therefore, is that an async method that doesn’t await shouldn’t allocate anything.

S>We were able to share this experience with .NET in time for C#’s await to ship. Sadly, by then, .NET’s Task had already been made a class. Since .NET requires async method return types to be Tasks, they cannot be zero-allocation unless you go out of your way to use clumsy patterns like caching singleton Task objects.


Спасибо! Понял. Кстати плохо знаю английский поэтому использую Гугл переводчик

This provider interface can be implemented synchronously (for in-memory hamsters) by performing a lookup in a Dictionary and returning the Hamster instance (which is implicitly converted into a ValueTask<Hamster> without any additional allocations):


Перевод несколько смутил

Этот интерфейс провайдера может быть реализован синхронно (для хомяков в памяти), выполняя поиск в Dictionary и возвращение Hamster экземпляр (который неявно преобразуется в ValueTask<Hamster> без каких — либо дополнительных ассигнований):

и солнце б утром не вставало, когда бы не было меня
Re[6]: [Ann] C# 7, свежие статьи
От: Sinix  
Дата: 27.10.16 11:36
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Спасибо! Понял. Кстати плохо знаю английский поэтому использую Гугл переводчик

S> Перевод несколько смутил

Смысл в том, что если для valueTask уже есть значение, то код может просто его вернуть, значение сконвертится в ValueTask<T> без дополнительных приседаний и аллокаций, см вот этот кусок:
    public ValueTask<Hamster> GetHamsterAsync(string name)
    {
        if (_dictionary.TryGetValue(name, out hamster))
        {
            return hamster;
        }
        ...
    }
Re: [Ann] C# 7, свежие статьи
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 27.10.16 11:44
Оценка:
Здравствуйте, Sinix, Вы писали:
Кстати из новостей https://blogs.msdn.microsoft.com/dotnet/2016/10/25/announcing-entity-framework-core-1-1-preview-1/

Обнаружил Таблицы, оптимизированные для памяти
https://msdn.microsoft.com/library/dn133165.aspx

Кстати по Компиляция хранимых процедур в собственном коде

https://msdn.microsoft.com/ru-ru/library/dn249342.aspx
Когда же они перенесут Linq to EF на сервер
и солнце б утром не вставало, когда бы не было меня
Отредактировано 27.10.2016 11:58 Serginio1 . Предыдущая версия .
Re[7]: [Ann] C# 7, свежие статьи
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 27.10.16 11:56
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:


S>> Спасибо! Понял. Кстати плохо знаю английский поэтому использую Гугл переводчик

S>> Перевод несколько смутил

S>Смысл в том, что если для valueTask уже есть значение, то код может просто его вернуть, значение сконвертится в ValueTask<T> без дополнительных приседаний и аллокаций, см вот этот кусок:

S>
S>    public ValueTask<Hamster> GetHamsterAsync(string name)
S>    {
S>        if (_dictionary.TryGetValue(name, out hamster))
S>        {
S>            return hamster;
S>        }
S>        ...
S>    }
S>


Это я понял! Я про хомяков. А идея ValueTask классная. Я сам смотря на Task.FromResult<T>
думал, что здесь нужна синхронная операция.
и солнце б утром не вставало, когда бы не было меня
Re: [Ann] C# 7, свежие статьи
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.10.16 10:22
Оценка:
Здравствуйте, Sinix, Вы писали:

S>настоящий шедевр корпоративной журналистики: InfoQ eMag: A Preview of C# 7. Добавил в избранное, чтоб больше не отвечать на вопрос "почему энтерпрайз называют кговавым?" Не, вот как они это делают? 30 страниц абсолютно нечитабельного текста с кучей повторений, фактических ошибок и вредных советов — это ж специально стараться надо, документацию не проще прочитать было


Зато какая защита от возможности прочесть? На залогиниться через гулгль+ меня еще хватило, но заполнять поля с компанией и прочей фигней я уже не стал. Так что не увижу я этого шедёвра.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: [Ann] C# 7, свежие статьи
От: Sinix  
Дата: 30.10.16 16:34
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Зато какая защита от возможности прочесть?

Ну я ж не зря намекал про кговавый энтерпрайз ; )
Квест на самом деле простой, да и nda не просят. Вот pdf-ник, если что.
Re: InfoQ
От: Qbit86 Кипр
Дата: 30.10.16 18:35
Оценка: +1 :))
Здравствуйте, Sinix, Вы писали:

S>Не, вот как они это делают? 30 страниц абсолютно нечитабельного текста с кучей повторений, фактических ошибок и вредных советов — это ж специально стараться надо, документацию не проще прочитать было:???:


Ты к ним не справедлив. Они, очевидно, помогают социально адаптироваться умственно отсталым людям, трудоустраивая их в качестве верстальщиков. Многие ли компании проявляют подобную социальную ответственность?
Глаза у меня добрые, но рубашка — смирительная!
Re[2]: [Ann] C# 7, свежие статьи
От: Sinix  
Дата: 31.10.16 08:12
Оценка: 3 (1)
Здравствуйте, Serginio1, Вы писали:

S> А можно, получить только часть данных

var r1 = new Rectangle(100, 200);
(int width) = r1;


Получите, распишитесь:

var (x, _) = e;
(int x, int _) = e;
M(out int _);


Since _ is already an identifier, no syntax model change is required. However, semantically we want this to create an anonymous variable, and shadow any true variable (e.g. parameter or field) from an enclosing scope named _. There is no name conflict error if wildcards are declared this way more than once in a scope.
...
Finally, it can be used where a parameter can be declared today. However, we relax the single-definition rule to allow multiple conflicting declarations (same scope or nested scopes), in which case the identifier _ binds as a wildcard.

Func<int, int, int> f = (_,_) => 3;

...
We have to be careful with these changes so that any program that uses _ as an identifier and is legal today continues to compile with the same meaning under these revised rules.


Скорее всего в c#8.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.