การใช้ Process Calculi และ PL ทฤษฎีสำหรับการพัฒนาภาษาการเขียนโปรแกรมที่ทันสมัย


10

ในขณะนี้ฉันมีความสนใจอย่างมากในการเขียนโปรแกรมทฤษฎีภาษาและกระบวนการคำนวณและเริ่มศึกษาพวกเขา พูดตามตรงมันเป็นสิ่งที่ฉันไม่รังเกียจที่จะไปประกอบอาชีพ ฉันพบว่าทฤษฎีน่าหลงใหลอย่างไม่น่าเชื่อ หนึ่งคำถามคงที่ฉันยังคงทำงานอยู่คือถ้าทั้งทฤษฎี PL หรือ Calculi มีความสำคัญใด ๆ ในการพัฒนาภาษาการเขียนโปรแกรมที่ทันสมัย ฉันเห็นตัวแปรมากมายใน Pi-แคลคูลัสที่นั่นและมีงานวิจัยมากมาย แต่พวกเขาจะต้องการหรือมีแอปพลิเคชันที่สำคัญหรือไม่? เหตุผลที่ฉันถามคือเพราะฉันรักการพัฒนาภาษาการเขียนโปรแกรมและเป้าหมายสุดท้ายที่แท้จริงคือการใช้ทฤษฎีเพื่อสร้าง PL จริง ๆ สำหรับสิ่งที่ฉันเขียนไม่มีความสัมพันธ์ใด ๆ กับทฤษฎีเลย

คำตอบ:


9

คำตอบของฉันเป็นเพียงรายละเอียดของ Gilles 'ที่ฉันไม่ได้อ่านก่อนที่ฉันจะเขียนของฉัน บางทีมันอาจจะมีประโยชน์

ให้ฉันเริ่มต้นความพยายามในการตอบคำถามของคุณด้วยความแตกต่างระหว่างสองมิติของภาษาการเขียนโปรแกรมที่เกี่ยวข้องกับทฤษฎีภาษาโปรแกรมโดยทั่วไปและแคลคูลัสกระบวนการโดยเฉพาะ

  • การวิจัยบริสุทธิ์

  • การวิจัยและพัฒนาผลิตภัณฑ์ที่มุ่งเน้น

โดยทั่วไปแล้วจะเกิดขึ้นในอุตสาหกรรมโดยมีวัตถุประสงค์เพื่อให้ภาษาการเขียนโปรแกรมเป็นผลิตภัณฑ์ ทีมพัฒนา Java ที่ Oracle และ C # ที่ Microsoft เป็นตัวอย่าง ในทางตรงกันข้ามการวิจัยที่บริสุทธิ์ไม่ได้เชื่อมโยงกับผลิตภัณฑ์ โดยมีวัตถุประสงค์คือเพื่อทำความเข้าใจภาษาการเขียนโปรแกรมเป็นวัตถุที่น่าสนใจและสำรวจโครงสร้างทางคณิตศาสตร์ที่รองรับภาษาการเขียนโปรแกรมทั้งหมด

เนื่องจากเป้าหมายที่แตกต่างกันแง่มุมต่าง ๆ ของทฤษฎีภาษาโปรแกรมนั้นมีความเกี่ยวข้องในการวิจัยที่บริสุทธิ์และในการวิจัยและพัฒนาผลิตภัณฑ์ R&D ภาพด้านล่างอาจแสดงสิ่งที่สำคัญ

ป้อนคำอธิบายรูปภาพที่นี่

อาจมีคนถาม ณ จุดนี้ว่าทำไมทั้งสองมิติจึงดูแตกต่างกันและเกี่ยวข้องกันอย่างไร

