실용적인 비 폰 노이만 아키텍처 란 무엇입니까?


16

비 폰 노이만 프로그래밍 모델에 대한 실제 적용이 있습니까? 가장 널리 채택 된 비 폰 노이만 프로그래밍 언어는 무엇입니까?


6
"non-von Neumann"프로그래밍 모델은 무엇입니까?
Suresh Venkat

나는 또한 질문을 이해하지 못합니다. 어쩌면 질문에 배경을 추가하여 요청하는 것을 이해하기가 더 쉬울 수 있습니다.
Kaveh

3
폰 노이만 아키텍처에는 CPU가 있습니다. 그러므로 병렬 프로세싱 아키텍처는 논-비노 뉴 만 (Nonmann 아키텍처는 병렬 프로세싱 이전에 발명되었다) 일 것이다. 그러나 그 질문은 모호하거나 흐릿한 것으로 보인다는 데 동의했다. 폰 노이만은 실제로 프로그래밍 모델이 아니라 컴퓨터 아키텍처를 말합니다. 프로그래밍 모델과 CPU / 컴퓨터 아키텍처는 일종의 시너지 / 공생에 존재하지만 서로 다소 독립적입니다 .... 다른 아키텍처는 프로그래밍 모델이 아키텍처에 "연결"되지 않고 다른 프로그래밍 모델을 구현할 수 있습니다 ...
vzn

