Czy są jakieś praktyczne zastosowania dla modeli programowania innych niż von Neumann? Jakie są najczęściej stosowane języki programowania inne niż von Neumann?
universal-computation
logic-programming
Len Yabloko
źródło
źródło
Odpowiedzi:
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?
źródło
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:
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.
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.
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 .
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.
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 )
źródło
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 .
źródło