На хабре есть много замечательных статей о возможностях и способах применения LLVM. Мне бы хотелось рассказать подробнее о работе с трехадресным кодом и машинной кодогенерации, а так же раскрыть как все это может пригодиться для обфускации кода.
Читать полностью »
Метка «LLVM»
Техники обфускации кода при помощи LLVM
2014-02-23 в 12:03, admin, рубрики: LLVM, обфускация, метки: LLVM, обфускацияВнутреннее устройство llst, часть 3. Магия JIT, или как ускорить виртуальную машину в 50 раз
2013-12-01 в 16:54, admin, рубрики: c++, jit, Little Smalltalk, LLST, LLVM, smalltalk, виртуальная машина, Компиляторы, ооп, Программирование, Смолток, метки: c++, JIT, Little Smalltalk, LLST, LLVM, smalltalk, виртуальная машина, компиляторы, ооп, Смолток
В прошлой статье мы с humbug показали, как может меняться скорость вычислений в зависимости от способа выполнения метода и его содержимого. Теперь мы сможем заглянуть под капот виртуальной машины и понять, как и почему это происходит.
Ранее мы познакомились с языком Smalltalk, а точнее с его микро реализацией Little Smalltalk. Разобрались с синтаксисом языка, форматом представления объектов в памяти и набором основных инструкций. Теперь мы вплотную подошли к вопросам взаимодействия Smalltalk и LLVM (ради этого и затевалась вся серия статей).
Сейчас у нас есть вся необходимая база знаний для того чтобы понять, что именно делается в нашем JIT компиляторе. В этой статье мы узнаем, как байт-коды Smalltalk преобразуются в IR код LLVM, как происходит компиляция и выполнение кода, и почему это работает быстрее, чем программная интерпретация. Самые нетерпеливые могут посмотреть шеллкасты (раз и два), с циферками и бегущими строчками (не забывайте про возможность скроллинга).
Читать полностью »
Правильно ли работает ваш дизассемблер?
2013-11-15 в 5:07, admin, рубрики: IA-32, LLVM, objdump, x86, x86_64, Блог компании Intel, дизассемблер, ненормальное программирование, префиксы, Процессоры, метки: IA-32, LLVM, objdump, x86, x86_64, дизассемблер, префиксыСегодня я хочу рассказать об одной интересной сложности декодирования/дизассемблирования IA-32 инструкций.
Перед прочтением этой статьи рекомендую обратиться в статье «Префиксы в системе команд IA-32», описывающей общую структуру IA-32 команды и существующие префиксы. В этой статье я подробнее расскажу про обязательные префиксы (англ. mandatory prefixes) и некоторые нюансы, связанные с ними.
Читать полностью »
Новости о LLVM для Windows
2013-09-06 в 14:29, admin, рубрики: AddressSanitizer, clang, LLVM, Компиляторы, метки: AddressSanitizer, clang, LLVMВо многих новостях про Clang на хабре я наблюдал один и тот же вопрос: «когда будет нормальная поддержка Windows?».
Уверен, задававшим подобные вопросы будет интересна свежая новость из мира LLVM.
Читать полностью »
Исключение для библиотек времени исполнения GCC или почему в Clang до сих пор отсутствует поддержка OpenMP
2013-06-21 в 5:50, admin, рубрики: clang, Dura Lex, gcc, GNU, intel, LLVM, openmp, Компиляторы, метки: clang, gcc, GNU, intel, LLVM, openmp Используете GCC в проекте с закрытым исходным кодом? Применяете OpenMP? Вы же в курсе, что библиотека libgomp, с которой компонуются все OpenMP программы, распространяется на условиях GPLv3? Будьте так добры, откройте ваши исходники…
Читать полностью »
Официальный релиз LLVM 3.3
2013-06-18 в 23:55, admin, рубрики: c++, c++11, clang, LLVM, Компиляторы, метки: c++11, clang, LLVMДля тех, кто не следит пристально за развитием Clang/LLVM, сообщаю — состоялся релиз версии 3.3. LLVM продолжает развиваться семимильными шагами и новый релиз, как заявлено, первым поддерживает все фичи C++11, добавлена поддержка целой пачки новых таргетов и появилось несколько интересных тулов, основанных на инфраструктуре LLVM. Также продолжает развиваться оптимизатор — появился автовекторизатор, который работает по умолчанию на -O3, много сделано для улучшения уже уже существующих оптимизаций. Кому интересны подробности — добро пожаловать под кат.
Принципы быстрого Хаскеля под GHC
2013-03-05 в 8:21, admin, рубрики: ghc, haskell, LLVM, yarr, абстрактное синтаксическое дерево, высокая производительность, каррирование, Компиляторы, ленивые вычисления, метки: ghc, LLVM, yarr, абстрактное синтаксическое дерево, каррирование, ленивые вычисленияGHC (Glasgow Haskell Compiler) — стандартный компилятор Хаскеля. GHC — один из самых крутых компиляторов в мире, но к сожалению без дополнительных телодвижений скомпилированные им программы по скорости больше напоминают интерпретируемые, т. е. работают очень медленно. Однако если раскрыть весь потенциал компилятора, Хаскель приближается по производительности к аналогичному коду на C.
В этой статье я обобщаю опыт выжимания максимума из GHC при создании dataflow-фреймворка Yarr.
Читать полностью »
Yarr — dataflow-фреймворк (обработки изображений) на Хаскеле
2013-03-05 в 8:21, admin, рубрики: ghc, haskell, LLVM, repa, yarr, абстрактное синтаксическое дерево, конвейер, обобщённое программирование, обработка изображений, параллельное программирование, процессор, Эквализация, метки: ghc, LLVM, repa, yarr, абстрактное синтаксическое дерево, конвейер, обобщённое программирование, процессор, Эквализация
Зондирование обстановки на Реддите показало, что едва ли хоть кто-то всерьез занимается обработкой изображений на Хаскеле, несмотря на то, что достаточно популярная библиотека Repa предполагает работу с изображениями как одно из основных приложений. Надеюсь, ситуацию сможет изменить библиотека Yarr (документация, гитхаб).
Я называю библиотеку dataflow-фреймворком, потому что она обобщена для обработки массивов (от одномерных до трехмерных) элементов любых типов, в том числе векторов чисел, например координат, комплексных чисел. Но основное предполагаемое применение — обработка двумерных массивов из векторов цветовых компонент, т. е. изображений. Фреймворк непосредственно не содержит алгоритмов обработки изображений, а предоставляет мощную инфраструктуру для их написания.
Читать полностью »
О компиляторах и интерпретаторах
2013-02-26 в 8:42, admin, рубрики: jit, LLVM, python, виртуальная машина, интерпретаторы, Компиляторы, Песочница, метки: c++, JIT, LLVM, python, виртуальная машина, интерпретаторы, компиляторы, Лисп
Если ты всегда мечтал написать свой язык программирования — добро пожаловать. Здесь ты наверняка найдёшь для себя что-нибудь интересное.
GitHub-юзер yawnt собрал чудесную подборку ссылок для любителей драконов, языков и прочих вкусных внутренностей. А знающие камрады в комментариях наверняка поделятся с тобой и другими яствами.
Пишет yawnt следующее:
С каждым днём мне всё интереснее тема компиляторов, интерпретаторов и дизайна языков программирования в целом. И я решил поделиться с народом ссылками на собранные мной материалы (большую часть мне самому ещё предстоит прочитать :<). Надеюсь, кому-нибудь они окажутся полезными.
Я не включил (и не собираюсь) в список ссылки на официальную документацию, т. к. считаю очевидным, что первым делом следует смотреть именно туда ;P.
Читать полностью »
В Google Native Client появилась поддержка архитектуры ARM
2013-01-23 в 14:37, admin, рубрики: Google Chrome, LLVM, NaCl, Native Client, PNaCl, Веб-разработка, метки: LLVM, NaCl, Native Client, PNaCl, АРМ Native Client (NaCl) позволяет браузерным приложениям запускать нативный низкоуровневый код в изолированной «песочнице». Благодаря этому критически важные для производительности части можно переписать на C или C++. До сих пор NaСl мог работать лишь на x86-совместимых компьютерах. Поддержка ARM имеет для Google большое значение, так как младшие модели ноутбуков на Google Chrome OS построены на архитектуре ARM.
Читать полностью »