
ბრაუნის ლაბორატორია: async/await ენების მიხედვით სხვადასხვაგვარად მუშაობს
ბრაუნის უნივერსიტეტის ლაბორატორიის ნაშრომი აჩვენებს, რომ async/await შვიდ runtime-ში ოთხ სხვადასხვა შედეგს იძლევა — პატარა პროგრამაც კი ენის სემანტიკაზეა დამოკიდებული.
ბრაუნის უნივერსიტეტის Cognitive Engineering Lab-ის ახალი ნაშრომი იკვლევს, თუ როგორ იქცევა async/await შვიდ თანამედროვე runtime-ში — და აღმოაჩენს, რომ ისინი საერთო სინტაქსზე გაცილებით ნაკლებად თანხმდებიან. პოსტი გავინ გრეიმ 2026 წლის 8 სექტემბერს გამოაქვეყნა.
პატარა პროგრამა, ოთხი პასუხი
ენები 15 წელზე მეტია ერთ „წრფივ ასინქრონულობაზე“ იყრიან თავს — კონკურენტული კოდი ჩვეულებრივი, წრფივი კოდივით რომ გამოიყურებოდეს (Python, Rust, Swift). მაგრამ პატარა ფსევდოკოდი განსხვავებას ავლენს: write_to_log ბეჭდავს „A“-ს, ორწამიან sleep-ს ელოდება და შემდეგ „B“-ს ბეჭდავს; fire_and_forget ამ ფუნქციას ფონურ დავალებად უშვებს და დალოდების გარეშე ბრუნდება; main ელოდება fire_and_forget-ს, ერთ წამს იძინებს და ბეჭდავს „C“-ს. შვიდი runtime — Asyncio, C#, JavaScript, Tokio, Smol, Trio და Swift — ოთხ სხვადასხვა შედეგს იძლევა, ხოლო პროგრამის სამი ვარიაციიდან ვერც ორი runtime ერთსა და იმავეს არ ბეჭდავს.
ცხელი და ცივი გაშვება, ცხრა განზომილება
ახსნის ნაწილი „სისწრაფეა“: ცხელი გაშვება აბრუნებს დავალებას, რომელიც runtime-ში უკვე მუშაობს, ცივი კი — ინერტულ ობიექტს, რომელიც არაფერს აკეთებს, სანამ არ დაელოდები; Python და Rust ზარმაცად აფასებენ. ნაშრომი ასეთ ცხრა საპროექტო განზომილებას გამოყოფს — ეს გადაწყვეტილებები შესრულების დაკვირვებად სემანტიკას ცვლის და არა მხოლოდ წარმადობას — და სამ ჯგუფად ალაგებს: სიცოცხლის დასაწყისი, სიცოცხლის დასასრული და გაუქმება.
რატომ ბეჭდავს Swift „AC“-ს, Trio კი „ABC“-ს
მაგალითში ორი განზომილება დომინირებს. დინამიური ფარგლის შემთხვევაში დავალება ვერ იცოცხლებს იმ ფუნქციაზე მეტს, რომელმაც ის შექმნა — ეს Swift-მა და Python+Trio-მ აირჩია. ისინი განადგურებაში განსხვავდებიან: Swift გაუქმებულ დავალებას აჩერებს, Trio კი ზრდილობიანად ელოდება მის დასრულებას. ამიტომ Swift „AC“-ს ბეჭდავს, Trio — „ABC“-ს. გაუქმება სხვა თვალსაზრისითაც იცვლება: ცნობიერება, მდგრადობა (დავალებამ შეიძლება გაუქმება უგულებელყოს და გააგრძელოს, ან გაუქმებულად დარჩეს) და სიგნალის გავრცელების წესი — ზემოდან ქვემოთ, ქვემოდან ზემოთ თუ ყველა დამოკიდებულებისთვის ერთდროულად.
საპროექტო სივრცის უკან მდგარი კალკულუსი
სივრცის დასაზუსტებლად ავტორებმა ის ასინქრონული პროგრამების ბირთვული კალკულუსის ფორმალურ სემანტიკად თარგმნეს. აბსტრაქტული მანქანის კვალები ხაზს უსვამს იმ სემანტიკურ გადაწყვეტილებებს, რომლებიც შესრულებას ატოტებს, და ნაბიჯ-ნაბიჯ ხსნის, რატომ განსხვავდება პროგრამები. თითოეული განზომილება წარმადობის, მეხსიერების, ერგონომიკისა და სემანტიკის კომპრომისია; სწორი პასუხები არ არსებობს და ყველა ენას საკუთარი ლოგიკა აქვს — თუმცა პატარა პროგრამის ახსნაც კი დიდ სამუშაოს მოითხოვს.
SiTech — AI-გაძლიერებული ვებ დეველოპმენტი
ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.