快速中级语言
Надняхна可可头-Санкт-ПетербургерассказалпроустройствокомпилятораLLVM和Swift中级语言。 Подкатомтекстовыйвариантдоклада。
Историческийликбез
ПроектLLVM是2003年12月。 ДоэтогоонвтечениитрёхлетразрабатывалсявстенахИллинойскогоуниверситетакакнаучныйпрое。 苹果公司,2005年LLVM推出的Позднее,какмызнаем。
级别低的虚拟机。ИзначальнопроектLLVM。 Итаккакданноеназваниесбивалостолку,намекаянато,чтоврукахнаходитсявиртуальнаямашина,вбудущемLLVMпересталсчитатьсяакронимом – сейчасэтополноеназваниекомпилятора。 Унасестьобобщеннаясистемакоманд,прослойкаабстракцииотконечнойархитектуры,норевер Этонеболее,чемсистемакоманд,котораяможетиспользоватьсядлядостижениясвоихцелей。
АрхитектураLLVM
LLVM中的应用程序—图库视频影像#132848108 LLVM。LLVM —Проскомпиляторсмодульнойархитектурой。 Онсостоитизтрехмодулей,您在каждогоизкоторыхестьсвоячеткаязонаответственности:
- 前端;
- 中端(优化程序);
- 后端。
中间代表(IR)。
- задачей 前端’ аявляетсяпреобразованиеязыкавысокогоуровня(Swift’а),是IR;
- 中端 ответственензаоптимизациюэтогопромежуточногопредставления;
- 后端 преобразуетэтопредставлениевмашинныйкодподконкретнуюархитектуру。
Дляпреобразованиякодавнекотороепромежуточноепредставление,такжевыполняетсяцепочканекоторыхпреобразований,входекоторыхкодпредставляетсявтрехразныхпредставлениях。
Навходкомпиляторупоступаеткод,написанныйнаязыкевысокогоуровня。 迅速添加Swift。
Первыйэтапназывается 解析 。 Парсерответственензагенерациюабстрактногосинтаксическогодерева— AST( 抽象语法树 )безкакой-либосем
Затемнаступаеточередьсемантическогоанализа( 语义分析 )。 Врезультатечегоформируетсяужесемантическикорректноетипизированноесинтаксическоедерево。 Наэтомэтапеопределяетсяналичиесемантическихошибок。
Наследующемшагепроисходитимпорткода,Objective-CиC,例如Swift’овоепредставление。 备注ClangImporter 。
Swift中级语言Swift中级语言вегопервойформепредставления。
ПерваяформаSILпоступаетнавходоптимизатору。 Которыйвыполняетанализ,оптимизациюитрансформациюэтойформывканоническую。
Сначаланашагетрансформациивыполняетсядиагностикапотокаданныхигарантированныепреобразования,повышающиепроизводительностьпрограммы(определяетсяиспользованиенеинициализированныхпеременных,проверяетсядостижимостьвсехузловграфапотокаданных)。
ДальшеSILOptimizerвыполняетвысокоуровневыедоменно-специфичныеоптимизациидлябазовыхтиповконтейнеров。 Такжеонответственензадевиртуализациюфункций,ARC ARCиспецификациюдженериков。
ПослеэтогоужегенерируетсяпромежуточноепредставлениеLLVM,котороепоступаетнавход后端。
Почему-томногие,когдаговорято后端LLVM,имеютввидусамLLVM。 在后端LLVM静态编译器 ( LLVM Static Compiler )。
LLCвыполняетужеспецифичныедляконкретныхархитектуроптимизации – использованиеменьшегоместанадиске,повышениескоростиработы,понижениеэнергозатрат。 Такжеонгенерируетмашинныйкодподконкретнуюархитектуру(x86,ARM,MIPS,ит.д.)。 Собираетобъектныефайлывконечноеприложение,библиотекуилифрэймворк。
Какилюбаямодульность,такоеустройствокомпиляторапозволяетнезависимоотконкретнойархитектурыразрабатыватьновыйязыкпрограммирования,сконцентрировавшисьнаболеевысокоуровневыхоптимизацияхианализе。
快速中级语言
斯威夫特中间语言 – этоприватноедлякомпилятора斯威夫特промежуточноепредставление,котороенаходитсянаболеенизкомуровнеабстракции,чемAST,новсёещёвышепромежуточногопредставленияLLVM。 SSAДлясвоегопредставленияSILиспользуетнотацию。
SSA
静态单项分配 — 静态单项分配 — 静态单项分配 — 静态单项分配 — 静态单项分配 — 静态单项分配 。 Внейотсутствуютпеременныевпривычномнампонимании。 Ивсезначенияприсваиваютсялишьединожды。
Длякомпилятора“распарсить”кусоккода,изображенногонаправойчастикартинки—нестольтривиаль Чтобыеёрешить,долженбытьпроведенанализдостигающихопределений – компилятордолженрешить,какоеконкретноезначениеXдостигнетŸвэтойконкретнойточкепрограммы。 Нестоитзабыватьтакжепроциклы,ветвленияиbreakpoint’ы。 тобезусловнонакладываетсвоиотпечаткинасложностьданнойзадачи。
SSAпредоставляетудобныймеханизмпредставлениякодаввиденезависимыхотзначенийпеременных。 Такимобразомкусоккода,изображенныйслевавнотацииSSAбудетпредставленкодомсправа。 X X,Y,X1,X2,Y1。