SlideShare a Scribd company logo
Архитектура компилятора Swift
Андрей Волобуев
Тезисы
LLVM виртуальная машина, с открытым исходным кодом
Классическая архитектура компиляторов
Реализация трехфазной архитектуры в LLVM
Bitcode формат
LLVM IR промежуточное представление кода на примере Swift
Вопросы
Что такое LLVM
LLVM низкоуровневая виртуальная машина (виртуальный процессор)
Проект с открытым исходным кодом
Набор инструментов и библиотек, для создания компиляторов
Крис Латтнер
Создатель LLVM
Директор по инструментам разработки в Apple
4 года работал над созданием Swift
Сейчас разрабатывает Xcode
Классическая архитектура компиляторов
Исходный
код
Машинный
код
Фронтэнд Оптимизатор Бэкэнд
Реализация трехфазной архитектуры в LLVM
Swift фронтэнд
ARM
Оптимизатор АRM бэкэнд
Swift
Реализация трефхазной архитектуры в LLVM
ARM бэкэнд
Swift
ARM
Swift фронтэнд
C C фронтэнд
Haskell
GHC фронтэнд
LLVM IR
LLVM IR
x86 бэкэнд
x86
Общий
оптимизатор
LLVM IR
LLVM IR
Bitcode формат
Начиная с iOS 9 приложения
загружаются в Apple Store в
Bitcode формате
Bitcode это сериализованный
LLVM IR
Это дает возможность в
будущем сменить архитектуру
процессора на устройствах
Apple
Bitcode формат
swiftc
фронтэнд
LLVM
оптимизатор
LLVM
линкер
hello.swift
hello2.swift
hello.o hello2.o
LLVM
оптимизатор
Промежуточное представление кода на примере 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.
ВОПРОСЫ?
Бонусный слайд
Почему ?

More Related Content

PDF
Построение компилятора на базе LLVM — Павел Сычев
PDF
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
PDF
RDSDataSource: Основы LLVM
PPT
язык програмирования
PPTX
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
PDF
Теория языков программирования некоторые слайды к лекциям
PPTX
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
PDF
64-битная версия Loki
Построение компилятора на базе LLVM — Павел Сычев
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
RDSDataSource: Основы LLVM
язык програмирования
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Теория языков программирования некоторые слайды к лекциям
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
64-битная версия Loki

What's hot (19)

PDF
Цена ошибки
PDF
Павел Довгалюк, Обратная отладка
PDF
Разница в подходах анализа кода компилятором и выделенным инструментом
PPTX
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
PPTX
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
PDF
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
PDF
Rust: история языка и контекст применения
PPTX
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
PPTX
C++ в играх, больших и не очень
PDF
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
PPTX
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
PDF
Для чего мы делали свой акторный фреймворк и что из этого вышло?
PDF
основы ооп на языке C#. часть 1. введение в программирование
PDF
Python и Cython
PDF
Common Lisp как второй язык
PDF
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
DOCX
C++ теория
PPTX
Асинхронность и сопрограммы
Цена ошибки
Павел Довгалюк, Обратная отладка
Разница в подходах анализа кода компилятором и выделенным инструментом
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
Rust: история языка и контекст применения
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
C++ в играх, больших и не очень
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Для чего мы делали свой акторный фреймворк и что из этого вышло?
основы ооп на языке C#. часть 1. введение в программирование
Python и Cython
Common Lisp как второй язык
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
C++ теория
Асинхронность и сопрограммы
Ad

Viewers also liked (18)

PDF
Преимущества и недостатки языка Swift
PDF
Роман Бусыгин "Yandex Map Kit для iOS в примерах"
PDF
Gleb Tarasov. Portfolio
PDF
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
PDF
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
PDF
Введение в разработку для iOS
PDF
CS193P Lecture 5 View Animation
PDF
Rambler.iOS #6: App delegate - разделяй и властвуй
PDF
Denis Lebedev, Swift
PDF
Мобильный веб: назад в будущее
PDF
Технологии vs коммуникации: что важнее?
PPTX
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
PDF
Как автотесты ускоряют релизы в OK.ru
PDF
Поговорим про арифметику
PPTX
TechLeads meetup: Евгений Потапов, ITSumma
PDF
TechLeads meetup: Макс Лапшин, Erlyvideo
PDF
TechLeads meetup: Алексей Рыбак, Badoo
PPTX
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
Преимущества и недостатки языка Swift
Роман Бусыгин "Yandex Map Kit для iOS в примерах"
Gleb Tarasov. Portfolio
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Введение в разработку для iOS
CS193P Lecture 5 View Animation
Rambler.iOS #6: App delegate - разделяй и властвуй
Denis Lebedev, Swift
Мобильный веб: назад в будущее
Технологии vs коммуникации: что важнее?
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
Как автотесты ускоряют релизы в OK.ru
Поговорим про арифметику
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
Ad

Similar to Архитектура компилятора Swift (20)

PDF
Машинное обучение с MATLAB
PDF
Сущность библиотеки анализа кода VivaCore
PDF
Экспорт алгоритмов и создание независимых приложений
PPTX
Net framework
PDF
Вопросы и ответы по библиотеке VivaCore (VivaCore FAQ)
PDF
Краткое описание библиотеки анализа кода VivaCore
PPTX
Основы "мобильной" разработки на примере платформы iOs (iPhone)
PDF
Encom Aurora - Александр Попов - митап на DevConf
PDF
Что нового в ASP.NET 5
PPTX
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
PDF
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
PDF
Экскурс в мир WEB разработки
PDF
лек11 1
PDF
Описание VivaVisualCode
PPTX
WinRT
PPTX
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр Ковалев
PPTX
Microsoft и облако Azure для разработчиков на Android – сервисы для бэкенда, ...
PDF
PUG #9 at OWOX: Symfony 4. Новый подход к созданию приложений
PPSX
PPTX
Денис Давыдов - Кроссплатформенные инструменты серверной разработки .NET
Машинное обучение с MATLAB
Сущность библиотеки анализа кода VivaCore
Экспорт алгоритмов и создание независимых приложений
Net framework
Вопросы и ответы по библиотеке VivaCore (VivaCore FAQ)
Краткое описание библиотеки анализа кода VivaCore
Основы "мобильной" разработки на примере платформы iOs (iPhone)
Encom Aurora - Александр Попов - митап на DevConf
Что нового в ASP.NET 5
Разработка модуля для отладки приложений на языке ActionScript 3 в среде Visu...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Экскурс в мир WEB разработки
лек11 1
Описание VivaVisualCode
WinRT
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр Ковалев
Microsoft и облако Azure для разработчиков на Android – сервисы для бэкенда, ...
PUG #9 at OWOX: Symfony 4. Новый подход к созданию приложений
Денис Давыдов - Кроссплатформенные инструменты серверной разработки .NET

More from Andrey Volobuev (8)

PDF
Prompt engineering for iOS developers (How LLMs and GenAI work)
PDF
Protocols and generics in Swift
PDF
State machines in iOS
PDF
Mobile architectures
PDF
Functional
PDF
How React works
PDF
Unit testing iOS Applications
Prompt engineering for iOS developers (How LLMs and GenAI work)
Protocols and generics in Swift
State machines in iOS
Mobile architectures
Functional
How React works
Unit testing iOS Applications

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