ความเข้าใจที่สำคัญคือการวิจัยและพัฒนาภาษาการเขียนโปรแกรมมีหลายมิติ: เทคนิคสังคมและเศรษฐกิจ เกือบตามคำนิยามอุตสาหกรรมมีความสนใจในผลตอบแทนทางเศรษฐกิจของภาษาโปรแกรม Microsoft และอัลไม่ได้พัฒนาภาษาจากความดีในใจของพวกเขา แต่เพราะพวกเขาเชื่อว่าภาษาการเขียนโปรแกรมให้พวกเขาได้เปรียบทางเศรษฐกิจ และพวกเขาได้ทำการตรวจสอบอย่างลึกซึ้งว่าเหตุใดภาษาการเขียนโปรแกรมบางภาษาจึงประสบความสำเร็จและคนอื่น ๆ ดูเหมือนกันหรือมีคุณสมบัติขั้นสูงมากกว่า และพวกเขาพบว่าไม่มีเหตุผลเดียว ภาษาการเขียนโปรแกรมและสภาพแวดล้อมของภาษานั้นซับซ้อนและเป็นสาเหตุของการใช้หรือละเว้นภาษาเฉพาะใด ๆ แต่ปัจจัยที่สำคัญที่สุดเพียงประการเดียวสำหรับความสำเร็จของภาษาโปรแกรมคือสิ่งที่แนบมาพิเศษของโปรแกรมเมอร์กับภาษาที่มีการใช้กันอย่างแพร่หลาย: ยิ่งมีคนใช้ภาษา, ห้องสมุด, เครื่องมือ, สื่อการสอนมากขึ้นและมีโปรแกรมเมอร์มากขึ้น สามารถใช้ภาษานั้นได้ สิ่งนี้เรียกว่าเอฟเฟกต์เครือข่าย อีกเหตุผลหนึ่งคือภาษาที่สลับค่าใช้จ่ายสูงสำหรับบุคคลและองค์กร: ภาษาที่เชี่ยวชาญโดยเฉพาะกับโปรแกรมเมอร์ที่ไม่ค่อยมีประสบการณ์และเมื่อระยะทางความหมายของภาษาที่คุ้นเคยนั้นมีขนาดใหญ่นั้นเป็นเรื่องที่ใช้เวลานานและจริงจัง จากข้อเท็จจริงเหล่านี้เราอาจถามว่าทำไมภาษาใหม่ถึงได้รับแรงฉุดเลย? ทำไม บริษัท ถึงต้องพัฒนาภาษาใหม่ ๆ ? ทำไมเราไม่อยู่กับ Java หรือ Cobol ฉันคิดว่ามีเหตุผลสำคัญหลายประการสำหรับเวย์ที่ภาษาประสบความสำเร็จ

  • โดเมนใหม่ของการเขียนโปรแกรมเปิดขึ้นซึ่งไม่มีหน้าที่ในการไล่ ตัวอย่างหลักคือเว็บที่มีจาวาสคริปต์เพิ่มขึ้น

  • ความหนืดของภาษา จากนี้ฉันหมายถึงราคาที่สูงของการเปลี่ยนภาษา แต่บางครั้งโปรแกรมเมอร์ก็ย้ายไปยังสาขาต่าง ๆ การใช้ภาษาการเขียนโปรแกรมกับพวกเขาและประสบความสำเร็จกับภาษาเก่าในสาขาใหม่

  • ภาษาถูกผลักดันโดย บริษัท ขนาดใหญ่ที่มีอาวุธทางการเงินที่ร้ายแรง การสำรองข้อมูลนี้ช่วยลดความเสี่ยงของการยอมรับเนื่องจากผู้ใช้ในช่วงต้นสามารถมั่นใจได้ว่าภาษาจะยังคงได้รับการสนับสนุนในอีกไม่กี่ปี ตัวอย่างที่ดีของสิ่งนี้คือ C #

  • ภาษาอาจมาพร้อมกับเครื่องมือที่น่าสนใจและระบบนิเวศ ที่นี่ด้วย C # และเป็น. Net และ Visual Studio eco-system อาจถูกกล่าวถึงเป็นตัวอย่าง

  • ภาษาเก่ารับคุณสมบัติใหม่ Java อยู่ในใจซึ่งในแต่ละการวนซ้ำหยิบความคิดที่ดีขึ้นจากประเพณีการเขียนโปรแกรมการทำงาน

  • ในที่สุดภาษาใหม่อาจมีข้อได้เปรียบทางเทคนิคที่แท้จริงเช่นมีความชัดเจนมากขึ้นมีไวยากรณ์ที่ดีกว่าระบบการพิมพ์ที่จับข้อผิดพลาดได้มากขึ้นเป็นต้น

