Фронтенд LLVM, например clang, транслирует код на C или C++ в промежуточное представление IR, затем через бэкенд это представление компилируется в код для таргет платформы. Это может быть нативный код x86, arm, mips, risc, либо байт-код wasm. Не существует никакого "нативного байт-кода", если не принимать во внимание такую экзотику как например java-процессоры. Может вы с машинным кодом спутали?
Фишка llvm в том, что можно выбирать любое сочетание фронтеда и бэкенда. Если вы придумали свой язык программирования и написали для него фронтенд для llvm, то бесплатно получаете поддержку кучи архитектур. И наоборот: если разработали свою архитектуру и бэкенд для llvm, то получаете поддержку кучи языков программирования. И в общем-то всё. В остальном это обычный компилятор, это не виртуальная машина, код llvm не исполняет.
Нет существенной разницы скомпилировали вы программу clang, gcc или msvc. Получите +- одинаковые бинари.
WASM же свой байт-код транслирует либо комилирует AOT/JIT в нативный код платформы на которой запущен браузер. И api/abi wasm специфицирует. Поэтому у вас один бинарь будет работать и в Винде на intel, и в android на aarch64. С нативными кодом так не выйдет.
Если хотите действительно сравнить скорость wasm и "байт-кода llvm", то нужно сравнивать с lli. Но результаты вас разочаруют, т.к. разница будет раз в 100 не в пользу llvm. Потому что это инструмент для отладки.
Тоже давно пользуюсь. Но иногда jellyfin наотрез отказывается видеть файлы. Сканирование библиотеки не помогает. Сезон сериала появляется, но в нем 0 эпизодов. Не помогает так же переименовывание файлов по гайду из документации. И в логах ничего подозрительного.
Интересно, пишите. Но вообще разводка низкоскоростных интерфейсов обычно терпит множество ошибок (никогда не делал, просто предполагаю). Куда интереснее посмотреть на DIY с DRAM например.
Нет конечно, они загружаются по запросу при первой необходимости.
Это извращённая версия modprobed-db, который позволяет наоборот составлять список используемых модулей, на основе которого потом можно собрать ядро только с нужными.
Это было бы настоящее расточительство, ведь на каждую незагруженную страницу выбрасывалось бы исключение major page fault. Пока есть свободная память, глупо ее не использовать.
На самом деле с диска обычно сразу несколько секторов считывается. В linux readahead по умолчанию установлен в 128кб. Т.е. если вы из файла читаете 1 байт, то ядро все равно прочитает 128 килобайт.
Да, страницы всё ещё не отображены в виртуальную память, но они уже в памяти физической находится. Происходит minor page fault, что гораздо приятнее.
В винде ещё и служба есть superfetch, которая нарабатывает статистику и загружает файлы в дисковый кэш ещё до того, как вы запустите приложение. В нулевых и в linux тоже был популярен preload.
Если вас могут оскорбить слова незнакомых вам людей, сказанные не в ваш адрес, а скорее всего применённые к самому себе, то о каком достоинстве идёт речь?
Да нет же. IR не предназначался как способ реализации переносимого кода. Это просто промежуточная недокомпилированная стадия.
Возможность запуска IR нужна только для отладки кодогенератора. Она не предназначена для использования кем-то кроме разработчиков llvm.
Не все осознают какая это дыра.
Нативный байт-код это как?
Фронтенд LLVM, например clang, транслирует код на C или C++ в промежуточное представление IR, затем через бэкенд это представление компилируется в код для таргет платформы. Это может быть нативный код x86, arm, mips, risc, либо байт-код wasm. Не существует никакого "нативного байт-кода", если не принимать во внимание такую экзотику как например java-процессоры. Может вы с машинным кодом спутали?
Фишка llvm в том, что можно выбирать любое сочетание фронтеда и бэкенда. Если вы придумали свой язык программирования и написали для него фронтенд для llvm, то бесплатно получаете поддержку кучи архитектур. И наоборот: если разработали свою архитектуру и бэкенд для llvm, то получаете поддержку кучи языков программирования. И в общем-то всё. В остальном это обычный компилятор, это не виртуальная машина, код llvm не исполняет.
Нет существенной разницы скомпилировали вы программу clang, gcc или msvc. Получите +- одинаковые бинари.
WASM же свой байт-код транслирует либо комилирует AOT/JIT в нативный код платформы на которой запущен браузер. И api/abi wasm специфицирует. Поэтому у вас один бинарь будет работать и в Винде на intel, и в android на aarch64. С нативными кодом так не выйдет.
Если хотите действительно сравнить скорость wasm и "байт-кода llvm", то нужно сравнивать с lli. Но результаты вас разочаруют, т.к. разница будет раз в 100 не в пользу llvm. Потому что это инструмент для отладки.
В 4 раза медленнее чего?
llvm не исполняет программу. Это просто компилятор.
llvm это промежуточное представление, wasm это конечный таргет. llvm умеет компилировать под wasm.
Тоже давно пользуюсь. Но иногда jellyfin наотрез отказывается видеть файлы. Сканирование библиотеки не помогает. Сезон сериала появляется, но в нем 0 эпизодов. Не помогает так же переименовывание файлов по гайду из документации. И в логах ничего подозрительного.
Интересно, пишите. Но вообще разводка низкоскоростных интерфейсов обычно терпит множество ошибок (никогда не делал, просто предполагаю). Куда интереснее посмотреть на DIY с DRAM например.
Не сразу понял зачем матрица из силовых дросселей. А потом понял.
Нет конечно, они загружаются по запросу при первой необходимости.
Это извращённая версия modprobed-db, который позволяет наоборот составлять список используемых модулей, на основе которого потом можно собрать ядро только с нужными.
Это было бы настоящее расточительство, ведь на каждую незагруженную страницу выбрасывалось бы исключение major page fault. Пока есть свободная память, глупо ее не использовать.
На самом деле с диска обычно сразу несколько секторов считывается. В linux readahead по умолчанию установлен в 128кб. Т.е. если вы из файла читаете 1 байт, то ядро все равно прочитает 128 килобайт.
Да, страницы всё ещё не отображены в виртуальную память, но они уже в памяти физической находится. Происходит minor page fault, что гораздо приятнее.
В винде ещё и служба есть superfetch, которая нарабатывает статистику и загружает файлы в дисковый кэш ещё до того, как вы запустите приложение. В нулевых и в linux тоже был популярен preload.
Но ведь именно про это и речь в статье.
У вас первый вариант динамически слинкован.
Если не статически линковали и не шаманили с настройками линкера, то проверьте через ldd
Да, меня это оскорбляет.
Если вас могут оскорбить слова незнакомых вам людей, сказанные не в ваш адрес, а скорее всего применённые к самому себе, то о каком достоинстве идёт речь?
Меня оскорбляет, когда ко мне обращаются какой-то отлично от "Мой господин".
Почему нельзя просто симлинк на папку с файлами в репозиторий локальный закинуть и добавить его в gitignore?
Плавающих окон только нет. Т.е. один проект на 2 монитора не раскидать.
С zed я снова чувствую, что компьютер быстрее меня.
Если на втором мониторе были открыты сишные исходники, то это разве не является поводом распространить лицензию на растровый код?