ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
24 апреля
437070
Evgeny_CD, Архитектор (29.08.2013 14:37, просмотров: 27935)
Все-таки, никак не могу понять – почему большие приложения не пишут методом компиляции байткода в нативный бинарный код? -> Старое обсуждение --> Свежая наводка Vit на Cosmos http://caxapa.ru/437029.html
http://caxapa.ru/286255.html
Сам Cosmos http://ru.wikipedi …1%82%D0%B5%D0%BC%D0%B0) IL2CPU (IL To CPU) — AOT-компилятор, написанный при помощи Microsoft Intermediate Language на языке программирования C#. http://ru.wikipedia.org/wiki/IL2CPU Я сей замысел понимаю так. Пусть есть хороший ЯВУ. C#, например. И есть компилятор оного в некий байт-код. С кучей полезных фишек – всякими опциональными run-time самопроверками и проч. Если нет особого изврата по хитрозадой защите либ от шаринга, то получившийся байткод можно пускать в любой VM, которая его потянет. Вообще говоря, на любом железе, у которого хватит памяти и быстродействия. Конечно, инфраструктура .NET гвоздями прибита к вендам, но, как описано выше, на всякий … найдется с винтом. Интерпретецию оставим в покое. JIT компилятор штука сложная, и требует приличных ресурсов. Остается AOT компилер. Который берет Байт-код и делает из него asm под некий проц. Но, судя по всему, в рамках IL2CPU, эту задачу для x86 решили. Значит, можно решить для любого другого проца. Исходники IL2CPU велики по объему, но без обфускации – при желании понять можно. Профит от этой конструкции примерно такой. * Полная отвязка целевой разработки от железа. Делаются абстрации под железо, которые отлаживаются своей командой. А «большие программисты» пишут только под абстракции железа, и вообще не видят его. * Распараллеливания разработки харда и железа. * В «правильном языке» и его либах заложено очень много чего, что на С|C++ кодить, и, главное, отлаживать, довольно долго. * Можно брать писюковых программеров для встраиваемых проектов. * Правильный язык, например, позволит создать удобный фреймворк для кооперативки (как пример), и прочие варианты DSL под решаемые задачи. Аппаратных ограничений сейчас уже нет. 500 Мгц Cortex-A5 + DDR2 стоят почти что копейки, и этого хватит, как мне кажется, для 50 мкс RT в реальных проектах. Linux этот подход порвет по причине того, что в итоге мы получим большую, но кастомную программу, которая делает то что надо. В варианте Linux мы будем иметь почти что бесконечный оверхед на супергибкость и возможность решить любую задачу. Но в embedded устройствах (не считаем сотики и планшеты) нет произвольных задач, там задачи определены на этапе разработки, и супергибкость только вредит. Еще мне такой подход нравится супергибкостью в части проца. Если делать свое ядро, или некий оптимизированный софткор с аппаратными ускорителями, то для оптимизации проекта потребуется допиливать только IL2CPU, а это совсем не то же, что допилить GCC|LLVM. Если иметь правильную структуру IL2CPU, то его должно быть достаточно легко патчить на «NIOS-II с фишками». Т.е. на локальную шину софткора посадить кучу специализированных ALU-вычислительных блоков и посмотреть – насколько это ускорит процесс. При этом код верхнего уровня (если он изначально написан правильно) и его транслятор в байткод трогать не надо (максимум – откомпилить с другими ключами). (С) тоже будет надежно соблюдет – отреверисть такого монстра до сорца на ЯВУ видится невозможным, в отличие от чистого байт-кода. Вопрос – почему эта тема не развивается?