рдиреЛрдб-рд╕рд┐рдВрдХ - рдлрд╛рдЗрдмрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреЛрдбрдЬ рдкрд░ рдЫрджреНрдо-рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ

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

рдлрд╛рдЗрдмрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрд╡рд╕рд░реЛрдВ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдХрд░, рдореИрдВрдиреЗ рдПрдХ рдиреЛрдб-рд╕рд┐рдВрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдЦреА, рдЬреЛ рдиреЛрдбреНрдЬ рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЛрдб рдЕрдзрд┐рдХ рджреГрд╢реНрдпред

рд╕рд╛рд░

//   ,  callback    1  function someAsyncFunction(a, b, callback) { setTimeout(function(){ callback(null, a + b); }, 1000) } //    ,  Function.prototype.sync(), //     ,   call() //      ""  ,      var result = someAsyncFunction.sync(null, 2, 3); console.log(result); // "5"  1  


рджрд░реНрд╢рди


рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ Function.prototyp.sync () рд╡рд┐рдзрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рднреА рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЬреНрдЮрд╛рдд рдХреЙрд▓ () рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рд╕рд┐рдВрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдХреЗ, рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рд▓рд┐рдЦреЗ рдмрд┐рдирд╛, рдХрд┐рд╕реА рднреА рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЫрджреНрдо-рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ - рдХреНрдпреЛрдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди .prototyp.sync () рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдбред рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдХреЛ рд╣реА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рдмрд╕ рдкрд░рд┐рдгрд╛рдо ("рдЙрдкрдЬ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдХреЛрдб "рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ" рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдиреЛрдб-рд╕рд┐рдВрдХ рдореЗрд░реЗ рд▓рд┐рдП рддреАрди рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рд╢реНрди рд╣рд▓ рдХрд░рддрд╛ рд╣реИ:
1. рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде рдЕрдВрддрд╣реАрди рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╕реЗ рдЫреВрдЯ ("рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб" рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ)
2. рд╕рд╣реА рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ
3. рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдореМрдЬреВрджрд╛ рдХреЛрдб / рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг

рдПрдХ рдорд╣реАрдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЗрд╕ рдиреЛрдб-рд╕рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╕рдВрдХреНрд░рдордг рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рдерд╛ - рдореИрдВрдиреЗ рдмрд╕ "рдЫрджреНрдо-рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ" рддрд░реАрдХреЗ рд╕реЗ рдирдпрд╛ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдкреБрд░рд╛рдирд╛ рдХреЛрдб рд╡рд╣реА рд░рд╣рд╛ред

рддрд╛рд▓рд╛


"рдлрд╛рдЗрдмрд░" рдХреА рд╕реБрдВрджрд░рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдкреНрд░рддреАрдХреНрд╖рд╛ (рдЙрдкрдЬ) рд╣реЛрддреА рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдзрд╛рдЧрд╛ рдЕрд╡рд░реБрджреНрдз рд╣реЛрддрд╛ рд╣реИ, рди рдХрд┐ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ред рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд▓реЙрдХ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг fs.readFileSync рдФрд░ рдЕрдиреНрдп рдЫрджреНрдо-рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВред

"рдлрд╛рдЗрдмрд░" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рд╡реИрд╢реНрд╡рд┐рдХ рдЕрд╡рд░реЛрдзрди рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░, рдЙрд╕реА рд╕рдордп, рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░реЗрдВ:
 var fs = require('fs'), Sync = require('sync'); //    Sync(function(){ //   --> //   ,  Function.prototype.sync() var source = fs.readFile.sync(null, __filename); //     console.log(String(source)); }) 

рдЗрд╕ рдХреЛрдб рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╣рдо fs.readFile.sync () рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢рд╛рдВрддрд┐рдкреВрд░реНрд╡рдХ рдЕрдиреНрдп рд╕рдВрдЪрд╛рд▓рди рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред

рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐


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

рд╕рд╣реА рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдиреЛрдбрдЬ рдХреЛрдб:
 //   -    , //  ,       function asyncFunction(callback) { var p_client = new Db('test', new Server("127.0.0.1", 27017, {})); p_client.open(function(err, p_client) { if (err) return callback(err); // <--  p_client.createCollection('test_custom_key', function(err, collection) { if (err) return callback(err); // <--  collection.insert({'a':1}, function(err, docs) { if (err) return callback(err); // <--  collection.find({'_id':new ObjectID("aaaaaaaaaaaa")}, function(err, cursor) { if (err) return callback(err); // <--  cursor.toArray(function(err, items) { if (err) return callback(err); // <--  //  = items callback(null, items); }); }); }); }); }); } 

рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди, рдХреЗрд╡рд▓ рд╕рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдКрдкрд░ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рд╣реИ, рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдПред рдпрджрд┐ рдХреЛрдИ рднреА рдлрд╝рдВрдХреНрд╢рди рдСрдЯреЛ-рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╕рд┐рдВрдХ () рдЗрд╕рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдкрд░рд┐рдгрд╛рдореА рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдЖ рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдерд╛ред
 function syncFunction(callback) { //   Sync(function(){ var p_client = new Db('test', new Server("127.0.0.1", 27017, {})); p_client.open.sync(p_client); var collection = p_client.createCollection.sync(p_client, 'test'); collection.insert.sync(collection, {'a' : 1}); var cursor = collection.find.sync(collection, {'_id':new ObjectID("aaaaaaaaaaaa")) var items = cursor.toArray.sync(cursor); //  = items return items; }, callback) // <--    callback } 

рд╡рд┐рд╢реЗрд╖ рдлрд╝рдВрдХреНрд╢рди .prototyp.async () рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рднреА рд╕рд░рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдКрдкрд░ рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ):
 var syncFunction = function() { var p_client = new Db('test', new Server("127.0.0.1", 27017, {})); p_client.open.sync(p_client); var collection = p_client.createCollection.sync(p_client, 'test'); collection.insert.sync(collection, {'a' : 1}); var cursor = collection.find.sync(collection, {'_id':new ObjectID("aaaaaaaaaaaa")) var items = cursor.toArray.sync(cursor); //  = items return items; }.async() // <--          


рд╕рдорд╛рдирддрд╛


рдХрднреА-рдХрднреА, рд╣рдореЗрдВ рд╕рднреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реБрдП, рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрдИ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЬрд╛рд░реА рд░рд╣рддреА рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП Sync.Parallel рд╣реИ:

 var Sync = require('sync'); // -  ,     function someAsyncFunction(a, b, callback) { setTimeout(function(){ callback(null, a + b); }, 1000) } //   Sync(function(){ //       //      ,       var results = Sync.Parallel(function(callback){ someAsyncFunction(2, 2, callback()); someAsyncFunction(5, 5, callback()); }); console.log(results); // [ 4, 10 ] //   var results = Sync.Parallel(function(callback){ someAsyncFunction(2, 2, callback('foo')); // assign the result to 'foo' someAsyncFunction(5, 5, callback('bar')); // assign the result to 'bar' }); console.log(results); // { foo: 4, bar: 10 } }) 

рджреВрд╕рд░реЗ рджрд┐рди рдореИрдВрдиреЗ рдорд┐рд╕реНрдЯрд░ рд▓рд╛рд╡рд░реНрдбреЗрдЯ (v8 рдХреЗ рд▓рд┐рдП рдиреЛрдб-рдлрд╛рдЗрдмрд░ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛) рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХреА, рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ "рднрд╡рд┐рд╖реНрдп" рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рддрд┐рдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рд╛ редprototype.future () рд╡рд┐рдзрд┐ - рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 //   Sync(function(){ //  someAsyncFunction,     var foo = someAsyncFunction.future(null, 2, 2); var bar = someAsyncFunction.future(null, 5, 5); // foo, bar -     console.log(foo); // { [Function: Future] result: [Getter], error: [Getter] } //   ,    foo  bar console.log(foo.result, bar.result); // 4 10 -    ( ) }) 


рд╕реНрдерд╛рдкрдирд╛


$ npm install sync
$ node-fibers my_file.js


рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдлрд╛рдЗрдмрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ "рдиреЛрдб" рдХреЗ рдмрдЬрд╛рдп "рдиреЛрдб-рдлрд╛рдЗрдмрд░" рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдПрдкреАрдЖрдИ


 var Sync = require('sync'); //  , fn - -,    Sync(fn) //  , fn - -, /   callback Sync(fn, callback) //    callback() Sync.Parallel(function(callback){ callback() //   ( ) callback('foo') //    }) //      / // obj - ,        Function.prototype.sync(obj, arg1, arg2) //       ,     //  / Future,    getter 'result' //    Future.result,      ,      // obj - ,        Function.prototype.future(obj, arg1, arg2) //      -  //  ,     // obj -  Function.prototype.async(obj) 


рд╕рд╛рд░рд╛рдВрд╢


рдореИрдВ рдиреЛрдбрдЬ рдореЗрдВ рдЗрд╕ рджрд┐рд╢рд╛ рдХреЛ рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореБрдЭреЗ рдмрд╣реБрдд рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдЖрдк рдореЗрдВ рд╕реЗ рдХреЛрдИ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗ рд░рд╣рд╛ рд╣реИред

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

рдореИрдВ рдмреБрджреНрдзрд┐рд╢реАрд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдиреЗ рдореБрдЭреЗ рд╡рд┐рд╖рдп рддрдВрддреБрдУрдВ рд╕реЗ рд╕рдВрдХреНрд░рдорд┐рдд рдХрд┐рдпрд╛ :)

рдЖрдкрдХреЛ рдиреЛрдб-рдлрд╛рдЗрдмрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рднреА рд░реБрдЪрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред

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


All Articles