ด้วยพื้นฐานนี้จึงไม่น่าแปลกใจเลยที่จะมีการตัดการเชื่อมต่อระหว่างการวิจัยภาษาโปรแกรมบริสุทธิ์และการพัฒนาภาษาโปรแกรมเชิงพาณิชย์ ในขณะที่ทั้งคู่ตั้งเป้าที่จะสร้างซอฟต์แวร์และวิวัฒนาการให้มีประสิทธิภาพมากขึ้นโดยเฉพาะอย่างยิ่งซอฟต์แวร์ขนาดใหญ่งานด้านการเขียนโปรแกรมเชิงอุตสาหกรรมจะต้องให้ความสนใจในการอำนวยความสะดวกในการนำไปใช้อย่างรวดเร็วเพื่อเข้าถึงกลุ่มที่สำคัญ สิ่งนี้นำไปสู่การมุ่งเน้นการวิจัยเกี่ยวกับสิ่งต่าง ๆ ที่โปรแกรมเมอร์ทำงานดูแล และนั่นก็มักจะเป็นสิ่งที่ต้องการเช่นความพร้อมใช้งานของไลบรารีความเร็วของคอมไพเลอร์คุณภาพของโค้ดที่คอมไพล์ความสามารถในการพกพาและอื่น ๆ แคลคูลัสของกระบวนการที่เราฝึกฝนในวันนี้มีประโยชน์น้อยต่อโปรแกรมเมอร์ที่ทำงานในโครงการหลัก (แม้ว่าฉันเชื่อว่ามันจะเปลี่ยนไปในอนาคต)

การวิจัยภาษาการเขียนโปรแกรมบริสุทธิ์นั้นแตกต่างกันมาก มันทำงานร่วมกับรูปแบบการเขียนโปรแกรมภาษาที่ง่ายขึ้น: -calculus เป็นฟังก์ชั่นการเขียนโปรแกรมที่ง่ายมาก ในทำนองเดียวกัน -calculus เป็นการลดความซับซ้อนอย่างมากของการเขียนโปรแกรมพร้อมกัน การทำให้เข้าใจง่ายขนาดใหญ่เหล่านี้เป็นกุญแจสู่การวิจัยที่ประสบความสำเร็จ มันช่วยให้เราสามารถมุ่งเน้นไปที่กลไกการคำนวณหลัก (เช่นเธบีตาλπβ- การลดสำหรับการเขียนโปรแกรมการทำงานการแก้ปัญหา / การรวมสำหรับการเขียนโปรแกรมตรรกะการส่งชื่อสำหรับการคำนวณพร้อมกัน) เพื่อให้เข้าใจว่าภาษาอย่างสกาล่าสามารถใช้การอนุมานแบบเต็มรูปแบบได้หรือไม่เราไม่ต้องกังวลเกี่ยวกับ JVM การคิดเกี่ยวกับ JVM จริงจะทำให้เสียความเข้าใจที่ดีขึ้นของการอนุมานประเภท นั่นเป็นสาเหตุที่ทำให้นามธรรมของการคำนวณเป็นนิวคอร์เล็ก ๆ นั้นมีความสำคัญและทรงพลัง

ดังนั้นคุณสามารถคิดว่าการวิจัยภาษาโปรแกรมเป็นแซนด์บ็อกซ์ขนาดใหญ่ที่ผู้คนเล่นกับของเล่นและหากพวกเขาพบสิ่งที่น่าสนใจเมื่อเล่นกับของเล่นที่เฉพาะเจาะจงและได้ตรวจสอบของเล่นอย่างละเอียดแล้วของเล่นที่น่าสนใจจะเริ่มเดินขบวน . ฉันพูดว่าเดินขบวนนาน ๆ เพราะคุณสมบัติทางภาษาที่คิดค้นโดยนักวิจัยด้านการเขียนโปรแกรมภาษามักจะใช้เวลาหลายทศวรรษกว่าจะได้รับการยอมรับ ยกตัวอย่างเช่นการเก็บขยะได้เกิดขึ้นในช่วงทศวรรษที่ 1950 และแพร่หลายใน Java ในปี 1990 การจับคู่รูปแบบ harks กลับไปปี 1970 และมีการใช้กันอย่างแพร่หลายตั้งแต่ Scala

