สถาปัตยกรรมที่ไม่ใช่ฟอนนอยมันน์ในทางปฏิบัติคืออะไร?


16

มีแอปพลิเคชั่นที่ใช้งานได้จริงสำหรับโมเดลการเขียนโปรแกรมที่ไม่ใช่ von Neumann หรือไม่? ภาษาโปรแกรมที่ไม่ใช่ฟอนนอยมันน์ที่ใช้กันอย่างแพร่หลายที่สุดคืออะไร


6
รูปแบบการเขียนโปรแกรมแบบ "ไม่ใช่ฟอนนอยมันน์" คืออะไร?
Suresh Venkat

ฉันยังไม่เข้าใจคำถามบางทีคุณสามารถเพิ่มภูมิหลังให้กับคำถามเพื่อให้เข้าใจสิ่งที่คุณถามได้ง่ายขึ้น
Kaveh

3
สถาปัตยกรรม von neumann มีซีพียู ดังนั้นสถาปัตยกรรมโพรเซสซิงแบบขนานจึงไม่ใช่เนื้อหาของฟอนนอยมันน์ (สถาปัตยกรรมนอยมันน์ถูกประดิษฐ์ขึ้นก่อนการประมวลผลแบบขนาน) แต่เห็นด้วยกับคำถามดูเหมือนคลุมเครือหรือคลุมเครือ von neumann อ้างถึงสถาปัตยกรรมคอมพิวเตอร์ไม่ใช่รูปแบบการเขียนโปรแกรมจริงๆ รูปแบบการเขียนโปรแกรมและสถาปัตยกรรมซีพียู / คอมพิวเตอร์อยู่ในรูปแบบของการทำงานร่วมกัน / symbiosis แต่ยังค่อนข้างเป็นอิสระจากกัน .... สถาปัตยกรรมที่แตกต่างสามารถใช้รูปแบบการเขียนโปรแกรมที่แตกต่างกันโดยไม่มีรูปแบบการเขียนโปรแกรมเป็น "คู่" กับสถาปัตยกรรม ...
vzn

1
ภาษาโปรแกรมที่ไม่ใช่ฟอนนอยมันน์คืออะไร? สำหรับเรื่องนั้นภาษาการเขียนโปรแกรมของ von Neumann คืออะไร (ฉันไม่พบคำจำกัดความของ Backus --- โดยพื้นฐานแล้ว "ภาษาเชิงบังคับ" --- แม้แต่เรื่องเล็ก ๆ น้อย ๆ ที่น่าสนใจ)
Jeff

1
@Ronny: หน้า Wikipedia เป็นเพียงนกแก้วบทความ Backus
Jeffε

คำตอบ:


12

เมื่อฉันพูดว่า "สถาปัตยกรรม von Neumann" ฉันหมายถึงฮาร์ดแวร์บางอย่างที่ถูก จำกัด โดย "von Neumann bottleneck" - กล่าวคือมีข้อมูลทั้งหมดถูกส่งผ่านช่องทางบัสข้อมูลแคบ ๆ

ภาษาที่ไม่ใช่ von Neumann เขียนโปรแกรมผมชนส่วนใหญ่มักจะมีVHDLและVerilog ใน VHDL และ Verilog โดยค่าเริ่มต้นทุกอย่างเกิดขึ้นในเวลาเดียวกัน โปรแกรมเมอร์ต้องใช้ความพยายามเป็นพิเศษในการจัดลำดับเหตุการณ์ที่เกิดขึ้นตามลำดับ ซึ่งแตกต่างจากภาษาโปรแกรมส่วนใหญ่อื่น ๆ ซึ่งแปลว่า "ตัวชี้คำสั่ง" ซึ่งโดยปกติแล้วจะเรียกใช้งานโค้ดได้ไม่เกินบรรทัดเดียวในเวลาใดก็ตามและโปรแกรมเมอร์ต้องพยายามอย่างมากเพื่อให้ได้สิ่งต่าง ๆ ที่เกิดขึ้นในเวลาเดียวกัน เวลา.

บางคนบอกว่านั่นเป็นค่าเริ่มต้นที่เป็นธรรมชาติมากกว่า นักเรียนเริ่มเขียนโปรแกรมจำนวนมากคาดหวังว่าวง "while (x> 0) {... }" จะออกจากทันทีที่ x กลายเป็นศูนย์และพวกเขารู้สึกประหลาดใจที่รู้ว่าคอมพิวเตอร์ไม่ได้ประเมินสภาพอย่างต่อเนื่อง

