Re[5]: JS vs. Native: сравнение на реальном нетривиальном примере
От: loginx  
Дата: 28.11.17 10:52
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Шо, в самом деле ?


I>
I>async function x() { while(true) await Promise.resolve(); }
I>


А если так?
async function x() { for(i=0;i<10000000;i++{ y+=sin(i)} }

x();

то фурычит и не тормозит
:-O
Re[6]: JS vs. Native: сравнение на реальном нетривиальном примере
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 28.11.17 11:48
Оценка:
Здравствуйте, loginx, Вы писали:

I>>
I>>async function x() { while(true) await Promise.resolve(); }
I>>


L>А если так?

L>async function x() { for(i=0;i<10000000;i++{ y+=sin(i)} }



L>то фурычит и не тормозит

L>:-O

Не возражаешь, если пофиксим твои ошибки и добавим замер ?

async function x() {let y=0; console.time(); for(let i=0;i<10000000;i++){ y+=Math.sin(i);} console.timeEnd(); }


Код выполняется ажно 1 секунду и далее не тормозит Замени 10000000 на Infinity, узнаешь много нового.

Но вообще скучновато наблюдать, как ты открываешь для себя особенность JS, которой двадцать лет или больше
Re[5]: JS vs. Native: сравнение на реальном нетривиальном примере
От: loginx  
Дата: 28.11.17 11:49
Оценка:
Здравствуйте, D. Mon, Вы писали:

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


L>>Я точно не рабирался, но по ощущения тяжелый длинный вычислительный цикл в асинк зпущенный никак не влияет на быстродействие ГУИ

L>>из чего я интуитивно делаю заключение что оно все же в отдельной нити запускается (про отдельный процесс наверное все же нет)

DM>Как я понимаю, в этом случае получается вроде Windows 3 — "приложение" регулярно отдает управление "системе", та обновляет UI, потом продолжает работу "приложений". Т.е. здесь основной поток в промежутках между вызовами асинхронных колбэков успевает и UI обновить, потому длинных пауз не видно.


вроде для этого там есть функции-генераторы...

а если чисто читать описание async то там сразу после вызова ф-я вернется и вернет промис, значит далее по идее должно продолжится
выполнение следующей строки... и в доках момент начала выполнения кода внутри асинк ф-ии как-то не нашел я в доках...
т.е. судя по описанию оно может и в основной нити и в доп. выполнится, ... ну и есть же асинк типа чтения URL которые реально асинк
возможно пока нельзя создавать понастоящему асинк ф-ии прямо в коде, но встроенные реальные асинк уже есть, но сами доки про это ни слова...
Re[7]: JS vs. Native: сравнение на реальном нетривиальном пр
От: loginx  
Дата: 28.11.17 11:56
Оценка:
Здравствуйте, Ikemefula, Вы писали:


I>
I>async function x() {let y=0; console.time(); for(let i=0;i<10000000;i++){ y+=Math.sin(i);} console.timeEnd(); }
I>


I>Код выполняется ажно 1 секунду и далее не тормозит Замени 10000000 на Infinity, узнаешь много нового.

да, согласен, мало итераци у меня было... однако со встроенным fetch(URL) работает не тормозя гуи хотя ччитать може и 1 час! (большой файд, медленный интернет)

I>Но вообще скучновато наблюдать, как ты открываешь для себя особенность JS, которой двадцать лет или больше


но async появились совсем недавно!! И из описания да и на практике для встроенных fetch(URL)
работает не тормозя гуи. Логично было ожидать что и самодельные async обладают свойствами встроенных в язык async ф-ий типа fetch()

И исходя из публичных док на мозиле
асинк должна немедлено после вызова НЕ начиная выполнять код внутри вернуть
в точку вызоа проимс. И далее что? Выполняется следующая строка и тд (но тогда когда же стартует выполнение тела асинк ф-ии?)
Или все же перед возвратом все же в самодельной ф-ии должно выполнится все тело внутри...?
Но тогда деза в доках!!

Вот в ф-иях генераторах в доках ясно — старт это вызов next() — возврат — yield()
А в асинк ф-иях где ".next()" ?! Получается на текущий момент самодельные не встроенные в язык async ф-ии это всего лишь кастрированные Генераторы?

Или я что-то не так запрограмил и async вообще не включается? (в этом коде никакого async не происходит!)
<script>
var x = 0;
var i = 0;
console.log("1 x=",x, " i=",i);

async function test()
{
console.log(" START async test");
for(i=0; i<10000000; i++)
{
x += Math.sin(i)+Math.cos(i*7.5);
};
console.log("END async test");
};

console.log("2 x=",x, " i=",i);
test();
console.log("3 x=",x, " i=",i);
</script>
Отредактировано 28.11.2017 12:15 loginx . Предыдущая версия . Еще …
Отредактировано 28.11.2017 12:01 loginx . Предыдущая версия .
Re[6]: JS vs. Native: сравнение на реальном нетривиальном пр
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 28.11.17 12:02
Оценка:
Здравствуйте, loginx, Вы писали:

L>а если чисто читать описание async то там сразу после вызова ф-я вернется и вернет промис, значит далее по идее должно продолжится

L>выполнение следующей строки...

Разумеется это не так. Промис то вернет. А следующая строка выполнится когда промис резолвнется.

>и в доках момент начала выполнения кода внутри асинк ф-ии как-то не нашел я в доках...


Нужно разобраться с Promise, callback и yield. async это yield промиса

https://hackernoon.com/6-reasons-why-javascripts-async-await-blows-promises-away-tutorial-c7ec10518dd9

L>т.е. судя по описанию оно может и в основной нити и в доп. выполнится, ... ну и есть же асинк типа чтения URL которые реально асинк


Асинк это инструмент для склеивания асинхронных цепочек. Чтение URL выполнится унутре браузера в другом потоке. К склеиванию это никакого отношения не имеет.

L>возможно пока нельзя создавать понастоящему асинк ф-ии прямо в коде, но встроенные реальные асинк уже есть, но сами доки про это ни слова...


API большей частью еще на колбеках. На промисах из широко известного fetch. Что такое по настоящему асинк функции прямо в коде ?
Отредактировано 28.11.2017 12:03 Pauel . Предыдущая версия .
Re[8]: JS vs. Native: сравнение на реальном нетривиальном пр
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 28.11.17 12:07
Оценка:
Здравствуйте, loginx, Вы писали:

I>>
I>>async function x() {let y=0; console.time(); for(let i=0;i<10000000;i++){ y+=Math.sin(i);} console.timeEnd(); }
I>>


I>>Код выполняется ажно 1 секунду и далее не тормозит Замени 10000000 на Infinity, узнаешь много нового.

L>да, согласен, мало итераци у меня было... однако со встроенным fetch(URL) работает не тормозя гуи хотя ччитать може и 1 час! (большой файд, медленный интернет)

И при чем здесь async ? fetch и без него не морозит UI

I>>Но вообще скучновато наблюдать, как ты открываешь для себя особенность JS, которой двадцать лет или больше


L>но async появились совсем недавно!! И из описания да и на практике для встроенных fetch(URL)

L>работает не тормозя гуи. Логично было ожидать что и самодельные async обладают свойствами встроенных в язык async ф-ий типа fetch()

Логично проверить fetch безо всяких асинков и узнать, что асинк ни при чем.

L>И исходя из публичных док на мозиле

L>асинк должна немедлено после вызова НЕ начиная выполнять код внутри вернуть
L>в точку вызоа проимс. И далее что? Выполняется следующая строка и тд (но тогда когда же стартует выполнение тела асинк ф-ии?)
L>Или все же перед возвратом все же в самодельной ф-ии должно выполнится все тело внутри...?
L>Но тогда деза в доках!!

Нет дезы. Надо разобраться в промисах.

L>Вот в ф-иях генераторах в доках ясно — старт это вызов next() — возврат — yield()

L>А в асинк ф-иях где ".next()" ?! Получается на текущий момент самодельные не встроенные в язык async ф-ии это всего лишь кастрированные Генераторы?

Унутре. Именно.
Re[9]: JS vs. Native: сравнение на реальном нетривиальном пр
От: loginx  
Дата: 28.11.17 12:20
Оценка:
I>Унутре. Именно.
А что это за невнятное мычание, сорри?
Оно же 1 млн. вхождений в гугле
let promise = fetch(url[, options]);
Re[9]: JS vs. Native: сравнение на реальном нетривиальном пр
От: loginx  
Дата: 28.11.17 12:24
Оценка:
I>Нет дезы. Надо разобраться в промисах.

промисы тут вообще не причем...
просто в текущей реализации "самодельные" async ф-ии не работает так как описано в доках, хотя в node.js работает.
Вместо немедленного возврата промиса сейчас асинк ф-ия (САМОДЕЛЬНАЯ) возвращает его только после выполнения своего тела.
Фактически сейчас async это генератор-фия с немедленным вызовом .next()и без yield()

а встроенные разрабами мозилы async ф-ии, наприме fetch() работают по докам, немедленный возврат промиса и выполнение следующей строки.

покопавшись в отладчике — вроде fetch определен как генератор а не асинк или возможно и как оба сразу... но точно не как только async
Отредактировано 28.11.2017 12:45 loginx . Предыдущая версия . Еще …
Отредактировано 28.11.2017 12:30 loginx . Предыдущая версия .
Re[7]: JS vs. Native: сравнение на реальном нетривиальном пр
От: loginx  
Дата: 28.11.17 12:43
Оценка:
Здравствуйте, Ikemefula, Вы писали:


I>Разумеется это не так. Промис то вернет. А следующая строка выполнится когда промис резолвнется.


вовсе нет, чтобы ожидать резолвинг надо на него повесить await
а так промис из fetch просто присвоится переменной и выполнение продолжится...

возможно я что-то тотально не понимаю, но вроде у меня так и работало....
надо ждать fetch жду через await — не надо, присваиваю промис с переменную и код идет дальше
Re[10]: JS vs. Native: сравнение на реальном нетривиальном пр
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 28.11.17 13:04
Оценка:
Здравствуйте, loginx, Вы писали:

I>>Нет дезы. Надо разобраться в промисах.


L>промисы тут вообще не причем...


Браво — в механике, которая прибита гвоздями к промисам, промисы оказывается ни при чем

L>просто в текущей реализации "самодельные" async ф-ии не работает так как описано в доках, хотя в node.js работает.


Все именно так, как надо работает, согласно докам. И в ноде идентично. Проблема только в API — не всё еще на промисы переведено.

L>Вместо немедленного возврата промиса сейчас асинк ф-ия (САМОДЕЛЬНАЯ) возвращает его только после выполнения своего тела.


Покажи код.

L>Фактически сейчас async это генератор-фия с немедленным вызовом .next()и без yield()


Фактически это две функции. Одна вызывает другую. Примерно так

async(*()=>{
   let value1 = yield fetch(url1);
   let value2 = yield fetch(url2);
})

function async(generator) {
  стартовать генератор
  вызывать then до посинения
}



L>а встроенные разрабами мозилы async ф-ии, наприме fetch() работают по докам, немедленный возврат промиса и выполнение следующей строки.


А как ты хотел ?

L>покопавшись в отладчике — вроде fetch определен как генератор а не асинк или возможно и как оба сразу... но точно не как только async


нет никакого специального async в АПИ. Есть функции, которые возвращают промисы. async это фича языка, которая умеет работать с такими функциями.
Просто сахар для promise.then().then().then().then().then().then()
Re[10]: JS vs. Native: сравнение на реальном нетривиальном пр
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 28.11.17 13:06
Оценка:
Здравствуйте, loginx, Вы писали:

I>>Унутре. Именно.

L>А что это за невнятное мычание, сорри?
L>Оно же 1 млн. вхождений в гугле
L>let promise = fetch(url[, options]);

А в асинк ф-иях где ".next()" ?! Получается на текущий момент самодельные не встроенные в язык async ф-ии это всего лишь кастрированные Генераторы?


асинк внутри использует yield. в этом плане async это кастрированый генератор — работает, как генератор, только ты не можешь получить аналогичного профита.
Re[8]: JS vs. Native: сравнение на реальном нетривиальном пр
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 28.11.17 13:12
Оценка:
Здравствуйте, loginx, Вы писали:

I>>Разумеется это не так. Промис то вернет. А следующая строка выполнится когда промис резолвнется.


L>вовсе нет, чтобы ожидать резолвинг надо на него повесить await


Смотри внимательно, эквивалентный код:
async function get(url) {
  let url2 = async fetch(url);
  return await fetch(url2);
}


function get(url) {
  return fetch(url).then((url2)=>fetch(url2));
}


Весь асинхронный код обязан быть внутри колбеков, что передаёшь в then.
Отредактировано 28.11.2017 13:13 Pauel . Предыдущая версия .
Re[11]: JS vs. Native: сравнение на реальном нетривиальном п
От: loginx  
Дата: 28.11.17 13:38
Оценка: -1 :)
вот сравниваю fetch() которая возвращает проимс МГНОВЕННО в состоянии ПЕНДИНГ
и далее никто не ждет резолвинга, как ты утверждаешь, далее код идет выполнятся на следующие строки.
Вот так должны работать асинки по докам.!!

А в реальности...
async функцию, любую, которую мы сами объявляем в нашем коде...

сразу запускает тело на выполнение!

НИЧЕГО НЕ ВОЗВРАЩАЕТ ПОКА ТЕЛО НЕ ВЫПОЛНЕНО!
(этот пункт как надо, но в сочетании с предыдущим и следующим — ж..а)

гуи висит и ожидает окончания выполнения тела якобы асинхронной ф-ии.

Проще говоря самописных async ф-ий нет, они сейчас остаются синхронными.
async — Фуфло, а жаль, я уж подумал наконец сделали удобную паралельность в JS

имхо дело в том что у нас нет метода pending() а есть только reject() и resolved()
по смыслу асинков метод pending() должен был бы возвращать пендинг промис не останавливая
выполнения тела асинк ф-ии, вызываться в начале тела ф-ии. Но его нет. А оствщиеся
два играют роль return — вызывают остановку выполнения тела ф-ии.
Отредактировано 28.11.2017 13:51 loginx . Предыдущая версия . Еще …
Отредактировано 28.11.2017 13:47 loginx . Предыдущая версия .
Отредактировано 28.11.2017 13:43 loginx . Предыдущая версия .
Re[12]: JS vs. Native: сравнение на реальном нетривиальном пр
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 28.11.17 13:46
Оценка:
Здравствуйте, loginx, Вы писали:

L>вот сравниваю fetch() которая возвращает проимс МГНОВЕННО в состоянии ПЕНДИНГ

L>и далее никто не ждет резолвинга, как ты утверждаешь, далее код идет выполнятся на следующие строки.

Разумеется. fetch возвращает промис, мгновенно и в состоянии pending. Именно с такими функциями работает async/await

L>Вот так должны работать асинки по докам.!!


fetch появился в браузере когда асинками там и не пахло. Как он работал без асинков ?

L>А в реальности...

L> async функцию, любую, которую мы сами объявляем в нашем коде...

Я не понимаю, что ты назваешь асинком. У меня асинк это функция вида async function () { ... } а у тебя похоже всё подряд.

L>Проще говоря самописных async ф-ий нет, они сейчас остаются синхронными.


Весь код в JS на самом деле 100% синхронный, однопоточный и асинхронность исключительно логическая.
Re[13]: JS vs. Native: сравнение на реальном нетривиальном п
От: loginx  
Дата: 28.11.17 13:57
Оценка:
Здравствуйте, Ikemefula, Вы писали:


I>fetch появился в браузере когда асинками там и не пахло. Как он работал без асинков ?


а какая разница, сейчас он возвращает промис. тчк.

Windows 3.1 как указал один из предыдущих ораторов тем не менее создавала удобную иллюзию многозадачности
чего-то подобного я и ожидал исходя по докам от асинков но оказалось они только на встроенных ф-иях
работают как по докам. Нечто вроде автоматических генератор-ф-ий...
Хотя была надежда что и в нитях запустят... воркеры то сделали... значит хотят все же когда-гить
запилить нормальную паралельность...

все же логично и просто, добавить return_pending()
после него запретить обращение к гуи. А саму паралельность либо как в виндах 3 или на истинных трэдах

сейчас же не только async фиктивная так и new promise — точно также вещает гуи пока тело не закончит.
Причем возврат пендинг ничего не меняет — все равно гуи подвешивает.
Отредактировано 28.11.2017 14:05 loginx . Предыдущая версия . Еще …
Отредактировано 28.11.2017 14:03 loginx . Предыдущая версия .
Отредактировано 28.11.2017 14:01 loginx . Предыдущая версия .
Re[14]: JS vs. Native: сравнение на реальном нетривиальном п
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 28.11.17 15:52
Оценка:
Здравствуйте, loginx, Вы писали:

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



I>>fetch появился в браузере когда асинками там и не пахло. Как он работал без асинков ?


L>а какая разница, сейчас он возвращает промис. тчк.


Я тебя ужасну — он и тогда промис возвращал. И работал так же.

Ты все хочешь блокирующий асинхронный вызов. Таких в JS нет и не будет.

Именно потому появилисб промисы. А async/await это инструмент работы с промисами. Это всего лишь фича языка.

Хочешь разобраться — качай промисы.
Re[14]: JS vs. Native: сравнение на реальном нетривиальном п
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 28.11.17 16:40
Оценка:
Здравствуйте, loginx, Вы писали:

L>Windows 3.1 как указал один из предыдущих ораторов тем не менее создавала удобную иллюзию многозадачности

L>чего-то подобного я и ожидал исходя по докам от асинков но оказалось они только на встроенных ф-иях
L>работают как по докам. Нечто вроде автоматических генератор-ф-ий...
L...

Еще раз — что ты называешь асинком? Ты адекватный? У тебя и fetch асинк, и языковые фичи это асинк и какойто мусор тоже асинк.

Проблемы Windows 3 очень похожи на проблемы JS — одна функция вешает вообще все. И там, и там кооперативная многозадачность. Разница только в том, что в JS она логическая.
Re: JS vs. Native: сравнение на реальном нетривиальном примере
От: Kolesiki  
Дата: 28.11.17 17:24
Оценка: :)
Здравствуйте, D. Mon, Вы писали:

DM>Видеокодек был реализован ... и на JavaScript


JS — это не язык, это отрыжка дьявола и порождение тупой обезьяны. Зачем каждый раз откапывать это "нечто" и трясти им как чем-то значимым?? Ну Фортран ещё достаньте, PL/1 где-то завалялся... почему у вас нехватает ума, чтобы один раз и навсегда предать анафеме этот язык-урод?? Всё, времена ЛИСПов и Брэйнфаков прошли, молодёжь! Втыкайте уже в отрасль, хватит этого хипстерства, линупсятины и прочего задротства.
Re[2]: JS vs. Native: сравнение на реальном нетривиальном пр
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 28.11.17 19:55
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>JS — это не язык, это отрыжка дьявола и порождение тупой обезьяны.


Совершенно верно.

K> Зачем каждый раз откапывать это "нечто"


Ссылки не читай
@
Сразу отвечай!

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

PS. В данном случае код-то писался на другом языке, более приличном, а в JS потом транслировался компилятором, так что ужасы JS-как-языка тут нерелевантны.
Отредактировано 29.11.2017 6:17 D. Mon . Предыдущая версия .
Re[2]: JS vs. Native: сравнение на реальном нетривиальном примере
От: wamaco  
Дата: 28.11.17 20:16
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Здравствуйте, D. Mon, Вы писали:


DM>>Видеокодек был реализован ... и на JavaScript


K>JS — это не язык, это отрыжка дьявола и порождение тупой обезьяны. Зачем каждый раз откапывать это "нечто" и трясти им как чем-то значимым?? Ну Фортран ещё достаньте, PL/1 где-то завалялся... почему у вас нехватает ума, чтобы один раз и навсегда предать анафеме этот язык-урод?? Всё, времена ЛИСПов и Брэйнфаков прошли, молодёжь! Втыкайте уже в отрасль, хватит этого хипстерства, линупсятины и прочего задротства.


Вот согласен 100 раз! Все правильно сказал!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.