Re[9]: Лучший язык на свете
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 13.11.17 13:51
Оценка: -1
Здравствуйте, VladD2, Вы писали:

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


S>> а где здесь таски?


VD>По ссылке то ходил? Или тебе конкретный объект Task<> нужен? Их, когда делали эту мару, еще не было. Но получилось даже лучше. По ссылке есть пример демонстрирющий переключение в GUI-потом из async-а:


А говоришь, что в Немерле было всё, что есть в C# 7.Х
VD>
VD>private button1_Click (sender : object,  e : System.EventArgs) : void
VD>{
VD>  def formContext = SystemExecutionContexts.FromCurrentSynchronizationContext();
VD>  def task = comp async
VD>  {
VD>    Thread.Sleep(5000);
VD>    callcomp Async.SwitchTo(formContext);
VD>    label1.Text = "success";
VD>  }
VD>  _ = task.Start(SystemExecutionContexts.ThreadPool());
VD>}
VD>


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

то, что ты написал делается без тасков

if (SynchronizationContext.Current == null)
            SynchronizationContext.SetSynchronizationContext(new WindowsFormsSynchronizationContext());

Sc = SynchronizationContext.Current;

var task = new WaitCallback (stateInfo=>
  {
    Thread.Sleep(5000);

   Sc.Send(d => label1.Text = "success", null);
 }

 ThreadPool.QueueUserWorkItem(ThreadProc);



А вт как это выглядит на C#

private async Task button1_Click (object sender,  System.EventArgs e)
{
  await Task.Delay(5000);
  label1.Text = "success";
}


Как говорится почувствуйте разницу.
S>>И yield разве не конструкция .Net?

VD>yield — это ключевое слово. В Немерле — это макра.


Угу только за кадром генерится автомат
S>>Да на ней сделаны и async и, но там куча вещей для работы с пулом потоков.

VD>Любишь ты мысли не правильно излагать. Не "на ней", а "сходным образом", это если ты хочешь сказать, что и итераторы, и асинки в шарпе сделаны через генерацию конечных автоматов. Но Немерле это не так. В Немерле макра сделана на основе монад.

Насколько я помню, монада нужна для мутабельных значений.

S>> Да и разве в немерле был ref readonly?


VD>В немерле были макры, которыми можно сделать и это тоже.


Можно, только это все через одно место с оверхедом.

S>>вот это нужные конструкции. Но это решение не на базе языка, а платформу.


VD>Я не знаю кому они нужны. Это оптимизации. А ими должен заниматься компилятор, а не человек. Я считаю, что это путь не туда. Ну, сделали — хорошо. Но мне это не нужно.

Ну в скором времени с использованием .Net Native C# вытеснит достаточно приложений на C++. Для этого они и нужны.

S>>Кстати в TypeScript поддержка await ов есть и в ES3. Там идет компиляция автомата в JS.


VD>Ну, вот и подумай что это если не просто сахар? А если это сахр, то на фиг его хардкодить в языке? Не лучше ли сделать универсальное решение, которое позволит реализовывать сахар в виде библиотек?


Вот смотрим твой пример и мой. Какой проще?
Код для ES3 и ES 2017 будет один и тот же, и при этом более читабелен и прост.
Если же вы идете в натив, то как раз многим были бы удобны C# конструкции. Вам так или иначе нужно преобразовывать в C++, по аналогии с TypeScript в JS.
.Net Native тоже где так и поступает. Хотя и не уверен.
и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.