มีแอปพลิเคชั่นที่ใช้งานได้จริงสำหรับโมเดลการเขียนโปรแกรมที่ไม่ใช่ von Neumann หรือไม่? ภาษาโปรแกรมที่ไม่ใช่ฟอนนอยมันน์ที่ใช้กันอย่างแพร่หลายที่สุดคืออะไร
มีแอปพลิเคชั่นที่ใช้งานได้จริงสำหรับโมเดลการเขียนโปรแกรมที่ไม่ใช่ von Neumann หรือไม่? ภาษาโปรแกรมที่ไม่ใช่ฟอนนอยมันน์ที่ใช้กันอย่างแพร่หลายที่สุดคืออะไร
คำตอบ:
เมื่อฉันพูดว่า "สถาปัตยกรรม von Neumann" ฉันหมายถึงฮาร์ดแวร์บางอย่างที่ถูก จำกัด โดย "von Neumann bottleneck" - กล่าวคือมีข้อมูลทั้งหมดถูกส่งผ่านช่องทางบัสข้อมูลแคบ ๆ
ภาษาที่ไม่ใช่ von Neumann เขียนโปรแกรมผมชนส่วนใหญ่มักจะมีVHDLและVerilog ใน VHDL และ Verilog โดยค่าเริ่มต้นทุกอย่างเกิดขึ้นในเวลาเดียวกัน โปรแกรมเมอร์ต้องใช้ความพยายามเป็นพิเศษในการจัดลำดับเหตุการณ์ที่เกิดขึ้นตามลำดับ ซึ่งแตกต่างจากภาษาโปรแกรมส่วนใหญ่อื่น ๆ ซึ่งแปลว่า "ตัวชี้คำสั่ง" ซึ่งโดยปกติแล้วจะเรียกใช้งานโค้ดได้ไม่เกินบรรทัดเดียวในเวลาใดก็ตามและโปรแกรมเมอร์ต้องพยายามอย่างมากเพื่อให้ได้สิ่งต่าง ๆ ที่เกิดขึ้นในเวลาเดียวกัน เวลา.
บางคนบอกว่านั่นเป็นค่าเริ่มต้นที่เป็นธรรมชาติมากกว่า นักเรียนเริ่มเขียนโปรแกรมจำนวนมากคาดหวังว่าวง "while (x> 0) {... }" จะออกจากทันทีที่ x กลายเป็นศูนย์และพวกเขารู้สึกประหลาดใจที่รู้ว่าคอมพิวเตอร์ไม่ได้ประเมินสภาพอย่างต่อเนื่อง
คนส่วนใหญ่ที่เขียนโค้ด VHDL และ Verilog รวบรวมโปรแกรมของตนลงใน FPGAs สร้างบล็อกเล็ก ๆ ของกิจกรรมที่ทำงานด้วยความเร็วสูงสุดตลอดเวลา บ่อยครั้งที่คนเหล่านี้ตั้งค่า "ไปป์ไลน์" ที่อ่านข้อมูลจากอินพุตพินประมวลผลผ่านชุดของบล็อกพินเอาต์พุตของหนึ่งบล็อกเชื่อมต่อโดยตรงกับอินพุตพินของบล็อกถัดไปและบล็อกสุดท้ายส่งผลลัพธ์ออกมา ขาออก มันชวนให้นึกถึงไปป์ไลน์ของUnixยกเว้นว่ามีข้อมูลใหม่เข้ามาและมีข้อมูลใหม่ออกมาทุกรอบนาฬิกา
พินอินพุต, สเตจกลางและเอาต์พุตเอาท์พุตล้วนเป็นอิสระจากกัน - คุณไม่จำเป็นต้องใช้บัสข้อมูลเดียวซ้ำซ้อนระหว่างข้อมูลหลาย ๆ ชิ้น
คุณอาจสนใจ: มีสถาปัตยกรรมคอมพิวเตอร์อื่นนอกเหนือจากสถาปัตยกรรม von neumann / ทัวริงหรือไม่?
ฉันถือว่าโดย non-Von Neumann คุณหมายถึงภาษาที่ผ่าน "Von Neumann Bottleneck" ตามบทความใน Backus '"การเขียนโปรแกรมสามารถปลดปล่อยจากสไตล์ Von Neumann หรือไม่" สำหรับผู้ที่สนใจคุณสามารถค้นหาสำเนาได้ที่นี่: http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf
คำตอบสำหรับคำถามของคุณจะต้องคลุมเครือด้วยเหตุผลบางประการ
ก่อนสิ่งที่ภาษาที่พอใจเกณฑ์ในเอกสารของเขา? แม้ว่าจะมีผู้ที่ติดตามการเขียนโปรแกรมการทำงานกับกระดาษนี้ แต่ตอนนี้ถือว่าเป็นความเข้าใจผิดในขณะที่เขาหมายถึงบางสิ่งบางอย่างเช่นการเขียนโปรแกรมที่ไม่มีจุด ดังนั้นคุณจะไปกับความเข้าใจผิดที่เป็นต้นฉบับหรือเจตนาที่แท้จริงของกระดาษ? สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่เขาหมายโปรดดูที่: http://en.wikipedia.org/wiki/Function-level_programming
ประการที่สองถ้าคุณไปกับความเข้าใจผิดฟังก์ชั่นการทำงานเป็นอย่างไร คุณมีภาษาหน้าที่บริสุทธิ์ภาษาหน้าที่ไม่บริสุทธิ์และภาษาที่ค่อนข้างเป็นมิตรกับกระบวนทัศน์การทำงาน เมื่อพิจารณาว่าคุณพูดถึงความนิยมและมีความสัมพันธ์แบบผกผันระหว่างความบริสุทธิ์และการใช้งานนั้นควรรวมภาษาใดบ้าง คุณต้องการภาษาที่ใช้งานได้จริงที่นิยมมากที่สุด (ซึ่งจะไม่เป็นที่นิยมเลย) หรือเป็นภาษาที่ได้รับความนิยมมากกว่าที่ตรงตามเกณฑ์ขั้นต่ำของ "functional-ness" หากหลังสิ่งที่เกณฑ์เหล่านั้นคืออะไร?
ดังนั้นขึ้นอยู่กับมุมมองของคุณ:
Haskell เป็นภาษาที่ได้รับความนิยมมากที่สุดในบรรดาภาษาที่ใช้งานได้อย่างสมบูรณ์ที่ฉันรู้จักและมีแอพพลิเคชั่นเขียนอยู่ด้วย อย่างไรก็ตามในขณะที่มีน้ำหนักมากในชุมชนการเขียนโปรแกรมการทำงาน แต่ก็ไม่เป็นที่นิยมในชุมชนการเขียนโปรแกรมขนาดใหญ่ นอกจากนี้เมื่อใช้มันฉันไม่รู้สึกว่ามันใช้งานได้จริงสำหรับการใช้งานจริงและดูเหมือนว่าจะมีคุณค่าสำหรับงานทางทฤษฎี มันช่วยให้คุณมีสไตล์ที่ไม่มีจุดดังนั้นคุณสามารถเข้าถึงเป้าหมายของ Backus ได้
Clojure, Scala และ F # เป็นภาษาที่บริสุทธิ์น้อยกว่า แต่เป็นภาษาที่ใช้งานได้จริงและเป็นที่นิยม F # ยังเป็นมิตรกับสไตล์ที่ไม่มีจุด
Forth อาจเป็นตัวอย่างต้นแบบของภาษาที่ไม่มีจุดและมันค่อนข้างแพร่หลายในยุคนี้แม้ว่าตอนนี้ ... ปัจจัยเป็นอีกภาษาที่ไม่ใช้จุดซึ่งได้รับความสนใจ แต่ฉันสงสัยว่ามันตรงกับความนิยมของ Forth ในยุครุ่งเรือง .
APL ได้รับการกล่าวถึงโดย Backus เมื่อถึงจุดหนึ่ง (อาจไม่ใช่ในกระดาษของเขา) ว่าเป็นขั้นตอนต่อ แต่ไม่เข้ากันได้อย่างสมบูรณ์กับเป้าหมายของเขา ในวันนั้นมันใหญ่ในภาคการเงิน ให้แน่ใจว่าได้ตรวจสอบลูกหลานของมันเช่นเจ
จาวาสคริปต์นั้นใช้งานไม่ได้ แต่มันค่อนข้างเป็นมิตรต่อรูปแบบการเขียนโปรแกรมที่สูงกว่าซึ่งเห็นได้จากการปิดการใช้งานจำนวนมาก เมื่อได้รับความนิยมก็อาจเป็นไปตามเกณฑ์ อย่าลืมตรวจสอบสิ่งที่น่าสนใจบางอย่างที่ทำด้วย JavaScript เช่นการใช้งาน currying และ combinator
เพื่อให้มุมมองเพิ่มเติมเกี่ยวกับเป้าหมายของเขาคุณสามารถดูสองภาษาที่เขาออกแบบมาเพื่อให้ตรงกับเกณฑ์ของเขา พวกเขาไม่ได้เป็นที่นิยมในทุก AFAIK ดังนั้นสิ่งนี้จะเป็นไปเพื่อความรู้อย่างหมดจด:
ฉันคิดว่าการเขียนโปรแกรมของลินดาและทูเปิลสเปซนั้นเหมาะสมกับค่าใช้จ่าย การดำเนินการของหน่วยความจำที่เชื่อมโยง / รูปแบบที่ตรงกันพร้อมกันหมายความว่า (แนวคิด) คอขวด Von-Neuman ถูกกำจัด
เมื่อไปในทิศทางนั้นภาษาของนักแสดงในรูปแบบล้วน ๆ ก็เป็นแบบการสื่อสารมากกว่าที่จะเรียงลำดับคำสั่ง และถึงแม้ว่าพวกเขาจะเป็นพิธีการและไม่ใช่ภาษาการเขียนโปรแกรมจริงกระบวนการนิ่วเช่นการคำนวณแบบแคลคูลัส Pi, CSP และ Petri Nets ในรูปแบบที่เกี่ยวข้อง
ดูวิกิพีเดียสำหรับลิงก์ (ฉันเป็นผู้ใช้ใหม่และอยู่ภายใต้การป้องกันสแปม) แต่สำหรับอารมณ์ขันที่ซับซ้อนเกี่ยวกับชื่อของลินดาอ่านhttp://c2.com/cgi/wiki?LindaEtymology