คนส่วนใหญ่ที่เขียนโค้ด VHDL และ Verilog รวบรวมโปรแกรมของตนลงใน FPGAs สร้างบล็อกเล็ก ๆ ของกิจกรรมที่ทำงานด้วยความเร็วสูงสุดตลอดเวลา บ่อยครั้งที่คนเหล่านี้ตั้งค่า "ไปป์ไลน์" ที่อ่านข้อมูลจากอินพุตพินประมวลผลผ่านชุดของบล็อกพินเอาต์พุตของหนึ่งบล็อกเชื่อมต่อโดยตรงกับอินพุตพินของบล็อกถัดไปและบล็อกสุดท้ายส่งผลลัพธ์ออกมา ขาออก มันชวนให้นึกถึงไปป์ไลน์ของUnixยกเว้นว่ามีข้อมูลใหม่เข้ามาและมีข้อมูลใหม่ออกมาทุกรอบนาฬิกา

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

คุณอาจสนใจ: มีสถาปัตยกรรมคอมพิวเตอร์อื่นนอกเหนือจากสถาปัตยกรรม von neumann / ทัวริงหรือไม่?


11

ฉันถือว่าโดย 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" หากหลังสิ่งที่เกณฑ์เหล่านั้นคืออะไร?

ดังนั้นขึ้นอยู่กับมุมมองของคุณ:

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

  2. Clojure, Scala และ F # เป็นภาษาที่บริสุทธิ์น้อยกว่า แต่เป็นภาษาที่ใช้งานได้จริงและเป็นที่นิยม F # ยังเป็นมิตรกับสไตล์ที่ไม่มีจุด

  3. Forth อาจเป็นตัวอย่างต้นแบบของภาษาที่ไม่มีจุดและมันค่อนข้างแพร่หลายในยุคนี้แม้ว่าตอนนี้ ... ปัจจัยเป็นอีกภาษาที่ไม่ใช้จุดซึ่งได้รับความสนใจ แต่ฉันสงสัยว่ามันตรงกับความนิยมของ Forth ในยุครุ่งเรือง .

  4. APL ได้รับการกล่าวถึงโดย Backus เมื่อถึงจุดหนึ่ง (อาจไม่ใช่ในกระดาษของเขา) ว่าเป็นขั้นตอนต่อ แต่ไม่เข้ากันได้อย่างสมบูรณ์กับเป้าหมายของเขา ในวันนั้นมันใหญ่ในภาคการเงิน ให้แน่ใจว่าได้ตรวจสอบลูกหลานของมันเช่นเจ

  5. จาวาสคริปต์นั้นใช้งานไม่ได้ แต่มันค่อนข้างเป็นมิตรต่อรูปแบบการเขียนโปรแกรมที่สูงกว่าซึ่งเห็นได้จากการปิดการใช้งานจำนวนมาก เมื่อได้รับความนิยมก็อาจเป็นไปตามเกณฑ์ อย่าลืมตรวจสอบสิ่งที่น่าสนใจบางอย่างที่ทำด้วย JavaScript เช่นการใช้งาน currying และ combinator

เพื่อให้มุมมองเพิ่มเติมเกี่ยวกับเป้าหมายของเขาคุณสามารถดูสองภาษาที่เขาออกแบบมาเพื่อให้ตรงกับเกณฑ์ของเขา พวกเขาไม่ได้เป็นที่นิยมในทุก AFAIK ดังนั้นสิ่งนี้จะเป็นไปเพื่อความรู้อย่างหมดจด:

http://en.wikipedia.org/wiki/FP_(programming_language )

http://en.wikipedia.org/wiki/FL_(programming_language )


1
ตอนนี้ดูเหมือนว่าเขาหมายถึงบางสิ่งบางอย่างเช่นการเขียนโปรแกรมแบบไม่มีจุดแทนที่จะเป็นฟังก์ชั่นการเขียนโปรแกรม - มีตัวชี้บางอย่างสำหรับการอภิปรายในเรื่องนี้หรือไม่? ฟังดูน่าสนใจ.
Suresh Venkat

