ใครทำ async / รอก่อน


21

Python เพิ่ม async / await constructs ใน 3.5 ในปี 2015 ชุมชน Javascript ได้ทำตามขั้นตอนมาเป็นเวลากว่าพันล้านปีและในที่สุดก็เพิ่มการใช้งานที่คล้ายกันมากกับร่างใน ES8 ที่เปิดตัวในปี 2017 (จากความเข้าใจของฉัน) typescript ยังเพิ่มวิธีการ async ในปี 2015 ในรุ่น 1.7 ที่ดวงตาที่ไม่ได้รับการฝึกฝนดูเหมือนว่าวิธี js async

C # วิธีการเพิ่ม async ในปี 2012 ที่ดูเหมือนว่าการใช้งานอื่น ๆ ของ async / await และขึ้นอยู่กับการทำงานที่คล้ายกันของ F # แต่เวิร์กโฟลว์แบบอะซิงโครนัสที่ดูแตกต่างกันซึ่งถูกนำมาใช้ใน F # 2.0 ในปี 2010 นี่เป็นตัวอย่างแรกสุด - C # พร้อม async / คอยการจับคู่และ F # พร้อมการไหลของ async

มีตัวอย่างคำสำคัญที่ใช้ในบริบทนี้เป็นภาษาสร้าง (หรือไลบรารี) ก่อนหน้านี้หรือไม่ จากข้อมูลที่ จำกัด ของฉันดูเหมือนว่าทุกคนเลียนแบบส่วนที่ดีของการติดตั้ง C # แต่ C # คัดลอกมาจากคนอื่นหรือไม่


3
หากคุณกำลังมองหาการใช้คำasync awaitในภาษาการเขียนโปรแกรมนั่นเป็นสิ่งที่ค่อนข้างเร็ว แต่การเขียนโปรแกรมแบบอะซิงโครนัสชนิดที่ฝึกโดยasync awaitได้รับมาเป็นเวลานาน
Robert Harvey

คำตอบ:


27

การให้สัมภาษณ์กับ Anders Hejlsberg สำหรับช่อง 9 เกี่ยวกับการเขียนโปรแกรมแบบอะซิงโครนัส async/awaitใน C # ใช้แรงบันดาลใจจาก async worflows ใน F #

ในกรณีที่คุณไม่รู้ Anders Hejlsberg เป็นสถาปนิกหลักของ C # และยังทำงานในภาษาอื่น ๆ รวมถึง TypeScript

จากข้อมูลของ Don Syme ในบล็อกของเขาเวิร์กโฟลว์ F # async ได้รับแรงบันดาลใจจากการใช้ Monad แบบอะซิงโครนัสสำหรับฮาสเคลล์ โดยเฉพาะอย่างยิ่งกระดาษเป็งหลี่และKoen Claessen ของ "ยากจนของมนุษย์ Concurrency Monad" กระดาษ

ในกรณีที่คุณไม่ทราบ Don Syme เป็นสถาปนิกหลักของ F # เหนือสิ่งอื่นใด

กระดาษของ Koen Claessen เป็นการดำเนินการที่เก่ากว่าด้วยผลลัพธ์และความต่อเนื่องที่ฉันพบได้ในปี 1999 มันใช้งานพร้อมกันโดยการกำหนดปฏิบัติการปรมาณูความต่อเนื่องและตัวจัดตารางรอบ วิธีการแบบใช้เงินจะเป็นแรงจูงใจให้เปลี่ยนจากการส่งข้อความเป็นรอผล

งานก่อนหน้านี้สำหรับการทำงานพร้อมกันใน Haskell ใช้รูปแบบของช่องทางหรือการส่งข้อความเพื่อการสื่อสาร


เมื่อพูดถึงงานก่อนหน้านี้ฉันต้องพูดถึง Concurrent Haskell ซึ่ง "Monad Concurrency Monad" ของ A Poor Man เป็นทางเลือก ...

และบทความ"การเขียนโปรแกรมโดยนัยและโดยชัดแจ้งใน Haskell"โดย Mark P. Jones และ Paul Hudak กระดาษนี้วางรากฐานสำหรับกระดาษของ Koen Claessen

ในบทความ "การเขียนโปรแกรมโดยนัยและโดยชัดแจ้งใน Haskell" มาร์คและพอลวิเคราะห์คุณสมบัติของ "ส้อม" และปัญหาของผลข้างเคียงในการทำงานพร้อมกันเหนือสิ่งอื่นใด พวกเขาอ้างอิงกระดาษ"ความหมายสำหรับ ML concurrency primitives"ซึ่งเลือกชุด primitive ที่เกิดขึ้นพร้อมกันตาม Concurrent ML และให้หลักฐานที่แสดงว่าพวกเขารักษาคุณสมบัติการดำเนินการตามลำดับ


นี่เป็นคำตอบที่ดีจริงๆ ฉันดีใจที่คุณพูดถึง Haskell & ML (ซึ่งทั้งสองได้รับแรงบันดาลใจจาก F #) ฉันรู้ว่าคุณจะได้ยินคนที่ Haskell พูดถึง "สไตล์ความต่อเนื่อง" async / await เป็นเพียงแค่คอมไพเลอร์เวทมนต์ / ซินแท็กซ์น้ำตาลที่อยู่เหนือแนวคิดนั้น
RubberDuck

1

ฉันเชื่อว่า Microsoft จะไม่ใช้คำที่มีอยู่แล้วดังนั้นคำasyncและawaitสามารถนำมาประกอบกับเวลาที่คุณอ้างถึง อย่างไรก็ตามแนวคิดของCoroutinesและMultitasking แบบร่วมมือนั้นเก่ามาก


2
ฉันไม่คิดว่ามันถูกต้องเพื่อเปรียบเทียบ coroutines และการเขียนโปรแกรมแบบอะซิงโครนัส - พวกมันมีสิ่งที่เป็นนามธรรมที่แตกต่างกันมาก
wondra

3
"ฉันเชื่อว่า Microsoft จะไม่ใช้คำที่มีอยู่แล้ว" - คุณมีพื้นฐานความเชื่อนั้นหรือไม่? นักออกแบบของภาษาที่ประสบความสำเร็จมักจะเน้นในทางปฏิบัติมากกว่านั้น
Sebastian Redl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.