แคลคูลัสกระบวนการเป็นของเล่นที่น่าสนใจเป็นพิเศษ แต่มันใหม่เกินไปที่จะตรวจสอบอย่างละเอียด นั่นจะใช้เวลาอีกทศวรรษของการวิจัยที่บริสุทธิ์ สิ่งที่กำลังเกิดขึ้นในการวิจัยทฤษฎีกระบวนการคือการนำเรื่องราวความสำเร็จที่ยิ่งใหญ่ที่สุดเพียงอย่างเดียวของการวิจัยภาษาโปรแกรม, ทฤษฎีของประเภท (เรียงตามลำดับ) และพัฒนาทฤษฎีของประเภทสำหรับการส่งข้อความพร้อมกัน ระบบการพิมพ์ที่มีความหมายปานกลางสำหรับการเขียนโปรแกรมซีเควนเชียลกล่าวว่า Hindley-Milner ปัจจุบันมีความเข้าใจแพร่หลายและได้รับการยอมรับจากโปรแกรมเมอร์ที่ทำงาน เราต้องการที่จะแสดงประเภทปานกลางสำหรับการเขียนโปรแกรมพร้อมกัน งานวิจัยนี้เริ่มต้นขึ้นในปี 1980 โดยผู้บุกเบิกอย่าง Milner, Sangiorgi, Turner, Kobayashi, Honda, และคนอื่น ๆ ซึ่งมีพื้นฐานมาจากแนวคิดเชิงเส้นตรงซึ่งมาจากตรรกะเชิงเส้น ไม่กี่ปีที่ผ่านมาได้เห็นการเพิ่มขึ้นอย่างมากในกิจกรรมและฉันคาดว่าเส้นทางนี้ขึ้นเพื่อดำเนินการต่อไปในอนาคตอันใกล้ ฉันยังคาดหวังว่างานนี้จะเริ่มรั่วเข้าไปในผลิตภัณฑ์ที่เน้นการวิจัยและพัฒนาในส่วนของเหตุผลที่นักวิจัยรุ่นใหม่ที่ได้รับการฝึกอบรมในแคลคูลัสในกระบวนการจะไปทำงานในห้องปฏิบัติการวิจัยและพัฒนาอุตสาหกรรม แต่เพราะวิวัฒนาการของ CPU และสถาปัตยกรรมคอมพิวเตอร์ จากรูปแบบการคำนวณตามลำดับ

โดยสรุปแล้วฉันจะไม่กังวลว่าคุณจะไม่พบทฤษฎีภาษาการเขียนโปรแกรมที่ทันสมัยเช่นแคลคูลัสของกระบวนการที่มีประโยชน์ในการสร้างภาษาของคุณเอง นั่นเป็นเพียงเพราะทฤษฎีที่ทันสมัยไม่ได้อยู่ที่ความกังวลของภาษาการเขียนโปรแกรมปัจจุบัน มันเกี่ยวกับภาษาในอนาคต มันจะใช้เวลาสักครู่สำหรับ 'โลกแห่งความจริง' ที่จะตามหา ความรู้ที่คุณใช้ในการสร้างภาษาสำหรับวันนี้คือทฤษฎีภาษาโปรแกรมของอดีต ฉันขอแนะนำให้คุณเรียนรู้เพิ่มเติมเกี่ยวกับแคลคูลัสของกระบวนการเพราะมันเป็นหนึ่งในสาขาวิชาที่น่าสนใจที่สุดของวิทยาศาสตร์คอมพิวเตอร์เชิงทฤษฎี


1
ว้าว! ต้องใช้เวลานานเท่าใดในการสร้างไดอะแกรมและฉันจะใช้ในอนาคตได้หรือไม่
ดี้

