Node.js 10.5 рд░рд┐рд▓реАрдЬ: рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ


рдкрд┐рдЫрд▓реЗ рд╣рдлреНрддреЗ, Node.js рд╕рдВрд╕реНрдХрд░рдг 10.5.0 рдХреЛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдирд╡рд╛рдЪрд╛рд░ рдерд╛ рдЬрд┐рд╕рдХрд╛ рдорд╣рддреНрд╡ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХ - рдмрд╣реБрдкрд░рдд рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдХрдард┐рди рд╣реИред рддреБрд░рдВрдд рдореИрдВ рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реВрдВрдЧрд╛ред рдПрдкреАрдЖрдИ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдЪрд░рдг рдореЗрдВ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рдЫрд╛рдк рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдФрд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ, рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдпрд╛ рдХреАрдбрд╝реЗ ( рдореБрджреНрджреЛрдВ рдХреА рд╕реВрдЪреА) рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдВред


рд░реВрдк рдХреА рдХрд╣рд╛рдиреА


Node.js рдХреЗ рдЬреАрд╡рди рдХреЗ рджреМрд░рд╛рди, рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдПрдХ рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╕реНрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ Node.js рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рднреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦрд░реНрдЪ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдХреНрд╖рдо рддрд░реАрдХрд╛ рд╣реИред


рдлрд┐рд░ рднреА, Node.js рдореЗрдВ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЪрд░реНрдЪрд╛ рд╣рдореЗрд╢рд╛ V8 рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рдЕрдЬреНрдЮрд╛рдд рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдЯрд┐рдХреА рд╣реБрдИ рдереА: рджреЗрд╢реА рдореЙрдбреНрдпреВрд▓ рдХреИрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рдореЗрдореЛрд░реА рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ, рдереНрд░реЗрдбреНрд╕ рдФрд░ рдЕрдзрд┐рдХ рдХреЗ рдмреАрдЪ рд╕рдВрд╡рд╛рдж рдХрд░реЗрдВред рдФрд░ рдЬрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╡реЗрдм рдкрд░ рд╡рд┐рд╖рдп рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдкрдХреНрд╖ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рдереЗ, рд╡рд░реНрдХрд░ рдПрдкреАрдЖрдИ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рд╢реБрд░реБрдЖрддреА рдЪрд░рдгреЛрдВ рдореЗрдВ рдПрдХ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рдмрди рдЧрдпрд╛ рдерд╛ред рд╡рд┐рдХрд╛рд╕ Addaleax рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖ рдФрд░ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рд╕рдХреНрд░рд┐рдп рдХрд╛рд░реНрдп рд╡рд░реНрд╖ рдХреЗ рджреМрд░рд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рдбрд┐рдЬрд╛рдЗрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдПрдкреАрдЖрдИ рдиреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдиреЛрдб.рдЬреЗрдПрд╕-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╣реА рдХрд╛рд░реНрдпрдХрд░реНрддрд╛_рдереНрд░реЗрдбреНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред рдиреАрдЪреЗ рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛_ рд╢рдмреНрджреЛрдВ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛, рдФрд░ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рд▓реЗрдЦрди рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред


рд╡рд┐рд╡рд░рдг


рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд▓рдХреНрд╖реНрдп рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рднреАрддрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд▓реЛрдб рд╡рд┐рддрд░рд┐рдд рдХрд░рдХреЗ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдереНрд░реЗрдбреНрд╕ рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВрдЧреЗ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рджреЗрд╢реА рдореЙрдбреНрдпреВрд▓ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ)ред


рдЬреИрд╕рд╛ рдХрд┐ рд╡рд░реНрдХрд░ рдПрдкреАрдЖрдИ рдореЗрдВ, рдореБрдЦреНрдп рдФрд░ рдЪрд╛рдЗрд▓реНрдб рд╕реНрдЯреНрд░реАрдо рдХреЗ рдмреАрдЪ рдЗрдВрдЯрд░реЗрдХреНрд╢рди рдХреЛ рдЯреНрд░рд╛рдВрд╕рдПрдореНрдмрд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдкреЛрд╕реНрдЯрдореЗрд╕реЗрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╕рд╛рде рдПрдХреНрд╕реЗрд╕ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, SharedArrayBuffer рдЬреИрд╕реА рд╡рд╕реНрддреБрдПрдВ рдЕрдкрдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреА рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдХрд╛рд░рдг рд╡рд╕реВрд▓реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред


MessageChannel рдФрд░ MessagePort рдХреЛ WebAPI рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдЖрдкрдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореИрд╕реЗрдЬрд┐рдВрдЧ рдЪреИрдирд▓ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдереНрд░реЗрдб рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рдЬрдм рдЖрдк рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛_рд╢рд░реНрддреЛрдВ рдХреЛ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдзреНрд╡рдЬ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:


node --experimental-worker main.js 

рдЙрджрд╛рд╣рд░рдг


рдЪреВрдВрдХрд┐ рдПрдкреАрдЖрдИ рдЕрднреА рднреА рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдФрд░ рдмрдЪреНрдЪреЗ рдХреЗ рдзрд╛рдЧреЗ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдВрджреЗрд╢ рд╡рд┐рдирд┐рдордп рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдмрдЪреНрдЪрд╛ рдереНрд░реЗрдб рдЕрдкрдиреЗ рдереНрд░реЗрдб рдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ MessagePort рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИред


рдореБрдЦреНрдп рдзрд╛рд░рд╛


рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЛрдб:


 // main.js const {Worker} = require('worker_threads'); const worker = new Worker(__dirname + '/worker.js'); worker.on('online', () => { console.log('Worker ready'); }); worker.on('message', (msg) => { console.log('Worker message:', msg); }); worker.on('error', (err) => { console.error('Worker error:', err); }); worker.on('exit', (code) => { console.log('Worker exit code:', code); }); 

рдмрд╛рд▓ рдзрд╛рд░рд╛


рдмрдЪреНрдЪрд╛ рдереНрд░реЗрдб рддрдм рддрдХ рд░рд╣рддрд╛ рд╣реИ рдЬрдм рддрдХ рдЙрд╕рдХрд╛ рдИрд╡реЗрдВрдЯ рд▓реВрдк рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, worker.js рд╕реЗ рдХреЛрдб рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж worker.js рдереНрд░реЗрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, parentPort рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 // worker.js const {threadId, parentPort} = require('worker_threads'); parentPort.postMessage(`Hello from thread #${threadId}.`); // Exit happens here 

рдЪрд╛рдЗрд▓реНрдб рдереНрд░реЗрдб рдореЗрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд╡рд░рд░рд╛рдЗрдб рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреИрд░реЗрдВрдЯ рдереНрд░реЗрдб рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, SIGNINT рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, process.env рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓ рджреЗрдВ, рдФрд░ рдХреЙрд▓рд┐рдВрдЧ process.exit редexit рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд╣реАрдВред


рдирд┐рд╖реНрдХрд░реНрд╖


рд╢реНрд░рдорд┐рдХ рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд╕рдВрдЪрд╛рд░ рдФрд░ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рдпреВрдирд┐рдХреНрд╕ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЗ рдХрд╛рд░рдг рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЦреБрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЕрд╡рд╕рд░ рдирдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрднреА рддрдХ Node.js. рдЗрд╕ рдмреАрдЪ, рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдкреАрдЖрдИ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рд░рд╣рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВред


рд╕рдВрджрд░реНрдн


Source: https://habr.com/ru/post/hi415165/


All Articles