Re: [Ann, C#6] Состояние для VS2015 preview
От: btn1  
Дата: 22.11.14 11:22
Оценка: -3 :)
Здравствуйте, Sinix, Вы писали:

S>В официальном блоге появилось описание текущего положения дел с C#6.


В целом неплохо, не вставляет только бесполезняк типа "exceptions filter" (у кого-то есть реально полезный пример использования, который сильно сокращает код по сравнению со старым вариантом?).
И static import — могли бы не изгаляться яйцеголовые, а тупо реализовать в стиле pascal:

with(obj1, obj2){
    .member1 = .member2 * 10;
}


Это НАМНОГО нагляднее, чем вот эта помойка, которую они сделают из функций и названий классов. Почему проектировщики такие индусы?? Неужто НИЧЕГО не кликает в башке, когда явно совесть подзуживает?
Отредактировано 22.11.2014 11:23 btn1 . Предыдущая версия .
[Ann, C#6] Состояние для VS2015 preview
От: Sinix  
Дата: 21.11.14 07:39
Оценка: 22 (3)
В официальном блоге появилось описание текущего положения дел с C#6.

В принципе, ничего нового, но даёт представление о фичах, которые скорее всего попадут в релиз (Primary Constructors и Declaration Expressions, например, уже не прошли
Автор: SergeyT.
Дата: 02.10.14
).

UPD. Кстати, вот про это я что-то раньше в оф.блогах не читал:

Expression-bodied function members allow methods, properties and other kinds of function members to have bodies that are expressions instead of statement blocks, just like with lambda expressions.

Methods as well as user-defined operators and conversions can be given an expression body by use of the “lambda arrow”:

public Point Move(int dx, int dy) => new Point(x + dx, y + dy); 
public static Complex operator +(Complex a, Complex b) => a.Add(b); 
public static implicit operator string(Person p) => "\{p.First} \{p.Last}";


The effect is exactly the same as if the methods had had a block body with a single return statement.

For void returning methods – and Task returning async methods – the arrow syntax still applies, but the expression following the arrow must be a statement expression (just as is the rule for lambdas):

public void Print() => Console.WriteLine(First + " " + Last);


Properties and indexers can have getters and settersgetter-only properties and indexers can have an expression body:

public string Name => First + " " + Last; 
public Customer this[long id] => store.LookupCustomer(id);


Добавили всё-таки.
Отредактировано 21.11.2014 7:48 Sinix . Предыдущая версия .
Re[5]: [Ann, C#6] Состояние для VS2015 preview
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.11.14 22:51
Оценка: +1 -1 :)
Здравствуйте, AndrewVK, Вы писали:

AVK>Ты просто не в курсе. Андерс, после ковыряния с JS/TS, сильно поменял свою точку зрения, в том числе на structural typing, PM и not-nullable types.


Я в курсе того сколько ему еще ковырять.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: [Ann, C#6] Состояние для VS2015 preview
От: agat50  
Дата: 25.11.14 20:53
Оценка: 30 (1) +1
Здравствуйте, Sinix, Вы писали:

Вместе с using static будет примерно так:
S>
S>var a = Eval(() => { using (var x = GetX()) return x.y; });
S>


Ну в целом да Обойти понятно можно. Просто выглядит чуть искусственно.

Про возврат нескольких переменных, так всеми желаемый PM и т.п. — имхо нужна просто возможность тонкой настройки области видимости переменной, очень много решит. https://roslyn.codeplex.com/discussions/552375 вариант с out, хотя сейчас я мб уже к какой-нибудь нормальной директиве типа using в объявлении.

object x = Foo();
if(
    x is A
    &&
    {
        //Компилятор сам переносит объявление куда нужно
        #using(var a, SCOPES_OUTER) = 5; 
        return true;
    }
)
{
    Console.WriteLine("{0}", a);
}


Определять тип в var из первого присваивания.
#using(var a, INFERENCE_LAZY);
a = 5;


склоняюсь для разнообразия. Не то чтобы оно было часто надо, но имхо одной фичей бы убили много зайцев. И в IDE анализировать возможные not initialized проще имхо.
Отредактировано 25.11.2014 21:28 agat50 . Предыдущая версия . Еще …
Отредактировано 25.11.2014 20:55 agat50 . Предыдущая версия .
Re[5]: .NET Core, исходники
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.11.14 06:16
Оценка: 30 (2)
Здравствуйте, Sinix, Вы писали:

S>Оптимистичный вариант: на build "перережут ленточку" и заопенсорсят одновременно вместе с релизом.

S>Реалистичный: на build — исходники в опенсорс + очередное preview, релиз — осенью.

Я этого не говорил, но на билде будет первый превью .NET Core, в том числе и работающий на Х-платформах.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[6]: [Ann, C#6] Состояние для VS2015 preview
От: vorona  
Дата: 24.11.14 12:58
Оценка: 15 (1) +1
Здравствуйте, Sinix, Вы писали:

S>Ещё что-то?


http://blogs.msdn.com/b/rmbyers/archive/2008/12/22/getting-good-dumps-when-an-exception-is-thrown.aspx
Re[5]: [Ann, C#6] Состояние для VS2015 preview
От: DarthSidius  
Дата: 25.11.14 07:53
Оценка: :))
Здравствуйте, AndrewVK, Вы писали:

AVK>Не знаю что в твоем понимании много, но у меня их достаточно, чтобы затея имела смысл.


Переходи на Немерл и не парься.
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 58>>
♠♠♥♠♠♦♥
Re[4]: [Ann, C#6] Состояние для VS2015 preview
От: _NN_ www.nemerleweb.com
Дата: 25.11.14 11:38
Оценка: +1 :)
Здравствуйте, DarthSidius, Вы писали:

DS>Просто выглядит как мышинная возня. Ну да ладно — они все силы бросили на Рослин.

Сначала это, потом будет Semicolon operator: (var x = Foo(); Write(x); x * x) .
Ну и апофеозом будет объединение этого дела:

public int F(int a) =>
(
    Console.WriteLine(a);
    a + 1
)
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[9]: Coroutines via iterators
От: Qbit86 Кипр
Дата: 13.08.15 15:27
Оценка: +1 :)
Здравствуйте, Sinix, Вы писали:

S>Оххх... там емнип поддержки await нет и не предвидится.


На безрыбье и yield return вместо await'а сгодится. Выглядит вполне себе гвоздями, если всё что у тебя есть — это Update-молоток в каждом кадре.
Глаза у меня добрые, но рубашка — смирительная!
Re[3]: [Ann, C#6] Состояние для VS2015 preview
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 21.11.14 16:56
Оценка: 30 (1)
Здравствуйте, Sinix, Вы писали:

AVK>>Да ладно, это было даже в первой публичной демонстрации C# 6 на билде. Просто реализация почему то сильно подзадержалась.

S>Угу. Я про то, что раньше официальных подтверждений для методов и индексаторов не было. Только для простых свойств.

Ты чего то путаешь. Для методов было заявлено с самого начала.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[4]: [Ann, C#6] Состояние для VS2015 preview
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 24.11.14 11:46
Оценка: 14 (1)
Здравствуйте, AlexRK, Вы писали:

ARK>Не?


Не. Ключевой момент — что будет в текущем стектрейсе. Exception filter, в чем его особенность, стектрейс не меняет, в отличие от рукопашного кода. Это позволяет реализовывать определенные сценарии диагностики.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[4]: [Ann, C#6] Состояние для VS2015 preview
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 24.11.14 16:36
Оценка: 14 (1)
Здравствуйте, VladD2, Вы писали:

VD>Согласен, грабли. Но Хельсберга нужно на пенсию. Он рельный тормоз прогресса.


Ты просто не в курсе. Андерс, после ковыряния с JS/TS, сильно поменял свою точку зрения, в том числе на structural typing, PM и not-nullable types.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[2]: Дата релиза MSVS 2015
От: Sinix  
Дата: 21.11.14 10:38
Оценка: 4 (1)
Здравствуйте, Qbit86, Вы писали:

S>>В официальном блоге появилось описание текущего положения дел с C#6.

Q>А когда планируется релиз MSVS 2015? Будет ли для него Community Edition?
Официальной даты нет, "later in the year" in 2015. Скорее всего выйдет вместе с win10. И судя по состоянию проектов, которые планируется включить в студию — это будет осенью.

Community Edition будет с вероятностью 0.99, иначе я вообще не улавливаю логики в открытии vs2013. Закроют — будет НЕНАВИСТЬ, как с vs 2012 express for desktop
Re: Дата релиза MSVS 2015
От: Qbit86 Кипр
Дата: 21.11.14 10:19
Оценка: -1
Здравствуйте, Sinix, Вы писали:

S>В официальном блоге появилось описание текущего положения дел с C#6.


А когда планируется релиз MSVS 2015? Будет ли для него Community Edition?
Глаза у меня добрые, но рубашка — смирительная!
Re: [Ann, C#6] Состояние для VS2015 preview
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 21.11.14 13:08
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>UPD. Кстати, вот про это я что-то раньше в оф.блогах не читал:


Да ладно, это было даже в первой публичной демонстрации C# 6 на билде. Просто реализация почему то сильно подзадержалась.

S>Добавили всё-таки.


Так вроде и не отказывались добавлять. Фича абсолютно не вызывает споров. Просто, полезно и очевидно.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[2]: [Ann, C#6] Состояние для VS2015 preview
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.11.14 05:27
Оценка: +1
Здравствуйте, btn1, Вы писали:

B>В целом неплохо, не вставляет только бесполезняк типа "exceptions filter" (у кого-то есть реально полезный пример использования, который сильно сокращает код по сравнению со старым вариантом?).


exception filter не код сокращает, а реализует некоторый сценарий, который раньше на C# был нереализуем в принципе и приходилось либо кусочки на VB писать, либо постпроцессинг IL прикручивать.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re: [Ann, C#6] Состояние для VS2015 preview
От: HrorH  
Дата: 24.11.14 08:08
Оценка: +1
Здравствуйте, Sinix, Вы писали:


S>В официальном блоге появилось описание текущего положения дел с C#6.


S>В принципе, ничего нового, но даёт представление о фичах, которые скорее всего попадут в релиз (Primary Constructors и Declaration Expressions, например, уже не прошли
Автор: SergeyT.
Дата: 02.10.14
).


Для меня было новым using static для нестатических классов и enum.
А также string interpolation c синтаксисом $"{x} {y} {z}", без обратного слеша намного лучше. $@ вообще жесть, я не въехал.
И ответы на вопросы в комментариях очень интересные.
Re: [Ann, C#6] Состояние для VS2015 preview
От: DarthSidius  
Дата: 24.11.14 08:49
Оценка: -1
Здравствуйте, Sinix, Вы писали:

S>Methods as well as user-defined operators and conversions can be given an expression body by use of the “lambda arrow”:

S>
S>public Point Move(int dx, int dy) => new Point(x + dx, y + dy); 
S>public static Complex operator +(Complex a, Complex b) => a.Add(b); 
S>public static implicit operator string(Person p) => "\{p.First} \{p.Last}";
S>


И в чем кайф... эээ... сакральный смысл?
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 58>>
♠♠♥♠♠♦♥
Re[7]: [Ann, C#6] Состояние для VS2015 preview
От: Sinix  
Дата: 24.11.14 13:28
Оценка: +1
Здравствуйте, vorona, Вы писали:

V>http://blogs.msdn.com/b/rmbyers/archive/2008/12/22/getting-good-dumps-when-an-exception-is-thrown.aspx


Так это ж решается через debugdiag и/или etw?

Главная проблема с fail fast в exceptions filter — метод не работает для await/извратов с sync context.
Re[3]: [Ann, C#6] Состояние для VS2015 preview
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.11.14 14:26
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Особенно про parameterless .ctor() в структурах. Добровольно подкладывать в язык такие грабли? Верните Хейлсберга, пожалуйста


Согласен, грабли. Но Хельсберга нужно на пенсию. Он рельный тормоз прогресса. Просто нужно фичи обсуждать публично.

Остальные (кроме конструкторов) фичи опробованы на практике и показали отличный результат. Все ворчунам нужно просто попробовать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [Ann, C#6] Состояние для VS2015 preview
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 24.11.14 16:34
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Жать в доступном не коде такие сценарии не встречаются ни разу.


Ну потому что у тебя совсем другая область деятельности, не связанная с серверным софтом. А у меня встречалось, Sinix наверняка даже догадается где.

VD> Если что всегда можно зделать ре-throw.


Нужно не rethrow, нужно дамп сделать. Впрочем, тут неплохую ссылочку уже дали — http://blogs.msdn.com/b/rmbyers/archive/2008/12/22/getting-good-dumps-when-an-exception-is-thrown.aspx
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: [Ann, C#6] Состояние для VS2015 preview
От: DarthSidius  
Дата: 25.11.14 03:46
Оценка: -1
Здравствуйте, VladD2, Вы писали:

VD>В отличии от Nemerle и F#, в C# не поддерживается концепция "все является выражением", по этому везде приходится пихать return. Фигурные скобки и return вкупе дают довольно значительный синтаксический шум. Вот авторы C# и решили подсакратить таковой позволим записывать мелкие методы в одну строку.


Всем:
Ок, у кого много настолько мелких методов в проекте?

Просто выглядит как мышинная возня. Ну да ладно — они все силы бросили на Рослин.
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 58>>
♠♠♥♠♠♦♥
Re[6]: [Ann, C#6] Состояние для VS2015 preview
От: Sinix  
Дата: 25.11.14 19:31
Оценка: +1
Здравствуйте, agat50, Вы писали:

A>http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6504697-block-code-as-value-another-syntax-for-semicolon

A>Ага, хорошо бы.
А нафига? Ну, кроме как "в других языках есть"?

Не, серьёзно, зачем портить язык, добавляя 100500й способ сделать то же самое, только на пару символов короче? Не, для write-only кода, который никогда читать не будут, а сразу выбросят и перепишут, оно может и удобно.

Для нормального человека в чём кайф ловить разницу между
public int F(int a) =>
(
    Console.WriteLine(a);
    a + 1
)
// и
public int F(int a)
{
    Console.WriteLine(a);
    return a + 1;
}

?

A> Ну возвращать последнее выражение видимо уже невозможно, поведение сильно поменяет. А так конечно локальных функций нормальных не хватает иногда.

Func<int, int> x = i => { ... };

?
Re[7]: [Ann, C#6] Состояние для VS2015 preview
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.14 01:17
Оценка: +1
Здравствуйте, xy012111, Вы писали:

X>В первом методе вас будет выбрасывать в отладчик на каждый throw, а во-втором — только на первый в Do. Отлаживать сильно удобнее.


То есть вместо того чтобы чуть-чуть доработать отладчик лучше тратить уйму сил на изменение языка?

ЗЫ

Возникает еще один вопрос, зачем перехватывать исключения где попало? Их же можно перехватить ближе к корню колстека. Тогда и проблемы такой не возникнет. У меня вот за 12 лет использования дотнета таких проблем не возникло.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [Ann, C#6] Состояние для VS2015 preview
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.12.14 20:25
Оценка: +1
Здравствуйте, Tesh, Вы писали:

T>Когда необходимо документироавть каждый метод (описание метода, его параметров, возвращаемого значения), жертвовать единообразием кода для его сокращения на 2-3 строки — сомнительное дело.


Зачем чего-то документировать? Чем жертвовать?

Какой-то набор предрассудков.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: .NET Core, исходники: Task<T>
От: Qbit86 Кипр
Дата: 13.08.15 13:30
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Ну блин... грубо говоря, таски — это конструктор. Await/tpl/dataflow/orleans/etc — реализация определённых паттернов поверх этого конструктора. Не сами паттерны.


Дотнетовские Таски жЫрноваты для примитивов.

S>Это важно, поскольку в реализации скрывается тонна мелочей, от шедулинга и обработки исключений и до передачи контекста выполнения.


Мне не нужны шедулинг и передача контекста выполнения.

S>Так вот, когда код описывается как "используем taskCompletionSource" — это даёт на порядок больше информации, чем "у нас тут промайзы".


Я настаиваю на транскрипции «промиcы».

S>Особенно если человек про промайзы/таски слышит в первый раз (так хоть понятно, что искать)


Промисы/фьючерки — это внеязыковые понятия. С гораздо большей вероятностью программист (даже пришедший со Scala или C++ 11) будет знаком с этими понятиями, чем с сишарповским TaskCompletionSource.

S>Ну и кроме того, Task<T> — это _не_ future.


Task<T> — это future на стероидах.

S>На этиграбли уже пробовали наступить, по итогам отказались.


Я и пишу: «Вообще в идеале хотелось бы найти простую и переносимую реализацию Futures/Promises без всего этого многопоточного гудрона.»
Глаза у меня добрые, но рубашка — смирительная!
Re[2]: Дата релиза MSVS 2015
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 21.11.14 13:09
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>А когда планируется релиз MSVS 2015?


Очевидно, в следующем году. ИМХО где то в районе релиза Win10.

Q> Будет ли для него Community Edition?


Да.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[2]: [Ann, C#6] Состояние для VS2015 preview
От: Sinix  
Дата: 21.11.14 13:27
Оценка:
Здравствуйте, AndrewVK, Вы писали:

S>>UPD. Кстати, вот про это я что-то раньше в оф.блогах не читал:

AVK>Да ладно, это было даже в первой публичной демонстрации C# 6 на билде. Просто реализация почему то сильно подзадержалась.
Угу. Я про то, что раньше официальных подтверждений для методов и индексаторов не было. Только для простых свойств.

Ну, или я их не заметил
Re[2]: [Ann, C#6] Состояние для VS2015 preview
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.11.14 18:38
Оценка:
Здравствуйте, btn1, Вы писали:

B>не вставляет только бесполезняк типа "exceptions filter" (у кого-то есть реально полезный пример использования, который сильно сокращает код по сравнению со старым вариантом?).


Посмотрел код на немерле, где фильтры были с самого начала. Используется эта возможность (как и паттерн-матчинг в catch-ах) крайне редко. Так что ты прав. Хотя сама возможность удобна. Так что лишней не будет.

B>И static import — могли бы не изгаляться яйцеголовые, а тупо реализовать в стиле pascal:

B>
B>with(obj1, obj2){
B>    .member1 = .member2 * 10;
B>}
B>


B>Это НАМНОГО нагляднее,


Это из другой оперы. Доступа к другим модулям это не даст — это даст доступ к членам некоторого объекта.

Собственно, фича не плоха, но и импорт типов тоже штука полезная.

Собственно можно было бы реализовать и то, и другое. Или обобщить using до проекции областей видимости. Тогда можно было бы делать так:
using System.Coinsole;
class Prog
{
  static void Main()
  {
    var obj1 = new Obj1();
    using obj1;

    WriteLine(member1);
  }
}


B> чем вот эта помойка, которую они сделают из функций и названий классов. Почему проектировщики такие индусы?? Неужто НИЧЕГО не кликает в башке, когда явно совесть подзуживает?


Никакой помойки не наблюдаю. В Немерел импорт типов есть изначально. Фича удобная проблем не создает. Единственное что... в Немерле вывод типов по сильнее, а значит реже возникают неоднозначности.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: [Ann, C#6] Состояние для VS2015 preview
От: Sinix  
Дата: 24.11.14 09:39
Оценка:
Здравствуйте, HrorH, Вы писали:

HH>Для меня было новым using static для нестатических классов и enum.

Да, синтаксис они поменяли, но в этом релизе вроде старый.

Note: The Preview will only import members of static classes. We have since changed the design in several ways:
1. The syntax will be more different from current using clauses – it will have the keywords “using static”.
2. Members of non-static types can be imported, including structs and enums
3. Members of VB modules and F# top level functions can be imported
4. Extension methods will not be imported into top-level scope; instead they will show up as extension methods. This gives a way to import extension methods from just a single class, something which wasn’t possible before.

Кстати, п.4 вроде с самого начала был, вот тут в "Static Using Statements" упоминался.

HH>А также string interpolation c синтаксисом $"{x} {y} {z}", без обратного слеша намного лучше. $@ вообще жесть, я не въехал.

HH>И ответы на вопросы в комментариях очень интересные.
Угу. И вопросы тоже. Я там с verbose verbatim strings тоже отметился. Позорище блин
Re[2]: [Ann, C#6] Состояние для VS2015 preview
От: Sinix  
Дата: 24.11.14 09:49
Оценка:
Здравствуйте, DarthSidius, Вы писали:

public Point Move(int dx, int dy) => new Point(x + dx, y + dy); 
public static Complex operator +(Complex a, Complex b) => a.Add(b); 
public static implicit operator string(Person p) => "\{p.First} \{p.Last}"; // в следующем релизе будет $"{p.First} {p.Last}"


DS>И в чем кайф... эээ... сакральный смысл?

We do what we must because we can?
Если честно, про половину фич (кроме null-conditional operators разве что) можно то же самое спросить.
Особенно про parameterless .ctor() в структурах. Добровольно подкладывать в язык такие грабли? Верните Хейлсберга, пожалуйста
Re[3]: [Ann, C#6] Состояние для VS2015 preview
От: AlexRK  
Дата: 24.11.14 11:38
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>exception filter не код сокращает, а реализует некоторый сценарий, который раньше на C# был нереализуем в принципе и приходилось либо кусочки на VB писать, либо постпроцессинг IL прикручивать.


try
{
    try
    {
        Run();
    }
    catch (Exception1 err1)
    {
        ...
    }
}
catch (Exception2 err2)
{
    ...
}


Не?
Re[5]: [Ann, C#6] Состояние для VS2015 preview
От: AlexRK  
Дата: 24.11.14 12:25
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Не. Ключевой момент — что будет в текущем стектрейсе. Exception filter, в чем его особенность, стектрейс не меняет, в отличие от рукопашного кода. Это позволяет реализовывать определенные сценарии диагностики.


Не меняет вообще, даже если исключение продолжает свой путь дальше?
Re[5]: [Ann, C#6] Состояние для VS2015 preview
От: Sinix  
Дата: 24.11.14 12:27
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Не. Ключевой момент — что будет в текущем стектрейсе. Exception filter, в чем его особенность, стектрейс не меняет, в отличие от рукопашного кода. Это позволяет реализовывать определенные сценарии диагностики.


Не для спора

А какие преимущества есть перед стандартным throw именно для диагностики?
Сложный код типа логирования в exception filter один фиг не запихнёшь. Если ничего не путаю, исключения в фильтрах проглатываются, а не заменяют собой обрабатываемое исключение.

Я пока могу назвать только одно: нет косяков с line number типа этого. При желании лечится извращениями вида PreserveStackTrace() / "var x = ExceptionDispatchInfo.Capture(ex); ... x.Throw();", но извращения — они и есть извращения.

Ещё что-то?
Re[3]: [Ann, C#6] Состояние для VS2015 preview
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.11.14 14:19
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>exception filter не код сокращает, а реализует некоторый сценарий, который раньше на C# был нереализуем в принципе и приходилось либо кусочки на VB писать, либо постпроцессинг IL прикручивать.


Жать в доступном не коде такие сценарии не встречаются ни разу. Если что всегда можно зделать ре-throw.

Так что соглашусь с предыдущим оратором — полезность фичи сомнительна.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: [Ann, C#6] Состояние для VS2015 preview
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.11.14 14:23
Оценка:
Здравствуйте, DarthSidius, Вы писали:

S>>Methods as well as user-defined operators and conversions can be given an expression body by use of the “lambda arrow”:


DS>И в чем кайф... эээ... сакральный смысл?


В отличии от Nemerle и F#, в C# не поддерживается концепция "все является выражением", по этому везде приходится пихать return. Фигурные скобки и return вкупе дают довольно значительный синтаксический шум. Вот авторы C# и решили подсакратить таковой позволим записывать мелкие методы в одну строку.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: [Ann, C#6] Состояние для VS2015 preview
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 24.11.14 14:44
Оценка:
Здравствуйте, Sinix, Вы писали:

Влезу немного с оффтопом.

S>Так это ж решается через debugdiag


А у вас есть положительный опыт использования DebugDiag для сценария "поймать конкретное managed exception и создать на него дамп"?

У меня эта шайтан-программа работала как ей заблагорассудится: то не ловила ничего, то ловила что-то левое, то ловила ровно то, что просили, ... но как это повторить гарантированно в следующий заход я так и не понял. Просидев несколько дней в попытке понять логику и постигнуть дзен, я с горяча полез во внутренности, и когда осознал что вся логика фильтрации нужных событий лежит в сгенерированном программой-конфигуратором VBScript-файле, то от горя и ужаса спрятался под рабочий стол...

В общем, я не исключаю, что где-то я чего-то недопонял, но попытки разобраться оставил до лучших времен, как и использование DebugDiag на продакшене.
А как у вас?
Re[9]: [Ann, C#6] Состояние для VS2015 preview
От: Sinix  
Дата: 24.11.14 14:50
Оценка:
Здравствуйте, Михаил Романов, Вы писали:

МР>А у вас есть положительный опыт использования DebugDiag для сценария "поймать конкретное managed exception и создать на него дамп"?

Всего пару раз, обычно через remote debug, трассировку, или вообще локально воспроизводилось. Там главное нужный тип исключения выставить. С ETW только игрался, но показалось намного проще.
Re[4]: [Ann, C#6] Состояние для VS2015 preview
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.11.14 03:50
Оценка:
Здравствуйте, DarthSidius, Вы писали:

DS>Ок, у кого много настолько мелких методов в проекте?


Вообще-то их хватает обычно. В Немерле мы чаще такие локальными функциями оформляем, но за неимением горничной... и это не плохо.

Кстати, локальные функции — офигительно удобная вещь! Я бы очень советовал команде шарпа взять ее на вооружение.

DS>Просто выглядит как мышинная возня. Ну да ладно — они все силы бросили на Рослин.


Так и есть. В этом релизе делаются мелкие фичи которые стало просто реализовать благодаря переходу на Розлин. Они переводят на управляемый код все... от компилятора, до рефакторингов. Поверь, работы там море. Особенно с их подходами к разработке.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [Ann, C#6] Состояние для VS2015 preview
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 25.11.14 06:45
Оценка:
Здравствуйте, DarthSidius, Вы писали:

DS>Ок, у кого много настолько мелких методов в проекте?


Не знаю что в твоем понимании много, но у меня их достаточно, чтобы затея имела смысл.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[10]: [Ann, C#6] Состояние для VS2015 preview
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 25.11.14 06:45
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Всего пару раз, обычно через remote debug, трассировку, или вообще локально воспроизводилось. Там главное нужный тип исключения выставить. С ETW только игрался, но показалось намного проще.

Понял, спасибо.
Жаль, конечно. Чисто теоретически инструмент выглядит интересным и полезным.
Тем более, что с прода баги идут косяками и чисто логами обойтись не удается...

Ну и на ETW я тоже все собираюсь посмотреть попристальнее. Но как обычно, времени не хватает
Re[4]: [Ann, C#6] Состояние для VS2015 preview
От: xy012111  
Дата: 25.11.14 11:37
Оценка:
Здравствуйте, VladD2, Вы писали:

AVK>>exception filter не код сокращает, а реализует некоторый сценарий, который раньше на C# был нереализуем в принципе и приходилось либо кусочки на VB писать, либо постпроцессинг IL прикручивать.


VD>Жать в доступном не коде такие сценарии не встречаются ни разу. Если что всегда можно зделать ре-throw.

VD>Так что соглашусь с предыдущим оратором — полезность фичи сомнительна.

В нашем вот проекте (как и во многих проектах на прошлых работах) будет очень полезна, и вот почему — архитектура у нас такая многослойная, как лук и на границе между слоями как правило имеются методы
try {
  // Что-то делаем на более низком уровне
} catch(Exception ex) {
  Log(ex);
  throw;
}

и вот когда исключение случается где-нить в глубине, сидя в отладчике приходится прыгать по всем этим throw; так как отладчику приказано вываливаться на каждый бросок. Это очень печально, особенно когда в глубоких потрохах кто-то что-то поломает вдруг и на какое-то время кусок, с которым нужно работать, является таким нестабильным.

Ругать подобные архитектуры даже не начинайте, не в этом дело, а в том, что так вот уже есть и надо как-то с этим жить. Принципиально переписать сложно. а заменить подобное безобразие фильтром с логированием самое оно.
Re[5]: [Ann, C#6] Состояние для VS2015 preview
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.11.14 17:07
Оценка:
Здравствуйте, xy012111, Вы писали:

X>В нашем вот проекте (как и во многих проектах на прошлых работах) будет очень полезна, и вот почему — архитектура у нас такая многослойная, как лук и на границе между слоями как правило имеются методы

X>
X>try {
X>  // Что-то делаем на более низком уровне
X>} catch(Exception ex) {
X>  Log(ex);
X>  throw;
X>}
X>


И причем тут фильтры?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: .NET Core, разница
От: Qbit86 Кипр
Дата: 25.11.14 18:36
Оценка:
Здравствуйте, Sinix, Вы писали:

S>В официальном блоге появилось описание текущего положения дел с C#6.


Где можно посмотреть таблицу с разницей библиотек классов .NET и .NET Core? Какие пространства имён, классы и методы из .NET не входят в Core? Какие добавились по сравнению с .NET 4.5.1?
Глаза у меня добрые, но рубашка — смирительная!
Re[5]: [Ann, C#6] Состояние для VS2015 preview
От: agat50  
Дата: 25.11.14 19:09
Оценка:
Здравствуйте, _NN_, Вы писали:

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


DS>>Просто выглядит как мышинная возня. Ну да ладно — они все силы бросили на Рослин.

_NN>Сначала это, потом будет Semicolon operator: (var x = Foo(); Write(x); x * x) .
_NN>Ну и апофеозом будет объединение этого дела:

_NN>
_NN>public int F(int a) =>
_NN>(
_NN>    Console.WriteLine(a);
_NN>    a + 1
_NN>)
_NN>


http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6504697-block-code-as-value-another-syntax-for-semicolon
Ага, хорошо бы. Ну возвращать последнее выражение видимо уже невозможно, поведение сильно поменяет. А так конечно локальных функций нормальных не хватает иногда.
Re[2]: .NET Core, разница
От: Sinix  
Дата: 25.11.14 19:23
Оценка:
Здравствуйте, Qbit86, Вы писали:

S>>В официальном блоге появилось описание текущего положения дел с C#6.


Q>Где можно посмотреть таблицу с разницей библиотек классов .NET и .NET Core? Какие пространства имён, классы и методы из .NET не входят в Core? Какие добавились по сравнению с .NET 4.5.1?

В основном, только слухи из разных блогов и выступлений. Есть немного подробностей, самое полезное:

NET Core is very much in the same family as the .NET Framework. For example, the SIMD and Immutable Collections NuGet packages work on both the .NET Framework and .NET Core, by design. You can expect that most aspects of your development experience will be unchanged when targeting .NET Core.
...

ASP.NET 5 is the first workload that has adopted .NET Core. ASP.NET 5 runs on both the .NET Framework and .NET Core.
...

.NET Core has two major components. It includes a small runtime that is built from the same codebase as the .NET Framework CLR. The .NET Core runtime includes the same GC and JIT (RyuJIT), but doesn’t include features like Application Domains or Code Access Security. The runtime is delivered via NuGet, as part of the ASP.NET 5 core package.

.NET Core also includes the base class libraries. These libraries are largely the same code as the .NET Framework class libraries, but have been factored (removal of dependencies) to enable us to ship a smaller set of libraries. These libraries are shipped as System.* NuGet packages on NuGet.org.


Из того, что есть сейчас:
1. API Portability Analyzer vs extension и console app. Подробности.
2. Вид сверху (тут 4.6 помечен как 4.5.3) и офсайт .net core 5.
Re[7]: [Ann, C#6] Состояние для VS2015 preview
От: agat50  
Дата: 25.11.14 19:42
Оценка:
Здравствуйте, Sinix, Вы писали:

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


A>>http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6504697-block-code-as-value-another-syntax-for-semicolon

A>>Ага, хорошо бы.
S>А нафига? Ну, кроме как "в других языках есть"?

S>Не, серьёзно, зачем портить язык, добавляя 100500й способ сделать то же самое, только на пару символов короче? Не, для write-only кода, который никогда читать не будут, а сразу выбросят и перепишут, оно может и удобно.


S>Для нормального человека в чём кайф ловить разницу между

S>
S>public int F(int a) =>
S>(
S>    Console.WriteLine(a);
S>    a + 1
S>)
S>// и
S>public int F(int a)
S>{
S>    Console.WriteLine(a);
S>    return a + 1;
S>}
S>


Нафиг, согласен.

S>?


A>> Ну возвращать последнее выражение видимо уже невозможно, поведение сильно поменяет. А так конечно локальных функций нормальных не хватает иногда.

S>
S>Func<int, int> x = i => { ... };
S>

S>?

И это писать в каждом таком применении (а там может быть совсем не инт а что-то монстрообразное). Ну если пример с if чисто чтобы был для описания, то ситуация вида создал переменную, создал ресурс, записал в переменную, закрыл ресурс, работаешь с переменной дальше — ну просто на каждом шагу. Приходится постоянно писать отдельно объявление и присвоение из-за областей видимости. В объявлении соотвественно хрен напишеш var. Хорошо ещё решарпеп помогает быстро var менять на точный класс.

int a = 
 lock(dataInstance) 
 { 
 return dataInstance.Member1; 
 };


vs
int a = (Func<int>)(
    () => {
    lock(dataInstance) 
     { 
     return dataInstance.Member1; 
     };
    })();


Мне очевидно что первое короче не на "два символа".
Отредактировано 25.11.2014 19:43 agat50 . Предыдущая версия .
Re[8]: [Ann, C#6] Состояние для VS2015 preview
От: Sinix  
Дата: 25.11.14 20:16
Оценка:
Здравствуйте, agat50, Вы писали:

A>И это писать в каждом таком применении (а там может быть совсем не инт а что-то монстрообразное). Ну если пример с if чисто чтобы был для описания, то ситуация вида создал переменную, создал ресурс, записал в переменную, закрыл ресурс, работаешь с переменной дальше — ну просто на каждом шагу.

Не, с lock тут пример абсолютно бесполезен, что с ним, что без него — одинаково. С "using что-нибудь" лучше смотреться будет.

Угу, проблема. Причём в общем случае: код в using большой, или надо вернуть больше одной переменной — красиво не решается. Я на практике с такой необходимостью не сталкивался, поэтому ничего предложить не могу. Ну, кроме метода Eval. Вместе с using static будет примерно так:
var a = Eval(() => { using (var x = GetX()) return x.y; });


Для любителей извращений — заменить на
var a = λ(() => { using (var x = GetX()) return x.y; });

и пойдёт.

A>Мне очевидно что первое короче не на "два символа".

Ну а
int a;
lock(dataInstance) 
{ 
  a = dataInstance.Member1; 
};

ещё короче
Re[8]: [Ann, C#6] Состояние для VS2015 preview
От: _NN_ www.nemerleweb.com
Дата: 25.11.14 21:39
Оценка:
Здравствуйте, agat50, Вы писали:

A>И это писать в каждом таком применении (а там может быть совсем не инт а что-то монстрообразное). Ну если пример с if чисто чтобы был для описания, то ситуация вида создал переменную, создал ресурс, записал в переменную, закрыл ресурс, работаешь с переменной дальше — ну просто на каждом шагу. Приходится постоянно писать отдельно объявление и присвоение из-за областей видимости. В объявлении соотвественно хрен напишеш var. Хорошо ещё решарпеп помогает быстро var менять на точный класс.\


A>vs

A>
A>int a = (Func<int>)(
A>    () => {
A>    lock(dataInstance) 
A>     { 
A>     return dataInstance.Member1; 
A>     };
A>    })();
A>


A>Мне очевидно что первое короче не на "два символа".


Тут проблема другого рода, а именно слабый вывод типов.
Зато компилятор быстро работает
C# не позволяет выводить тип из использования, т.е.:

var a = x => x + 1;
var b = a(1); // выводит Func<int, int> a
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: .NET Core, исходники
От: Qbit86 Кипр
Дата: 25.11.14 21:44
Оценка:
Здравствуйте, Sinix, Вы писали:

S>2. Вид сверху (тут 4.6 помечен как 4.5.3) и офсайт .net core 5.


А когда планируется открытие исходников .NET Core? Тут всё ещё пусто: https://github.com/dotnet/corefx
Глаза у меня добрые, но рубашка — смирительная!
Re[9]: [Ann, C#6] Состояние для VS2015 preview
От: agat50  
Дата: 25.11.14 21:49
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Тут проблема другого рода, а именно слабый вывод типов.

_NN>Зато компилятор быстро работает
_NN>C# не позволяет выводить тип из использования, т.е.:

_NN>
_NN>var a = x => x + 1;
_NN>var b = a(1); // выводит Func<int, int> a
_NN>


Ну вывести тип для Func<TRes> (Ну и Func<Task<TRes>> в свете асинков) без единого параметра вроде не представляет никакой сложности, просто синтаксис добавить. Мне больше и не надо. Тут в общем речь и не о лямбдах\делагатах, скорее просто чуть другая запись кода.
Отредактировано 25.11.2014 21:52 agat50 . Предыдущая версия .
Re[6]: [Ann, C#6] Состояние для VS2015 preview
От: xy012111  
Дата: 25.11.14 22:17
Оценка:
Здравствуйте, VladD2, Вы писали:

X>>В нашем вот проекте (как и во многих проектах на прошлых работах) будет очень полезна, и вот почему — архитектура у нас такая многослойная, как лук и на границе между слоями как правило имеются методы

X>>try {
X>>  // Что-то делаем на более низком уровне
X>>} catch(Exception ex) {
X>>  Log(ex);
X>>  throw;
X>>}


VD>И причем тут фильтры?


Выставите отладчику вываливаться на любое брошенное исключение и запустите этот код
  Код
using System;
using System.Console;
using System.Diagnostics;

static class Program
{
  static void Main() {
    try { Layer1_Catch(); } catch { }
    try { Layer1_Filter(); } catch { }
  }

  static void Do() {
    throw new Exception();
  }

  static bool Log(Exception ex) {
    WriteLine(ex);
    return false;
  }

  static void Layer1_Catch() {
    try {
      Layer2_Catch();
    } catch(Exception ex) {
      Log(ex);
      throw;
    }
  }

  static void Layer2_Catch() {
    try {
      Layer3_Catch();
    } catch(Exception ex) {
      Log(ex);
      throw;
    }
  }

  static void Layer3_Catch() {
    try {
      Do();
    } catch(Exception ex) {
      Log(ex);
      throw;
    }
  }

  static void Layer1_Filter() {
    try {
      Layer2_Filter();
    } catch(Exception ex) if(Log(ex)) {
      Debug.Fail(ex.ToString());
      throw;
    }
  }

  static void Layer2_Filter() {
    try {
      Layer3_Filter();
    } catch(Exception ex) if(Log(ex)) {
      Debug.Fail(ex.ToString());
      throw;
    }
  }

  static void Layer3_Filter() {
    try {
      Do();
    } catch(Exception ex) if(Log(ex)) {
      Debug.Fail(ex.ToString());
      throw;
    }
  }
}

В первом методе вас будет выбрасывать в отладчик на каждый throw, а во-втором — только на первый в Do. Отлаживать сильно удобнее.
Re[4]: .NET Core, исходники
От: Sinix  
Дата: 26.11.14 06:10
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>А когда планируется открытие исходников .NET Core? Тут всё ещё пусто: https://github.com/dotnet/corefx

Официальный роадмап. Деталей немного:

More libraries. Consider the subset we have today a down-payment on what is to come. Our goal is to open source the entire .NET Core library stack by Build 2015.


Собственно в этом вся интрига.
Оптимистичный вариант: на build "перережут ленточку" и заопенсорсят одновременно вместе с релизом.
Реалистичный: на build — исходники в опенсорс + очередное preview, релиз — осенью.

UPD: то, что скорее всего перейдёт в .net core, можно посмотреть тут.
Отредактировано 26.11.2014 7:57 Sinix . Предыдущая версия .
Re[3]: [Ann, C#6] Состояние для VS2015 preview
От: Tesh США  
Дата: 03.12.14 15:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В отличии от Nemerle и F#, в C# не поддерживается концепция "все является выражением", по этому везде приходится пихать return. Фигурные скобки и return вкупе дают довольно значительный синтаксический шум. Вот авторы C# и решили подсакратить таковой позволим записывать мелкие методы в одну строку.


Когда необходимо документироавть каждый метод (описание метода, его параметров, возвращаемого значения), жертвовать единообразием кода для его сокращения на 2-3 строки — сомнительное дело.
Отредактировано 03.12.2014 15:28 Tesh . Предыдущая версия .
Re[5]: [Ann, C#6] Состояние для VS2015 preview
От: Tesh США  
Дата: 04.12.14 00:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Зачем чего-то документировать? Чем жертвовать?


VD>Какой-то набор предрассудков.


Если код в будущем требуется поддерживать, то документация весьма полезна для того, чтобы понять что метод делает, что принимает на вход и какие ограничения имеет.
Единообразие кода также помогает в дальнейшей его поддержке и развитии. Когда ты смотришь в любую часть проекта, которая не важно кем была написана, и видишь код, написанный в одном стиле, то и поддержка сильно облегчается, как и уменьшается вероятность ошибок.
Никаких предрассудков, исключительно жизненный опыт.
Re[6]: [Ann, C#6] Состояние для VS2015 preview
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.12.14 01:16
Оценка:
Здравствуйте, Tesh, Вы писали:

T>Если код в будущем требуется поддерживать, то документация весьма полезна для того, чтобы понять что метод делает, что принимает на вход и какие ограничения имеет.


Документация полезна только для публичного API. Для понимания кода полезно внятные имена методам давать. Зачем документировать приватные методы, я не очень понимаю. Тем более, что проекты разные бывают. Когда я пишу прототип, то последнее о чем я думаю — это о документировании методов.

T>Единообразие кода также помогает в дальнейшей его поддержке и развитии.


Или замедляет процесс разработки, если в документации банальные вещи. Их нужно написать и поддерживать. А у меня метод может жить пару дней до следующего рефакторинга.

T>Когда ты смотришь в любую часть проекта, которая не важно кем была написана, и видишь код, написанный в одном стиле, то и поддержка сильно облегчается, как и уменьшается вероятность ошибок.

T>Никаких предрассудков, исключительно жизненный опыт.

Однобокий опыт и рождает предрассудки. Зачем мне документировать, например, методы в прарсере? Они все отражают какие-то правила. Какие — ясно из имени метода. Все их параметры одинаковые. Причем метод может быть ровно однострочным.

В Шарпе нет локальных фукнций (как в Пасклале, Nemerle или F#) и многие используют методы просто для декомпозиции и того самого повышения читабельности кода. Именованная функция намного лучше чем комментарий в море кода. Документировать такие функции нет ни времени, ни желания, ни смысла (изменяются слишком часто, на правки документации всю жизнь убьешь).

Чем больше ты используешь функциональный стиль, тем больше у тебя методов. Тем мельче они. В итоге большая часть кода у тебя будет заниматься скобками. Ты уже не можешь взглянуть на код всего класса одним взглядом. Это понижает производительность.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: .NET Core, исходники: Task<T>
От: Qbit86 Кипр
Дата: 13.08.15 10:24
Оценка:
Здравствуйте, Sinix, Вы писали:

S>UPD: то, что скорее всего перейдёт в .net core, можно посмотреть тут.


В репозитории corefx не могу найти определения классов Task и TaskCompletionSource. Хотя в некоторых других классах таски используются. Кто-нибудь собирал corefx? Где можно почитать реализацию этих классов? Вообще в идеале хотелось бы найти простую и переносимую реализацию Futures/Promises без всего этого многопоточного гудрона.
Глаза у меня добрые, но рубашка — смирительная!
Re[6]: .NET Core, исходники: Task<T>
От: KRT Украина  
Дата: 13.08.15 11:01
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>В репозитории corefx не могу найти определения классов Task и TaskCompletionSource. Хотя в некоторых других классах таски используются. Кто-нибудь собирал corefx? Где можно почитать реализацию этих классов? Вообще в идеале хотелось бы найти простую и переносимую реализацию Futures/Promises без всего этого многопоточного гудрона.


Можно глянуть в "большом" .NET.
Task
TaskCompletionSource

P.S. Таски лежат в CoreCLR.
Отредактировано 13.08.2015 11:04 KRT . Предыдущая версия .
Re[6]: .NET Core, исходники: Task<T>
От: Sinix  
Дата: 13.08.15 11:08
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>В репозитории corefx не могу найти определения классов Task и TaskCompletionSource.

В CoreClr надо смотреть.


Q>Вообще в идеале хотелось бы найти простую и переносимую реализацию Futures/Promises без всего этого многопоточного гудрона.


Предположим, вы её нашли. Что вы с ней собираетесь делать, особенно с учётом "без многопоточного гудрона"?
И с учётом того, что таски — это вообще-то _не_ future/promise? Это кирпичики, на которых можно построить почти любой async pattern — промайзы, пайплайн, cps, акторы, воркфлоу etc. Но не сами паттерны. Ваш кэп
Re[7]: .NET Core, исходники: Task<T>
От: Qbit86 Кипр
Дата: 13.08.15 12:21
Оценка:
Здравствуйте, Sinix, Вы писали:

Q>>Вообще в идеале хотелось бы найти простую и переносимую реализацию Futures/Promises без всего этого многопоточного гудрона.

S>Предположим, вы её нашли. Что вы с ней собираетесь делать, особенно с учётом "без многопоточного гудрона"?:)

Использовать в игре на движке Unity. В геймдеве обычно игровой цикл торчит наружу, поэтому вместо push-модели событий/асинхронности часто удобно применять poll-модель (опрос результата, корутины).

S>И с учётом того, что таски — это вообще-то _не_ future/promise?


https://en.wikipedia.org/wiki/Futures_and_promises
«...A future is a read-only placeholder view of a variable, while a promise is a writable, single assignment container which sets the value of the future... In .NET 4.0 System.Threading.Tasks.Task<T> represents a read-only view [future]. Resolving the value can be done through System.Threading.Tasks.TaskCompletionSource<T> [promise].»

S>Это кирпичики, на которых можно построить почти любой async pattern — промайзы, пайплайн, cps, акторы, воркфлоу etc. Но не сами паттерны. Ваш кэп:)


А так да, для фьючерок Task'и сильно перегружены. Не говоря уже о том, что, почему-то, входят в пространство имён Threading, хотя призваны абстрагировать асинхронность от таких примитивов ОС как потоки.
Глаза у меня добрые, но рубашка — смирительная!
Отредактировано 13.08.2015 12:22 Qbit86 . Предыдущая версия .
Re[8]: .NET Core, исходники: Task<T>
От: Sinix  
Дата: 13.08.15 13:14
Оценка:
Здравствуйте, Qbit86, Вы писали:

S>>И с учётом того, что таски — это вообще-то _не_ future/promise?

Q>https://en.wikipedia.org/wiki/Futures_and_promises
Ну блин... грубо говоря, таски — это конструктор. Await/tpl/dataflow/orleans/etc — реализация определённых паттернов поверх этого конструктора. Не сами паттерны.

Это важно, поскольку в реализации скрывается тонна мелочей, от шедулинга и обработки исключений и до передачи контекста выполнения. Так вот, когда код описывается как "используем taskCompletionSource" — это даёт на порядок больше информации, чем "у нас тут промайзы". Особенно если человек про промайзы/таски слышит в первый раз (так хоть понятно, что искать), или если видел десятки реализаций промайзов разнообразной степени корявости.

Ну и кроме того, Task<T> — это _не_ future. На этиграбли уже пробовали наступить, по итогам отказались.

В общем, лучше не использовать в обсуждении паттерны, если не уверены, что понимание собеседника целиком и полностью совпадает с вашим пониманием. Ну, или если детали реализации в обсуждении не имеют никакого значения, что ещё реже встречается.


Q>А так да, для фьючерок Task'и сильно перегружены. Не говоря уже о том, что, почему-то, входят в пространство имён Threading, хотя призваны абстрагировать асинхронность от таких примитивов ОС как потоки.

Ну да, для велосипеда седельный тягач сильно перегружен
Таски и не заточены под "абстрагировать асинхронность", для этого IAsyncResult есть.
Re[8]: .NET Core, исходники: Task<T>
От: Sinix  
Дата: 13.08.15 15:13
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Использовать в игре на движке Unity. В геймдеве обычно игровой цикл торчит наружу, поэтому вместо push-модели событий/асинхронности часто удобно применять poll-модель (опрос результата, корутины).

Оххх... там емнип поддержки await нет и не предвидится. Только извращения типа таких. Ну и uniRX, но это не всегда удобно.
Re[7]: .NET Core, исходники: Task<T>
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 02.09.15 16:30
Оценка:
Здравствуйте, Sinix, Вы писали:

S><skipped> промайзы, пайплайн, cps, акторы, воркфлоу etc.

[offtop]
значит рентанул я кар, турнаю такой на хайвей и драйвлю его до четвёртого экзита...
[/offtop]
[КУ] оккупировала армия.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.