Машинно-зависимые языки - PullRequest
1 голос
/ 06 октября 2009

Почему машинно-зависимый язык больше подходит для написания определенных типов программ? Какие типы программ будут уместны?

Ответы [ 3 ]

3 голосов
/ 06 октября 2009

Почему машинно-зависимый язык быть более подходящим для письма определенные типы программ?

Скорость

Некоторые машины имеют специальные наборы инструкций (например, MMX или SSE на x86), которые позволяют «эксплуатировать» архитектуру таким образом, чтобы компиляторы могли или не могли использовать ее наилучшим образом (или не использовать вообще). Если скорость критична (например, видеоигры или программы обработки данных), вам следует использовать лучшее из архитектуры, на которой вы работаете.

Где мобильность бесполезна

При кодировании программы для конкретного устройства (например, iPhone или Nintendo DS) переносимость - это наименьшая из ваших проблем. Этот код, скорее всего, никогда не перейдет на другую платформу, поскольку он специально разработан для этой комбинации архитектуры и оборудования.

Невежество разработчика и / или рыночный спрос

Компьютерные видеоигры являются ярким примером - Windows - доминирующая ОС для компьютерных игр, так зачем ориентироваться на других? Это позволит разработчикам сосредоточиться на известных переменных для скорости / размера / простоты использования. Некоторые разработчики не знают - они учатся кодировать только на одной платформе (такой как .NET) и «забывают», что существуют другие платформы, потому что они не знают о них. Кажется, они используют подход, похожий на «Он работает на моей машине, зачем мне переносить его на странную комбинацию, которую я никогда не буду использовать?»

Другого выбора нет.

Я возьму iPhone снова, так как это очень хороший пример. Хотя вы можете программировать на него на C или C ++, вы не можете получить доступ ни к одному из виджетов UI, которые связаны со средой выполнения Objective C. У вас нет другого выбора, кроме как написать код в Objective-C, если вы хотите получить доступ к любому из этих виджетов.

Какие типы программ будут ассигновать

Встроенные системы

Все вышеперечисленное применимо - когда вы пишете код для встроенной системы, вы хотите использовать весь потенциал оборудования, над которым вы работаете. Будь то управление памятью (например, CP15 на ARM9) или даже неясное оборудование, которое подключено только к целевому устройству (серводвигатели, специальные датчики и т. Д.).

1 голос
/ 06 октября 2009

Лучший пример, который я могу придумать, - это небольшие встроенные устройства. Когда вам требуется полный контроль над каждой деталью оптимизации из-за чрезвычайно ограниченной вычислительной мощности (например, всего несколько килобайт ОЗУ), вам может потребоваться перейти на уровень ассемблера самостоятельно, чтобы все работало идеально в этих небольших пределах. .

С другой стороны, компиляторы стали достаточно сложными в наши дни, когда вам действительно не нужно опускаться ниже C для большинства ситуаций, включая встроенные устройства и микроконтроллеры. Ситуации довольно редки, когда это необходимо.

0 голосов
/ 06 октября 2009

Рассмотрим практически любой графический движок. Поскольку ваш заурядный ЦП общего назначения не может выполнять операции параллельно, у вас будет минимум минимум одного цикла на пиксель, который нужно изменить.

Однако, поскольку современные графические процессоры могут работать со многими пикселями (или другими частями данных) одновременно, одну и ту же операцию можно выполнить гораздо быстрее. Графические процессоры очень хорошо подходят для параллельных задач .

Конечно, у нас есть высокоуровневые API-интерфейсы для управления нашими видеокартами в настоящее время, но по мере того, как вы становитесь «ближе к металлу», необработанный язык, используемый для управления графическим процессором, отличается от языка для управления общими ЦП, из-за огромной разницы в архитектуре.

...