비 폰 노이만 프로그래밍 모델에 대한 실제 적용이 있습니까? 가장 널리 채택 된 비 폰 노이만 프로그래밍 언어는 무엇입니까?
비 폰 노이만 프로그래밍 모델에 대한 실제 적용이 있습니까? 가장 널리 채택 된 비 폰 노이만 프로그래밍 언어는 무엇입니까?
답변:
"von Neumann 아키텍처"라고 말하면 "von Neumann 병목 현상"에 의해 제한되는 일부 하드웨어를 의미합니다. 즉, 모든 데이터가 좁은 데이터 버스를 통해 퍼널 링됩니다.
내가 자주 접하는 비 -Non Neumann 프로그래밍 언어는 VHDL 과 Verilog 입니다. VHDL과 Verilog에서는 기본적으로 모든 것이 동시에 발생합니다. 프로그래머는 일련의 이벤트가 순차적으로 발생하도록 추가 노력을 기울여야합니다. 기본적으로 한 번에 최대 한 줄의 코드를 실행하는 "명령 포인터"를 의미하는 대부분의 다른 프로그래밍 언어와는 매우 다릅니다. 프로그래머는 여러 작업을 동시에 수행하기 위해 추가 노력을 기울여야합니다. 시각.
어떤 사람들은 이것이 더 자연스러운 채무라고 말합니다. 많은 초보 프로그래밍 학생들은 "while (x> 0) {...}"루프가 x가 0이되는 순간을 끝내기 를 기대하며 컴퓨터 가 그 조건을 지속적으로 평가 하지 않는다는 사실에 놀랐습니다 .
VHDL 및 Verilog 코드를 작성하는 대부분의 사람들은 프로그램을 FPGA로 컴파일하여 항상 최고 속도로 실행되는 작은 활동 블록을 만듭니다. 이러한 사람들은 종종 입력 핀에서 데이터를 읽고 일련의 블록을 통해 데이터를 처리하는 "파이프 라인"을 설정하고 한 블록의 출력 핀을 다음 블록의 입력 핀에 직접 연결 한 다음 최종 블록에서 결과를 보냅니다. 출력 핀. 새로운 데이터 조각이 들어오고 매 클럭 사이클마다 새로운 데이터 조각이 나오는 것을 제외하고 는 Unix 파이프 라인을 연상시킵니다 .
입력 핀, 중간 단계 및 출력 핀은 모두 서로 독립적입니다. 다양한 데이터 조각간에 다중화 된 단일 데이터 버스를 재사용 할 필요가 없습니다.
: 당신은 또한에 관심이있을 수 떨어져 폰 노이만 / 튜링 아키텍처를 FOM 다른 컴퓨터 아키텍처가 있습니까?
저는 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
둘째, 오해를 겪으면 어떻게 기능적인가? 순수한 기능 언어, 불완전한 기능 언어 및 기능적 패러다임에 비교적 친숙한 언어가 있습니다. 당신이 인기를 언급하고 그것과 기능적 순도 사이에 역의 관계가 있다는 것을 고려할 때, 어떤 언어가 포함되어야합니까? 가장 인기있는 순수 기능 언어 (전혀 인기가없는 언어) 또는 "기능성"의 최소 기준을 충족하는 더 인기있는 언어를 원하십니까? 후자의 경우 그 기준은 무엇입니까?
따라서 관점에 따라 :
Haskell은 내가 알고있는 완전히 순수한 기능 언어 중 가장 인기가 있으며 작성된 응용 프로그램이 있습니다. 그러나 함수형 프로그래밍 커뮤니티에서는 큰 비중을 차지하지만 더 큰 프로그래밍 커뮤니티에서는 인기가 없습니다. 또한 그것을 사용한 후에는 실제 사용에 실용적이지 않다는 생각이 들었고 이론적 인 작업에 가치가있는 것 같습니다. 포인트없는 스타일을 허용하므로 Backus의 목표 중 일부에 접근 할 수 있습니다.
Clojure, Scala 및 F #은 덜 순수하지만 실용적이고 대중적인 기능 언어입니다. F #은 포인트없는 스타일에도 친숙합니다.
Forth는 무의미한 언어의 프로토 타입 적 예일 수 있지만, 오늘날에도 널리 퍼져있었습니다. 요인은 주목을받는 또 다른 무의미한 언어입니다. .
APL은 Backus에 의해 한 시점에서 (아마도 그의 논문에는없는) 언급 한 단계이지만 그의 목표와 완전히 호환되지 않는 것으로 언급되었습니다. 그 당시에는 금융 부문이 컸습니다. J와 같은 하위 항목을 확인하십시오.
JavaScript는 기능적이지는 않지만 클로저를 많이 사용하는 것으로 입증 된 것처럼 높은 수준의 프로그래밍 스타일에 매우 친숙합니다. 인기가 주어지면 기준을 충족시킬 수 있습니다. 커리 및 결합기 구현과 같이 JavaScript로 수행 된 흥미로운 기능을 확인하십시오.
각주로서, 그의 목표에 대한 더 많은 관점을 제공하기 위해, 그의 기준을 충족시키기 위해 그가 디자인 한 두 가지 언어를 확인할 수 있습니다. 그것들은 모든 AFAIK에서 인기가 없으므로 지식을 위해서만 사용할 수 있습니다.
나는 Linda와 tuplespace 프로그래밍이 법안에 맞을 것이라고 생각한다. 동시성이있는 연관 / 패턴 일치 메모리 조작은 개념 상 Von-Neuman 병목 현상이 제거됨을 의미합니다.
그런 방향으로 나아가면서 순수 액터 모델 언어는 명령 시퀀싱보다는 커뮤니케이션을 모델링합니다. 비록 실제 프로그래밍 언어가 아니라 형식주의이지만 Pi 계산법, CSP 및 Petri Nets와 같은 계산법은 관련 방식으로 통신을 모델링합니다.
링크는 wikipedia를 참조하십시오 (저는 새로운 사용자이며 스팸 방지를 받고 있습니다). Linda의 이름에 관한 일부 철학적 유머에 대해서는 http://c2.com/cgi/wiki?LindaEtymology를 읽으십시오 .