특정 언어에는 본질적인 프로세서 아키텍처가 설계를 불러 일으킨다
-
06-09-2019 - |
문제
특정 언어가 설계별로 특정 프로세서 아키텍처에 더 적합한 지 궁금합니다. 아키텍처를 말할 때 ARM/PPC/MIPS를 의미하는 것이 아니라 더 많은 스택, 축적기 또는 등록 기반 아키텍처를 의미합니다.
예를 들어, 스택 아키텍처 인 Forth를 생각할 수 있습니다. 다른 사람?
해결책
예, 확실히 ... 다른 방법으로도 간다 : 많은 하드웨어 아키텍처는 특정 언어를 수용하도록 설계되었습니다.
- RISC 아키텍처는 사람들이 어셈블리에서 C/C ++와 같은 컴파일 된 언어로 이동했다는 것에 대한 대답입니다.
- 버로우즈 B5000 어셈블러 대신 Algol이있었습니다.
- 여러 가지가 있습니다 칩.
- LISP 기계S는 LISP를 효율적으로 실행하도록 설계되었습니다.
- Java 프로세서는 하드웨어에서 Java Bytecode를 실행합니다.
- 일부 ARM 프로세서는 (선택 사항) Java 가속 기술.
아마도 더 많은 좋은 예를 사용할 수 있습니다.
다른 팁
아마도 이것은 약간의 똑똑한 답변이지만 :
관련된 프로세서의 어셈블리 언어는 아키텍처와 밀접하게 연결되어 있으므로 그렇습니다. 그렇습니다.
더 높은 수준의 언어가 동일하게 나타나는지 여부는 아마도 더 흥미로울 것입니다.
나는 Simon Peyton Jones의 Google 비디오에서 이에 대해 이야기 한 이야기를 보았습니다. 그는이 날에 사람들은 특정 언어를 실행하기 위해 전문화 된 하드웨어를 작성하는 데 매우 관심이 있다고 언급했지만 사람들은 문제를 해결하는 더 좋은 방법을 알아 냈습니다. 컴파일러를 더 똑똑하게 만드십시오. Haskell을 살펴보십시오. GHC는 높은 수준의 구성에서 엄청나게 빠른 코드를 생성하지만 Haskell은 X86 어셈블러와는 달리 두 사람이 서로 외계인을 보입니다. Java와 LISP에서도 같은 종류의 일이 일어났습니다. Java와 LISP는 현대 컴퓨터에서 매우 빠르며 프로세서를 잘 활용했지만 Java는 원래 이상한 스택 기반 바이트 코드를 위해 컴파일되었으며 오래 전에 LISP 기계를 구축했습니다.
그건 그렇고 비디오가 있습니다. 대부분은 현재 질문과 관련이 없지만 흥미로울 수 있습니다. "기능적 프로그래밍이 중요한 이유"와 단위 테스트를 쉬운 방법으로 만드는 방법에 관한 것입니다.
http://video.google.com/videoplay?docid=-4991530385753299192&hl=en
컴파일러가 Haskell과 Java를 거의 C만큼 빠르게 만들기에 충분히 똑똑했던 것은 상당히 최근 (지난 10 년 정도입니까?)였습니다. 도대체 GHC는 스택을 사용하지 않습니다. 얼마나 엉뚱한가요?
가장 잘 알려진 예는 물론 c입니다
대부분의 언어는 대상입니다 폰 노이만 건축, 이것은 대부분의 CPU의 기초입니다.
Neil Butterworth가 언급 한 Transputer의 Occam은 주목할만한 예외입니다.
VHDL은 데이터 흐름 개념을 기반으로 한 또 다른 예외이지만 프로그래밍 언어는 아니며 하드웨어 설명 및 시뮬레이션 언어입니다.