Co to jest praktyczna architektura non-von Neumann?

16

Czy są jakieś praktyczne zastosowania dla modeli programowania innych niż von Neumann? Jakie są najczęściej stosowane języki programowania inne niż von Neumann?

Len Yabloko
źródło
6
czym jest model programowania „non-von Neumann”?
Suresh Venkat
Ja również nie rozumiem pytania, być może możesz dodać trochę tła do pytania, aby łatwiej zrozumieć, o co pytasz.
Kaveh
3
Architektura von neumann ma procesor. dlatego architektura przetwarzania równoległego jest prawdopodobnie nie-von Neumanna (architektura neumanna została wynaleziona przed przetwarzaniem równoległym). ale zgodził się, że pytanie wydaje się dwuznaczne lub niejasno zdefiniowane. von neumann odnosi się do architektury komputera, a nie do końca modelu programowania. model programowania i architektura procesora / komputera istnieją w pewnym sensie synergii / symbiozy, ale są również nieco od siebie niezależne .... różne architektury mogą wdrażać różne modele programowania bez „sprzęgania” modelu programowania z architekturą ...
od
1
Co to jest język programowania inny niż von Neumann ? Co do tego, czym jest język programowania von Neumann? (Nie uważam definicji Backusa --- w zasadzie „języków imperatywnych” --- nawet odrobinę przekonujących.)
Jeffε
1
@Ronny: strona Wikipedii po prostu papuga artykułu Backusa.
Jeffε

Odpowiedzi:

12

Kiedy mówię „architektura von Neumanna”, mam na myśli sprzęt ograniczony „wąskim gardłem von Neumanna” - tzn. Ma on wszystkie dane przesyłane przez wąską szynę danych.

Języki programowania inne niż von Neumann, na które najczęściej wpadam, to VHDL i Verilog . W VHDL i Verilog domyślnie wszystko dzieje się w tym samym czasie. Programista musi dołożyć wszelkich starań, aby szereg zdarzeń następował w kolejności sekwencyjnej. To bardzo różni się od większości innych języków programowania, które implikują „wskaźnik instrukcji”, który domyślnie wykonuje co najwyżej jeden wiersz kodu w dowolnym momencie, a programista musi podjąć dodatkowy wysiłek, aby wiele rzeczy działo się jednocześnie czas.

Niektórzy twierdzą, że jest to bardziej naturalne ustawienie domyślne. Wielu studentów rozpoczynających programowanie spodziewa się, że pętla „while (x> 0) {...}” opuści natychmiastową chwilę, gdy x staje się równa zeru, i są zaskoczeni, gdy komputer stale nie ocenia tego warunku.

Większość ludzi piszących kody VHDL i Verilog kompiluje swoje programy na układach FPGA, tworząc małe bloki aktywności, które działają cały czas z pełną prędkością. Często tacy ludzie tworzą „potok”, który odczytuje dane ze styków wejściowych, przetwarza je przez szereg bloków, styki wyjściowe jednego bloku są podłączone bezpośrednio do styków wejściowych następnego bloku, a ostatni blok wysyła wynik piny wyjściowe. Przypomina potok Uniksa , z tym wyjątkiem, że w każdym cyklu zegara pojawia się nowa część danych i nowa część danych.

Piny wejściowe, stopnie pośrednie i piny wyjściowe są od siebie niezależne - nie trzeba ponownie wykorzystywać pojedynczej magistrali danych zmultipleksowanej między różnymi częściami danych.

Może Cię również zainteresować: Czy istnieją inne architektury komputerowe oprócz architektur von neumann / Turing?

David Cary
źródło
11

Zakładam, że przez nie-von Neumanna masz na myśli języki, które ominęły „wąskie gardło von Neumanna” zgodnie z tekstem Backusa „Czy programowanie można wyzwolić ze stylu von Neumanna?”. Dla zainteresowanych znajdziesz kopię tutaj: http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf

Odpowiedź na twoje pytanie będzie musiała być dwuznaczna z kilku powodów.

Po pierwsze, jakie języki spełniały kryteria w jego pracy? Chociaż istnieją te, które śledzą programowanie funkcjonalne w tym dokumencie, jest to obecnie uważane za nieporozumienie, ponieważ miał na myśli coś takiego jak programowanie bez punktów. Więc czy idziesz z pierwotnym nieporozumieniem, czy prawdziwą intencją artykułu? Aby dowiedzieć się, co miał na myśli, zobacz: http://en.wikipedia.org/wiki/Function-level_programming

Po drugie, jeśli popełnisz nieporozumienie, jak funkcjonalna jest funkcjonalna? Masz czysto funkcjonalne języki, nieczyste języki funkcjonalne i języki, które są stosunkowo przyjazne dla paradygmatu funkcjonalnego. Biorąc pod uwagę, że wspominasz o popularności i istnieje odwrotna zależność między nią a czystością funkcjonalną, jakie języki należy uwzględnić? Czy potrzebujesz najpopularniejszego czysto funkcjonalnego języka (który w ogóle nie byłby popularny), czy bardziej popularnego, spełniającego minimalne kryteria „funkcjonalności”? Jeśli to drugie, jakie są te kryteria?

