快速中级语言

Надняхна可可头-Санкт-Петербургерассказалпроустройствокомпилятора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。