1
@cody ใช้เวลาไม่กี่วินาทีกับ OmniGraffle และอย่าลังเลที่จะใช้
Martin Berger

8

ศาสตร์แห่งการออกแบบภาษาโปรแกรมเป็นอย่างมากในวัยเด็ก ทฤษฎี (การศึกษาความหมายของโปรแกรมและความหมายของภาษา) และประจักษ์นิยม (สิ่งที่โปรแกรมเมอร์จัดการหรือไม่จัดการที่จะทำ) ให้ข้อโต้แย้งเชิงคุณภาพจำนวนมากเพื่อชั่งน้ำหนักทางเดียวหรืออื่นเมื่อออกแบบภาษา แต่เราไม่ค่อยมีเหตุผลเชิงปริมาณในการตัดสินใจ

มีความล่าช้าในช่วงเวลาที่บางทฤษฎีมีความมั่นคงเพียงพอสำหรับนวัตกรรมที่จะใช้งานได้ในภาษาโปรแกรมเชิงปฏิบัติและเวลาที่นวัตกรรมนี้เริ่มปรากฏในภาษา "หลัก" ตัวอย่างเช่นการจัดการหน่วยความจำอัตโนมัติที่มีการรวบรวมขยะสามารถกล่าวได้ว่าเป็นผู้ใหญ่สำหรับใช้ในอุตสาหกรรมในช่วงกลางทศวรรษ 1960 แต่มีเพียงถึงกระแสหลักกับ Java ในปี 1995 Parametric polymorphism เป็นที่เข้าใจกันดีในช่วงปลายทศวรรษ 1970 และทำให้เป็นจริง เป็น Java ในช่วงกลางทศวรรษที่ 200 ในขนาดของอาชีพนักวิจัย 30 ปีเป็นเวลานาน

การใช้ภาษาในวงกว้างในอุตสาหกรรมเป็นเรื่องสำคัญสำหรับนักสังคมวิทยาในการศึกษาและวิทยาศาสตร์นั้นยังอยู่ในวัยเด็ก การพิจารณาของตลาดเป็นปัจจัยสำคัญหาก Sun, Microsoft หรือ Apple ผลักดันภาษาสิ่งนี้มีผลกระทบมากกว่าการใช้เอกสาร POPL และ PLDI จำนวนมาก แม้สำหรับโปรแกรมเมอร์ที่มีตัวเลือกห้องสมุดก็มักมีความสำคัญมากกว่าการออกแบบภาษา ไม่ควรพูดว่าการออกแบบภาษาไม่สำคัญ: การมีภาษาที่ออกแบบมาอย่างดีเป็นสิ่งที่ช่วยบรรเทา มันมักจะไม่ใช่ปัจจัยในการตัดสินใจ

นิ่วกระบวนการยังอยู่ในขั้นตอนที่ทฤษฎีไม่ได้ทรงตัว เราเชื่อว่าเราเข้าใจการคำนวณตามลำดับ - โมเดลทั้งหมดของสิ่งที่เราต้องการเรียกการคำนวณตามลำดับนั้นเทียบเท่า (นั่นคือวิทยานิพนธ์ทัวริสต์ของทัวริสต์) สิ่งนี้ไม่ได้เกิดขึ้นพร้อมกัน: นิ่วในกระบวนการที่แตกต่างกันมีแนวโน้มที่จะมีความแตกต่างเล็กน้อยในเรื่องการแสดงออก

กระบวนการนิรนัยมีความหมายในทางปฏิบัติ การคำนวณจำนวนมากมีการกระจาย - พวกเขาเกี่ยวข้องกับลูกค้าที่พูดคุยกับเซิร์ฟเวอร์, เซิร์ฟเวอร์ที่พูดคุยกับเซิร์ฟเวอร์อื่น ๆ ฯลฯ แม้กระทั่งการคำนวณในท้องถิ่นมักจะเป็นแบบมัลติเธรดเพื่อใช้ประโยชน์จากความขนานมากกว่าโปรเซสเซอร์หลายตัวและตอบสนองต่อสิ่งแวดล้อม และกับผู้ใช้)

