Мир насекомых

Недавно видел обсуждение одной допустимой в C++ конструкции, которая относилась к “undefined behaviour” – то есть могла вести себя по-разному (и вела!) в разных компиляторах. ЕМНИП, в Microsoft Visual C++ все работало более-менее нормально, а в GCC или Sun C++ валилось с ошибкой (причем сильно зависело от настроек оптимизации и фазы Луны). Естественно, не обошлось без коммента вроде “Опять ерундой занимаетесь, у людей в Windows и Visual Studio все работает, а остальные сами себе злобные буратины”.

В общем, комментарий прекрасно иллюстрирует, казалось бы, очевидную вещь: сегодняшнее программирование нацелено в основном на платформу Windows+Intel, все остальные варианты – удел маргиналов-”красноглазиков”. Это очевидно, например, так же, как очевидно господство млекопитающих в природе. Но достаточно спросить специалиста, и вы с удивлением узнаете, что сейчас на Земле – “золотой век” насекомых. Около 80% всех живых существ – насекомые, а насчитывается их, по разным оценкам, от 2 до 10 миллионов видов.

Точно так же о господстве архитектуры x86 можно заявлять, не представляя себе современную ситуацию на рынке микропроцессоров. Если годовой объем продаж x86 составляет, по оптимистичной оценке, около 100-200 миллионов штук, то различных микроконтролеров (от 8-битных PIC или AVR до 32-битных ARM всех видов) ежегодно продается, держитесь за стул, более 10 миллиардов (из них ARM – примерно 3 миллиарда). Сейчас передо мной гарантированно лежат четыре устройства на ARM разных типов, и подозреваю, что реально это число несколько больше (не все свои девайсы я разбираю :)).

Наверное, если посчитать совокупную вычислительную мощность всех выпускаемых ARM, они могут “уесть” x86. Впрочем, это зависит и от методики подсчета – например, вычисления с плавающей запятой на ARM реализованы несколько хуже, чем на x86.

В отличие от “простых” микроконтролеров, ARM – довольно развитая 32-битная архитектура, со всеми ее достоинствами и недостатками (вроде адресации “жалких” 4 Гб памяти). Практически невозможно писать серьезные приложения для ARM на ассемблере (за исключением совсем “микроконтролерных” задач, типа поморгать светодиодиком), так что стандартом де-факто для разработки под эти процессоры стал C, с ростом мощности процессора переходящий в C++.

Существует довольно много компиляторов C и C++, генерирующих код для ARM – начиная с GCC и Microsoft Visual C++ (да, большинство КПК работают под управлением ARM), заканчивая какими-нибудь экзотическими компиляторами ANSI C (кстати, написать неоптимизирующий компилятор C – не такая уж и сложная задача, что привело к появлению огромного количества компиляторов “чистого C”). Более того, обычно все безобразия на ARM творят с использованием какой-нибудь ОС – от “самодельных” менеджеров ресурсов до более навороченных FreeRTOS и даже вариантов Linux или *BSD (там, где ресурсы позволяют). Более того, столь любимые многими iPhone, iPod и iPad со своей ОС – тоже пример устройств на ARM.

Представляете, какой “зоопарк” складывается из средств разработки под самую популярную сегодня процессорную архитектуру? И поверьте, никого не волнует, что там думают в Microsoft по поводу некоторых неоднозначных конструкций C++. Кстати, никто не гарантирует, что та ошибка, связанная с выравниванием членов структур, не проявится в том же майкрософтском компиляторе с другой целевой архитектурой.

