Задать вопрос
Blackover
@Blackover

Хардварный компилятор?

Первое — я не программист. Поэтому такой ламерский вопрос с коверканьем опредлений.


Процесс получения программы (для меня) представляется следующем образом. Исходный текст программы, написанный на языке высокого уровня (пример — Си) компилируется (преобразовывается) в машинный код, прогоном его несколько раз однотипными операциями для оптимизации. Раз опирации однотипные и их очень немного, нельзя ли создать очень быструю машину «из железа» которая бы только этим занималась?
  • Вопрос задан
  • 2763 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Hoorsh
@Hoorsh
Digital-специалист, веб-разработчик
Это будет нереально трудоемко, так как код самого компилятора не такой уж и простой. Там не однотипные оптимизации, а несколько стадий разбора исходного кода: лексический анализ, синтаксический анализ, семантический, и вот только потом оптимизация и далее уже генерация машинного или байт-кода.

Раз вы не программист, попробую на яблоках объяснить, что такое компиляция. Компилятору поступает исходный текст программы. Он сначала обрабатывает текст, превращая его в некую разобранную по косточкам последовательность элементов, ну грубо говоря находит символ плюс и записывает, что нашел символ плюса, нашел 10 пробелов и он их пропускает, так как они не несут смысловой нагрузки.

Дальше, когда уже не нужно заниматься распознаванием что это в коде, последовательность элементов (лексем) поступает в синтаксический анализатор. То есть плоская последовательность «косточек» уже выстраивается в иерархические деревья, например, конструкция if (some) then a(); else b(); будет уже в виде дерева с веточками a() и b(), и основанием в виде some.

После этой стадии идет проверка различных неявных правил, например, когда переменной числового типа пытаются присвоить текстовое значение и т.д. И вот когда уже все эти стадии пройдены и код относительно корректный, наступает стадия оптимизации. Удаляются бестолковые деревья, например, в if (true) then a(); else b(); конструкция else b(); никогда не выполнится и поэтому эта веточка удаляется.

Последняя стадия генерирует машинный код. То есть «сложную» команду c := a + b транслятор преобразует в последовательность команд, понятных процессору: mov c, a; add a, b;

И вот после этих все открытий подумайте, нужно ли такой сложный софт реализовывать в виде микросхем? Зачем, когда есть универсальные процессоры? Многие вещи, которые вы считаете хардварными, таковыми не являются. Например, мобильные телефоны раньше были более хардварными — большая часть логики была реализована через микросхемы. Сейчас же идет процесс больше софтверизации, в телефоне есть GSM-модуль, которым софт управляет сам — посылает вызовы и принимает звонки. Мобильникам сейчас даже можно сменить операционную систему! То есть когда идет процесс отказа от хардварных решений и превращения их в софтверные, вы спрашиваете о целесообразности обратного пути назад в дремучие времена?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Caravus
@Caravus
DevOps
Этим занимается ЦП. Очень быстро. Спасибо за вопрос.
Ответ написан
@Melz
Наверное и можно, только оно никому не нужно :) Сам процесс вам представляется так неправильно, что отсутствие ответов можно объяснить только офигением отвечающих.

Сам процесс не так и прост, начиная с архитектуры процессора и заканчиваю памятью. Даже при использовании одноядерного процессора многие вещи в нем все равно делаются параллельно:
http://ru.wikipedia.org/wiki/Параллельные_вычислительные_системы

Опять же память… и это не говоря про общее устройство ОС.

Возьмем к примеру оператор ветвления (if-else). Казалось бы все просто, но и компилятор и процессор спекулируют исход выполнения инструкции (в данном случае куда прыгрет код) для ускорения выполнения программы.

Плюс давно уже отпала необходимость перекомпилировать всю программу. Почитайте про объектный файл и линкер.
Ответ написан
Akson87
@Akson87
Даже если кто-то сделает полностью хардварный компилятор MSVC2010 например, он через пару месяцев перестанет быть актуальным (как уже писали, все меняется: инструкции, способы оптимизации, новое железо, даже сам стандарт языка итд итп), а еще окажется, что процессор этот весьма и весьма сложный (сейчас компиляторы весьма умные пошли, пытаются оптимизировать как только могут и процесс этот не такой цж простой). В результате его некому будет продавать, а стоить он будет очень и очень дорого.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы