home.social

#компиляция — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #компиляция, aggregated by home.social.

  1. [Перевод] Шесть мыслей о генерации кода на C

    Я занимаюсь разработкой компиляторов, то есть, пишу программы, преобразующие программы в программы. Иногда требуется нацелиться на более высокоуровневый язык, чем, скажем, простой ассемблер, и зачастую именно в таком качестве удобно взять язык C. Генерировать C не так страшно как писать от руки — в частности, потому, что генератор умеет не попадать в ловушки, связанные с неопределённым поведением. А когда пишешь на C вручную, именно неопределённого поведения следует особенно остерегаться. Здесь я опишу некоторые паттерны, которые обнаружил сам, и которые помогают мне результативно работать. Считайте этот пост краткой подборкой тех вещей, которые мне действительно помогают. Рискуя, что меня могут обвинить в тщеславии, назову их «наилучшими практиками», хотя, это действительно мои рабочие практики, поэтому, если они вам понравятся — смело берите их на вооружение.

    habr.com/ru/articles/1001304/

    #программирование #C #rust #переменные #компиляция

  2. Я добавил трейты и указатели в свой язык

    Язык активно улучшается, осталось недолго до bootstrapping'а! Также уменя есть планы писать LSP и загрузить язык на github linguist. Для последнего нужны репозитории (>200). Для тех, кому нечего делать, или кому просто не лень, попробуйте пописать программки на моем языке. Пока мало что можно будет написать, но, думаю, хотя бы что-то можно.

    habr.com/ru/articles/996654/

    #llvm #llvm_ir #llvm_компилятор_llvm_ir #компиляторы #компилятор #компиляция #c++ #язык_программирования #языки_программирования #как_написать_свой_язык

  3. Универсальный компилятор для FPGA, который понимает 42 языка программирования

    Универсальный компилятор для FPGA, который понимает 42 языка программирования Пишите код на любимом языке — получайте работающий Verilog для FPGA. Бесплатно, без vendor lock-in.

    habr.com/ru/articles/989020/

    #компиляторы #компиляция #компилятор #компилятор_оптимизация #компиляция_модулей #компилятор_си #компилятор_c #компилятор_сам_соптимизирует #компиляция_в_c #компиляторы_кода

  4. Kawai-Focus 2.1: переезд на новый стек

    В данной статье я попытаюсь переписать часть приложения Kawai-Focus на стек: FastAPI + Vue.js + Tauri + Ionic . Также я соберу приложение только с экраном «Таймеры» под Linux в AppImage, которое подойдёт для большинства Linux-дистрибутивов. Реализация одного экрана не будет слишком долгим процессом, а финальная сборка приложения позволит оценить сложность и удобство полного цикла разработки. Эта cтатья не будет подробным гайдом, так как размер переписанного кода и его описание слишком велики для одной статьи. Однако я покажу часть кода проекта и расскажу о выбранном стеке, а также о трудностях и преимуществах, с которыми я столкнулся в процессе переписывания проекта. Я буду использовать часть кода старого проекта, который не касается Kivy и KivyMD, поэтому его душа не умрёт, а обновится. Заваривайте чай, доставайте вкусняшки — пора «старый стек превращать в удобрение для новых помидор»! 🍅

    habr.com/ru/articles/983652/

    #python3 #tauri #vuejs #nuitka #ionic #appimage #компиляция #linux

  5. Kawai-Focus 2.1: переезд на новый стек

    В данной статье я попытаюсь переписать часть приложения Kawai-Focus на стек: FastAPI + Vue.js + Tauri + Ionic . Также я соберу приложение только с экраном «Таймеры» под Linux в AppImage, которое подойдёт для большинства Linux-дистрибутивов. Реализация одного экрана не будет слишком долгим процессом, а финальная сборка приложения позволит оценить сложность и удобство полного цикла разработки. Эта cтатья не будет подробным гайдом, так как размер переписанного кода и его описание слишком велики для одной статьи. Однако я покажу часть кода проекта и расскажу о выбранном стеке, а также о трудностях и преимуществах, с которыми я столкнулся в процессе переписывания проекта. Я буду использовать часть кода старого проекта, который не касается Kivy и KivyMD, поэтому его душа не умрёт, а обновится. Заваривайте чай, доставайте вкусняшки — пора «старый стек превращать в удобрение для новых помидор»! 🍅

    habr.com/ru/articles/983652/

    #python3 #tauri #vuejs #nuitka #ionic #appimage #компиляция #linux

  6. Kawai-Focus 2.1: переезд на новый стек

    В данной статье я попытаюсь переписать часть приложения Kawai-Focus на стек: FastAPI + Vue.js + Tauri + Ionic . Также я соберу приложение только с экраном «Таймеры» под Linux в AppImage, которое подойдёт для большинства Linux-дистрибутивов. Реализация одного экрана не будет слишком долгим процессом, а финальная сборка приложения позволит оценить сложность и удобство полного цикла разработки. Эта cтатья не будет подробным гайдом, так как размер переписанного кода и его описание слишком велики для одной статьи. Однако я покажу часть кода проекта и расскажу о выбранном стеке, а также о трудностях и преимуществах, с которыми я столкнулся в процессе переписывания проекта. Я буду использовать часть кода старого проекта, который не касается Kivy и KivyMD, поэтому его душа не умрёт, а обновится. Заваривайте чай, доставайте вкусняшки — пора «старый стек превращать в удобрение для новых помидор»! 🍅

    habr.com/ru/articles/983652/

    #python3 #tauri #vuejs #nuitka #ionic #appimage #компиляция #linux

  7. Kawai-Focus 2.1: переезд на новый стек

    В данной статье я попытаюсь переписать часть приложения Kawai-Focus на стек: FastAPI + Vue.js + Tauri + Ionic . Также я соберу приложение только с экраном «Таймеры» под Linux в AppImage, которое подойдёт для большинства Linux-дистрибутивов. Реализация одного экрана не будет слишком долгим процессом, а финальная сборка приложения позволит оценить сложность и удобство полного цикла разработки. Эта cтатья не будет подробным гайдом, так как размер переписанного кода и его описание слишком велики для одной статьи. Однако я покажу часть кода проекта и расскажу о выбранном стеке, а также о трудностях и преимуществах, с которыми я столкнулся в процессе переписывания проекта. Я буду использовать часть кода старого проекта, который не касается Kivy и KivyMD, поэтому его душа не умрёт, а обновится. Заваривайте чай, доставайте вкусняшки — пора «старый стек превращать в удобрение для новых помидор»! 🍅

    habr.com/ru/articles/983652/

    #python3 #tauri #vuejs #nuitka #ionic #appimage #компиляция #linux

  8. Компиляторы, AI-ассистенты и вызов IOCTL: доклады о С++ и Linux вместо новогоднего кино

    Представьте, что вам не нужно выбирать. Ни между красной и синей таблетками, ни между макарошками и пюрешкой, ни между светлой и темной сторонами. Вы можете взять лучшее от каждого предложения. Мы посмотрели все доклады

    habr.com/ru/companies/yadro/ar

    #митап #с++ #linux #linux_kernel #ядро_linux #доверенная_среда #компиляция #компиляторы

  9. Компиляторы, AI-ассистенты и вызов IOCTL: доклады о С++ и Linux вместо новогоднего кино

    Представьте, что вам не нужно выбирать. Ни между красной и синей таблетками, ни между макарошками и пюрешкой, ни между светлой и темной сторонами. Вы можете взять лучшее от каждого предложения. Мы посмотрели все доклады

    habr.com/ru/companies/yadro/ar

    #митап #с++ #linux #linux_kernel #ядро_linux #доверенная_среда #компиляция #компиляторы

  10. Компиляторы, AI-ассистенты и вызов IOCTL: доклады о С++ и Linux вместо новогоднего кино

    Представьте, что вам не нужно выбирать. Ни между красной и синей таблетками, ни между макарошками и пюрешкой, ни между светлой и темной сторонами. Вы можете взять лучшее от каждого предложения. Мы посмотрели все доклады

    habr.com/ru/companies/yadro/ar

    #митап #с++ #linux #linux_kernel #ядро_linux #доверенная_среда #компиляция #компиляторы

  11. Компиляторы, AI-ассистенты и вызов IOCTL: доклады о С++ и Linux вместо новогоднего кино

    Представьте, что вам не нужно выбирать. Ни между красной и синей таблетками, ни между макарошками и пюрешкой, ни между светлой и темной сторонами. Вы можете взять лучшее от каждого предложения. Мы посмотрели все доклады

    habr.com/ru/companies/yadro/ar

    #митап #с++ #linux #linux_kernel #ядро_linux #доверенная_среда #компиляция #компиляторы

  12. Два режима SPEC: разгоняемся на Peak, притормаживаем на Base

    Привет, Хабр! Все мы любим быстрые программы и высокие показатели в бенчмарках. Когда гоняешь тесты производительности, так и тянет включить все оптимизации компилятора, чтобы выжать максимум. Но если вы имели дело с пакетами тестов SPEC (например, SPEC CPU), то, вероятно, замечали, результаты там делятся на две категории Base и Peak . В тестах SPEC CPU есть концепция базового прогона (base run) и пикового (peak run). Это строго определенные режимы с разными правилами оптимизации. Base про честность и сопоставимость, Peak про максимальную производительность любой ценой (ну, почти любой). Смотреть детали

    habr.com/ru/companies/otus/art

    #linux #бенчмарки #оптимизация #производительность #компиляция #нагрузка #измерение_скорости #инженерные_практики

  13. SFINAE в C++

    Привет, Хабр! Сегодня я хочу поговорить про SFINAE, загадочную аббревиатуру из C++. Расшифровывается SFINAE не менее загадочно: Substitution Failure Is Not An Error , по-русски: «неудавшаяся подстановка — не ошибка». Сейчас рассмотрим, почему это правило появилось, как оно работает и как мы можем использовать его себе во благо. К механике SFINAE

    habr.com/ru/companies/otus/art

    #C++ #шаблонная_метапрограммирование #шаблоны #SFINAE #перегрузка_функций #типы_в_C++ #метапрограммирование #компиляция

  14. [Перевод] Помогите, мой Java-объект исчез (и GC тут ни при чём)

    Команда Spring АйО подготовила перевод разбора реального бага в HotSpot от разработчика OpenJDK. Во время работы над Project Valhalla его Java-объекты и классы начали «исчезать» без участия сборщика мусора — и поиск причины привёл к одному неверному биту в заголовке объекта, miscompilation в C2 и очень нетривиальному отладочному квесту. Этот текст показывает, как устроены mark word и Compact Object Headers, чем живёт Valhalla и как системное мышление плюс флаги JVM помогают выловить самые коварные ошибки.

    habr.com/ru/companies/spring_a

    #java #hotspot #jvm #jit #компиляция #отладка

  15. [Перевод] Помогите, мой Java-объект исчез (и GC тут ни при чём)

    Команда Spring АйО подготовила перевод разбора реального бага в HotSpot от разработчика OpenJDK. Во время работы над Project Valhalla его Java-объекты и классы начали «исчезать» без участия сборщика мусора — и поиск причины привёл к одному неверному биту в заголовке объекта, miscompilation в C2 и очень нетривиальному отладочному квесту. Этот текст показывает, как устроены mark word и Compact Object Headers, чем живёт Valhalla и как системное мышление плюс флаги JVM помогают выловить самые коварные ошибки.

    habr.com/ru/companies/spring_a

    #java #hotspot #jvm #jit #компиляция #отладка

  16. [Перевод] Помогите, мой Java-объект исчез (и GC тут ни при чём)

    Команда Spring АйО подготовила перевод разбора реального бага в HotSpot от разработчика OpenJDK. Во время работы над Project Valhalla его Java-объекты и классы начали «исчезать» без участия сборщика мусора — и поиск причины привёл к одному неверному биту в заголовке объекта, miscompilation в C2 и очень нетривиальному отладочному квесту. Этот текст показывает, как устроены mark word и Compact Object Headers, чем живёт Valhalla и как системное мышление плюс флаги JVM помогают выловить самые коварные ошибки.

    habr.com/ru/companies/spring_a

    #java #hotspot #jvm #jit #компиляция #отладка

  17. [Перевод] Помогите, мой Java-объект исчез (и GC тут ни при чём)

    Команда Spring АйО подготовила перевод разбора реального бага в HotSpot от разработчика OpenJDK. Во время работы над Project Valhalla его Java-объекты и классы начали «исчезать» без участия сборщика мусора — и поиск причины привёл к одному неверному биту в заголовке объекта, miscompilation в C2 и очень нетривиальному отладочному квесту. Этот текст показывает, как устроены mark word и Compact Object Headers, чем живёт Valhalla и как системное мышление плюс флаги JVM помогают выловить самые коварные ошибки.

    habr.com/ru/companies/spring_a

    #java #hotspot #jvm #jit #компиляция #отладка

  18. Progress Bar для Сборки Программы

    Компиляцию большой программы можно сравнить с кипячением воды. Вы никогда не можете сказать сколько еще осталось времени до окончания процесса. Многим пользователям GUI-IDE приходится страдать от того, что запустив сборку проекта приходится ждать окончания непредсказуемое время. Однако эту проблему можно решить, если собирать код скриптами сборки. Достоинством сборки проекта из самостоятельно написанных скриптов является то, что в процесс сборки можно добавлять всяческие полезные механизмы. Вы программируете не только свою прошивку, но и процесс сборки самой прошивки. Здорово? В этом тексте я написал про то, как добавить индикатор прогресса в процесс сборки прошивки.

    habr.com/ru/articles/966248/

    #make #gnu_make #progressbar #progress_bar #Makefile #devops #переменные_окружения #компиляция #скрипты_сборки #build_system

  19. Progress Bar для Сборки Программы

    Компиляцию большой программы можно сравнить с кипячением воды. Вы никогда не можете сказать сколько еще осталось времени до окончания процесса. Многим пользователям GUI-IDE приходится страдать от того, что запустив сборку проекта приходится ждать окончания непредсказуемое время. Однако эту проблему можно решить, если собирать код скриптами сборки. Достоинством сборки проекта из самостоятельно написанных скриптов является то, что в процесс сборки можно добавлять всяческие полезные механизмы. Вы программируете не только свою прошивку, но и процесс сборки самой прошивки. Здорово? В этом тексте я написал про то, как добавить индикатор прогресса в процесс сборки прошивки.

    habr.com/ru/articles/966248/

    #make #gnu_make #progressbar #progress_bar #Makefile #devops #переменные_окружения #компиляция #скрипты_сборки #build_system

  20. Progress Bar для Сборки Программы

    Компиляцию большой программы можно сравнить с кипячением воды. Вы никогда не можете сказать сколько еще осталось времени до окончания процесса. Многим пользователям GUI-IDE приходится страдать от того, что запустив сборку проекта приходится ждать окончания непредсказуемое время. Однако эту проблему можно решить, если собирать код скриптами сборки. Достоинством сборки проекта из самостоятельно написанных скриптов является то, что в процесс сборки можно добавлять всяческие полезные механизмы. Вы программируете не только свою прошивку, но и процесс сборки самой прошивки. Здорово? В этом тексте я написал про то, как добавить индикатор прогресса в процесс сборки прошивки.

    habr.com/ru/articles/966248/

    #make #gnu_make #progressbar #progress_bar #Makefile #devops #переменные_окружения #компиляция #скрипты_сборки #build_system

  21. Progress Bar для Сборки Программы

    Компиляцию большой программы можно сравнить с кипячением воды. Вы никогда не можете сказать сколько еще осталось времени до окончания процесса. Многим пользователям GUI-IDE приходится страдать от того, что запустив сборку проекта приходится ждать окончания непредсказуемое время. Однако эту проблему можно решить, если собирать код скриптами сборки. Достоинством сборки проекта из самостоятельно написанных скриптов является то, что в процесс сборки можно добавлять всяческие полезные механизмы. Вы программируете не только свою прошивку, но и процесс сборки самой прошивки. Здорово? В этом тексте я написал про то, как добавить индикатор прогресса в процесс сборки прошивки.

    habr.com/ru/articles/966248/

    #make #gnu_make #progressbar #progress_bar #Makefile #devops #переменные_окружения #компиляция #скрипты_сборки #build_system

  22. Как работает компьютер. Простая статья для начинающих программистов

    В этой статье изложено всё, что нужно знать об устройстве компьютера с точки зрения программиста, а именно: для чего нужен тактовый генератор, регистры, кэши и виртуальная память; что такое архитектура процессора; что такое машинный код и код ассемблера; чем отличается компиляция в машинный код в C, C++ или Rust от компиляции в байт-код виртуальной машины в языках типа Java и C#; в чём их отличие от интерпретируемых языков вроде JavaScript или Python; что такое динамические и статические библиотеки (.dll/.so, .lib/.a); что такое фреймворк; что такое API и web-API; и что собой представляет параллельное программирование с использованием многоядерных процессоров, векторных регистров и видеокарт.

    habr.com/ru/articles/964572/

    #процессор #кэш #регистр #виртуальная_память #компиляция #интерпретаторы #параллелизм #gpu #векторные_операции #api

  23. [Перевод] Кому нужен Graphviz, если можно написать его самому?

    Недавно мы переделали наши внутренние инструменты, визуализирующие компиляцию JavaScript и WebAssembly. При работе оптимизирующего компилятора Ion мы теперь можем генерировать интерактивные графы, демонстрирующие, как конкретно обрабатываются и оптимизируются функции. Вы можете сами поэкспериментировать с этими графами в оригинале статьи . Просто введите какой-нибудь код на JavaScript в функцию test , и наблюдайте за созданием графа. Также там можно щёлкать и перетаскивать граф, менять масштаб при помощи колеса мыши с зажатым Ctrl и перетаскивать ползунок вниз, чтобы изучить процесс оптимизации. В процессе экспериментов обратите внимание на то, насколько стабильна схема графа даже при изменении размеров блоков и добавлении новых структур. Попробуйте нажать на заголовок блока, чтобы выделить его, а затем перетащить ползунок, и наблюдайте за тем, как меняется граф, а блок остаётся на месте. Или нажмите на номер команды, чтобы подсветить её и следить за ней между проходами. Разумеется, мы не первые, кто начал визуализировать внутренние графы компиляторов, и не первые, кто сделал их интерактивными. Но меня не устраивали результаты работы популярных инструментов наподобие Graphviz и Mermaid , поэтому я решил создать алгоритм специально под наши потребности. Получившийся алгоритм прост, быстр, создаёт на удивление высококачественный вывод и его можно реализовать в менее чем тысяче строк кода. В этой статье я объясню алгоритм и конструкторские решения, лежащие в его основе.

    habr.com/ru/articles/962436/

    #spidermonkey #графы #графы_визуализация #компиляция

  24. [Перевод] Кому нужен Graphviz, если можно написать его самому?

    Недавно мы переделали наши внутренние инструменты, визуализирующие компиляцию JavaScript и WebAssembly. При работе оптимизирующего компилятора Ion мы теперь можем генерировать интерактивные графы, демонстрирующие, как конкретно обрабатываются и оптимизируются функции. Вы можете сами поэкспериментировать с этими графами в оригинале статьи . Просто введите какой-нибудь код на JavaScript в функцию test , и наблюдайте за созданием графа. Также там можно щёлкать и перетаскивать граф, менять масштаб при помощи колеса мыши с зажатым Ctrl и перетаскивать ползунок вниз, чтобы изучить процесс оптимизации. В процессе экспериментов обратите внимание на то, насколько стабильна схема графа даже при изменении размеров блоков и добавлении новых структур. Попробуйте нажать на заголовок блока, чтобы выделить его, а затем перетащить ползунок, и наблюдайте за тем, как меняется граф, а блок остаётся на месте. Или нажмите на номер команды, чтобы подсветить её и следить за ней между проходами. Разумеется, мы не первые, кто начал визуализировать внутренние графы компиляторов, и не первые, кто сделал их интерактивными. Но меня не устраивали результаты работы популярных инструментов наподобие Graphviz и Mermaid , поэтому я решил создать алгоритм специально под наши потребности. Получившийся алгоритм прост, быстр, создаёт на удивление высококачественный вывод и его можно реализовать в менее чем тысяче строк кода. В этой статье я объясню алгоритм и конструкторские решения, лежащие в его основе.

    habr.com/ru/articles/962436/

    #spidermonkey #графы #графы_визуализация #компиляция

  25. [Перевод] Кому нужен Graphviz, если можно написать его самому?

    Недавно мы переделали наши внутренние инструменты, визуализирующие компиляцию JavaScript и WebAssembly. При работе оптимизирующего компилятора Ion мы теперь можем генерировать интерактивные графы, демонстрирующие, как конкретно обрабатываются и оптимизируются функции. Вы можете сами поэкспериментировать с этими графами в оригинале статьи . Просто введите какой-нибудь код на JavaScript в функцию test , и наблюдайте за созданием графа. Также там можно щёлкать и перетаскивать граф, менять масштаб при помощи колеса мыши с зажатым Ctrl и перетаскивать ползунок вниз, чтобы изучить процесс оптимизации. В процессе экспериментов обратите внимание на то, насколько стабильна схема графа даже при изменении размеров блоков и добавлении новых структур. Попробуйте нажать на заголовок блока, чтобы выделить его, а затем перетащить ползунок, и наблюдайте за тем, как меняется граф, а блок остаётся на месте. Или нажмите на номер команды, чтобы подсветить её и следить за ней между проходами. Разумеется, мы не первые, кто начал визуализировать внутренние графы компиляторов, и не первые, кто сделал их интерактивными. Но меня не устраивали результаты работы популярных инструментов наподобие Graphviz и Mermaid , поэтому я решил создать алгоритм специально под наши потребности. Получившийся алгоритм прост, быстр, создаёт на удивление высококачественный вывод и его можно реализовать в менее чем тысяче строк кода. В этой статье я объясню алгоритм и конструкторские решения, лежащие в его основе.

    habr.com/ru/articles/962436/

    #spidermonkey #графы #графы_визуализация #компиляция

  26. [Перевод] Кому нужен Graphviz, если можно написать его самому?

    Недавно мы переделали наши внутренние инструменты, визуализирующие компиляцию JavaScript и WebAssembly. При работе оптимизирующего компилятора Ion мы теперь можем генерировать интерактивные графы, демонстрирующие, как конкретно обрабатываются и оптимизируются функции. Вы можете сами поэкспериментировать с этими графами в оригинале статьи . Просто введите какой-нибудь код на JavaScript в функцию test , и наблюдайте за созданием графа. Также там можно щёлкать и перетаскивать граф, менять масштаб при помощи колеса мыши с зажатым Ctrl и перетаскивать ползунок вниз, чтобы изучить процесс оптимизации. В процессе экспериментов обратите внимание на то, насколько стабильна схема графа даже при изменении размеров блоков и добавлении новых структур. Попробуйте нажать на заголовок блока, чтобы выделить его, а затем перетащить ползунок, и наблюдайте за тем, как меняется граф, а блок остаётся на месте. Или нажмите на номер команды, чтобы подсветить её и следить за ней между проходами. Разумеется, мы не первые, кто начал визуализировать внутренние графы компиляторов, и не первые, кто сделал их интерактивными. Но меня не устраивали результаты работы популярных инструментов наподобие Graphviz и Mermaid , поэтому я решил создать алгоритм специально под наши потребности. Получившийся алгоритм прост, быстр, создаёт на удивление высококачественный вывод и его можно реализовать в менее чем тысяче строк кода. В этой статье я объясню алгоритм и конструкторские решения, лежащие в его основе.

    habr.com/ru/articles/962436/

    #spidermonkey #графы #графы_визуализация #компиляция

  27. Ассемблер: рассматриваем каждый байт «Hello, World!». Как на самом деле работают программы на уровне процессора и ОС

    Что на самом деле происходит, когда вы запускаете программу? Мы привыкли воспринимать это как данность, но за кадром скрывается целая вселенная — от регистров процессора и системных вызовов Linux до формата ELF и модели памяти процесса. Присоединяйтесь к погружению, где мы прольём свет на каждый байт программы «Hello, World!» и поймём, каким образом ОС её выполняет.

    habr.com/ru/companies/timeweb/

    #linux #системный_вызов #ассемблер #виртуальная_память #компиляция #elf #библиотеки #си #низкоуровневое_программирование #timeweb_статьи

  28. Ассемблер: Рассматриваем каждый байт «Hello, World!». Как на самом деле работают программы на уровне процессора и ОС

    Что на самом деле происходит, когда вы запускаете программу? Мы привыкли воспринимать это как данность, но за кадром скрывается целая вселенная — от регистров процессора и системных вызовов Linux до формата ELF и модели памяти процесса. Присоединяйтесь к погружению, где мы прольём свет на каждый байт программы «Hello, World!» и поймём, каким образом ОС её выполняет.

    habr.com/ru/companies/timeweb/

    #linux #системный_вызов #ассемблер #линковка #виртуальная_память #компиляция #elf #библиотеки #си #низкоуровневое

  29. Девиртуализация в C++, компиляторах и вашей программе

    Привет, Хабр! Меня зовут Илья Андреев, я старший программист в компании Syntacore. Вы, наверно, слышали, что виртуальные функции в C++ пользуются дурной славой — а может, и сами придерживаетесь о них не самого лучшего мнения. В этой статье, подготовленной совместно с Константином Владимировым, я в некоторой степени выступлю адвокатом виртуализации. Мы начнем с вводной части о статическом и динамическом полиморфизме, рассмотрим факторы, влияющие на девиртуализацию, и ее примеры разной сложности — в том числе те, что мы используем в реальной разработке. А напоследок познакомим вас со спекулятивной девиртуализацией и дадим рекомендации, как подходить к виртуальным функциям в разработке на C++.

    habr.com/ru/companies/yadro/ar

    #с++ #виртуализация #девиртуализация #std #компиляторы #компиляция

  30. Архитектура сна программиста: как мозг компилирует дневной опыт ночью

    Почему мы ложимся спать с багами в голове, а просыпаемся с готовым решением? Сон программиста — это не просто отдых, а своеобразная ночная компиляция опыта, где нейроны оптимизируют код нашей памяти, удаляют мусорные зависимости и иногда даже проводят рефакторинг идей. Попробуем разобраться в архитектуре этого процесса — через аналогии с компиляторами, кешами и garbage collector’ами.

    habr.com/ru/articles/937944/

    #сон #мозг #программист #компиляция #память #garbage_collector #REM #оптимизация #нейронаука #код

  31. [Перевод] Собери Svelte 5 в своей голове

    Даже если вы никогда не заглядывали «под капот» фреймворков, Svelte 5 — отличный повод это сделать. Вместо сухих теорий мы шаг за шагом разберём, как привычный HTML-подобный код Svelte превращается в быстрый JavaScript, способный работать без лишнего балласта. Автор статьи, Тан Ли Хау из сообщества Svelte, показывает этот процесс на простых примерах, так что вы сможете буквально «скомпилировать» Svelte у себя в голове и понять, что на самом деле делает ваш код.

    habr.com/ru/companies/first/ar

    #svelte #реактивность #javascript #программирование #компиляция #фреймфорк #framework #react

  32. [Перевод] Собери Svelte 5 в своей голове

    Даже если вы никогда не заглядывали «под капот» фреймворков, Svelte 5 — отличный повод это сделать. Вместо сухих теорий мы шаг за шагом разберём, как привычный HTML-подобный код Svelte превращается в быстрый JavaScript, способный работать без лишнего балласта. Автор статьи, Тан Ли Хау из сообщества Svelte, показывает этот процесс на простых примерах, так что вы сможете буквально «скомпилировать» Svelte у себя в голове и понять, что на самом деле делает ваш код.

    habr.com/ru/companies/first/ar

    #svelte #реактивность #javascript #программирование #компиляция #фреймфорк #framework #react

  33. [Перевод] Собери Svelte 5 в своей голове

    Даже если вы никогда не заглядывали «под капот» фреймворков, Svelte 5 — отличный повод это сделать. Вместо сухих теорий мы шаг за шагом разберём, как привычный HTML-подобный код Svelte превращается в быстрый JavaScript, способный работать без лишнего балласта. Автор статьи, Тан Ли Хау из сообщества Svelte, показывает этот процесс на простых примерах, так что вы сможете буквально «скомпилировать» Svelte у себя в голове и понять, что на самом деле делает ваш код.

    habr.com/ru/companies/first/ar

    #svelte #реактивность #javascript #программирование #компиляция #фреймфорк #framework #react

  34. [Перевод] Собери Svelte 5 в своей голове

    Даже если вы никогда не заглядывали «под капот» фреймворков, Svelte 5 — отличный повод это сделать. Вместо сухих теорий мы шаг за шагом разберём, как привычный HTML-подобный код Svelte превращается в быстрый JavaScript, способный работать без лишнего балласта. Автор статьи, Тан Ли Хау из сообщества Svelte, показывает этот процесс на простых примерах, так что вы сможете буквально «скомпилировать» Svelte у себя в голове и понять, что на самом деле делает ваш код.

    habr.com/ru/companies/first/ar

    #svelte #реактивность #javascript #программирование #компиляция #фреймфорк #framework #react

  35. Как собрать npm-пакет в 2025 и не облажаться

    Думаю, многие из вас публиковали npm-пакеты в опенсорс или для работы (или хотя бы подумывали об этом). Но сборка библиотек сильно отличается от сборки приложений, а советы по публикации npm-пакетов в интернете часто противоречат друг другу или оказываются устаревшими. За свою карьеру я портатил недели, публикуя пакеты с кривой сборкой, разбирая жалобы пользователей и читая срачи известных деятелей опенсорса. И я готов поделиться с вами самыми свежими советами: Минификация: помогает или мешает? Транспиляция: как не перестараться? Полифиллы: да, но нет. Сорсмапы: кому они вообще нужны? Бандлить или не бандлить?

    habr.com/ru/articles/936010/

    #opensourсe #npm #javascript #бандлер #typescript #компиляция

  36. [Перевод] «Почему компилятор Rust такой медленный?»

    Я потратил месяц на создание веб-сайта в Docker и теперь готов поделиться ужасными историями. У меня есть проблема. Мой веб-сайт (на котором была опубликована эта статья) в основном обслуживается одним двоичным файлом Rust. Он стал слишком длинным . Каждый раз, когда мне нужно внести изменение, я должен: Собрать новую статически компонуемую библиотеку (с --target=x86_64-unknown-linux-musl ) 1. Скопировать её на сервер 2. Перезапустить веб-сайт Ситуация, мягко говоря, неидеальная. Поэтому мне бы хотелось перейти к развёртыванию веб-сайта при помощи контейнеров (будь то Docker, Kubernetes или что-то иное), в духе подавляющего большинства ПО, разворачиваемого в последний десяток лет. Единственная проблема заключается в том, что реализовать быстрые сборки Rust с Docker не так уж просто.

    habr.com/ru/articles/922534/

    #docker #профилирование #трассировка #компиляция #rustc

  37. Концепты в современном C ++

    C++ шаблоны — мощный инструмент, но работать с ними бывает больно: многословные ошибки, путаница с типами и enable_if, который все усложняет. Concepts в C++20 появились, чтобы упростить жизнь разработчикам и сделать шаблонный код понятнее. В этой статье — разбор конкретного кейса: как с помощью концептов задать корректные ограничения на контейнеры, избежать ловушек с массивами и получить внятные ошибки от компилятора.

    habr.com/ru/articles/896954/

    #c++ #разработка #концепты #контейнеры #сигнатуры #компиляция

  38. Шаг 1: Lexing

    Относительно других этапов компиляции, лексический анализ – самый простой, хотя и может показаться сложным на первый взгляд, поэтому эта статья будет самой короткой из серии. Если интересно разобраться – вперёд читать!

    habr.com/ru/articles/890344/

    #компиляторы #компиляция #лексический_анализ #лексический_анализатор

  39. Путь от Кода до Бинарного Файла

    Как же исходный код превращается в бинарный файл, который потом исполняется на компьютере? Не нашёл ни одной статьи, которая описывала бы полный процесс от начала до конца, поэтому я написал данный материал.

    habr.com/ru/articles/888254/

    #компиляторы #компиляция #ассемблер #x8664 #assembly

  40. Разбираем iOS-приложение: код, сборка, статические и динамические библиотеки, компиляция, запуск

    Больше всего мне нравится изучать процессы мобильной разработки, включая самые низкоуровневые вещи. Из чего состоит iOS-приложение? Какие этапы оно проходит перед тем, как оказаться на устройстве пользователя? Что такое Executable binary? Что происходит внутри препроцессора? Если вам, как и мне, интересно разбираться в Computer Science для iOS, приглашаю под кат. Разберём первые, самые базовые понятия, которые касаются любого iOS-приложения. Статья поможет тем, кто хочет двигаться дальше, кому интересен IT мир, и кто по каким-то причинам ещё не приступил к изучению подобного материала.

    habr.com/ru/companies/alfa/art

    #ios #запуск_приложения #компиляция #динамические_библиотеки #статические_библиотеки #фреймворки #Executable_binary #сборка_приложений

  41. Разбираем iOS-приложение: код, сборка, статические и динамические библиотеки, компиляция, запуск

    Больше всего мне нравится изучать процессы мобильной разработки, включая самые низкоуровневые вещи. Из чего состоит iOS-приложение? Какие этапы оно проходит перед тем, как оказаться на устройстве пользователя? Что такое Executable binary? Что происходит внутри препроцессора? Если вам, как и мне, интересно разбираться в Computer Science для iOS, приглашаю под кат. Разберём первые, самые базовые понятия, которые касаются любого iOS-приложения. Статья поможет тем, кто хочет двигаться дальше, кому интересен IT мир, и кто по каким-то причинам ещё не приступил к изучению подобного материала.

    habr.com/ru/companies/alfa/art

    #ios #запуск_приложения #компиляция #динамические_библиотеки #статические_библиотеки #фреймворки #Executable_binary #сборка_приложений

  42. Разбираем iOS-приложение: код, сборка, статические и динамические библиотеки, компиляция, запуск

    Больше всего мне нравится изучать процессы мобильной разработки, включая самые низкоуровневые вещи. Из чего состоит iOS-приложение? Какие этапы оно проходит перед тем, как оказаться на устройстве пользователя? Что такое Executable binary? Что происходит внутри препроцессора? Если вам, как и мне, интересно разбираться в Computer Science для iOS, приглашаю под кат. Разберём первые, самые базовые понятия, которые касаются любого iOS-приложения. Статья поможет тем, кто хочет двигаться дальше, кому интересен IT мир, и кто по каким-то причинам ещё не приступил к изучению подобного материала.

    habr.com/ru/companies/alfa/art

    #ios #запуск_приложения #компиляция #динамические_библиотеки #статические_библиотеки #фреймворки #Executable_binary #сборка_приложений

  43. Разбираем iOS-приложение: код, сборка, статические и динамические библиотеки, компиляция, запуск

    Больше всего мне нравится изучать процессы мобильной разработки, включая самые низкоуровневые вещи. Из чего состоит iOS-приложение? Какие этапы оно проходит перед тем, как оказаться на устройстве пользователя? Что такое Executable binary? Что происходит внутри препроцессора? Если вам, как и мне, интересно разбираться в Computer Science для iOS, приглашаю под кат. Разберём первые, самые базовые понятия, которые касаются любого iOS-приложения. Статья поможет тем, кто хочет двигаться дальше, кому интересен IT мир, и кто по каким-то причинам ещё не приступил к изучению подобного материала.

    habr.com/ru/companies/alfa/art

    #ios #запуск_приложения #компиляция #динамические_библиотеки #статические_библиотеки #фреймворки #Executable_binary #сборка_приложений

  44. Компиляция математического выражение из строки динамически во время выполнения в C# (.NET)

    В этой статье я продемонстрирую, как динамически компилировать математические выражения из строк в runtime в C#, исключительно просто и быстро. Это решение поддерживает различные математические контексты, включая логические выражения, научные вычисления и C#, а также позволяет расширять эти контексты пользовательскими переменными, операторами и функциями.

    habr.com/ru/articles/842046/

    #математика #net #net_core #c# #c#net #algorithms #eval #math #mathematics #компиляция

  45. Как компилировать json или история оптимизации python сервиса

    В прошлой статье мы начали историю создания одного из компонентов платформы экспериментов в компании Okko — сервис сплитования трафика. Там были описаны небольшие, но эффективные оптимизации Python-кода, которые могут быть полезны в практически любом сервисе на этом языке. В статье мы продолжим рассказ об оптимизациях и улучшениях, однако здесь речь пойдет про детальные и последовательные изменения в самом узком месте сервиса. Приготовьтесь к более высокому уровню Python-магии.

    habr.com/ru/companies/okko/art

    #python #оптимизация #компиляция #компиляция_в_c #вебразработа #json

  46. Как пересобрать ядро для WSL2 и остаться в живых

    Мы активно пользуемся WSL2 для того, чтобы открывать линуксовые коры в Visual Studio. Для обеспечения консистентности символов и коры мы монтируем squashfs образ, созданный в целевой системе. После очередного апдейта целевого дистрибутива, у нас всё сломалось - squash монтировался, но мог посередине файла выдать ошибку чтения, записав в dmesg что-то типа SQUASHFS error: xz decompression failed

    habr.com/ru/articles/819819/

    #wsl2 #linux #squashfs #xz #компиляция

  47. [Перевод] Как я снизил время инкрементных сборок Rust на 40%

    Я форкнул и модифицировал компилятор Rust rustc . Одна фича — кэширование расширения процедурных макросов — привела к снижению времени инкрементных сборок на 11-40% в различных реальных крейтах. Благодаря этому ускорились dev-сборки и меньше стал тормозить rust-analyzer (IDE IntelliSense). Если вы специалист в повышении производительности компилятора Rust, то можете сразу перейти к разделу «Кэширование расширения макросов: ускорение инкрементных сборок Rust на 40%».

    habr.com/ru/articles/807791/

    #сборка #компиляция #оптимизация_сборки

  48. [Перевод] Анатомия Hello World на языке C

    Эта статья посвящена программе Hello World, написанной на C. Это максимальный уровень, на который можно добраться с языком высокого уровня, не беспокоясь при этом о том, что конкретно язык делает в интерпретаторе/компиляторе/JIT перед выполнением программы. Изначально я хотел написать статью так, чтобы она была понятна любому, умеющему кодить, но теперь думаю, что читателю полезно иметь хотя бы некоторые знания по C или ассемблеру.

    habr.com/ru/companies/ruvds/ar

    #ruvds_переводы #стандартная_библиотека #системные_вызовы #дизассемблер #компиляция

  49. Компиляция на этапе выполнения в C++: constexpr, consteval и constinit

    Сегодня мы поговорим о том, как constexpr , consteval , и constinit позволяют реализовывать компиляцию на этапе выполнения. Компиляция на этапе выполнения позволяет ускорить выполнение кода за счет выполнения расчетов на этапе компиляции, а не в рантайме. constexpr делает возможным вычисление значений переменных во время компиляции. Функции и переменные, объявленные с этим ключевым словом, могут быть вычислены на этапе компиляции consteval усиливает концепцию constexpr , требуя обязательного вычисления выражений во время компиляции. constinit используется для инициализации статических и глобальных переменных. А теперь подробней.

    habr.com/ru/companies/otus/art

    #C++ #компиляция #constexpr #consteval #constinit

  50. [Перевод] Оптимизируя неоптимизируемое: ускорение компиляции C++

    В этой статье речь пойдёт о повышении скорости компиляции библиотеки {fmt} до уровня библиотеки ввода-вывода Cи stdio . Дня начала немного теории. {fmt} – это популярная открытая библиотека С++, представляющая более эффективную альтернативу С++ библиотеке iostreams и библиотеке Си stdio . Последнюю она обошла по целому ряду аспектов: Безопасность типов с проверками форматирующих строк во время компиляции . Эти проверки включены по умолчанию начиная с С++ 20, и присутствуют в качестве дополнения для С++ 14/17. Форматирующие строки среды выполнения в {fmt} также оказываются безопасными, чего невозможно достичь в printf . Расширяемость . Определяемый пользователем тип можно сделать форматируемым . При этом большинство типов стандартных библиотек, например, контейнеры и пакеты для обработки даты и времени, предлагают возможность форматирования изначально. Производительность . {fmt} намного быстрее любой распространённой реализации printf , порой на несколько порядков (например, в форматировании чисел с плавающей запятой ). Возможность переноса поддержки Unicode . Тем не менее одной из областей, в которой stdio по-прежнему опережала {fmt} , являлось время компиляции.

    habr.com/ru/companies/ruvds/ar

    #ruvds_перевод #с++ #си #fmt #стандартные_библиотеки #оптимизация #компиляция #stdio