แบบการเขียนโปรแกรมคัสที่เรียกว่า 'การเขียนโปรแกรมฟังก์ชั่นระดับ' และมีบทความที่นี่: en.wikipedia.org/wiki/Function-level_programming ฉันไม่รู้ลิงค์ที่ดีจริงๆ (ฉันชอบที่จะรู้ว่าคุณเจออะไร!) แต่ Googling "การเขียนโปรแกรมระดับฟังก์ชั่น" เปิดลิงค์ที่น่าสนใจรวมถึงวิดีโอด้วย
Ronny

1
@SureshVenkat: ภาษา FP และ FL ถูกสร้างโดย Backus โดยเฉพาะเพื่อสนับสนุนแนวคิดของการเขียนโปรแกรมระดับฟังก์ชั่น ดูเพิ่มเติมที่"การเขียนโปรแกรมโดยปริยาย"และโดยเฉพาะอย่างยิ่งภาษา Jซึ่งรวม APL และ FP / FL เพื่อสร้างสิ่งที่อาจเป็นได้ทั้งที่เป็นความลับและเป็นภาษาที่มีวัตถุประสงค์ทั่วไปที่แสดงออกมากที่สุดในการใช้งานจริง ฉันยังจำโพสต์เกี่ยวกับการใช้การเขียนโปรแกรมโดยปริยายในภาษาที่ใช้งานได้
CA McCann

บังเอิญเหตุการณ์ในโพสต์นี้ดูเหมือนจะปิดอย่างมีนัยสำคัญ โปรแกรมการทำงาน (ทั้งในเสียงกระเพื่อมและ ML ประเพณี) ยาวถือกำเนิดคับรรยายของรางวัลทัวริงเช่นเดียวกับทุกกระบวนทัศน์การเขียนโปรแกรมที่มีอยู่ส่วนใหญ่หรือ - รวมทั้งฟังก์ชั่นระดับการเขียนโปรแกรมของตัวเองในรูปแบบของCombinatory ลอจิกซึ่งถือกำเนิดแคลคูลัสแลมบ์ดาทั้งโบสถ์และทัวริง ทำงานกับทฤษฎีการคำนวณ! (Oh, และฉันต้องการมากค่อนข้างใช้ Haskell เพื่อวัตถุประสงค์ในโลกแห่งความจริงในทางปฏิบัติกว่าโหดร้ายเช่น Javascript.)
CA McCann

@camccann ฉันไม่เคยตั้งเหตุการณ์ในโพสต์ นอกจากนี้ Lisp นั้นกว้างเกินไปที่จะรองรับการเรียกร้องใด ๆ ตัวอย่างเช่น Lisps บางตัวนั้นไม่สามารถใช้งานได้เนื่องจากไม่ใช่ทั้งหมดที่จะเรียกซ้ำ ฉันชอบการอ้างอิงของคุณกับ Combinatory Logic แต่ฉันคิดว่าประเด็นของ Backus คือการมีภาษาหนึ่งที่สามารถเขียนโปรแกรมคอมพิวเตอร์ที่สนับสนุนกระบวนทัศน์ ดังนั้นในขณะที่ Combinatory Logic ให้ความกระจ่างแก่การโต้แย้งของเขาในที่สุดก็ไม่มีผลกระทบต่อจุดของเขา
Ronny

2

ฉันคิดว่าการเขียนโปรแกรมของลินดาและทูเปิลสเปซนั้นเหมาะสมกับค่าใช้จ่าย การดำเนินการของหน่วยความจำที่เชื่อมโยง / รูปแบบที่ตรงกันพร้อมกันหมายความว่า (แนวคิด) คอขวด Von-Neuman ถูกกำจัด

เมื่อไปในทิศทางนั้นภาษาของนักแสดงในรูปแบบล้วน ๆ ก็เป็นแบบการสื่อสารมากกว่าที่จะเรียงลำดับคำสั่ง และถึงแม้ว่าพวกเขาจะเป็นพิธีการและไม่ใช่ภาษาการเขียนโปรแกรมจริงกระบวนการนิ่วเช่นการคำนวณแบบแคลคูลัส Pi, CSP และ Petri Nets ในรูปแบบที่เกี่ยวข้อง

ดูวิกิพีเดียสำหรับลิงก์ (ฉันเป็นผู้ใช้ใหม่และอยู่ภายใต้การป้องกันสแปม) แต่สำหรับอารมณ์ขันที่ซับซ้อนเกี่ยวกับชื่อของลินดาอ่านhttp://c2.com/cgi/wiki?LindaEtymology

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