จำเป็นต้องมีความก้าวหน้าในการวิจัยเพื่อสร้างซอฟต์แวร์ที่ดีขึ้นหรือไม่? หลังจากทั้งหมดมีอุตสาหกรรมพันล้านดอลลาร์ออกมีที่ไม่สามารถบอกแคลคูลัส pi จากวงกลมในท้องฟ้า จากนั้นอีกครั้งอุตสาหกรรมที่ใช้จ่ายหลายพันล้านดอลลาร์เพื่อแก้ไขข้อบกพร่อง

“ พวกเขาจะถูกต้องการหรือไม่” ไม่ใช่คำถามที่คุ้มค่าในการวิจัย เป็นไปไม่ได้ที่จะทำนายล่วงหน้าว่าอะไรจะส่งผลระยะยาว ฉันจะไปต่อและบอกว่ามันเป็นข้อสันนิษฐานที่ปลอดภัยว่าการวิจัยใด ๆ จะมีผลในวันหนึ่ง - เราแค่ไม่รู้ว่าวันนั้นจะมาในปีหน้าหรือสหัสวรรษถัดไป


3

ฉันเห็นตัวแปรมากมายใน Pi-แคลคูลัสที่นั่นและมีงานวิจัยมากมาย แต่พวกเขาจะต้องการหรือมีแอปพลิเคชันที่สำคัญหรือไม่?

เหตุผลที่ฉันถามคือเพราะฉันรักการพัฒนาภาษาการเขียนโปรแกรมและเป้าหมายสุดท้ายที่แท้จริงคือการใช้ทฤษฎีเพื่อสร้าง PL จริง ๆ สำหรับสิ่งที่ฉันเขียนไม่มีความสัมพันธ์ใด ๆ กับทฤษฎีเลย

นี่เป็นคำถามที่ยุ่งยาก! ฉันจะบอกคุณความเห็นส่วนตัวของผมและผมเน้นว่านี่เป็นของฉันความคิดเห็น

ฉันไม่คิดว่า pi-แคลคูลัสเหมาะกับการเขียนโปรแกรมโดยตรงพร้อมกัน แต่ผมคิดว่าคุณควรแน่นอนศึกษามันก่อนที่จะออกแบบภาษาโปรแกรมพร้อมกัน เหตุผลก็คือ pi-แคลคูลัสให้ระดับต่ำ --- แต่ที่สำคัญคือการแต่งเพลง! --- บัญชีของการเกิดพร้อมกัน เป็นผลให้สามารถแสดงทุกสิ่งที่คุณต้องการ แต่ไม่สะดวกเสมอไป

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

ตอนนี้วินัยตามธรรมชาติของ pi-แคลคูลัสเป็นตัวแปรของตรรกะเชิงเส้นแบบดั้งเดิม ตัวอย่างเช่นดูกระบวนการความเป็นจริงของกระดาษของ Abramsky ซึ่งแสดงให้เห็นว่าคุณตีความโปรแกรมที่เกิดขึ้นพร้อมกันอย่างง่าย ๆ เพื่อพิสูจน์ข้อเสนอจากตรรกะเชิงเส้นได้อย่างไร (วรรณคดีมีงานประเภทเซสชันจำนวนมากสำหรับการพิมพ์โปรแกรม pi-แคลคูลัส แต่ประเภทเซสชันและประเภทเชิงเส้นสัมพันธ์กันอย่างใกล้ชิดมาก)

อย่างไรก็ตามฉันบอกว่าวินัยประเภทตามธรรมชาติของ pi-แคลคูลัสเป็นตรรกะเชิงเส้นแบบคลาสสิกและนี่คือที่มาของความยากลำบากในการใช้งานโดยตรงเป็นภาษาการเขียนโปรแกรม ในการนำเสนอส่วนใหญ่ของตรรกะเชิงเส้นแบบคลาสสิกฟังก์ชัน (เชิงเส้น) ชนิดไม่ใช่แบบดั้งเดิม แต่คุณเข้ารหัสประเภทฟังก์ชั่นการใช้เดมอร์แกนคู่BABAB

