![][1]В этой статье рассказывается о проведении исследований на базе инфраструктуры компилятора [LLVM][2]. Нашего рассказа должно хватить для того, чтобы исследователи, которым компиляторы прежде были по большей части безразличны, пришли в восторг от LLVM и сделали с его помощью что-нибудь интересное.
LLVM — это по-настоящему удобный для разборки и сборки «ранний» компилятор для таких традиционных языков программирования, как C и C++. LLVM настолько хорош, что считается «больше, чем просто компилятором» (это динамический компилятор, он работает с языками, не относящимися к семейству C, он представляет собой [новый формат доставки для App Store][3] и т. д. и т. п.). Все перечисленное верно, но для нашей статьи важно лишь приведенное выше определение. LLVM имеет несколько ключевых отличий от других компиляторов:
* Главное новшество — промежуточное представление (ПП). LLVM работает с ПП, которое действительно можно прочитать (если вы умеете читать ассемблерный код). Возможно, кому-то это не покажется столь уж большим откровением, однако это свойство очень важно. ПП других компиляторов обычно имеют настолько сложную структуру, что их невозможно записать вручную, трудно понять и использовать.
[Читать дальше →][4]
[1]:
https://habrastorage.org/files/7bc/94c/88f/7bc94c88f01440318d557f0d3c418375.jpg
[2]:
http://llvm.org/
[3]:
https://developer.apple.com/library/prerelease/watchos/documentation/IDEs/Conceptual/AppDistributionGuide/AppThinning/AppThinning.html#//apple_ref/doc/uid/TP40012582-CH35-SW2
[4]:
http://habrahabr.ru/post/265871/#habracut