4 комментария

  1. [info]soonts пишет:

    Несмотря на то шо продажи PIC/AVR/ARM камней на 2 порядка больше, рынок софта для них на столько же меньше.
    За исключением PowerPC (=все три игровых консоли) и маленькой части ARM, нигде не предполагается что конечные пользователи будут покупать и ставить на них стронний софт. Потому и программистов под них сильно меньше.
    Кто же они, загадочные люди которые пользуются экзотическими C++ компиляторами для странных платформ, не обладая при этом высокой квалификацией?
    * Хоббисты
    * Студенты и прочие научные работники
    * Linux-фанатики

    Почти все остальные (разработчики для WinMobile, разработчики игр вроде меня когда я кодил под Nintendo Wii с использованием ёбнутого компайлера, разработчики микропрограмм для mainstream-железа) скорее всего обладают достаточной квалификацией шоб никогда не сталкиваться с проблемами undefined behaviour.

    Очевидно анонимус злостно проигнорировал первые 2 категории граждан, и адресовал свой камент к третьей.

    • А я вот буквально гарантирую, что года через два-три китайцы буквально завалят рынок дешевыми (~100 баксов) планщетами и ноутбуками на пресловутых ARM, а маркетологи распишут все их преимущества (как минимум – гораздо меньшее энергопотребление в сравнении с x86, меньшее тепловыделение и т. п.). А вот в качестве операционки там будет, скорее всего, Ubuntu – из-за очень тесного сотрудничества Canonical и ARM Limited. Windows Embedded CE просто не имеет нужного набора “офисного” софта (если не считать кастрированный донельзя Office Mobile), так что тут можно пообещать локальный “вендекапец”. Тот же Asus года три назад продемонстрировал, что дешевые ноутбуки с Линуксом найдут своего покупателя – и не обязательно линуксоида.

      И вот тут придется записывать gcc в нормальные компиляторы и переквалифицироваться в linux-фанатики. Меня, правда, это не особо радует – ни под одним линуксом не видел ничего, по удобству приближающегося к Visual Studio. Конечно, есть неплохие текстовые редакторы, но вот с IDE у пингвиноводов напряг.

      PS Кстати, от глюков конкретного компилятора при переносе кода не гарантирован никто. В старых версиях VC++ был глюк с областью видимости переменной, объявленной в заголовке цикла: for(int i = 0; i < N; i++), соответственно, можно было либо использовать i после окончания цикла – тогда нельзя было скомпилировать программу другим компилятором, либо наоборот, компилируя готовый код VC нарваться на ругань при использовании, например, двух таких конструкций подряд.

      • [info]soonts пишет:

        Если это случится, я гарантирую шо на этих дешовых планшетах и нетбуках будет работать какая-нить Windows Slate 7, с зоопарком бизнес софта, правда совсем без компилятора С++, ибо 1GHz+ ARM более чем достаточно для того шоб не замечать недостатки .NET framework.

        >дешевые ноутбуки с Линуксом найдут своего покупателя
        Он другое продемонстрировал. Я нетбук Asus 701 купил с линуксом как только он вышел (ессно сразу поставил винду), современные нетбуки больше с linux не продаются: не нужны никому такие.

        >придется записывать gcc в нормальные компиляторы и переквалифицироваться в linux-фанатики
        Свежо придание.. Я ещё могу себе представить, что всем придётся стать яблочными педиками, или перелезать на какой-нить android или WebOS. Но на linux – точно нет: слишком хуёво работает, слишком хуёво поддерживается, слишком много несовместимых версий.

        P.S. Да я знаю, сам когда-то довольно много поебался портируя с VC6 на VC8.

        • С нетбуками ситуация простая – их позиционировали как “маленькие и дешевые” ноутбуки (для студенток гуманитарных специальностей :)), так что возвраты по причине “там же линукс” – следствие недобросовестной рекламы. Никто же не отказывается от яблочных и андроидных планшетов оттого, что там нет кнопки “пуск” и пасьянса “косынка”?

          Насчет версии Windows CE для планшетов или нетбуков, да еще и с зоопарком софта – крайне сомневаюсь. Не думаю, что полноценный Office смогут быстро портировать – а Open Office для ARM уже есть, как и весь “официальный” софт для Ubuntu.

          Насчет несовместимых версий – это вряд ли, так как Canonical будет всеми силами “толкать” Ubuntu.

          В любом случае, производители дистрибутивов Linux проявляют гораздо больший интерес к “альтернативным” платформам, чем Microsoft (те в свое время, где-то два года назад, заявили, что портировать desktop-версии Windows на ARM не будут).