Design: ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° async / prom

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 7 янв. 2018  Β·  7ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: WebAssembly/design

МногиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ JavaScript ΡΠ²Π»ΡΡŽΡ‚ΡΡ асинхронными, ΠΈ я Π΅Ρ‰Π΅ Π½Π΅ Π²ΠΈΠ΄Π΅Π», Ρ‡Ρ‚ΠΎΠ±Ρ‹ WebAssembly ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π» обСщания.
Π§Ρ‚ΠΎΠ±Ρ‹ Π»Π΅Π³ΠΊΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ экосистСму JS, я Π±Ρ‹ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉ Π² ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… функциях.

НапримСр, это Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ:

const importObject = { 
  returnOneAsync: () => new Promise(done => done(1)) 
};
extern "C" int returnOneAsync();

int main(){
  int x = returnOneAsync(); // should suspend main until promise resolved.
  return x+x;
}

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π― Π΄ΡƒΠΌΠ°ΡŽ, Π²Ρ‹ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ модСль сСти. JavaScript Π½Π΅ являСтся ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ, поэтому приостановка вычислСний остановит Π΄Π²ΠΈΠΆΠΎΠΊ ΠΈ фактичСски вСсь Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Ρ€, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½. Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° зависнСт, ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ΄ Π½Π΅ смоТСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ (ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… процСссов). Π’Π°ΠΌ понадобится способ ΡƒΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ продолТСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ подвСска Π»Π΅Ρ‚Π΅Π»Π°, Ρ‡Ρ‚ΠΎ Π² настоящСС врСмя Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΠΈ.

ВсС 7 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π›ΡŽΠ±Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉ JS Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ прСдлоТСния ΠΏΠΎ привязкС хоста JS .

Но я боюсь, Ρ‡Ρ‚ΠΎ это Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ваш ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для этого ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сам C ΠΏΠΎΠ½ΠΈΠΌΠ°Π» асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ приостановку, Ρ‡Π΅Π³ΠΎ ΠΎΠ½ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² вашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ асинхронного, ΠΎΠ½ просто создаСт ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅, поэтому эквивалСнтный ΠΊΠΎΠ΄ Π΄Π°ΠΆΠ΅ Π½Π΅ приостанавливаСтся Π² самом JS, Π° просто создаСт строку Ρ‚ΠΈΠΏΠ° "[object Promise][object Promise]" .

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² вашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ асинхронного

Π§Ρ‚ΠΎ ΠΆ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСдоступно, ΠΏΠΎΠΊΠ° Ρ†ΠΈΠΊΠ» событий Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅.
ИдСя состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π²Π΅Π±-сборки, ΠΏΠΎΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ станСт доступным.
ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π΅Π½. Π‘ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ запрос ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ сСти: getAgeOf: (name) => db.find({name}).then(x=>x.age)

C сам, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ приостановку, Ρ‡Π΅Π³ΠΎ ΠΎΠ½ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚

Π­Ρ‚ΠΎ Π½Π΅Π²Π΅Ρ€Π½ΠΎ. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сопрограмм для C.
ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, LLVM-5.0 ΠΈ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ сопрограммы ΠΈ async / await.

https://llvm.org/docs/Coroutines.html

И Π² качСствС дополнСния ΠΊ C ++ 17 Π΅ΡΡ‚ΡŒ coroutine-ts , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ с clang-5.0.
Π•Π³ΠΎ ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ нСсколько ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ:
https://github.com/lewissbaker/cppcoro#generator

Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сопрограмм Π½Π° C Π½Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π²ΠΎΠ»ΡˆΠ΅Π±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ с Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий JavaScript. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, зависящСС ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ ΠΈ пСрСносимо Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ сопрограмм ΠΈΠ»ΠΈ асинхронных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π²Π°ΠΌ понадобится Ρ„ΠΎΡ€ΠΌΠ° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠΉ с раздСлитСлями Π² языкС. Π‘Π»ΠΈΠΆΠ°ΠΉΡˆΠΈΠΉ C ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ longjmp, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ нСдостаточно, ΠΈ Π² настоящСС врСмя ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² самом Wasm (с Emscripten longjmp Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² JS с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ JS). Π’ настоящСС врСмя Wasm Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ приостановку, хотя Π΅ΡΡ‚ΡŒ ΠΏΠ»Π°Π½Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² этом Ρ€ΠΎΠ΄Π΅ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅. Π‘ΠΎΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C ++ Π΅Ρ‰Π΅ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ стандартными ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Emscripten AFAICT.

