ในเฟรมเวิร์กนี้ส่วนประกอบพื้นฐานที่ชื่อว่า"พลาสม่า"ซึ่งเป็นกราฟเชิงเส้นกำกับของ ecto ใน ecto พลาสซึมสามารถดำเนินการได้โดยตัวจัดตารางเวลาของ ecto
ฉันสงสัยว่ากลไกนี้มีประโยชน์อย่างไรและในสถานการณ์อื่นใดที่เราสามารถใช้ประโยชน์จากแนวคิดของ DAG ได้?
ในเฟรมเวิร์กนี้ส่วนประกอบพื้นฐานที่ชื่อว่า"พลาสม่า"ซึ่งเป็นกราฟเชิงเส้นกำกับของ ecto ใน ecto พลาสซึมสามารถดำเนินการได้โดยตัวจัดตารางเวลาของ ecto
ฉันสงสัยว่ากลไกนี้มีประโยชน์อย่างไรและในสถานการณ์อื่นใดที่เราสามารถใช้ประโยชน์จากแนวคิดของ DAG ได้?
คำตอบ:
คำถามที่ดี
แก้ไข:
ทรัพยากรที่ดี:
คำตอบคือมันไม่มีอะไรเกี่ยวข้องกับการเขียนโปรแกรมมากนัก มันเกี่ยวกับการแก้ปัญหา
เช่นเดียวกับรายการที่ลิงก์คือโครงสร้างข้อมูลที่ใช้สำหรับปัญหาบางประเภทกราฟมีประโยชน์สำหรับการแสดงความสัมพันธ์บางอย่าง รายการที่เชื่อมโยงต้นไม้กราฟและโครงสร้างนามธรรมอื่น ๆ มีการเชื่อมต่อกับการเขียนโปรแกรมเท่านั้นซึ่งคุณสามารถนำไปใช้ในโค้ดได้ พวกเขาอยู่ในระดับที่สูงขึ้นของสิ่งที่เป็นนามธรรม มันไม่เกี่ยวกับการเขียนโปรแกรมมันเกี่ยวกับการใช้โครงสร้างข้อมูลในการแก้ปัญหา
หากคุณยังต้องการความสัมพันธ์กับการเขียนโปรแกรมกรุณาพิจารณาประเด็นต่อไปนี้:
คนอื่น ๆ ได้ใช้ DAG กับข้อมูล แต่ฉันคิดว่าอย่างน้อยก็ใช้ได้ (ถ้าไม่มาก) กับรหัส Mahbubur R Aaman กล่าวถึงสิ่งนี้ดังนั้นนี่เป็นภาคผนวกของคำตอบของเขามากกว่าคำตอบทั้งหมดด้วยตัวเอง
มันเกิดขึ้นกับฉันมากกว่าโปรแกรมคอมพิวเตอร์ที่จำเป็นที่ไม่มีลูปไม่สิ้นสุด (ขอบคุณ @AndresF.) คือ Directed Acyclic Graph (DAG) หมายความว่าเส้นทางที่เป็นไปได้ของการดำเนินการของรหัสถูกชี้นำ พวกเขาเป็นกราฟเพราะเส้นทางผ่านรหัสที่สำคัญใด ๆ นั้นไม่ง่ายเหมือนรายการหรือต้นไม้
ฉันทำงานใน XSLT ประมาณ 4 ปี ฉันมีช่วงเวลาที่แย่มากที่พยายามอธิบายว่าทำไมมันจึงไม่ใช่ภาษาโปรแกรมวัตถุประสงค์ทั่วไปที่ดี แต่ DAG คือเหตุผล โดยเฉพาะ XSLT เป็นภาษาที่ขับเคลื่อนด้วยข้อมูล คุณกำหนดฟังก์ชั่น (ใช่ในแง่ฟังก์ชั่นการเขียนโปรแกรม) แต่คุณไม่จำเป็นต้องเรียกใช้ฟังก์ชันเหล่านี้จากรหัสของคุณ แต่ XSLT ตั้งค่าการรวมกันของการเลือกและการวนซ้ำผ่านโหนดของเอกสาร XML อินพุต ซึ่งช่วยให้โครงสร้างของข้อมูลอินพุตพิจารณาว่าฟังก์ชันใดถูกเรียกใช้และเรียงตามลำดับ
สิ่งนี้น่าสนใจมากและเจ๋งมากจนกระทั่งโปรแกรมของคุณพบสภาพข้อมูลที่คุณไม่ได้ทดสอบเวลา 2:30 น. และคุณต้องตื่นและแก้ไข เมื่อคุณปล่อยให้ข้อมูลกำหนด DAG ดังนั้นคำจำกัดความของ DAG จะกลายเป็นเงื่อนไขการป้อนข้อมูลที่เป็นไปได้ทั้งหมดซึ่งสำหรับแอปพลิเคชันทางธุรกิจที่ไม่น่าสนใจใด ๆ นั้นเกินกว่าจะคำนวณได้ มันเป็นไปไม่ได้
ตอนแรกฉันคิดว่าการเขียนโปรแกรมที่ใช้งานได้อาจไม่เป็น DAG เพราะบางครั้งคำสั่งการดำเนินการไม่ชัดเจนหรือแม้แต่ผู้ที่คิดเกี่ยวกับโปรแกรมเมอร์ แต่โปรแกรมการทำงานจะกำหนดการพึ่งพา ในความเป็นจริงลักษณะการประกาศของการเขียนโปรแกรมฟังก์ชั่นอาจจะคิดว่าเป็นการกำหนดเพียงการอ้างอิง (a ^ 2 = b ^ 2 + c ^ 2) โดยไม่ต้องระบุคำสั่งดำเนินการ (มันไม่สำคัญว่า 'b' หรือ 'c' กำลังสองก่อน ตราบใดที่ทั้งคู่กำลังสองก่อนที่จะถูกรวมเข้าด้วยกัน)
แต่ในขณะที่การเขียนโปรแกรมฟังก์ชั่นอาจจะคลุมเครือเกี่ยวกับคำสั่งของการดำเนินงานในระดับรายละเอียดก็จงใจชัดเจนเกี่ยวกับการพึ่งพา เหล่านี้เป็นคุณสมบัติที่ทำให้คล้อยตามพร้อมกัน ไม่ว่าในกรณีใด ๆ ยังคงมีกราฟของเส้นทางผ่านรหัสและกราฟนั้นยังคงกำกับอยู่ (ต้องมีการประเมินการอ้างอิงก่อนงานที่ต้องพึ่งพา) ดังนั้นฉันคิดว่า DAG จะใช้เช่นกัน
คำถามที่ดี - ขอบคุณสำหรับการโพสต์!
while (true) { print("hi"); }
หรือไม่? บางทีคุณต้องการที่จะยกเว้นโปรแกรมที่ไม่สิ้นสุด?
ปัจจุบัน DAG มีการประเมินต่ำเกินไปในการเขียนโปรแกรม ในอดีตมีหลายสิ่งที่เกี่ยวข้องกับการพัฒนาที่ทำจากต้นไม้และลำดับชั้นเพราะการย้ายบางสิ่งบางอย่างในกล่องนั้นสะดวกสำหรับสมองของเราที่จะจัดการสิ่งที่ซับซ้อนได้ง่ายขึ้น แต่ถ้าคุณดูเหตุการณ์และวิธีการที่พวกเขาขึ้นอยู่กับเหตุการณ์และรัฐอื่น ๆ แล้วคุณจะได้รับ DAG เพราะอะไรในชีวิตของเราและในโปรแกรมสามารถขึ้นอยู่กับอะไรในอดีต แต่ไม่ใช่ในอนาคตดังนั้นคุณจะได้รับ "วงจร" อย่างสมบูรณ์แบบ ความสัมพันธ์ที่จะใช้กับแนวคิด DAG แม้ว่าสิ่งนี้ไม่ค่อยได้ใช้อย่างชัดเจนในการพัฒนาการมีสิ่งนี้อยู่ในใจจะช่วยให้เข้าใจสิ่งต่าง ๆ ได้ดีขึ้น
ฉันสงสัยว่าประโยชน์ของพลาสม่าใน Ecto คืออะไร ...
DAG สามารถใช้ในการสร้างแบบจำลองการรวบรวมงานในลำดับที่มีข้อ จำกัด ว่างานบางอย่างต้องทำก่อนงานอื่น Ectoเป็นกรอบการประมวลผลและใช้ DAG ในการสร้างแบบจำลองกราฟการประมวลผลเพื่อให้กราฟสั่งดำเนินการซิงโครนัส Plasm in Ectoคือ DAG และSchedulerทำงานอยู่
ในสถานการณ์อื่นใดที่เราสามารถใช้ประโยชน์จากแนวคิดของ DAG ได้?
เป็นตัวอย่างในโลกแห่งความเป็นจริงซอฟต์แวร์ของเราคล้ายกับ IDE ที่ผู้ใช้สามารถกำหนดชุดของการดำเนินการที่จะดำเนินการกับภาพ (การตรวจสอบด้วยภาพแมชชีน) การตรวจสอบเหล่านี้อาจมีการพึ่งพาการตรวจสอบอื่น ๆ หรืออาจมีการตรวจสอบขึ้นอยู่กับพวกเขา เนื่องจากสิ่งนี้สามารถกำหนดค่าได้โดยผู้ใช้ปลายทางเราจึงไม่สามารถปรับให้เหมาะสมสำหรับการประมวลผลแบบขนานในเวลาออกแบบ ด้วยการเป็นตัวแทนการตรวจสอบและการพึ่งพาเหล่านี้ในฐานะ DAG เราสามารถปรับความขนานของการตรวจสอบโดยรวมให้มีประสิทธิภาพสูงสุดในเวลาทำงาน
อีกตัวอย่างหนึ่งคือกฎการจัดการหน่วยความจำในแอพ Cocoa นั้นถูกสร้างขึ้นเพื่อให้การอ้างอิงที่แข็งแกร่งทั้งหมดสร้างกราฟ acyclic โดยตรงเพื่อรับประกันว่าไม่มีรอยรั่ว
การเพิ่มคำตอบอื่นที่ไม่ได้เห็นการอ้างอิงเพื่อสร้างระบบmake
ที่ใช้ DAG เพื่อค้นหาการขึ้นต่อกันของการสร้าง
รายละเอียดเพิ่มเติมที่นี่
make