Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Архитектура компилятора Swift

558 Aufrufe

Veröffentlicht am

Доклад с конференции nixDv 2015
Андрей Волобуев Хабаровск
Andrey Volobuev Khabarovsk
blob8129@gmail.com

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

Архитектура компилятора Swift

  1. 1. Архитектура компилятора Swift Андрей Волобуев
  2. 2. Тезисы LLVM виртуальная машина, с открытым исходным кодом Классическая архитектура компиляторов Реализация трехфазной архитектуры в LLVM Bitcode формат LLVM IR промежуточное представление кода на примере Swift Вопросы
  3. 3. Что такое LLVM LLVM низкоуровневая виртуальная машина (виртуальный процессор) Проект с открытым исходным кодом Набор инструментов и библиотек, для создания компиляторов Крис Латтнер Создатель LLVM Директор по инструментам разработки в Apple 4 года работал над созданием Swift Сейчас разрабатывает Xcode
  4. 4. Классическая архитектура компиляторов Исходный код Машинный код Фронтэнд Оптимизатор Бэкэнд
  5. 5. Реализация трехфазной архитектуры в LLVM Swift фронтэнд ARM Оптимизатор АRM бэкэнд Swift
  6. 6. Реализация трефхазной архитектуры в LLVM ARM бэкэнд Swift ARM Swift фронтэнд C C фронтэнд Haskell GHC фронтэнд LLVM IR LLVM IR x86 бэкэнд x86 Общий оптимизатор LLVM IR LLVM IR
  7. 7. Bitcode формат Начиная с iOS 9 приложения загружаются в Apple Store в Bitcode формате Bitcode это сериализованный LLVM IR Это дает возможность в будущем сменить архитектуру процессора на устройствах Apple
  8. 8. Bitcode формат swiftc фронтэнд LLVM оптимизатор LLVM линкер hello.swift hello2.swift hello.o hello2.o LLVM оптимизатор
  9. 9. Промежуточное представление кода на примере Swift // add.swift func addTwoNumbers(first: UInt8, second: UInt8) -> UInt8 { return first + second } $SDK/usr/bin/swiftc -emit-ir add.swift define hidden i8 @_TF3add13addTwoNumbersFTVSs5UInt86secondS0__S0_(i8, i8) #0 { entry: %2 = call { i8, i1 } @llvm.uadd.with.overflow.i8(i8 %0, i8 %1) %3 = extractvalue { i8, i1 } %2, 0 %4 = extractvalue { i8, i1 } %2, 1 br i1 %4, label %6, label %5 ; <label>:5 ; preds = %entry ret i8 %3 ; <label>:6 ; preds = %entry call void @llvm.trap() unreachable } 2. 1. 3.
  10. 10. ВОПРОСЫ?
  11. 11. Бонусный слайд Почему ?

×