Имеют ли определенные языки встроенную архитектуру процессора?

Мне любопытно узнать, подходят ли определенные языки по конструкции для определенных архитектур процессоров. Когда я говорю об архитектуре, я имею в виду не ARM/PPC/MIPS, а больше архитектур на основе стеков, аккумуляторов или регистров.

Например, я могу думать о Forth, который является архитектурой стека. Любые другие?

7 ответов

Решение

Да, определенно... все идет и другим путем: многие аппаратные архитектуры предназначены для работы с определенными языками.

  • Архитектура RISC в значительной степени является ответом на то, что люди перешли с ассемблера на скомпилированные языки, такие как C/C++.
  • У Берроуза B5000 был Algol вместо ассемблера.
  • Есть несколько разных фишек Forth.
  • Машины Lisp были разработаны для эффективной работы Lisp.
  • Процессоры Java запускают Java-байт-код на оборудовании.
  • Некоторые процессоры ARM имеют (опционально) технологию ускорения Java.

Возможно, есть еще много хороших примеров.

Да, они делают. Например, язык программирования Occam изначально был определен специально для архитектуры Transputer.

Возможно, это немного умный ответ, но:

Языки ассемблера вовлеченных процессоров тесно связаны с архитектурой, поэтому, да, существуют некоторые языки, где это правда.

Может быть, языки более высокого уровня демонстрируют то же самое, возможно, более интересно.

Я видел выступление Саймона Пейтона Джонса в Google Video, в котором говорилось об этом. Он упомянул, что когда-то люди были очень заинтересованы в написании аппаратного обеспечения, специализированного для выполнения определенного языка, но люди нашли лучший способ решить проблему: сделать компилятор умнее. Посмотрите на Хаскелл. GHC производит смехотворно быстрый код из высокоуровневых конструкций, но Haskell настолько сильно отличается от ассемблера x86, что оба выглядят чуждо друг другу. То же самое произошло с Java и Lisp: Java и Lisp работают очень быстро на современных компьютерах и используют приличные преимущества наших процессоров, но Java изначально была скомпилирована для странного стекового байт-кода, и очень давно люди создавали машины на Lisp.

Вот видео, кстати. Большая часть этого не относится к текущему вопросу, но вы можете найти его интересным, он о том, "почему функциональное программирование важно" и как сделать модульные тесты простым способом.

http://video.google.com/videoplay?docid=-4991530385753299192&hl=en

Только в последнее время (последнее десятилетие или около того?) Компиляторы были достаточно умны, чтобы сделать Haskell и Java почти такими же быстрыми, как C, хотя ни один из них не раскрывает большую часть базовой архитектуры. Черт, GHC даже не использует стек, насколько это странно?

Самый известный пример, конечно, с

C был написан в начале 1970-х годов для соответствия DEC PDP-11. Например, на PDP-7 язык программирования B имел только один тип данных, но портировал его на PDP-11, который имел типы данных различного размера, типы данных для переменных были добавлено в язык.

Большинство языков ориентированы на архитектуру фон Неймана, которая является основой большинства процессоров.

Occam для Transputer, упомянутый Нилом Баттервортом, является заметным исключением.

VHDL - еще одно исключение, основанное на концепции потока данных, но это не язык программирования, это язык описания аппаратного обеспечения и симуляции.

Другие вопросы по тегам