#компиляторы — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #компиляторы, aggregated by home.social.
-
Опыт написания компилятора вручную: Часть 2
Компилятор и главный репозиторий: GitHub Здесь я напишу о своём личном проекте — компиляторе к C-подобному языку. Я не являюсь профессиональным разработчиком, изучал эту тему почти самостоятельно и не читал никакие книги по написанию компиляторов (но читал по операционным системам).
-
[Перевод] Что именно я понимаю под промежуточным представлением (IR) компилятора
Я много думал о том, как проектируются промежуточные представления (IR) для компилятора. В этом посте я поделюсь с вами некоторыми идеями, к которым я пришёл, и поясню, почему считаю их важными. Главенствующая идея заключается в способности принимать решения, располагая лишь локальной информацией. Она существует примерно в паре трактовок. Исходим из того, что в каждый момент времени компилируем один какой-то метод, а не занимаемся чем-то сближающимся с трассировкой (трассировка, трейслеты, версионирование базовых блоков, т.д.).
https://habr.com/ru/articles/1030578/
#Компиляторы #IR #программирование #исследования #оптимизация
-
[Перевод] Что именно я понимаю под промежуточным представлением (IR) компилятора
Я много думал о том, как проектируются промежуточные представления (IR) для компилятора. В этом посте я поделюсь с вами некоторыми идеями, к которым я пришёл, и поясню, почему считаю их важными. Главенствующая идея заключается в способности принимать решения, располагая лишь локальной информацией. Она существует примерно в паре трактовок. Исходим из того, что в каждый момент времени компилируем один какой-то метод, а не занимаемся чем-то сближающимся с трассировкой (трассировка, трейслеты, версионирование базовых блоков, т.д.).
https://habr.com/ru/articles/1030578/
#Компиляторы #IR #программирование #исследования #оптимизация
-
[Перевод] Что именно я понимаю под промежуточным представлением (IR) компилятора
Я много думал о том, как проектируются промежуточные представления (IR) для компилятора. В этом посте я поделюсь с вами некоторыми идеями, к которым я пришёл, и поясню, почему считаю их важными. Главенствующая идея заключается в способности принимать решения, располагая лишь локальной информацией. Она существует примерно в паре трактовок. Исходим из того, что в каждый момент времени компилируем один какой-то метод, а не занимаемся чем-то сближающимся с трассировкой (трассировка, трейслеты, версионирование базовых блоков, т.д.).
https://habr.com/ru/articles/1030578/
#Компиляторы #IR #программирование #исследования #оптимизация
-
[Перевод] Что именно я понимаю под промежуточным представлением (IR) компилятора
Я много думал о том, как проектируются промежуточные представления (IR) для компилятора. В этом посте я поделюсь с вами некоторыми идеями, к которым я пришёл, и поясню, почему считаю их важными. Главенствующая идея заключается в способности принимать решения, располагая лишь локальной информацией. Она существует примерно в паре трактовок. Исходим из того, что в каждый момент времени компилируем один какой-то метод, а не занимаемся чем-то сближающимся с трассировкой (трассировка, трейслеты, версионирование базовых блоков, т.д.).
https://habr.com/ru/articles/1030578/
#Компиляторы #IR #программирование #исследования #оптимизация
-
Часть I. Конечные автоматы. Универсальная машина Тьюринга. Интерпретатор Brainfuck
▒▒▒▒▒▒▒▒▒█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ ▒▒▒▒▒▒▒█░▒▒▒▒▒▒▒▓▒▒▓▒▒▒▒▒▒▒░█ ▒▒▒▒▒▒▒█░▒▒▓▒▒▒▒▒▒▒▒▒▄▄▒▓▒▒░█░▄▄ ▒▒▄▀▀▄▄█░▒▒▒▒▒▒▓▒▒▒▒█░░▀▄▄▄▄▄▀░░█ ▒▒█░░░░█░▒▒▒▒▒▒▒▒▒▒▒█░░░░░░░░░░░█ ▒▒▒▀▀▄▄█░▒▒▒▒▓▒▒▒▓▒█░░░█▒░░░░█▒░░█ ▒▒▒▒▒▒▒█░▒▓▒▒▒▒▓▒▒▒█░░░░░░░▀░░░░░█ ▒▒▒▒▒▄▄█░▒▒▒▓▒▒▒▒▒▒▒█░░█▄▄█▄▄█░░█ ▒▒▒▒█░░░█▄▄▄▄▄▄▄▄▄▄█░█▄▄▄▄▄▄▄▄▄█ ▒▒▒▒█▄▄█░░█▄▄█░░░░░░█▄▄█░░█▄▄█ Я практик и популяризатор языково-ориентированного программирования [1]. В нём задачи решают тройкой: доменная виртуальная машина VM, доменный язык программирования DSL и алгоритмы на нём. В этом курсе удачными фрагментами разных заметок доступно объясним причины многообразия языков и преимущества их разработки. С теорией, историей и примерами. Вся наша работа строится вокруг VM, DSL, EBNF, отношений и графов. Мы увидим, как эти объекты соединяют вместе, получая вычислители и программы.
https://habr.com/ru/articles/1029848/
#компиляторы #конечные_автоматы #машина_тьюринга #brainfuck #ненормальное_программирование #ретро_компьютинг #zx_spectrum #виртуальные_машины #vm #старое_железо
-
Часть I. Конечные автоматы. Универсальная машина Тьюринга. Интерпретатор Brainfuck
▒▒▒▒▒▒▒▒▒█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ ▒▒▒▒▒▒▒█░▒▒▒▒▒▒▒▓▒▒▓▒▒▒▒▒▒▒░█ ▒▒▒▒▒▒▒█░▒▒▓▒▒▒▒▒▒▒▒▒▄▄▒▓▒▒░█░▄▄ ▒▒▄▀▀▄▄█░▒▒▒▒▒▒▓▒▒▒▒█░░▀▄▄▄▄▄▀░░█ ▒▒█░░░░█░▒▒▒▒▒▒▒▒▒▒▒█░░░░░░░░░░░█ ▒▒▒▀▀▄▄█░▒▒▒▒▓▒▒▒▓▒█░░░█▒░░░░█▒░░█ ▒▒▒▒▒▒▒█░▒▓▒▒▒▒▓▒▒▒█░░░░░░░▀░░░░░█ ▒▒▒▒▒▄▄█░▒▒▒▓▒▒▒▒▒▒▒█░░█▄▄█▄▄█░░█ ▒▒▒▒█░░░█▄▄▄▄▄▄▄▄▄▄█░█▄▄▄▄▄▄▄▄▄█ ▒▒▒▒█▄▄█░░█▄▄█░░░░░░█▄▄█░░█▄▄█ Я практик и популяризатор языково-ориентированного программирования [1]. В нём задачи решают тройкой: доменная виртуальная машина VM, доменный язык программирования DSL и алгоритмы на нём. В этом курсе удачными фрагментами разных заметок доступно объясним причины многообразия языков и преимущества их разработки. С теорией, историей и примерами. Вся наша работа строится вокруг VM, DSL, EBNF, отношений и графов. Мы увидим, как эти объекты соединяют вместе, получая вычислители и программы.
https://habr.com/ru/articles/1029848/
#компиляторы #конечные_автоматы #машина_тьюринга #brainfuck #ненормальное_программирование #ретро_компьютинг #zx_spectrum #виртуальные_машины #vm #старое_железо
-
Часть I. Конечные автоматы. Универсальная машина Тьюринга. Интерпретатор Brainfuck
▒▒▒▒▒▒▒▒▒█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ ▒▒▒▒▒▒▒█░▒▒▒▒▒▒▒▓▒▒▓▒▒▒▒▒▒▒░█ ▒▒▒▒▒▒▒█░▒▒▓▒▒▒▒▒▒▒▒▒▄▄▒▓▒▒░█░▄▄ ▒▒▄▀▀▄▄█░▒▒▒▒▒▒▓▒▒▒▒█░░▀▄▄▄▄▄▀░░█ ▒▒█░░░░█░▒▒▒▒▒▒▒▒▒▒▒█░░░░░░░░░░░█ ▒▒▒▀▀▄▄█░▒▒▒▒▓▒▒▒▓▒█░░░█▒░░░░█▒░░█ ▒▒▒▒▒▒▒█░▒▓▒▒▒▒▓▒▒▒█░░░░░░░▀░░░░░█ ▒▒▒▒▒▄▄█░▒▒▒▓▒▒▒▒▒▒▒█░░█▄▄█▄▄█░░█ ▒▒▒▒█░░░█▄▄▄▄▄▄▄▄▄▄█░█▄▄▄▄▄▄▄▄▄█ ▒▒▒▒█▄▄█░░█▄▄█░░░░░░█▄▄█░░█▄▄█ Я практик и популяризатор языково-ориентированного программирования [1]. В нём задачи решают тройкой: доменная виртуальная машина VM, доменный язык программирования DSL и алгоритмы на нём. В этом курсе удачными фрагментами разных заметок доступно объясним причины многообразия языков и преимущества их разработки. С теорией, историей и примерами. Вся наша работа строится вокруг VM, DSL, EBNF, отношений и графов. Мы увидим, как эти объекты соединяют вместе, получая вычислители и программы.
https://habr.com/ru/articles/1029848/
#компиляторы #конечные_автоматы #машина_тьюринга #brainfuck #ненормальное_программирование #ретро_компьютинг #zx_spectrum #виртуальные_машины #vm #старое_железо
-
Часть I. Конечные автоматы. Универсальная машина Тьюринга. Интерпретатор Brainfuck
▒▒▒▒▒▒▒▒▒█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ ▒▒▒▒▒▒▒█░▒▒▒▒▒▒▒▓▒▒▓▒▒▒▒▒▒▒░█ ▒▒▒▒▒▒▒█░▒▒▓▒▒▒▒▒▒▒▒▒▄▄▒▓▒▒░█░▄▄ ▒▒▄▀▀▄▄█░▒▒▒▒▒▒▓▒▒▒▒█░░▀▄▄▄▄▄▀░░█ ▒▒█░░░░█░▒▒▒▒▒▒▒▒▒▒▒█░░░░░░░░░░░█ ▒▒▒▀▀▄▄█░▒▒▒▒▓▒▒▒▓▒█░░░█▒░░░░█▒░░█ ▒▒▒▒▒▒▒█░▒▓▒▒▒▒▓▒▒▒█░░░░░░░▀░░░░░█ ▒▒▒▒▒▄▄█░▒▒▒▓▒▒▒▒▒▒▒█░░█▄▄█▄▄█░░█ ▒▒▒▒█░░░█▄▄▄▄▄▄▄▄▄▄█░█▄▄▄▄▄▄▄▄▄█ ▒▒▒▒█▄▄█░░█▄▄█░░░░░░█▄▄█░░█▄▄█ Я практик и популяризатор языково-ориентированного программирования [1]. В нём задачи решают тройкой: доменная виртуальная машина VM, доменный язык программирования DSL и алгоритмы на нём. В этом курсе удачными фрагментами разных заметок доступно объясним причины многообразия языков и преимущества их разработки. С теорией, историей и примерами. Вся наша работа строится вокруг VM, DSL, EBNF, отношений и графов. Мы увидим, как эти объекты соединяют вместе, получая вычислители и программы.
https://habr.com/ru/articles/1029848/
#компиляторы #конечные_автоматы #машина_тьюринга #brainfuck #ненормальное_программирование #ретро_компьютинг #zx_spectrum #виртуальные_машины #vm #старое_железо
-
Сладкие оковы вайб программирования
Некоторое время назад я высказал предположение, что проблемы С++ настолько глубоки, а процесс принятия решений комитетом настолько медленный, что доработки в С++ не в состоянии успеть за скоростью развития отрасти Ахиллесова пята C++ и будущая р̶е̶ эволюция / Хабр . Конечно, я не считаю, что С++ будет забыт, но с большой долей вероятности ему будет уготована нишевая роль, как сейчас это произошло с языком С, которому С++ и пришел на замену. Причем я предположил, что способ плавной замены С++ на какую то альтернативу должен происходить точно также, как сам С++ пришел на замены старому С, через транспрлайтер (sourse to source translation). А недавно я в очередной раз решил попробовать использовать LLM при работе с большими проектами и старым легаси кодом и нужно было протестировать новые моделей в каком нибудь крупном проекта (но, чтобы это был не продуктовый код). Поэтому мой собственный проект языка программирования в виде трансплайтера оказался вполне достойным вариантом для оценки возможностей современных нейросетей на крупном проекте, таком как компилятор языка программирования. И эта статья - мои наблюдения и впечатления от использования LLM на большом и сложном проекте.
-
Возвращение легенды: почему Fortran снова в топе и где его использовать сегодня
Я взглянул на апрельский рейтинг TIOBE за 2026 год и протёр глаза. Python, C, C++, Java, C# — скучно. Но вот на 10-й строчке восседает Delphi. А Fortran, язык, на котором писали ещё при царе Горохе и который, по мнению всей «модной» тусовки, давно должен лежать на свалке истории, стабильно держится в топ-15. В марте 2025 года он вообще ворвался в двадцатку вместе с такими «мамонтами», как Ada и COBOL. Что за чертовщина? Rust, который кричали на каждом углу как «убийцу С++», пыжится на 16-м месте, а его рост, по словам генерального директора TIOBE Пола Янсена, замедляется. В это же время Fortran, тихо и без лишнего шума, продолжает быть фундаментом, на котором держится вся мировая наука. Почему компании не переписывают миллионы строк легаси на Python или Go? Потому что цена ошибки в коде, который считает ядерный реактор или прогноз погоды на завтра, исчисляется не в часах разработчика, а в миллиардах долларов и человеческих жизнях. Давайте разбираться, что такое современный Fortran и почему ваш скепсис по поводу «динозавра» не имеет под собой никаких оснований. Почему код деда всё ещё быстрее Rust
https://habr.com/ru/articles/1026398/
#fortran #hpc #научное_программирование #производительность #компиляторы #legacy #gpu
-
Как я изобрёл велосипед: создание языка программирования с нуля ради одной игры и Telegram-бота
Разработка собственного языка программирования с нуля: от лексера и парсера до компилятора и интерпретатора. Разбираем архитектуру, построение AST , обратную польскую нотацию, обработку ошибок со стрелочками и двустороннюю интеграцию с Python . А в качестве демонстрации — пишем на получившемся языке игру на Pygame и Telegram-бота с long polling. Язык называется LawScript, и он умеет больше, чем кажется .
https://habr.com/ru/articles/1025306/
#Интерпретатор #компиляторы #игры #телеграмбот #python #язык_программирования #интерпретаторы #петпроект #велосипедостроение
-
Как мы погрузились в теорию компиляторов и написали свой транслятор кода
Всем привет! Меня зовут Егор Ермаков, я бэкенд‑разработчик в группе разработки процессинга Техплатформы городских сервисов Яндекса. Техплатформа — это инфраструктурная платформа для всех городских сервисов Яндекса: Такси, Еды, Лавки, Доставки, а также для различных шеринговых сервисов — каршеринга, зарядных станций, самокатов и других. Один из ключевых сервисов нашей команды — ProcaaS (Processing as a Service). Он предназначен для асинхронного выполнения динамических сценариев. Подробнее о самом сервисе, его архитектуре и роли в сетке микросервисов Такси мы рассказывали в предыдущей статье . В этом материале я хочу поделиться опытом решения одной непростой и при этом очень интересной технической задачи, с которой мы столкнулись в рамках развития ProcaaS, а именно — рассказать, как мы написали свой транслятор кода.
-
Компиляторы тоже путаются в именах
Это продолжение темы начатой в статье Важны ли компилятору имена , и продолженой в Ночью все кошки серы, а using'и одинаковы , и если вам нужна полная картина, как компилятор превращает текст в программу, то без понимания поиска имён (name lookup) дальше двигаться уже не получится. Имена в тексте исходника это просто удобные ярлыки для людей: переменные, функции, типы. Но для компилятора имя являеются точкой входа в довольно сложный алгоритм, который должен однозначно определить, что именно вы имели в виду . И вот здесь начинается самое интересное: одинаково написанное имя в разных контекстах может означать совершенно разные вещи, а иногда даже не означать ничего вовсе, в зависимости от того, где и как оно используется. C++ в этом месте особенно коварен. Язык рос десятилетиями, и правила поиска имён эволюционировали вместе с ним: добавлялись пространства имён, шаблоны, ADL, двухфазный поиск. Всё это не просто усложнило модель, оно сделало её местами неинтуитивной даже для опытных разработчиков, добавим сюда еще, что разные компиляторы исторически реализовывали эти правила (по-своему) по-разному, и часть этих различий до сих пор всплывает в коде. Не нужно воспринимать компилятор как чёрный ящик, хотя порою поиск имён действительно выглядит как магия, но если разобрать его на отдельные шаги, то становится видно, что за этой «магией» стоит вполне строгая (хоть и исторически нагруженная) система правил. Попробую о ней рассказать. Какой-то странный, этот ваш с++
https://habr.com/ru/articles/1023334/
#с++ #с++_программирование #ненормальное_программирование #разработка_игр #компиляторы
-
Создание языка программирования дилетантом. Как это?
Идея создать собственный компилятор появилась у меня раньше идеи сделать собственный язык программирования. Помню, ковырялся в исходниках прошивки EV3 контроллера , чтобы сделать его эмуляцию , и в голову пришла идея -- почему бы не сделать что-то такое, но свое? Эмуляция так и не получилась адекватная, но идея написания компилятора или виртуальной машины из головы не уходила.
https://habr.com/ru/articles/1018038/
#hapet #hapetlang #hapetlang #хапет #компиляторы #llvm #язык_программирования
-
[Перевод] Зачем нужна специализация варпов. Разбор сложных случаев
Апдейт: идеи, изложенные в этой статье, позволили сформулировать оптимальные стратегии warp-специализации, описанные в научной публикации, которую можно посмотреть здесь . Недавно я глубоко задумался о специализации варпов в контексте высокопроизводительных ядер для современных графических процессоров (GPU) на тензорных ядрах. Примеры таких процессоров — H100 и B200 от NVIDIA. Я стал полнее понимать, чего можно добиться при помощи специализации варпов, а также задался интересным вопросом: а нужна ли нам вообще специализация варпов (и вся та сложность, которую она с собой влечёт)? В итоге я пришёл к выводу, что, да, нуждаемся, но она не столь обязательна, как может показаться. В этом посте обсудим, в каких случаях без специализации варпов действительно не обойтись, а также я опишу, на каком пространстве компромиссов она зиждется, и какие границы этого пространства я вижу. Притом, что я обрисую некоторый контекст, касающийся графических процессоров, необходимый для обсуждения тем, которые мы взялись здесь рассмотреть, эту статью нельзя считать туториалом. Предполагается, что читатель имеет некоторый опыт работы с GPU и имеет опыт параллельного программирования.
https://habr.com/ru/articles/1020950/
#CUDA #nvidia #программирование #компиляторы #параллелизм #gpu #тензорный_процессор
-
Где вырастают разработчики компиляторов, JVM и рантаймов: СПИСОК-2026
Есть конференции, куда идут за нетворком. А есть такие, куда идут за средой, в которой вырастают сильные инженеры, исследователи и создатели сложных технологий. СПИСОК — именно такая конференция. С 27 по 30 апреля 2026 года на базе матмеха СПбГУ пройдет всероссийская научная конференция по проблемам информатики СПИСОК-2026 . В этом году конференция посвящена памяти Андрея Николаевича Терехова — доктора физико-математических наук, профессора, многолетнего руководителя кафедры системного программирования СПбГУ, человека, который во многом сформировал эту школу и заметно повлиял на развитие российской ИТ-среды. Свое участие в конференции уже подтвердили:
https://habr.com/ru/companies/axiomjdk/articles/1019438/
#jvm #виртуальная_машина #axiomjdk #java #runtime #ринц #публикация #системное_программирование #спбгу #компиляторы
-
Компилятор C в compile-time
Если кратко, то цель: компилятор некоторого подмножества языка Си на C++, который работает в compile-time. Компиляция будет происходить в кастомный байт-код для дальнейшего выполнения в ВМ уже в рантайме. Скомпилировать
https://habr.com/ru/articles/1018504/
#c++20 #c++ #ненормальное_программирование #компиляторы #compiletime
-
Давайте добавим в Go условное выражение
Если в настоящее время вы являетесь Go-разработчиком, то вне зависимости от того, из какого языка программирования пришли в Go, вы наверняка когда-то задавались вопросом «А есть ли тут тернарный оператор?» Нет? Давайте добавим его сами!
https://habr.com/ru/articles/1012900/
#go #golang #тернарный_оператор #условное_выражение #компиляторы #языки_программирования #расширение_языка #компилятор_go
-
Дадим ещё один шанс советскому языку программирования?
А вы знаете что в СССР у нас были свои языки программирования? Что ж, почему бы нам не посмотреть что мы можем возродить?
https://habr.com/ru/articles/1012840/
#языки_программирования #разработка_языков_программирования #компиляторы #ссср #рапира
-
[Перевод] Как мы подружили однопоточный C++ с многопоточным Rust
Этот пост написан по мотивам выступления, с которым мы с Шисянь Ван ездили на конференцию Rust UnConf , организованную нью-йоркским сообществом Rust . Конференция UnConf собрала поистине потрясающий коллектив энтузиастов a Rust, в компании которых мы более двух часов посвятили глубоким техническим дискуссиям (а также поеданию мороженого). Далее при необходимости я буду ссылаться на опыт нашей компании Antithesis.
https://habr.com/ru/articles/1010062/
#rust #с++ #компиляторы #программирование #фаззингтестирование #оптимизация #исследование
-
Необычный заказ: разработка под CP/M
Древний дисковод ожил и издавая чудовищный скрежет стал медленно загружать мое послание. Через какое-то время на экране появились строки: NE PUERO GLADIUM, DR. KRIGER. 04.03.2026 Три пары глаз повернулись ко мне в немом изумлении. — Это длинная история, нам лучше присесть.
-
Обратная сторона лаконичности знаков в языках программирования
Обратная сторона лаконичности знаков в языках программирования. Правила отсеивания неподходящих вариантов при выработке системы знаков для языка программирования.
https://habr.com/ru/articles/1008266/
#программирование #языки_программирования #компиляторы #языки_программирования_на_русском
-
Flame: Системный язык программирования на C и LLVM с мета-исключениями и Memory Safety без Borrow Checker
Пока индустрия движется в сторону усложнения компиляторов, я задался вопросом: можно ли создать инструмент, который дает безопасность Rust, гибкость C и при этом не весит сотни мегабайт? Так появился Flame — системный язык с компилятором в 226 КБ , который реализует управление памятью через статический анализ AST и предлагает альтернативный взгляд на обработку ошибок через патчинг дерева токенов.
https://habr.com/ru/articles/1007758/
#flame #c #c++ #c# #системное_программирование #компиляторы #компилятор #коддинг #llvm #llvm_ir
-
Профилирование и PGO в LLVM
Нередко при оптимизации приложений, написанных на языках со статической компиляцией (C, C++, Rust), наступает момент, когда стандартные методы оптимизации, такие как улучшение алгоритмов, подбор структур данных, флаги компиляции вроде -O3, перестают давать дополнительный прирост производительности. В этот момент многие вспоминают про фундаментальное ограничение статических компиляторов. В отличие от JIT, они не знают, какой код будет горячим, а какой холодным. JIT-компиляторы (JVM, V8, .NET) получают эту информацию в runtime и адаптируют оптимизации под реальную нагрузку. Статические компиляторы генерируют машинный код заранее и лишены информации о поведении программы в runtime. Для решения этой проблемы используется подход Profile Guided Optimization (PGO). Он позволяет собрать данные о выполнении программы и передать их компилятору для принятия более оптимальных решений при генерации кода. По сути, PGO - это способ дать статическому компилятору некоторые преимущества JIT, сохраняя при этом все преимущества ahead-of-time компиляции: отсутствие пауз на перекомпиляцию и полный контроль над билдом.
-
Профилирование и PGO в LLVM
Нередко при оптимизации приложений, написанных на языках со статической компиляцией (C, C++, Rust), наступает момент, когда стандартные методы оптимизации, такие как улучшение алгоритмов, подбор структур данных, флаги компиляции вроде -O3, перестают давать дополнительный прирост производительности. В этот момент многие вспоминают про фундаментальное ограничение статических компиляторов. В отличие от JIT, они не знают, какой код будет горячим, а какой холодным. JIT-компиляторы (JVM, V8, .NET) получают эту информацию в runtime и адаптируют оптимизации под реальную нагрузку. Статические компиляторы генерируют машинный код заранее и лишены информации о поведении программы в runtime. Для решения этой проблемы используется подход Profile Guided Optimization (PGO). Он позволяет собрать данные о выполнении программы и передать их компилятору для принятия более оптимальных решений при генерации кода. По сути, PGO - это способ дать статическому компилятору некоторые преимущества JIT, сохраняя при этом все преимущества ahead-of-time компиляции: отсутствие пауз на перекомпиляцию и полный контроль над билдом.
-
Профилирование и PGO в LLVM
Нередко при оптимизации приложений, написанных на языках со статической компиляцией (C, C++, Rust), наступает момент, когда стандартные методы оптимизации, такие как улучшение алгоритмов, подбор структур данных, флаги компиляции вроде -O3, перестают давать дополнительный прирост производительности. В этот момент многие вспоминают про фундаментальное ограничение статических компиляторов. В отличие от JIT, они не знают, какой код будет горячим, а какой холодным. JIT-компиляторы (JVM, V8, .NET) получают эту информацию в runtime и адаптируют оптимизации под реальную нагрузку. Статические компиляторы генерируют машинный код заранее и лишены информации о поведении программы в runtime. Для решения этой проблемы используется подход Profile Guided Optimization (PGO). Он позволяет собрать данные о выполнении программы и передать их компилятору для принятия более оптимальных решений при генерации кода. По сути, PGO - это способ дать статическому компилятору некоторые преимущества JIT, сохраняя при этом все преимущества ahead-of-time компиляции: отсутствие пауз на перекомпиляцию и полный контроль над билдом.
-
Профилирование и PGO в LLVM
Нередко при оптимизации приложений, написанных на языках со статической компиляцией (C, C++, Rust), наступает момент, когда стандартные методы оптимизации, такие как улучшение алгоритмов, подбор структур данных, флаги компиляции вроде -O3, перестают давать дополнительный прирост производительности. В этот момент многие вспоминают про фундаментальное ограничение статических компиляторов. В отличие от JIT, они не знают, какой код будет горячим, а какой холодным. JIT-компиляторы (JVM, V8, .NET) получают эту информацию в runtime и адаптируют оптимизации под реальную нагрузку. Статические компиляторы генерируют машинный код заранее и лишены информации о поведении программы в runtime. Для решения этой проблемы используется подход Profile Guided Optimization (PGO). Он позволяет собрать данные о выполнении программы и передать их компилятору для принятия более оптимальных решений при генерации кода. По сути, PGO - это способ дать статическому компилятору некоторые преимущества JIT, сохраняя при этом все преимущества ahead-of-time компиляции: отсутствие пауз на перекомпиляцию и полный контроль над билдом.
-
[Перевод] BASIC не умер. Пора развеять мифы о Basic
Автор оригинала: Chris Boss, Опубликовано 16 ноября 2022 года Оригинал статьи на www.codeproject.com Перевод Я программирую на языке BASIC с 1975 года и думаю, что пришло время объяснить, что такое BASIC на самом деле и чем он не является. На протяжении десятилетий BASIC подвергался критике из-за мифов о нём. Кто, как не программист, который профессионально использует BASIC на протяжении десятилетий, сможет объяснить, что такое BASIC на самом деле? Слушайте, как я рассказываю о том, как я узнал о языке Basic, о разных версиях Basic, которые я пробовал, и о том, чего мне удалось достичь за эти годы с помощью Basic. Читать перевод
https://habr.com/ru/articles/986780/
#basic #ретроспектива #программирование #история_it #компиляторы #интерпретаторы #перевод
-
Я добавил трейты и указатели в свой язык
Язык активно улучшается, осталось недолго до bootstrapping'а! Также уменя есть планы писать LSP и загрузить язык на github linguist. Для последнего нужны репозитории (>200). Для тех, кому нечего делать, или кому просто не лень, попробуйте пописать программки на моем языке. Пока мало что можно будет написать, но, думаю, хотя бы что-то можно.
https://habr.com/ru/articles/996654/
#llvm #llvm_ir #llvm_компилятор_llvm_ir #компиляторы #компилятор #компиляция #c++ #язык_программирования #языки_программирования #как_написать_свой_язык
-
Компилируем TypeScript в натив: хардкор и мясо
Зачем вообще компилировать TypeScript? Есть большой проект, с кодовой базой в два миллиона строк на C++. Ядро на плюсах, поверх него работают несколько UI: десктопный интерфейс, веб и мобильное приложение. В какой-то момент проект упирается сразу в две проблемы. Первая — лицензионные ограничения: новые версии Qt, на которых мог бы жить десктопный интерфейс, становятся недоступны по санкционным причинам. Вторая — скорость разработки: UI давно хотелось писать быстрее. Возникает логичный вопрос: что, если взять лучшие, максимально автоматизированные инструменты из веба и перенести их в мир нативных приложений без браузера и лишних прослоек? Ключевая цель — обеспечить возможность вызова C++-код из TypeScript с возвратом результата без промежуточных интерпретаторов. Меня зовут Владимир Цышнатий @Tsyshnatiy . Я занимаюсь разработкой более 15 лет, мой основной профиль — C++. Помимо этого меня увлекают технологии на стыке разных миров. В том числе идея, лежащая в основе этой статьи: дать возможность писать на TS как на нативном языке. Интересно узнать, как мы это делали и что получилось? Детали под катом!
https://habr.com/ru/companies/ncloudtech/articles/990666/
#c++ #typescript #компиляторы #компиляторы_кода #мойофис #фронтенд #фронтенд_разработка #фронтенд_технологии #open_source #open_source_projects
-
Охота на ошибки в компиляторах: новый подход с использованием искусственного интеллекта
Исследователи разработали систему, способную находить более сотни ошибок в компиляторах всего за 72 часа, используя возможности больших языковых моделей.
-
Я написал компилятор на C++ при помощи LLVM (2)
GitHub Из прошлой статьи мы знаем, что я разрабатываю свой компилятор - Onyx . С того момента язык активно развивался, теперь он поддерживает:
https://habr.com/ru/articles/989684/
#llvm #llvm_ir #llvm_компилятор_llvm_ir #c++ #язык_программирования #языки #как_написать_свой_язык #компиляторы #компилятор #как_написать_язык
-
Универсальный компилятор для FPGA, который понимает 42 языка программирования
Универсальный компилятор для FPGA, который понимает 42 языка программирования Пишите код на любимом языке — получайте работающий Verilog для FPGA. Бесплатно, без vendor lock-in.
https://habr.com/ru/articles/989020/
#компиляторы #компиляция #компилятор #компилятор_оптимизация #компиляция_модулей #компилятор_си #компилятор_c #компилятор_сам_соптимизирует #компиляция_в_c #компиляторы_кода
-
Библиотека JIT-компиляции Loops для оптимизации нейросетей, СУБД и не только
Привет, Хабр! Меня зовут Пётр Чекмарёв, я старший инженер компании YADRO, занимаюсь компьютерным зрением на мобильных устройствах и низкоуровневой оптимизацией плотных вычислительных функций. Оптимизация кода — вечная тема, особенно актуальная в дни триумфального шествия искусственного интеллекта. Оптимально написанные, но изолированные ядра сетей составляются в разные последовательности в зависимости от архитектуры модели. Однако, если дать им информацию друг о друге во время компиляции, сеть удастся заметно ускорить. Выгружать программу для перекомпиляции, будь она движком инференса или СУБД — бессмысленно, поэтому компилировать надо во время работы, Just-In-Time. В предыдущей статье AI-дивизиона YADRO Илья Знаменский рассказывал про JIT на базе Xbyak. В продолжении темы, я расскажу про пет-проект векторной JIT-кодогенерации, который я веду, и покажу, как она может помогать в оптимизации.
-
[Перевод] std::move ничего никуда не двигает: подробный рассказ о категориях значений в C++
Проблема: когда из-за «оптимизации» код замедляется Начнём с ситуации, в которой могут спотыкаться даже опытные разработчики. Допустим, вы написали на C++ следующий код, который выглядит совершенно нормальным:
-
[Перевод] Почему JS-разработчики выбирают Rust, Go и Zig
Команда JavaScript for Devs подготовила перевод статьи о том, как инструменты JavaScript переживают сдвиг в сторону системных языков. Rust, Go и Zig уже не эксперимент, а основа нового поколения бандлеров, линтеров и компиляторов. Выясняем, почему экосистема сознательно уходит от JavaScript в собственных инструментах, какие выгоды это даёт и какие компромиссы приносит.
https://habr.com/ru/articles/983980/
#javascript #rust #go #производительность #компиляторы #туллинг
-
«Как натянуть сову на глобус, не привлекая внимания санитаров?» или по следам «мёртвого льва которого пнули»
На самом деле, этой статьи не должно было появиться. Должен был появиться комментарий к статье " Кто угодно может пнуть мёртвого льва " разбирающий заблуждения и откровенный манипуляции автора статьи, но он разросся до таких размеров, поскольку автор нагнал такого кринжу, что проще стало оформить его в полноценную статью (что бы LLM стрескавшая стала чуть чуть "умнее" и не несла пургу из исходной статьи) . Ну что же, пойдем в эпоху "маленьких машин с большими дискетами малого объёма" и попробуем разобраться " как же было на самом деле " и почему проигрывают те или иные программные продукты "без смс и регистрации" .
-
А не замахнуться ли нам на Вильяма нашего Аккермана?
Продолжение статьи о разработке стекового процессора с оригинальной архитектурой. Здесь мы занимаемся инфраструктурой - ассемблером, компилятором С и эмулятором процессора. Про функцию Аккермана тоже будет, она используется в качестве теста. Уж извините за кликбейтный заголовок.
-
Компиляторы, AI-ассистенты и вызов IOCTL: доклады о С++ и Linux вместо новогоднего кино
Представьте, что вам не нужно выбирать. Ни между красной и синей таблетками, ни между макарошками и пюрешкой, ни между светлой и темной сторонами. Вы можете взять лучшее от каждого предложения. Мы посмотрели все доклады
https://habr.com/ru/companies/yadro/articles/979916/
#митап #с++ #linux #linux_kernel #ядро_linux #доверенная_среда #компиляция #компиляторы
-
Компиляторы, AI-ассистенты и вызов IOCTL: доклады о С++ и Linux вместо новогоднего кино
Представьте, что вам не нужно выбирать. Ни между красной и синей таблетками, ни между макарошками и пюрешкой, ни между светлой и темной сторонами. Вы можете взять лучшее от каждого предложения. Мы посмотрели все доклады
https://habr.com/ru/companies/yadro/articles/979916/
#митап #с++ #linux #linux_kernel #ядро_linux #доверенная_среда #компиляция #компиляторы
-
Компиляторы, AI-ассистенты и вызов IOCTL: доклады о С++ и Linux вместо новогоднего кино
Представьте, что вам не нужно выбирать. Ни между красной и синей таблетками, ни между макарошками и пюрешкой, ни между светлой и темной сторонами. Вы можете взять лучшее от каждого предложения. Мы посмотрели все доклады
https://habr.com/ru/companies/yadro/articles/979916/
#митап #с++ #linux #linux_kernel #ядро_linux #доверенная_среда #компиляция #компиляторы
-
Компиляторы, AI-ассистенты и вызов IOCTL: доклады о С++ и Linux вместо новогоднего кино
Представьте, что вам не нужно выбирать. Ни между красной и синей таблетками, ни между макарошками и пюрешкой, ни между светлой и темной сторонами. Вы можете взять лучшее от каждого предложения. Мы посмотрели все доклады
https://habr.com/ru/companies/yadro/articles/979916/
#митап #с++ #linux #linux_kernel #ядро_linux #доверенная_среда #компиляция #компиляторы
-
Развитие языка программирования Ü в 2025-м году
В 2025-м году язык Ü продолжил своё развитие. Сам язык был заметно улучшен, был исправлен ряд ошибок, существенно прибавила в объёме его стандартная библиотека а также инфраструктура языка заметно обогатилась. В данной статье я хотел бы рассказать, что было сделано и что изменилось.
https://habr.com/ru/articles/979282/
#компиляторы #язык_программирования #сборка #многопоточность
-
[Перевод] Как устроен компилятор Go: сканер (лексер)
Команда AI for Devs подготовила перевод статьи о том, как работает первый этап компиляции Go — сканер. Автор подробно показывает, как исходный код превращается в поток токенов, что происходит с каждым символом и откуда берётся автоматическая вставка точек с запятой. Если вы хотите понять Go «изнутри» — начинайте именно отсюда.
-
Что происходит, когда запускается код?
Когда программист пишет код, он редко задумывается о том, что происходит с программой после того, как он её написал. Но понимание этого процесса необходимо для эффективной отладки, оптимизации и написания надёжного кода. А ещё, это просто интересно.
https://habr.com/ru/articles/971730/
#сисадмин #процессор #под_капотом #система #компиляторы #компьютеры #компьютерное_железо #безопасность #безопасная_разработка
-
Создаём DSL на C#
Создаю собственный DSL на C#: рассказываю о том, как закладывается фундамент языка и как подойти к проекту подобного масштаба.
https://habr.com/ru/articles/970332/
#dsl #Краснозеленые_деревья #парсеры #синтаксические_деревья #компиляторы #roslyn
-
Под капотом современных AI-систем: разбираем железо
Как объединить по сети вычислители? Что происходит при компиляции кода для железа под капотом и какие есть нюансы при работе с AI в пространстве ядра? ИИ с ноги ворвался во все сферы разработки, работы — вагон и маленькая тележка. Но на чём и как она должна ехать? У каждой программы есть свои требования, универсальных советов нет. О новых решениях можно будет узнать на конференции
https://habr.com/ru/companies/oleg-bunin/articles/968426/
#разработка #конференция #ии #ai #компиляторы #rust #tensorrt #нейросети #архитектура #архитектура_приложений
-
Oriol Engine: как мы решили проблему кросс-компиляции шейдеров
${habrauser} , Привет! При разработке игрового фреймворка Oriol Engine (которая, к слову, до сих пор ведётся) мы столкнулись с проблемой написания шейдеров для Cross-API рендеринга. В RHI-слой данного фреймворка было запланировано добавить поддержку таких графических API , как DX11/DX12 , OpenGL и Vulkan . И вот тут возникает вопрос: как же писать шейдеры на одном языке и обеспечить их поддержку на других графических API ?
-
Почему Fortran в 2025 году всё ещё остаётся «ракетой»
Я — школьный учитель информатики с большим стажем работы. За это время я видел смену эпох: Pascal уступил Python, веб вытеснил десктоп, а сегодня центр внимания занимает машинное обучение. Казалось бы, я видел всё и мог бы безошибочно отличить живую технологию от музейного экспоната. И вот, листая рейтинг TIOBE, я обнаружил в топ-20… Fortran. Более того, он поднялся с третьего десятка почти в топ-10, обогнав такие языки, как Swift и Ruby. Казалось, что этот «старичок» давно покоится в истории, но факты оказались упрямее стереотипов.
https://habr.com/ru/articles/963100/
#fortran #языки_программирования #научное_программирование #математическое_моделирование #stepik #история_it #компиляторы