ฟิวเจอร์สอธิบายไว้อย่างไรในแง่ของทฤษฎีหมวดหมู่?


22

มีคำอธิบายที่เป็นประโยชน์ของฟิวเจอร์สหรือสัญญาในแง่ของทฤษฎีหมวดหมู่หรือไม่? โดยเฉพาะอย่างยิ่งสิ่งที่คู่แท้ของอนาคตจะเป็นอย่างไร

คำตอบ:


25

มันเกิดขึ้นฉันกำลังเขียนบทความเกี่ยวกับเรื่องนี้ตอนนี้ IMO วิธีคิดที่ดีเกี่ยวกับฟิวเจอร์สหรือคำสัญญาคือในแง่ของการติดต่อกันของ Curry-Howard สำหรับตรรกะทางโลก

โดยพื้นฐานแล้วแนวคิดเบื้องหลังฟิวเจอร์สคือมันเป็นโครงสร้างข้อมูลที่แสดงถึงการคำนวณที่กำลังดำเนินการอยู่และคุณสามารถซิงโครไนซ์ได้ ในแง่ของตรรกะชั่วขณะนี้เป็นผู้ประกอบการในที่สุดนี่เป็นโครงสร้างแบบ monadic: r e t u r n : A A b i n d : ( A B ) AAB ที่r e t คุณr nA

return:AAbind:(AB)AB
returnการดำเนินงาน spawns กระบวนการที่ส่งกลับทันทีอาร์กิวเมนต์และสร้างกระบวนการใหม่ที่รอให้'s ค่าใช้ค่าที่แล้วรอสำหรับB -value ก่อนที่จะกลับ สัญญา / ข้อเสนอสำหรับ CommonJSเรียกดำเนินการผูกเอกและScala 2.10 เพียงแค่ให้มันอินเตอร์เฟซเอกมาตรฐานbindafBthen

คู่กับผู้ประกอบการในที่สุดเป็นผู้ประกอบการมักจะของตรรกะชั่วคราวซึ่งบอกว่าในทุกทันทีคุณจะได้รับ เมื่อคุณส่งผ่านความหมายของ Kripke ของตรรกะเชิงกาลเวลา (ซึ่งคุณเพิ่งเป็นแบบจำลองความสามารถในการพิสูจน์) ไปยังความหมายแบบ categorial ของλ -calculus (ซึ่งคุณจำลองแบบ lambda-term / proofs ด้วย) มันกลายเป็นว่ามีหลายวิธีในการทำเช่นนี้AAAλ

AAAA

ส่วนใหญ่ตามธรรมชาติ (IMO) สิ่งที่จะต้องทำคือการใช้ซึ่งอนุญาตให้คุณได้รับ (ที่แตกต่างกันอาจ) ในแต่ละทันที จากนั้นคุณสามารถดูรูปแบบ comonadic ของ functional reactive programming (FRP) (เสนอครั้งแรกโดยTarmo Uustalu และ Varmo Vene ) เป็นรูปแบบการเขียนโปรแกรมคู่กับ monadic ด้วยฟิวเจอร์สAAStreamAA

อย่างไรก็ตาม comonadic -calculus ตามที่พวกเขาแนะนำแม้จะมีความสง่างาม แต่ก็ทำให้เกิดการสูญเสียความหมายอย่างรุนแรงเมื่อเทียบกับการเขียนโปรแกรมอย่างชัดเจนกับลำธารตั้งแต่ประเภทของถ่านหินฟรีที่พวกเขาใช้จะมีองค์ประกอบระดับโลกน้อยเกินไป โดยเฉพาะจุดคงที่λ

Nick Benton และฉันได้โต้แย้งการเขียนโปรแกรมอย่างชัดเจนด้วยกระแสข้อมูลในบทความUltrametric Semantics of Reactive Programs ของเรา ต่อจากนั้นอลันเจฟฟรีย์แนะนำให้ใช้ LTL เป็นระบบการพิมพ์ในกระดาษของเขาชนิด LTL FRPมีข้อสังเกตว่าโวล์ฟกัง Jeltsch ยังทำในกระดาษของเขาไปสู่ความหมายหมวดหมู่ทั่วไปสำหรับการเชิงเส้นเวลาชั่วขณะและการเขียนโปรแกรมลอจิกปฏิกิริยาการทำงาน

ความแตกต่างระหว่างมุมมองนิคกับฉันและสิ่งที่อลันและโวล์ฟกังเข้าใจได้ดีที่สุดคือ (IMO) โดยการเปรียบเทียบการก่อสร้างใน Birkedal et al. ขั้นตอนแรกในทฤษฎีโดเมนที่ได้รับการปกป้องแบบสังเคราะห์: ขั้นตอนการจัดทำดัชนีใน topos ต้นไม้ด้วยกระดาษของอลัน Topos ของต้นไม้ (presheaves มากกว่าจำนวนธรรมชาติที่สั่งตามขนาด) นั้นคล้ายกับหมวดหมู่ของพื้นที่ ultrametric Nick และฉันใช้ แต่ง่ายกว่ามากเมื่อเปรียบเทียบกับหมวดของ Alan (presheaves เหนือหมวดหมู่ของเวลา) เนื่องจากทั้งคู่เป็น presheaf ประเภท

หากคุณสนใจฟิวเจอร์สโดยเฉพาะสำหรับการเกิดพร้อมกันมันอาจจะเป็นความคิดที่ดีกว่าถ้าจะดูCTLแทนที่จะเป็น LTL AFAIK ที่ไม่ได้สำรวจดินแดนในปัจจุบัน!

แก้ไข: นี่เป็นเชื่อมโยงไปยังร่าง กระดาษส่วนใหญ่เกี่ยวกับการใช้งาน FRP ที่พิมพ์ดังนั้นภาษาจึงมีความสอดคล้องกัน แต่การอภิปรายส่วนใหญ่เกี่ยวกับฟิวเจอร์ / เหตุการณ์ในหัวข้อ 3.3 โดยทั่วไปแล้วควรนำไปใช้กับภาษาที่เกิดขึ้นพร้อมกันอย่างแท้จริงเช่นกัน


1
ฉันชอบที่จะได้รับสำเนาของสิ่งนั้นเมื่อคุณทำเสร็จแล้ว
Dave Clarke

1
ดูเหมือนว่าสิ่งนี้จะสูญเสียคุณลักษณะที่สำคัญของฟิวเจอร์: เมื่อได้รับค่าแล้วมันจะไม่สามารถเปลี่ยนแปลงได้ ฉันจะพยายามแสดงมันด้วยการเอาเป็นสัจพจน์ แต่นี่ไม่ใช่สิ่งที่เราต้องการถ้าหมายถึงกระแส ... และฉันก็จะชอบสำเนาของกระดาษเมื่อมันทำ: )AA
Alexey Romanov

ฉันเพิ่งอ่านว่าประเภทสกาลาTry[T]และFuture[T]เป็นแบบคู่ แต่ฉันไม่เข้าใจเลยว่ามันแปลว่าอะไร
Giorgio
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.