Разбираем какие части С++ полагаются на работу ОС. Глубокое погружение в системное программирование, работу vtable, RTTI и исключений. Разбираем, как работают ключевые механизмы языка C++ без поддержки ОС. С++ на голом железе без операционной системы.
В видео:
- Анализ работы виртуальных таблиц в памяти
- Размещение RTTI в секциях исполняемого файла
- Механизмы обработки исключений на низком уровне
- Пошаговый запуск C++ кода на чистом железе
- Сборка минимального загрузчика
Таймкоды
00:00 Введение
- Обсуждение возможности работы C++ без операционной системы.
- Обзор частей стандартной библиотеки C++, которые могут и не могут работать без ОС.
- Изучение внутренних механизмов C++, зависящих от ОС.
00:51 Операционные системы на C++
- Обсуждение написания операционных систем на C++.
- Ограничения C++ на микроконтроллерах без встраиваемых ОС.
- Примеры: RTC, HAL.
01:59 Полноценный C++
- Обсуждение полноценного C++ со всеми возможностями.
- Возможность отключения некоторых функций для работы без ОС.
02:46 Исторический контекст
- C++ изначально создавался для написания операционных систем.
- Первые 10 лет C++ конвертировал код в C для переносимости.
04:04 Переносимость и ОС
- Цель C++ — переносимость между процессорами и архитектурами.
- Важность учета нюансов операционных систем.
- Метасборочные системы для создания Makefile под разные ОС.
05:34 Системные вызовы
- Системные вызовы как базовый интерфейс ОС.
- Поддержка ввода-вывода и работы с памятью через ОС.
- Примеры: мьютексы, семафоры, файловые системы.
09:07 Специфика C++
- C++ опирается на ОС больше, чем C.
- Ключевые слова C++ и их зависимость от ОС.
- Примеры: delete, malloc, export, import.
10:37 Системные вызовы и стандартная библиотека
- Системные вызовы как прерывания в определенных регистрах.
- Реализация системных вызовов в стандартной библиотеке.
- Различия в системных вызовах между ОС.
11:53 Заключение
- Полноценный C++ трудно представить без стандартной библиотеки.
- Сильная сторона C++ — его стандартная библиотека.
12:23 Реализация C++ без операционной системы
- C++ может работать без операционной системы, но это затруднительно.
- Ограниченность ресурсов микроконтроллеров делает реализацию стандартной библиотеки сложной.
- Полноценная реализация C++ требует значительных ресурсов и усилий.
14:41 Внутренние механизмы C++
- Ключевые слова C++ не полагаются на операционную систему, но внутренние механизмы требуют её наличия.
- Исключения и виртуальные функции требуют таблиц, которые должны храниться в памяти.
- Компиляция кода C++ генерирует таблицы, которые можно найти в определенных секциях памяти.
18:50 Защита данных в C++
- Данные в C++ располагаются в определенных секциях памяти, которые должны быть защищены от записи.
- В случае x86 защиту обеспечивает операционная система, а в прикладном программировании — сама операционная система.
- В C++ больше секций памяти, что требует более сложной защиты.
21:08 Пример использования C++ в операционной системе
- Операционная система от Google, Fuchsia, написана на C++ и Rust.
- В Fuchsia используется ограниченный набор возможностей C++.
- В коде Fuchsia отключены некоторые функции, такие как исключения и виртуальные функции.
24:14 Ограничения в использовании C++
- В коде Fuchsia отключены многие функции C++.
- В Blender, другой операционной системе, написанной на C++, также используются ограниченные возможности C++.
- Ограниченный набор возможностей C++ в Fuchsia и Blender показывает, что C++ требует операционной системы для полноценной реализации.
28:16 Исследование исходного кода
- Обсуждение использования виртуальных таблиц в коде.
- Проверка гипотезы о том, что виртуальные таблицы не отключаются.
- Проблемы с запуском команд и сортировкой файлов.
31:00 Опции компилятора и ключевые слова
- Опции компилятора, которые отключаются.
- Проверка ключевых слов, которые не используются.
- Сравнение с Blender и Fudzia.
31:56 Возможности C++ в операционных системах
- Обсуждение возможностей C++ в операционных системах.
- Ограничения и компромиссы при использовании C++.
- Пример с Fudzia и виртуальными функциями.
32:51 Микроконтроллеры и C++
- Сложности обсуждения микроконтроллеров.
- Пример с Arduino и использованием C++.
- Ограниченные ресурсы и специфические требования.
35:22 Реализация C++ без операционной системы
- Возможность реализации C++ без операционной системы.
- Ограничения ресурсов и необходимость кастомных библиотек.
- Пример с TCP/IP стеком и его реализацией на микроконтроллерах.
37:48 Заключение
- C++ может работать без операционной системы.
- Современные тенденции и раздувание библиотек.
- Призыв задавать вопросы и оставлять комментарии.
- Упоминание утилит, используемых в повседневной работе.
Таймкоды сделаны при помощи Нейросети YandexGPT – Ссылка https://300.ya.ru/v_UhPzGM9G
Расшифровка видео
0:00
друзья Всем привет Сегодня мы будем говорить на очень интересную тему я буду
0:08
пробовать дать ответ на вопрос может ли c+ Plus работать
0:14
без операционной системы и мы с вами посмотрим какие части стандартной
0:21
библиотеки c+ Plus могут да Или не могут работать без операционной системы мы
0:27
посмотрим какие операторы c+ не могут работать без операционной
0:33
системы мы с вами даже попробуем поиз учать Есть ли внутренние механизмы c+
0:41
Plus которые не относятся ни к стандартной библиотеке ни даже к операторам но есть ли такие механизмы
0:47
которые тоже завязаны на операционную систему и естественно мы с вами сегодня
0:54
попробуем также поговорить о том Каким образом
1:01
операционные системы на c+ и мы поговорим о
1:07
том с какими нюансами ограничениями сталкивается c+ Plus на
1:12
микроконтроллерах поскольку Как показывать себя c+ + в написании самой
1:17
операционной системы и Как показывать се c+ Plus в микроконтроллерах во многом
1:23
Будет нам открывать картину насколько дамы можем говорить что c+ может работать без операционной системы
1:31
естественно когда мы будем говорить про микроконтроллера мы будем говорить именно О бе Metal то есть мы говорим
1:37
об отсутствии Да встраиваемой операционной системы но
1:44
в принципе я думаю ртос тоже И Л тоже будут относиться к этой же категории Да
1:52
всё что все микроконтроллер без страх операционных систем обсудим
1:59
друзья Ну что давайте начинать да сразу ещё скажу что мы
2:05
естественно говорим о когда мы говорим о том Может ли c+ Plus работать без
2:10
операционной системы мы говорим именно о полноценном c+ Plus со всеми
2:17
его возможностями за которые любят c+ Plus то есть мы говорим о полноценной
2:22
стандартной библиотеке мы говорим о полноценных всех возможностях поскольку
2:28
естественно мы можем c+ свести к C и естественно Мы очень многое можем
2:35
отключить естественно мы можем писать таким образом чтобы обходить какие-то острые углы тогда когда это нужно
2:42
поскольку c+ очень гибкий язык друзья Ну что давайте начинать
2:48
Давайте начинать Ну во-первых вот здесь я постарался выписать список из стандартной
2:55
библиотеки который полагается на на операционную систему на ядро
3:01
операционной системы друзья важно понимать что почему вообще встаёт такой
3:07
вопрос исторически да Когда появился си и затем появился его улучшенная версия
3:13
c+ Plus Даже вопрос такой не вставал о том
3:19
а может ли вообще c+ Plus или C работать без операционной системы конечно может
3:25
поскольку исторически создавался как Высоков для того чтобы создать
3:31
операционную систему поэтому это его изначальная цель писать операционные
3:37
системы а c+ Plus безусловно как некой улучшенный си должен иметь теоретически
3:43
такую же возможность Тем более что там первые лет 10 своего существования c+ Plus он просто
3:50
конвертирова сифронт просто конвертирова первый компилятор c+ конвертирова код на
3:56
c+ на C Да чтобы иметь вот эту переносимость си это вот тоже нужно отметить но друзья
4:05
опять же прежде чем мы перейдём вот к фактическим к фактам Да есть ещё один
4:11
важный момент который стоит отметить хотя у нас изначально язык Си Он его
4:17
цель — это именно переносимо то есть цель сгладить то есть чтобы программист не думал вот будет на такой архитектуре
4:24
на таком процессоре запускаться или на таком но сечас Да вот когда операционные
4:32
системы набрали обороты то есть это там вторая половина восьмидесятых девяностые то и с другой стороны программы
4:39
усложнили то во многом во многом речь уже не стоит о том чтобы просто код был
4:45
переносим между э процессорами или архитектура понятно что если я напишу
4:50
там э там 2 + 2 = там B да или там int B
4:55
= 2 + 2 понятно что это отработает компилятор там и на авре и на псе и на
5:01
спарке и на x86 и на 32 и на че но есть много вещей которые завязываются
5:11
на на операционные системы на операционные системы и это вот очень
5:17
важно понимать это вот очень важно понимать кстати неспроста существуют такие вещи как Мета сборочные системы
5:23
которые фактически создают Make под для компилируемые под ту или иную
5:30
операционную систему это тоже связано с тем что у
5:35
операционных систем много своих нюансов и нужно это учитывать Да это
5:42
учитывать поэтому отчасти мы говорим о c+ Plus отчасти мы говорим в целом о
5:48
реальности любого языка программирования iam Естественно для того чтобы
5:55
нам принимать выводить работать сводом выводом нам нужны системные вызовы
6:01
системные вызовы — это базовый интерфейс операционной системы который под капотом используется стандартная библиотека да
6:06
Для того чтобы обращаться к тем возможностям которые есть о потому что OS как мы знаем она посредник между
6:12
прикладным уровнем и железом Memory ФД да естественно требует натив поддержку
6:20
поток кстати вот это Особенно показательно потому что например в юниксе
6:25
долгое время и для C и для c+ была библиотека pfs пок да freds то есть покс
6:35
а пок треды да И это прям наглядно показывало что это именно функция
6:41
операционной системы создавать треды и это логично это завязывается на планировщик задач на другие вещи то есть
6:48
на ядро ос но затем стандартная библиотека Да Взяла на себя обязанность что она будет Вот давать эту абстракцию
6:55
над возможностями текс Естественно для мкв это Да чтобы опять всё что связано с
7:01
потоками это нам должна в этом помочь
7:07
chable безусловно System Да ну файловая система Да у нас файло систему поддержку
7:14
нам даёт операционная системам семафоры барьеры и так далее Я здесь можно было
7:21
бы ещё из д третьего что-то стандарта включить Да но я думаю этим вот можно
7:26
ограничиться Хотя в ярко опираются именно на OS друзья а я
7:33
здесь набросал Примерно вот если здесь есть какие-то фактические ошибки то пожалуйста Укажите или я для наглядности
7:40
оставил теги если есть ещё какие-то вещи то добавьте их сюда Да
7:46
А может быть какие-то интересные будут подробности или корректировки вот этой
7:51
части это вот что касается стандартной библиотеки то есть вот вывод потоки
7:57
файлы Steam и это и Логично Это ресурсы да Это ресурсы нашей операционной
8:03
системы и по модели Да использование компьютера естественно именно ядро
8:10
должно давать к ним доступ И это не проблема Да c+
8:16
Plus Ну мы вообще это некорректно было ставить проблема или не проблема Это не особенно c+ скажем так C тоже самое то
8:24
есть ну тоже должен
8:29
этими ресурсами также обращаться через системные вызовы к операционной системы
8:35
я вам даже больше скажу я вам даже больше скажу даже если вы будете писать код на ассемблере уж Куда уж ближе к
8:41
железу вы всё равно должны будете делать системные вызовы вы всё равно будете создавать потоки не каким-то образом там
8:48
вручную А всё равно через операционную систему потому что она просто вам не даст этим управлять железом Напрямую Вы
8:55
всё равно Если захотите iOS Stream Да захотите простейший даже Hello world
9:01
вывести Вам нужно будет сделать системный вызов даже из ассемблера поэтому это не особенность c+ Plus Но
9:08
что мы здесь можем отметить так как c+ даёт богатую палитру возможностей для
9:14
программирования естественно получается так что его стандартная библиотека больше опирается на наличие операционной
9:19
системы нежели чем си потому что просто си она скромнее по возможностям хотя она
9:25
также опирается на возможности ис и более специфично именно вот для c+
9:33
это ключевые слова New Delete Да обычный там удаление массива Del Del удаление
9:41
массива Local exp и Да это уже там импорт это там для
9:47
модулей да Опять New выделяет память в куче в куче память выделяется и мется
9:56
через операционную систему есть специальный системный вызов как он называется plc Да
10:03
насколько я помню Delete тоже самое то есть даже на
10:08
уровне ключевых слов мы да полагаемся на безусловно не
10:15
всех да Но вот по крайней мере вот этих по крайней мере вот
10:21
этих без условно молок также Да и должен опираться на эти вещи поэтому здесь
10:27
опять c+ не уникален Да не уникален
10:33
следующий момент следующий момент друзья а как вы думаете а вот эти системные
10:39
вызовы вот для этих всех вещей Где они Где они есть они в компиляторе где-то зашиты то есть номера системных вызовов
10:48
то есть что такое системный вызов прерывание определённое в определённых регистрах в определённые регистры мы что-то записываем по Да правилам Аби Да
10:57
Аби не путать спи и мы передаём информацию да то есть
11:02
системно вызов как и при вызове там обычной функции Да С одной стороны номер системного вызова то есть Что должен
11:08
делать с другой стороны набор параметров где Ну вот где номера эти
11:15
зашиты вот это тоже очень интересный момент Они по крайней мере должны находиться Да
11:22
поправьте меня если я неправильно себе это представляю в стандартной библиотеке Да и стандартная библиотека C плюс её
11:29
реализация будет отличаться от операционной системе к операционной системе то есть c+ Plus на себя берёт
11:36
более такую высоко абстрактную роль То есть он абстрагируйся от этих нюансов usos Да но стандартная библиотека на
11:43
разных операционных системах должна уже потому что системные вызовы на разных операционных системах разные конечно
11:48
unix — это unix да Но есть и другие операционные системы друзья следующий момент поэтому
11:55
Ну говорить о том что полноценный c+ Plus может работать Ну полноценный c+
12:01
Трудно представить без возможности его стандартной библиотеки это его сильная сторона это
12:06
его один из плюсов Да по отношению к си и в этом смысле
12:14
конечно будет Трудно работать c+ Plus без стандартной библиотеки безусловно
12:20
безусловно мы сейчас будем про это говорить даже при отсутствии операционной
12:27
систе могут отдельные имплементации Да которые будут давать этот функционал c+
12:34
как в случае если это скажем так x86 без операционной системы так и в случае если
12:40
мы говорим о микроконтроллерах но хотя формально это возможно Да но дефакто
12:48
ну как например там Создать вот полноценный Вектор который полагается на динамическую память на сть можно но этот
12:56
какие-то ограничения ру чтобы создать такую библиотеку да то
13:03
есть Поэтому формально это ВС возможно то есть формально c+ может работать без
13:09
операционной системы но дефакто реализовывать весь этот функционал когда операционной системы
13:15
нету затруднительно ещё один момент там опять мы сейчас будем касаться
13:21
[музыка] микроконтроллеров есть е другие при ограниченность ресурсов
13:28
они может не позволять Да реализовать нам полноценную стандартную библиотеку
13:33
поэтому формально c+ Plus может работать Да без но дефакто очень много возникает
13:42
нюансов естественно мы говорим про полноценный c+ + Да со всеми его возможностями ключевые слова тоже самое
13:49
New выделение в куче Конечно мы можем сделать это да На том же самом
13:54
микроконтроллере Но это опять не простая задача и это будет реализовано без
13:59
операционной системы но это не простая задача фрагментация кто будет заниматься менеджментом то есть это отдельная
14:04
отдельный кусок программы должен быть и встаёт вопрос зачастую А насколько это
14:11
вообще нужно оправдано насколько под это есть ресурсы и так далее Хотя теоретически
14:17
Если всё всё вот микроконтроллер позволяет достаточно У нас мощности достаточно У нас у нас нету
14:25
никаких там дополнительных требований по там предсказуемости код там требования риал тайма и так далее И у нас есть
14:33
некая библиотека которая позволяет это всё сделать то в принципе это всё может работать то есть здесь ограничений никаких нету
14:39
А следующий момент более интересный Я предлагаю обсудить мы поговорили про
14:45
ключевые слова безусловно почти все ключевые слова они естественно не полагаются на операционную систему это
14:52
часть просто компилятора вот но Давайте поговорим о некоторых
14:59
внутренних Да внутренних механизмах c+ Plus внутренних механизмах
15:05
c+ Plus а каких бы хотелось бы поговорить исключения для того чтобы исключения у нас c+ Plus были у нас
15:11
должна быть таблица исключений rtti То есть то что позволяет
15:17
нам узнавать тип объекта Да это тоже для этого нужна таблица и таблица
15:23
виртуальных функций То есть это все таблицы это данные Да они где-то должны
15:29
хранится то есть если мы например вот возьмём такой Код Да он Безусловно такой
15:34
тестовый Но что в этом коде хорошо то что здесь есть у нас и исключение у нас
15:40
здесь есть и виртуальные функции да и у нас здесь есть rtti то есть мы пробуем то есть
15:50
скомпилировать этот код мы должны будем получить вот эти самые таблицы к чему я
15:55
это всё говорю я сейчас поясню когда мы с вами
16:04
увидим внутренности которые у нас
16:10
получится ну друзья смотрите если скомпилировать этот код если скомпилировать этот код то мы с вами
16:19
получим Я просто чтобы в Единый файл это всё записать для удобства Да и не залом
16:27
командную року ране это всё сделал и оставил этот вывод в файле То есть если мы скомпилировать например вот такой
16:33
командой этот файл А то мы можем посмотреть А в каких собственно говоря
16:38
секциях у нас окажется м вот эти таблицы Да вот эти таблицы Ну во-первых мы можем
16:45
вот такой командой узнать с какого какого адреса у нас с той или иной секции да то есть есть
16:51
самый известный там дата где у нас там информация Да там наши там Значение там переменных Там и так далее и где у нас
17:00
мм Точнее не переменных данные Да потому что переменные Там могут быть там на стеке и так далее
17:07
А у нас есть текст Да у нас есть текст то есть где
17:13
находится наш Код да где находится наш код У нас есть там не инициализирован
17:18
данные и так далее да то есть у нас секций достаточно много то есть исторически их было сначала мало Да
17:25
теперь их большое-большое количество большое количество есть Data и так
17:39
далее так вот если мы попробуем поработать с этим бинарник
17:44
вот которые получается у нас в результате компиляции и попробуем посмотреть да По каким адресам у нас
17:51
vtable По каким адресам у на ty каким адресам у нап то мы увидим секции в
17:57
которых они находятся чему я веду сейчас я поясню к чему я
18:04
веду если мы посмотрим да то мы можем здесь Ну вот в
18:10
случае если мы говорим про исключение то у нас есть вот
18:20
такие секции Да где прямо вот эта команда показывает Ну а вот
18:25
для ty Да RT информация о типах
18:31
объектов таблиц виртуальных функций Нам нужно пройти по определённым адрес Да
18:37
чтобы посмотреть А с какого вот адреса вот эти все вещи начинаются вот мы
18:43
увидим здесь с вами Вот такую секцию которая называется
18:49
R и друзья о м это нам говорит горит этом
18:56
говорит том что э располагается в определённых секциях и мы с вами знаем что например стек и куча Да они
19:02
существуют тогда когда существует процесс да то есть секции которые у нас есть на уровне бинарном когда программа
19:09
на жёстком диске и когда программа в виде процесса оперативной памяти Ну секции несколько разные Да вот
19:19
и вот эти секции Ну явно очевидно R Data
19:24
и остальные — это секции которые быть должны быть защищены от записи То есть это ну на чтение должно
19:32
быть возможность А кто будет защищать но у меня два варианта Да здесь
19:39
это му Да и операционная система а скорее всего это будет работать в
19:44
какой-то связке Да чтобы вот в эти секции по этим адресам ничего не писалось поэтому получается что и
19:52
базовые механизмы Да c+ они также полагаются на наличие
19:59
операционной системы Ну по крайней мере вот когда мы говорим вот о использовании
20:04
таких вещей по крайней мере они требуют Ну скажем так они требуют не то что операционной системы они требуют как
20:10
минимум защиты Ну в случае x86 да эту защиту им обеспечивает Ну если мы на
20:16
прикладном уровне программируем эту защиту обеспечивает операционная
20:22
система и когда мы будем говорить
20:28
[музыка] то у него просто этих механизмов нету таких как механизмов как у c+ вот
20:34
которые я взял в качестве примера вот эти 3 поэтому получается защищать там
20:40
нечего хотя там есть тоже свои секции у но c+ просто их больше всего того что язык более многообразный поэтому это нас
20:47
ведёт к мысли о том что ну как минимум когда работает прикладная программа нужна зата и в принципе нуж зата даже на
20:55
уровне Яра кто будет заниматься этой защитой
21:00
вот и это вот очень интересный вопрос сечас сейчас чуть позже мы на него
21:07
ответим на уровне прикладном когда есть ус этим занимается О а что вот
21:12
если мы делаем операционную систему на c+ кто будет ну заниматься этой защитой
21:19
Там и так далее вот опять же таки Ну сразу скажу что это конечно возможно это
21:25
конечно возможно но опять вопрос в том Стоит ли Да организовывать такую
21:32
защиту Давайте глянем на очень известный программный продукт который
21:43
называется я не знаю как вот правильно произнести фя фуси Что такое фуси это
21:52
операционная система от Google [музыка] известная на каком она сделана Давайте
22:02
посмотрим это операционная система сделана как раз [музыка]
22:07
на расти и на c+ Plus Вот это код Это
22:13
программа моя Да но для сверки я ещё другую
22:19
использую для подстраховки то есть мы здесь посмотрим
22:24
сколько у нас общее количество строчек кода
22:29
Ну вот у меня программа код которая тоже сделана на c+
22:35
насчитала примерно столько же на ра 4 и2 здесь насчитала здесь Т здесь c+ + около двух
22:44
Да ну методики подсчёта они могут быть разные Да но c+ + 2 с по здесь
22:50
д там если я запущу другую известную утилиту забыл как она
22:56
называется да то она может выдать там ещё какой-то третий результат Да в Но примерно примерно порядки одинаковые Да
23:04
вот яф сделал для того чтобы быстро получать вот этот результат Ну и чтобы
23:11
была некоторая да дополнительная статистика У меня сейчас у меня пока вот локальная
23:19
ветка моя коф она в экспериментальной стадии поэтому у меня не показывается статистика но вообще на код ня
23:29
показывается статистика сколько какой контрибьютор сделал да то есть это
23:36
выглядит вот так топ контрибьютор
23:41
Да вот так вот это
23:49
выглядит то есть сделано на c+ Plus Казалось бы Какие тогда вопросы Ну опять
23:55
встаёт вопрос насколько
24:03
насколько полноценно там используется c+ Plus Вот для этого я предлагаю Взглянуть
24:09
Взглянуть на одну на несколько даже
24:16
команд Ну давайте вот такую команду
24:21
запустим посмотрим вот такой факт то есть мы здесь видим что много где
24:27
прописывается никаких исключений Да ну в каких-то вот здесь вот системных файлов
24:33
то есть да я напомню здесь содержимое
24:40
А фад — это тоже моя
24:47
программка Вот она здесь у меня
24:55
находится и
25:01
посмотрим насчёт rtti Да таблица с типами
25:08
объектов тоже встречается такое да то есть много где то есть
25:14
отключается Ну [музыка] и таблица виртуальных
25:21
функций таблиц виртуальных функций таблиц виртуальных функций здесь нету такой информации что где-то это
25:27
отключается Ну ещё для надёжности к чему я веду к тому что Ну тут конечно
25:33
написано на c+ Plus Но это ограниченный c+ Plus ограниченный а набор возможностей C п+ здесь
25:43
используется Давайте попробуем вот таким фандом ещё здесь пройтись вот если мы начнём проходиться вот таким фандом то
25:49
мы с вами Увидим что вот смотрите Я сейчас прокручування
25:58
чтобы было нагляднее видно то есть например команды связанные
26:05
с исключениями они здесь вот только First Party Да только First
26:11
Party то есть в самом коде я здесь не вижу теперь Давайте
26:22
попробуем поискать что-нибудь на тему rtti Да команды с rtt связанные
26:29
опять же таки я прокручування
26:49
[музыка]
26:58
НР который тоже У нас написано c+ вот я использую
27:04
код опять он сейчас у меня локальная ветка сейчас в разработке это тестовая
27:10
версия поэтому здесь вот эти вещи сейчас не отображаются то что я пытаюсь усовершенствовать это дело потому что
27:15
оно как сказать очень такое тяжёлое по вычислениям чтобы максимально ускорить
27:20
вот на гитхабе У меня Рая версия где вот эти все вещи отображаются так вот показывается
27:28
информаци для быстрого анализа
27:33
Орса вот поэтому блендер Ну это известный факт он сделан на c+ Plus да
27:39
По крайней мере основная его часть ядро Вот он у меня бнр Давайте туда
27:49
зайдём Ну и попробуем тоже самую команду вести как мы здесь видим да dam команда
27:57
во многих файлах здесь встречается то есть с командой всё в порядке с командой всё в порядке просто Ну действительно
28:03
там фузи нету да виртуальные функции команды для виртуальных
28:15
функций Давайте попробуем отсюда выйти сейчас
28:26
секундочку вернёмся Исходный код
28:32
сюда и что мы здесь видим что мы здесь видим Ну опять мы видим немножко здесь в
28:40
конек Да viral
28:46
и по существу Ну вот да только вот в конек Да
28:52
здесь то есть применяется Да но ограни Ну и ста согласуется с нашей гипотезой о
29:00
том что м вот помните
29:10
мы помните мы вот здесь вот с
29:17
вами вот эту команду проверяли то есть вот эти вещи действительно мы не нашли чтобы они отключались вот поэтому
29:24
логично что Virtual Table действительно в коде есть да то есть Exception мы нашли что отключать RT что мы нашли
29:30
Virtual Table действительно не исключает Давайте Вот ещё Type ИО Да
29:37
посмотрим Type ИО Точнее не сюда а чуть-чуть я потерял А вот у меня в чём
29:43
проблема Да я вот хотел вот эту второй запустить а запустил сразу третью Ну ничего Мы сейчас по второй
29:53
пройдёмся опять я чуть-чуть здесь почищу
30:01
Ну вот кстати почему я использую фасад Да вот LS я сейчас по привычке ввёл да
30:07
то есть
30:16
автоматическая то есть здесь у нас автоматически сортировка идёт да и все
30:22
файлы мгновенно там гры Да здесь стандартными эмо Да обозначаются то есть
30:29
быстрее понимать что это за
30:36
файл так и запускаем вот эту команду и у нас здесь мы видим да что Вер много где
30:44
отключается Ну и идём запускаем опять сейчас секундочку
30:52
секундочку секундочку секундочку не сюда я смотрю чучуть
30:58
запутался Вот вот что нужно запустить то есть Первое — это опции компилятора что
31:03
они отключаются Ну и для дубляжа надёжности что действительно это не используется мы посмотрим с
31:17
вами на ключевые слова попробуем высказать вот такие ключевые слова опять не находится Да ну я думаю вы уловили
31:25
мысль Да я думаю вы уловили мысль
31:31
опять же таки туже самую команду ввожу в блендере кода такого полно да кода такого полно Вот то есть сама по себе
31:39
команда корректная То есть как итог как итог что я вот видите с сколько этого
31:46
всего Да сколько этого всего Хотя кодовые базы что блендеры что фузи достаточно большие и там и
31:55
там что Безусловно на c+ Plus можно писать операционную систему но в любом
32:02
случае возможности c+ Plus будут уреза будут урезать Хотя теоретически даже и
32:09
они могут быть добавлены но это уже вопрос А вот Стоит ли пробовать их реализовывать насколько
32:16
это получится насколько будут сложности какие там будут компромиссы и так далее
32:22
Вот то есть мы с вами выяснили что вот в этой известной операционной системе фузия который не используется
32:28
использу c+ исключений нет rtti нет но есть вот виртуальные
32:34
функции нельзя конечно сказать что там c+ Plus сводится просто к с классами Но
32:40
это всё-таки ограниченные Да возможности И ещё я обещал поговорить
32:45
[музыка] про микроконтроллеры да А как же там а как же там друзья говоря про
32:52
микроконтроллеры Я постараюсь сказать о них достаточно кратко в том
33:01
что говорить про микроконтроллеры не просто потому что мир микроконтроллеров он очень большой очень многообразный С
33:09
одной стороны и здесь то что ты говоришь для одного микроконтроллера архитектуры
33:14
э семейства микроконтроллеров это может быть актуально для другого неактуально это одна сторона вопрос
33:21
другая сторона вопроса Что мир микроконтроллеров — это мир проприетарное
33:27
очень многие проекты мы Ну просто мы не знаем как как оно работает да поэтому мы можем здесь
33:34
только делать предположений исходя из тех фактов Да которые вот известные Ну и в
33:41
частности самый известный такой проект связанный с микроконтроллера это ардуина
33:46
да это ардуина хотя скетчи там си подобные но там библиотека Да ну как
33:52
сказать внутренности ардуина они на c+ Plus И что здесь мы можем пробовать
33:58
сделать это опять пройтись вот такой командой Да которая нам может дать некоторую информацию вот здесь у меня
34:04
Исходный код ardu ина IDE Да и под капотом это IDE Ну вот как мы видим в
34:09
файлах файлах для сборки Да вот они отключают эксепшн это AVR архитектура
34:17
напомню rtti у нас та же самая история та же самая
34:24
история Ну и г вот мы запустим vtable виртуальный
34:31
функции виртуальной функции нету отключения то есть повидимому они тоже здесь сохраняются в ардуина тоже
34:38
сохраняются поэтому Ну мы видим с вами в ардуина Да что опять эти вещи не
34:44
используются но нюанс в том заключается что они не используются по
34:51
причинам зачастую не того что там не ик
34:58
ни в коем случае не могут работать без нет не поэтому а потому
35:04
что ресурсы ограниченные есть специфические требования Там могут быть по предсказуемости кода и так далее вот
35:12
то что мы говорили ранее и поэтому их там отключать
35:17
Да является частой практикой Можно ли Это принципиально
35:24
сделать без у э мени можно сделать но мы с вами говорим
35:29
именно про внутренние механизмы когда мы говорим про внутренние механизмы к этому
35:35
нужно ещ вспомнить оператор New Delete к этому ещё можно вспомнить стандартную библиотеку вспомнить там шаблоны и так
35:41
далее Насколько это всё будет возможно Да вот то здесь главное встанет не то
35:48
что нету ос да А вопрос ограниченности ресурсов или это будут какие-то опять-таки возможно стандартной
35:54
библиотеки урезает КАТО ные там локаторы и прочее
35:59
То есть это всё тоже можно реализовать Это точно так же как Например если мы говорим
36:05
о если мы говорим например
36:11
о той же самой вот Ну например tcp ipstack кто за него отвечает за него
36:18
отвечает на x86 операционная система например тот же самый Linux То есть это вот этот четвёртый уровень оси Он
36:25
работает на просто уровне операционной системы но
36:32
безусловно мы просто можем взять библиотеку которая будет имплементировать tcp IP ск и он будет
36:37
работать на микроконтроллере то есть это вопрос решается
36:42
через библиотеки и в принципе если сильно захотеть Если
36:48
кто-то захочет и поставить себе такую принципиальную задачу то безусловно особенно если микроконтроллер
36:54
будет иметь достаточно оперативной памяти мощности Там и так далее всё это будет реализуемо что касается
37:01
вот этих секций да как я говорил это секции должны быть защищённые то есть секции с вот этими таблицами Да и эту
37:08
защиту тоже можно организовать Да если в x86 занимается операционной система если
37:14
мы говорим о прикладном софте вот эти Row Data Да вспомните секцию то на
37:20
микроконтроллере Ну ещё какая-то Да библиотека сможет взять на себя то есть это вопрос а нужно ли это да вопрос
37:28
производительности и третьей сложности всего этого реализовать и теоретически
37:34
можно реализовать даже полную вот все возможности ПЛЮСПЛЮС вопрос в том
37:39
насколько это нужно Да и как какие там временные ресурсы Там и
37:47
так далее вот друзья поэтому как итог как итог как
37:55
итог c+ + без операционной системы может работать более того он для этого
38:00
Изначально и создавался как любой там язык там тот же си Это переносимость между именно
38:07
архитектура процессора Да софта Да это его изначальная цель и он может но
38:16
безусловно современные тенденции таковы что операционные системы берут на себя очень много и стандартные библиотеки и
38:25
раздуваются очень сильно ци растут
38:31
естественно вот возможности Да даже базовые языка
38:39
они в немалой степени могут полагаться на ос и безусловно без ус они точно
38:45
также могут реализовываться Но это просто требует Да большого желания да и больших
38:51
возможностей друзья это всё Если у вас есть какие-то вопросы
38:58
то задавайте их в комментариях Вот если у вас есть какие-то дополнительные мысли уточнения
39:07
тема сложная Если я сказал что-то не так то просьба Да написать что если у вас
39:13
какие-то есть интересные дополнительные дополнительная
39:20
информация вот по этой теме напишите я думаю это будет и мне интересно почитать и тем кто будет смотреть
39:28
это в записи да то есть буде будет читать комментарии друзья это всё Всем
39:35
спасибо за внимание Вот две улитки которые я показывал я на них ссылку оставлю в
39:42
описании они являются вот частью моей ежедневной Да я ими пользуюсь каждый
39:48
день Ну и вот они выложены github Чтобы другие люди тоже могли пробовать ими пользоваться
39:53
друзья Всем спасибо До свидания Y