นี่เป็นสิ่งที่ดีจากทฤษฎีประเภท POV แต่ก็ไม่สะดวกเมื่อเขียนโปรแกรม เหตุผลก็คือโปรแกรมเมอร์เขียนโปรแกรมไม่เพียง แต่จะเรียกฟังก์ชั่นการโทรเท่านั้น แต่ยังรวมถึง call stack ด้วย (จริง ๆ แล้วการเข้ารหัสแลมบ์ดาแคลคูลัสเป็นปี่แคลคูลัสโดยทั่วไปจะดูเหมือนการแปลง CPS) ตอนนี้การพิมพ์ช่วยให้มั่นใจได้ว่าพวกเขาจะไม่พลาดเรื่องนี้

นี่ไม่ใช่ปัญหาที่ไม่ซ้ำกับทฤษฎีการเกิดพร้อมกัน --- mu-แคลคูลัสให้การพิสูจน์ทางทฤษฎีที่ดีของผู้ดำเนินการควบคุมตามลำดับเช่นการโทร / ซีซี แต่ในราคาของการทำให้สแต็คชัดเจน

ดังนั้นเมื่อออกแบบภาษาการเขียนโปรแกรมพร้อมกันความคิดเห็นของฉันคือคุณควรออกแบบภาษาของคุณด้วย abstractions ระดับที่สูงกว่า raw pi-แคลคูลัส แต่คุณควรตรวจสอบให้แน่ใจว่ามันได้แปลเป็นแคลคูลัสกระบวนการที่มีเหตุผล (ตัวอย่างล่าสุดของเรื่องนี้คือ Tonhino, Caires และ Pfenning กระบวนการขั้นสูง, ฟังก์ชั่นและเซสชั่น: การบูรณาการแบบ Monadic )


คุณต้องจัดการ call call ใน -calculus ในแง่ใด สิ่งนี้เกิดขึ้นโดยอัตโนมัติในการเข้ารหัสของเป็นของ Milner และในการเข้ารหัสVan Bakel / Vigliotti ใหม่ ฟังก์ชั่นเป็นรูปแบบที่สมบูรณ์แบบของน้ำตาลในประโยค -calculus λ เธเธπλππ
Martin Berger

นอกจากนี้ -calculus เป็นบัญชีที่น่าอึดอัดใจจริงๆของผู้ควบคุมตามลำดับเช่น call / cc ตัวดำเนินการดังกล่าวง่ายขึ้นและแสดงออกอย่างเป็นธรรมชาติใน -caluclus เพราะการกระโดดเป็นรูปแบบของการส่งข้อความอย่างชัดเจน -calculus ไม่มีความคิดตามธรรมชาติของชื่อที่คุณสามารถข้ามไปได้ดังนั้นคุณต้องเขียนโค้ดเป็นแอปพลิเคชัน funciton หรือคุณต้องเพิ่มเนื้อหาเพิ่มเติม เธλλμπλ
Martin Berger

วิธีคิดที่มีประโยชน์อย่างหนึ่งเกี่ยวกับฟังก์ชั่นคือพวกมันคือการโต้ตอบระหว่างไคลเอ็นต์กับเซิร์ฟเวอร์โดยที่ช่องส่งคืนเลียนแบบ สามารถพิมพ์ได้อย่างง่ายดาย ประเภทเซสชั่นไม่ได้จับภาพนี้อย่างเต็มที่เนื่องจากพวกเขาอ่อนแอเกินไปในข้อ จำกัด ของการโต้ตอบที่บังคับใช้
Martin Berger

ทั้งหมดที่กล่าวมาแน่นอนว่าไม่ต้องการเขียนโปรแกรมใน raw -calculus มากกว่าใน raw -calculus พิธีการทั้งสองเป็นความเรียบง่ายที่ทำให้เราสามารถมุ่งเน้นไปที่คุณสมบัติบางอย่างของการคำนวณที่แยกตัวของผู้อื่น λπλ
Martin Berger