Π― Π²ΠΈΠΆΡƒ, ΠΎΡ‚ΠΊΡƒΠ΄Π° Π²Ρ‹.
Π”ΡƒΠΌΠ°ΡŽ, я нСдостаточно Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π²Ρ‹Ρ€Π°Π·ΠΈΠ» свою идСю.
Π― Π½Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ сопрограммы ΠΈΠ»ΠΈ обСщания Π½Π° C / C ++ ΠΈΠ»ΠΈ ΠΎΡΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒ это Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π΅ wasm.

Но я боюсь, Ρ‡Ρ‚ΠΎ это Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ваш ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для этого ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сам C ΠΏΠΎΠ½ΠΈΠΌΠ°Π» асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ приостановку, Ρ‡Π΅Π³ΠΎ ΠΎΠ½ Π½Π΅

Как Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ C Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ асинхронноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅?

Π’ Ρ‡Π΅ΠΌ тСхничСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ выполнСния wasm Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ?

Π― понимаю, Ρ‡Ρ‚ΠΎ wasm Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅ скомпилирован для x86, Π½ΠΎ это Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ выполнСния.
ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ способ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ прСрывания ΠΈ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ptrace; Π²ΠΎΡ‚ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ. ΠœΡ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, ΠΈ для этого ΠΌΠΎΠΆΠ΅ΠΌ ввСсти ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ (x86) ΠΊΠΎΠ΄Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Π₯отя это Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ - это Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² этих случаях ΠΌΡ‹ всС Ρ€Π°Π²Π½ΠΎ ΠΆΠ΄Π΅ΠΌ выполнСния обСщания.
Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ приостановку / ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ / Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π² нашСм C ++ JIT / AoT Π½Π° основС LLVM.

Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ слСдуСт Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ host-bindings ...

Π― Π΄ΡƒΠΌΠ°ΡŽ, Π²Ρ‹ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ модСль сСти. JavaScript Π½Π΅ являСтся ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ, поэтому приостановка вычислСний остановит Π΄Π²ΠΈΠΆΠΎΠΊ ΠΈ фактичСски вСсь Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Ρ€, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½. Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° зависнСт, ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ΄ Π½Π΅ смоТСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ (ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… процСссов). Π’Π°ΠΌ понадобится способ ΡƒΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ продолТСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ подвСска Π»Π΅Ρ‚Π΅Π»Π°, Ρ‡Ρ‚ΠΎ Π² настоящСС врСмя Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΠΈ.

связанныС: https://github.com/WebAssembly/design/issues/720

Π― Π΄ΡƒΠΌΠ°ΡŽ, Π²Ρ‹ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ модСль сСти. JavaScript Π½Π΅ являСтся ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ, поэтому приостановка вычислСний остановит Π΄Π²ΠΈΠΆΠΎΠΊ ΠΈ фактичСски вСсь Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Ρ€, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½. Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° зависнСт, ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ΄ Π½Π΅ смоТСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ (ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… процСссов). Π’Π°ΠΌ понадобится способ ΡƒΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ продолТСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ подвСска Π»Π΅Ρ‚Π΅Π»Π°, Ρ‡Ρ‚ΠΎ Π² настоящСС врСмя Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΠΈ.

Π’ΠΎΡ‡Π½Π΅Π΅, wasm слСдуСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… процСссов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΎΠ±Π° созданы для Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, Π° Π½Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