{"id":40705,"date":"2023-10-02T09:43:54","date_gmt":"2023-10-02T13:43:54","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=40705"},"modified":"2023-10-02T09:45:33","modified_gmt":"2023-10-02T13:45:33","slug":"the-bleeding-edge-of-swift-concurrency","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2023\/10\/02\/the-bleeding-edge-of-swift-concurrency\/","title":{"rendered":"The Bleeding Edge of Swift Concurrency"},"content":{"rendered":"<p><a href=\"https:\/\/www.youtube.com\/watch?v=HqjqwW12wpw\">Matthew Massicotte<\/a> (<a href=\"https:\/\/mastodon.social\/@mattiem\/110990182457293621\">Mastodon<\/a>, via <a href=\"https:\/\/mastodon.social\/@juri\/111001341860925830\">Juri Pakaste<\/a>):<\/p>\n<blockquote cite=\"https:\/\/www.youtube.com\/watch?v=HqjqwW12wpw\">\n<p>Swift Concurrency is all about succinct, safe code. Yet, it comes with a surprising amount of subtly and new pitfalls. It&rsquo;s actually quite easy to accidentally introduce races and hangs. Learn about bringing async\/await and actors into your code without the pain.<\/p>\n<\/blockquote>\n<p>There&rsquo;s a lot packed into this short and sweet talk. I think it&rsquo;s a must-watch.<\/p>\n<p>See also: <a href=\"https:\/\/github.com\/groue\/Semaphore\">Semaphore<\/a>, <a href=\"https:\/\/github.com\/mattmassicotte\/MainOffender\">MainOffender<\/a>, <a href=\"https:\/\/github.com\/mattmassicotte\/Queue\">Queue<\/a>.<\/p>\n\n<p>Previously:<\/p>\n<ul>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2023\/01\/05\/limiting-swift-concurrencys-cooperative-pool\/\">Limiting Swift Concurrency&rsquo;s Cooperative Pool<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2022\/11\/08\/swift-concurrency-tips\/\">Swift Concurrency Tips<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2022\/07\/05\/the-power-of-swiftui-task-view-modifier\/\">The Power of SwiftUI &ldquo;task&rdquo; View Modifier<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2022\/05\/12\/mainactor-not-guaranteed\/\">@MainActor Not Guaranteed<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2022\/03\/28\/swift-async-algorithms-package\/\">Swift &ldquo;Async Algorithms&rdquo; Package<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2019\/08\/06\/practical-concurrency-some-rules\/\">Practical Concurrency: Some Rules<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Matthew Massicotte (Mastodon, via Juri Pakaste): Swift Concurrency is all about succinct, safe code. Yet, it comes with a surprising amount of subtly and new pitfalls. It&rsquo;s actually quite easy to accidentally introduce races and hangs. Learn about bringing async\/await and actors into your code without the pain. There&rsquo;s a lot packed into this short [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"2023-10-02T13:43:58Z","apple_news_api_id":"34038037-44d7-4f60-a643-d443f603ef78","apple_news_api_modified_at":"2023-10-02T13:45:35Z","apple_news_api_revision":"AAAAAAAAAAAAAAAAAAAAAA==","apple_news_api_share_url":"https:\/\/apple.news\/ANAOAN0TXT2CmQ9RD9gPveA","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[4],"tags":[55,800,880,31,2185,30,2223,571,74,71,2200,901,1812],"class_list":["post-40705","post","type-post","status-publish","format-standard","hentry","category-programming-category","tag-arc","tag-concurrency","tag-grand-central-dispatch-gcd","tag-ios","tag-ios-16","tag-mac","tag-macos-13-ventura","tag-memory-management","tag-opensource","tag-programming","tag-swift-concurrency","tag-swift-programming-language","tag-swiftui"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/40705","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=40705"}],"version-history":[{"count":2,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/40705\/revisions"}],"predecessor-version":[{"id":40707,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/40705\/revisions\/40707"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=40705"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=40705"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=40705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}