@ MartinBerger: ฉันหวังว่าจะโน้มน้าวให้คุณตอบ! ฉันหมายความว่าหากคุณต้องการตั้งโปรแกรมเป็น rawและยังต้องการใช้ฟังก์ชั่นคุณจะต้องเขียนคำศัพท์ที่อยู่ในรูปของการแปลของ Milner และคุณต้อง "จัดการกองซ้อน" ในแง่ที่คุณจะต้องจัดการต่อเนื่องและการแทนที่อย่างชัดเจน (นอกเหนือจากกันฉันไม่รู้เกี่ยวกับกระดาษ van Bakel / Vigliotti - ขอบคุณ!)π
Neel Krishnaswami

1

คุณบอกว่า " เป้าหมายสุดท้ายที่แท้จริงคือการใช้ทฤษฎีเพื่อสร้าง PL จริง ๆ " ดังนั้นคุณยอมรับว่ามีเป้าหมายอื่นอีกไหม?

จากมุมมองของฉันวัตถุประสงค์ของทฤษฎีอันดับ 1 คือการให้ความเข้าใจซึ่งสามารถให้เหตุผลเกี่ยวกับภาษาการเขียนโปรแกรมที่มีอยู่รวมทั้งโปรแกรมที่เขียนในพวกเขา ในเวลาว่างของฉันฉันเก็บซอฟต์แวร์ชิ้นใหญ่ซึ่งเป็นไคลเอนต์อีเมล ทฤษฎี PL ทั้งหมดที่ฉันรู้เช่นลอจิกฮูร์, การแยกลอจิก, การลบข้อมูล, พาราเมตริกเชิงสัมพันธ์และการเทียบบริบท ฯลฯ มีประโยชน์ในการทำงานประจำวัน ตัวอย่างเช่นหากฉันขยายซอฟต์แวร์ด้วยคุณสมบัติใหม่ฉันรู้ว่ามันยังคงมีการรักษาฟังก์ชั่นดั้งเดิมซึ่งหมายความว่ามันจะทำงานในลักษณะเดียวกันภายใต้บริบทเก่าทั้งหมดแม้ว่ามันจะทำสิ่งใหม่ใน บริบทใหม่ ถ้าฉันไม่รู้อะไรเลยเกี่ยวกับความเท่าเทียมกันทางบริบทฉันอาจจะไม่สามารถวางกรอบปัญหาด้วยวิธีนั้นได้

สำหรับคำถามของคุณเกี่ยวกับ pi-แคลคูลัสฉันคิดว่า pi-แคลคูลัสยังใหม่เกินไปที่จะหาแอปพลิเคชันในการออกแบบภาษา หน้าวิกิพีเดียปี่แคลคูลัสไม่เอ่ยถึง BPML และสาธารณรัฐโคลัมเบีย-ปี่กับการออกแบบโดยใช้ภาษาไพแคลคูลัส แต่คุณอาจดูที่หน้าของ CCS รุ่นก่อนหน้าและขั้นตอนการคำนวณอื่น ๆ เช่น CSP, เข้าร่วมแคลคูลัสและอื่น ๆ ซึ่งใช้ในการออกแบบภาษาการเขียนโปรแกรมจำนวนมาก คุณอาจดูที่ส่วน "วัตถุและ pi-แคลคูลัส" ของหนังสือSangiorgi และ Walkerเพื่อดูว่า pi-แคลคูลัสเกี่ยวข้องกับภาษาโปรแกรมที่มีอยู่อย่างไร


0

ฉันชอบที่จะค้นหาการใช้งานจริงของกระบวนการแคลคูลัสในป่า :) (นอกเหนือจากการอ่านเกี่ยวกับทฤษฎี)

  1. ช่อง async Clojure ขึ้นอยู่กับ CSP: http://clojure.com/blog/2013/06/28/clojure-core-async-channels.html
  2. Golang ยังมีช่องทางที่อิง CSP (Rich Hickey นี้เป็นแรงบันดาลใจสำหรับ clojure ฉันคิดว่า): http://www.informit.com/articles/printerfriendly/1768317
  3. มีผู้ชายที่สร้างส่วนขยายจาก ACP ไปยัง scala (ตัวห้อย) แต่ฉันไม่มีชื่อเสียงพอที่จะโพสต์ลิงก์ ...

เป็นต้น

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