1
비 폰 노이만 프로그래밍 언어는 무엇입니까? 그 문제에 대해 폰 노이만 프로그래밍 언어는 무엇입니까? (저는 Backus의 정의, 즉 본질적으로 "
제국적인

1
@Ronny : Wikipedia 페이지는 Backus의 앵무새 기사입니다.
Jeffε

답변:


12

"von Neumann 아키텍처"라고 말하면 "von Neumann 병목 현상"에 의해 제한되는 일부 하드웨어를 의미합니다. 즉, 모든 데이터가 좁은 데이터 버스를 통해 퍼널 링됩니다.

내가 자주 접하는 비 -Non Neumann 프로그래밍 언어는 VHDLVerilog 입니다. VHDL과 Verilog에서는 기본적으로 모든 것이 동시에 발생합니다. 프로그래머는 일련의 이벤트가 순차적으로 발생하도록 추가 노력을 기울여야합니다. 기본적으로 한 번에 최대 한 줄의 코드를 실행하는 "명령 포인터"를 의미하는 대부분의 다른 프로그래밍 언어와는 매우 다릅니다. 프로그래머는 여러 작업을 동시에 수행하기 위해 추가 노력을 기울여야합니다. 시각.

어떤 사람들은 이것이 더 자연스러운 채무라고 말합니다. 많은 초보 프로그래밍 학생들은 "while (x> 0) {...}"루프가 x가 0이되는 순간을 끝내기 를 기대하며 컴퓨터 그 조건을 지속적으로 평가 하지 않는다는 사실에 놀랐습니다 .

VHDL 및 Verilog 코드를 작성하는 대부분의 사람들은 프로그램을 FPGA로 컴파일하여 항상 최고 속도로 실행되는 작은 활동 블록을 만듭니다. 이러한 사람들은 종종 입력 핀에서 데이터를 읽고 일련의 블록을 통해 데이터를 처리하는 "파이프 라인"을 설정하고 한 블록의 출력 핀을 다음 블록의 입력 핀에 직접 연결 한 다음 최종 블록에서 결과를 보냅니다. 출력 핀. 새로운 데이터 조각이 들어오고 매 클럭 사이클마다 새로운 데이터 조각이 나오는 것을 제외하고 는 Unix 파이프 라인을 연상시킵니다 .

입력 핀, 중간 단계 및 출력 핀은 모두 서로 독립적입니다. 다양한 데이터 조각간에 다중화 된 단일 데이터 버스를 재사용 할 필요가 없습니다.

: 당신은 또한에 관심이있을 수 떨어져 폰 노이만 / 튜링 아키텍처를 FOM 다른 컴퓨터 아키텍처가 있습니까?


11

저는 Von Neumann이 아닌 것으로 생각합니다. Backus의 논문 "Von Neumann 스타일에서 프로그래밍을 해방 할 수 있습니까?"에 따라 "Von Neumann 병목 현상"을 우회 한 언어를 의미합니다. 관심있는 사람들을 위해 여기에서 사본을 찾을 수 있습니다 : http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf

몇 가지 이유로 귀하의 질문에 대한 답변이 모호해야합니다.

먼저, 어떤 언어가 그의 논문의 기준을 만족 시켰습니까? 이 백서에서 기능적 프로그래밍을 추적하는 것들이 있지만, 이제 그는 포인트없는 프로그래밍과 같은 의미로 오해로 간주됩니다. 원래의 오해 나 종이의 진정한 의도를 가지고 가십니까? 그가 의미하는 바에 대한 자세한 내용은 다음을 참조하십시오. http://en.wikipedia.org/wiki/Function-level_programming

둘째, 오해를 겪으면 어떻게 기능적인가? 순수한 기능 언어, 불완전한 기능 언어 및 기능적 패러다임에 비교적 친숙한 언어가 있습니다. 당신이 인기를 언급하고 그것과 기능적 순도 사이에 역의 관계가 있다는 것을 고려할 때, 어떤 언어가 포함되어야합니까? 가장 인기있는 순수 기능 언어 (전혀 인기가없는 언어) 또는 "기능성"의 최소 기준을 충족하는 더 인기있는 언어를 원하십니까? 후자의 경우 그 기준은 무엇입니까?

따라서 관점에 따라 :

  1. Haskell은 내가 알고있는 완전히 순수한 기능 언어 중 가장 인기가 있으며 작성된 응용 프로그램이 있습니다. 그러나 함수형 프로그래밍 커뮤니티에서는 큰 비중을 차지하지만 더 큰 프로그래밍 커뮤니티에서는 인기가 없습니다. 또한 그것을 사용한 후에는 실제 사용에 실용적이지 않다는 생각이 들었고 이론적 인 작업에 가치가있는 것 같습니다. 포인트없는 스타일을 허용하므로 Backus의 목표 중 일부에 접근 할 수 있습니다.

  2. Clojure, Scala 및 F #은 덜 순수하지만 실용적이고 대중적인 기능 언어입니다. F #은 포인트없는 스타일에도 친숙합니다.

  3. Forth는 무의미한 언어의 프로토 타입 적 예일 수 있지만, 오늘날에도 널리 퍼져있었습니다. 요인은 주목을받는 또 다른 무의미한 언어입니다. .

  4. APL은 Backus에 의해 한 시점에서 (아마도 그의 논문에는없는) 언급 한 단계이지만 그의 목표와 완전히 호환되지 않는 것으로 언급되었습니다. 그 당시에는 금융 부문이 컸습니다. J와 같은 하위 항목을 확인하십시오.

  5. JavaScript는 기능적이지는 않지만 클로저를 많이 사용하는 것으로 입증 된 것처럼 높은 수준의 프로그래밍 스타일에 매우 친숙합니다. 인기가 주어지면 기준을 충족시킬 수 있습니다. 커리 및 결합기 구현과 같이 JavaScript로 수행 된 흥미로운 기능을 확인하십시오.

각주로서, 그의 목표에 대한 더 많은 관점을 제공하기 위해, 그의 기준을 충족시키기 위해 그가 디자인 한 두 가지 언어를 확인할 수 있습니다. 그것들은 모든 AFAIK에서 인기가 없으므로 지식을 위해서만 사용할 수 있습니다.

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

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


1
이제 그는 함수형 프로그래밍이 아닌 포인트 프리 프로그래밍과 같은 것을 의미하는 것으로 보입니다 . 이에 대한 토론에 대한 포인터가 있습니까? 흥미로운 것 같습니다.
Suresh Venkat

Backus의 프로그래밍 모델을 "함수 수준 프로그래밍"이라고하며 en.wikipedia.org/wiki/Function-level_programming 기사가 있습니다 . 나는 정말로 좋은 링크를 모릅니다 (당신이 발견하면 알고 싶습니다!), 인터넷 검색 "기능 수준 프로그래밍"은 비디오를 포함하여 흥미로운 링크를 만듭니다.
Ronny

1
@SureshVenkat : FP 및 FL 언어는 Backus에서 특별히 기능 수준 프로그래밍에 대한 아이디어를 지원하기 위해 만들어졌습니다. "속성 프로그래밍" 및보다 구체적으로 J 언어를 참조하십시오.이 언어 는 APL과 FP / FL을 결합하여 실제 사용에서 가장 비밀스럽고 표현력이 뛰어난 범용 언어를 만들 수 있습니다. 또한 기능적 언어로 암묵적인 프로그래밍을 사용하는 것에 대한 SO의 게시물을 회상 합니다 .
CA McCann

덧붙여서,이 포스트의 연대기는 크게 벗어난 것 같습니다. 함수형 프로그래밍 (Lisp 및 ML 전통 모두)은 Backus의 Turing Award 강의보다 오래 전부터 시작되었습니다. 대부분 또는 모든 기존 프로그래밍 패러다임 (함수 수준 프로그래밍 자체 포함), 조합 논리 형식으로 교회의 람다 미적분학 및 Turing 's 계산 이론을 연구하십시오! (아, 그리고 것 정도 가 아니라 자바 스크립트와 같은 만행에 비해 실제 현실 세계의 목적을 위해 하스켈을 사용합니다.)
CA 맥캔

@ camccann 나는 게시물에 연대기를 설정하지 않았습니다. 또한 Lisp는 청구 범위를 지원하기에 너무 광범위합니다. 예를 들어, 모든 리스프가 테일 재귀가 아니기 때문에 기능하지는 않습니다. Combinatory Logic에 대한 언급이 마음에 들지만 Backus의 요점은 패러다임을 지원하는 컴퓨터를 프로그래밍 할 수있는 언어를 사용하는 것이 었습니다. 따라서 콤비네이션 로직 (Combinatory Logic)은 그의 논증을 밝히지 만 궁극적으로 그의 요점에는 영향을 미치지 않습니다.
Ronny

2

나는 Linda와 tuplespace 프로그래밍이 법안에 맞을 것이라고 생각한다. 동시성이있는 연관 / 패턴 일치 메모리 조작은 개념 상 Von-Neuman 병목 현상이 제거됨을 의미합니다.

그런 방향으로 나아가면서 순수 액터 모델 언어는 명령 시퀀싱보다는 커뮤니케이션을 모델링합니다. 비록 실제 프로그래밍 언어가 아니라 형식주의이지만 Pi 계산법, CSP 및 Petri Nets와 같은 계산법은 관련 방식으로 통신을 모델링합니다.

링크는 wikipedia를 참조하십시오 (저는 새로운 사용자이며 스팸 방지를 받고 있습니다). Linda의 이름에 관한 일부 철학적 유머에 대해서는 http://c2.com/cgi/wiki?LindaEtymology를 읽으십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.