W zależności od twojego punktu widzenia:

  1. Haskell jest najpopularniejszym z całkowicie czystych języków funkcjonalnych, które znam i są w nim napisane aplikacje. Jednakże, choć jest to bardzo ciężkie w społeczności programistów funkcjonalnych, nie jest popularne w większej społeczności programistów. Ponadto, po jego użyciu nie czułem, że jest praktyczny do użytku w świecie rzeczywistym i wydaje się, że jest ceniony za pracę teoretyczną. Pozwala to na styl bez punktów, dzięki czemu możesz dzięki temu zbliżyć się do niektórych celów Backusa.

  2. Clojure, Scala i F # są mniej czyste, ale bardziej praktyczne i popularne języki funkcjonalne. F # jest również przyjazny dla stylu bez punktów.

  3. Czwarty może być prototypowym przykładem języka pozbawionego punktów i był dość rozpowszechniony w swoim czasie, chociaż teraz ... Czynnik to kolejny język bez punktów, który zyskał trochę uwagi, ale wątpię, by pasował do popularności Fortha w czasach jego świetności .

  4. W pewnym momencie Backus wspomniał o APL (być może nie w swojej pracy) jako o kroku w kierunku, ale nie w pełni zgodnym z jego celami. W swoich czasach był duży w sektorze finansowym. Pamiętaj, aby sprawdzić jego potomków, takich jak J.

  5. JavaScript nie działa, ale jest dość przyjazny dla stylu programowania wyższego rzędu, o czym świadczy duże użycie zamknięć. Biorąc pod uwagę jego popularność, może po prostu spełniać kryteria. Koniecznie sprawdź niektóre z ciekawych rzeczy wykonanych za pomocą JavaScript, takich jak curry i implementacja kombinacji.

W przypisie, aby dać Ci więcej spojrzenia na jego cele, możesz sprawdzić dwa języki, które zaprojektował, aby spełnić jego kryteria. W ogóle nie są popularne AFAIK, więc byłoby to wyłącznie ze względu na wiedzę:

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

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

Ronny
źródło
1
Wygląda na to, że miał on na myśli raczej programowanie bezcelowe niż programowanie funkcjonalne - czy jest jakiś wskaźnik do dyskusji na ten temat? brzmi interesująco.
Suresh Venkat
Model programowania Backusa nazywa się „Programowaniem na poziomie funkcji”, a tutaj jest artykuł: en.wikipedia.org/wiki/Function-level_programming . Nie znam żadnych naprawdę dobrych linków (chciałbym wiedzieć, jeśli je znajdziesz!), Ale Google „Programowanie na poziomie funkcji” wyświetla ciekawe linki, w tym wideo.
Ronny
1
@SureshVenkat: Języki FP i FL zostały stworzone przez Backusa specjalnie w celu wsparcia jego idei programowania na poziomie funkcji. Zobacz także „milczące programowanie”, a dokładniej język J , który łączy APL i FP / FL, aby stworzyć coś, co może być zarówno najbardziej tajemniczym, jak i najbardziej ekspresyjnym językiem ogólnego zastosowania. Pamiętam także post na SO dotyczący używania programowania ukrytego w językach funkcjonalnych.
CA McCann
Nawiasem mówiąc, chronologia w tym poście wydaje się znacznie odległa. Programowanie funkcjonalne (zarówno w tradycji Lispa, jak i ML) długo wyprzedza wykład Tusa Award Backusa, podobnie jak większość lub wszystkie istniejące paradygmaty programowania - w tym samo programowanie na poziomie funkcji, w postaci logiki kombinatorycznej , która poprzedza zarówno rachunek lambda Kościoła, jak i Turinga pracować nad teorią obliczeń! (Oh, a ja dużo raczej używać Haskell dla celów praktycznych rzeczywistych niż okrucieństwo jak JavaScript.)
CA McCann
@camccann Nigdy nie ustawiałem chronologii w poście. Ponadto Lisp jest zbyt szeroki, aby uzasadnić jakiekolwiek roszczenia. Na przykład, nie wszystkie Lisps są funkcjonalne, ponieważ nie wszystkie są rekurencyjne. Podoba mi się twoje odniesienie do logiki kombinatorycznej, ale myślę, że celem Backusa było posiadanie języka, w którym można zaprogramować komputer, który obsługuje ten paradygmat. Dlatego, chociaż Logika kombinacyjna rzuca światło na jego argumentację, ostatecznie nie wpływa to na jego punkt widzenia.
Ronny,
2

Myślę, że programowanie Lindy i tuplespace może pasować do rachunku. Operacje pamięci skojarzone / wzorcowe z współbieżnością oznaczają, że (koncepcyjnie) wąskie gardło von Neumana zostało wyeliminowane.

Idąc w tym kierunku, języki w czystym modelu aktora również modelują komunikację, a nie sekwencjonowanie instrukcji. I chociaż są to formalizmy, a nie rzeczywiste języki programowania, rachunki procesowe, takie jak rachunek Pi, CSP i sieci Petriego modelują komunikację w pokrewny sposób.

Zobacz wikipedię, aby uzyskać linki (jestem nowym użytkownikiem i jestem pod ochroną przed spamem), ale dla jakiegoś dziwnego humoru związanego z nazwiskiem Lindy, przeczytaj http://c2.com/cgi/wiki?LindaEtymology .

Jim Meier
źródło