Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Отправляйся в погоню за легендарными сокровищами Бабы Яги в 3D!
А в это время Баба Яга отправится в погоню за тобой.

Убеги от Бабы Яги

Аркады, Мидкорные, 3D

Играть

Топ прошлой недели

  • Rahlkan Rahlkan 1 пост
  • Tannhauser9 Tannhauser9 4 поста
  • alex.carrier alex.carrier 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
18
georgiyozhegov
georgiyozhegov
4 месяца назад
Лига программистов
Серия Программирование

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

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

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

Этапы

1. Lexing

На этом этапе исходный код в виде строки разделяется на отдельные части, то есть токены. Этот этап – самый простой во всём процессе компиляции.

Вход

let a = 10 + 2

if a > 8 then

debug "A больше 8"

else

debug "А либо меньше, либо равно 8"

end

Выход

[

Let, Identifier("a"), Equal, Integer(10), Plus, Integer(2),

If, Identifier("a"), Greater, Integer(8), Then,

Debug, String("A больше 8"),

Else,

Debug, String("А либо меньше, либо равно 8"),

End,

]

2. Parsing

Здесь поток токенов объединяется в AST или абстрактное синтаксическое дерево. В этом дереве содержится вся информация об исходном коде в структурированном виде, удобным для обработки и анализа. Например, с его помощью можно проверять корректность типов переменных.

[

Let {

identifier: "a",

value: Binary(Add, Integer(10), Integer(2)),

},

If {

condition: Binary(Greater, Identifier("a"), Integer(8)),

then: [Debug(String("A больше 8"))],

else_: [Debug(String("А либо меньше, либо равно 8"))],

},

]

3. Промежуточное представление (IR)

AST преобразуется в низкоуровневые инструкции, которые не зависят от конкретной архитектуры. Это удобно, так как упрощает поддержку большого количества архитектур и процессоров.

В компиляторах Rust и Clang в качестве промежуточного представления используется LLVM IR, так как его экосистема берёт на себя многие оптимизации, и компилирование в ассемблерный код для разных платформ как X86, ARM и так далее.

Граф потока управления (CFG)

Сначала, для того, чтобы избавится от условных конструкций как if и match, мы разделяем входное дерево на отдельные блоки, которые не содержат в себе условий, и дальше связываем их, описывая переходы между ними.

Блоки, не содержащие условий

{

0: [

Let {

identifier: "a",

value: Binary(Add, Integer(10), Integer(2)),

},

],

1: [Debug(String("A больше 8"))],

2: [Debug(String("А либо меньше, либо равно 8"))],

3: Empty,

}

Блок Empty – это пустой блок, который не содержит в себе инструкций, и служит только для удобства построения CFG.

И условные переходы между блоками

{

0: Branch { # переход с условием

condition: Binary(Greater, Identifier("a"), Integer(8)),

true_: 1,

false_: 2,

},

1: Direct(3), # прямой переход без условия

2: Direct(3),

}

Трёхадресный код (3AC)

Состоит из низкоуровневых инструкций максимально приближенных к нативному ассембли-коду.

Первый блок

[

Label(0),

LoadInteger { to: 0, value: 10 },

LoadInteger { to: 1, value: 2 },

Add { to: 2, left: 0, right: 1 },

Set { identifier: "a", from: 2 },

Get { to: 3, from: "a" },

LoadInteger { to: 4, value: 8 },

Greater { to: 5, left: 3, right: 4 },

JumpIf { condition: 5, label: 1 },

Jump(2),

Второй

Label(1),

LoadString { to: 6, value: "A больше 8" },

Debug { value: 6 },

Get { to: 7, from: "a" },

LoadInteger { to: 8, value: 8 },

Greater { to: 9, left: 7, right: 8 },

JumpIf { condition: 9, label: 3 },

Jump(2),

Третий

Label(2),

LoadString { to: 10, value: "А либо меньше, либо равно 8" },

Debug { value: 10 },

И последний, пустой блок

Label(3),

]

Или в виде псевдо-кода

@0:

#0 = 10

#1 = 2

#2 = add #0 #1

$a = #2

#3 = $a

#4 = 8

#5 = gt #3 #4

jump @1 if #5

jump @2

@1:

#6 = "A больше 8"

debug #6

#7 = $a

#8 = 8

#9 = gt #7 #8

jump @3 if #9

jump @2

@2:

#10 = "А либо меньше, либо равно 8"

debug #10

@3:

4. Ассембли

Далее, каждая 3AC инструкция конвертируется в одну или несколько ассемблерных инструкций, которые уже напрямую выполняются на процессоре без какой-либо прослойки.

section .data

str_0: db "A больше 8", 0

str_1: db "А либо меньше, либо равно 8", 0

Строки будут записаны вместе с файлом как его часть, то есть они не будут аллоцированны динамически во время выполнения.

section .bss

a: resq 1

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

section .text

global _start

_start:

Делаем _start глобально видимым для того, чтобы линкер смог собрать бинарный файл.

L0:

mov rax, 10

mov rbx, 2

mov rcx, rax

add rcx, rbx

mov [a], rcx

a = rcx = rax + rbx = 10 + 2 = 12.

mov rax, [a]

mov rbx, 8

cmp rax, rbx

mov rcx, 0

setg cl

rcx = rax > rbx = a > 8 = 1 то есть true.

cmp rcx, 1

je L1

jmp L2

Если rcx = 1, то есть true, то переходим в L1, иначе – в L2.

L1:

mov rax, str_0

call debug

debug – это какая-то функция, которая печатает строки в консоль. В целях соблюдения компактности, я не стал её включать в код. Регистр rax – первый аргумент.

mov rax, [a]

mov rbx, 8

cmp rax, rbx

setg rcx

cmp rcx, 1

je L3

jmp L2

L2:

mov rax, str_1

call debug

L2 – начало блока else.

L3:

mov rax, 60

mov rdi, 0

syscall

Выходим из программы, производя системный вызов (syscall). В rax находится номер вызова – 60, то есть выход (SYS_exit). А в rdi лежит статус завершения программы, в данном случае 0, то есть успешное завершение.

Полезное

  • Мой блог про программирование и не только

  • Классика –Crafting Interpreters

  • Исходники компилятора Rust

  • BabyGo – маленький компилятор для Go

  • Серия видео по разработке Porth с нуля

Заключение

Надеюсь вам понравилась эта статья! Она написана на основе моего хобби-компилятора, поэтому если у вас есть желание внести свою лепту в проект – отправляйте пул-реквест в репозиторий!

Показать полностью
[моё] Программа Обучение Гайд Assembler Asm Компиляция Компилятор Программирование Текст Длиннопост
9
3
dirtyhack
dirtyhack
5 месяцев назад
Типичный программист

Tears in rain⁠⁠

Перечитал комменты, под своей последней (простите но у меня аллергия на слово крайний), статьей на хабре и пришло на ум:

Я видел такое, что вам, людям, и не снилось.

PHP-код, состоящий чуть менее, чем полностью из магических методов.

Атакующие корабли, пылающие над Орионом.

Костыли в FlatASMe, удерживающие систему на честном слове.

Лучи Си, разрезающие мрак у ворот Тангейзера.

Java-классы, унаследованные от 17 абстракций.

И if err != nil, вызвавший холивар среди гоферов.

Все эти мгновения затеряются во времени, как… слёзы в дожде…

Пришло время gc.collect().

Постмодернизм IT Golang PHP Java Assembler Текст
4
82
tproger.official
tproger.official
6 месяцев назад
Типичный программист

Код заработал!⁠⁠

Код заработал!
IT юмор Программирование IT Программист Картинка с текстом Assembler
14
Блог компании Партнёрский материал Реклама
Avito
Avito
4 дня назад

Завершился ралли-рейд «Шелковый путь: пройден маршрут по России и Монголии протяжённостью более 5000 км⁠⁠

Закончился один из самых масштабных ралли-рейдов сезона — «Шелковый путь 2025». Гонка, стартовавшая 12 июля в Иркутске, прошла по территории России и Монголии и завершилась 22 июля в Горно-Алтайске.

Завершился ралли-рейд «Шелковый путь: пройден маршрут по России и Монголии протяжённостью более 5000 км Гонки, Ралли, Автоспорт, Скорость, Блоги компаний

Маршрут включал 11 этапов, полных экстремальных условий, перепадов высот и труднопроходимых участков. В этом году Авито Спецтехника впервые выступила в качестве партнера одного из главных фаворитов гонки — команды «КАМАЗ-мастер».

Ралли «Шелковый путь» проходит с 2009 года. За время существования соревнования гонка проходила по территории России, Китая, Казахстана, Монголии и Туркменистана.

Особое внимание в этом году привлекла команда «КАМАЗ-мастер». Спортивные грузовики и машины технической поддержки вышли на старт с обновленным экстерьером, включающим символику Авито Спецтехники — генерального партнёра команды.

Антон Агальцов, руководитель категории «Продажи» в Авито Спецтехника:

«Мы гордимся партнерством с «КАМАЗ-мастер» в рамках ралли «Шелковый путь», ведь данное событие – это возможность доказать надежность и качество продукции российского автопрома и уровня развития отечественных инженерных решений. Эти инновации впоследствии будут доступны не только спортсменам, но и рядовым пользователям спецтехники, которую всегда можно найти на нашей платформе. Поддержка отечественных производителей спецтехники – один из наших ключевых фокусов и в рамках этой стратегии мы также активно сотрудничаем с Министерством промышленности и торговли РФ, с которым недавно подписали меморандум о поддержке производителей самоходных машин. Подобные шаги в укреплении взаимодействия между нами, другими участниками рынка и государством, помогают совместно развивать отрасль».

Кроме того, в преддверии старта ралли-рейда «Шелковый путь» в июне 2025 года в Москве прошла масштабная совместная экспозиция Авито Спецтехники и легендарной команды «КАМАЗ-мастер». На площади у колеса обозрения «Солнце Москвы» на ВДНХ был выставлен знаменитый спортивный грузовика KAMAZ-43509 в фирменной ливрее, посвящённой 30-летию команды. Именно на нём экипаж Андрея Каргинова одержал победы на ралли «Дакар» и «Золото Кагана» в 2020 году, а также завоевал высшие награды на марафоне «Шелковый путь» в 2018 и 2019 годах. За месяц экспозицию посетили более 500 тысяч москвичей и гостей города.

Команда «КАМАЗ-мастер» также примет участие в ежегодном профильном мероприятии от Авито «Дело спецтехники», где ключевые игроки рынков сельскохозяйственной, дорожно-строительной техники и коммерческого транспорта обсудят состояние индустрии и перспективы ее развития.

Авито Спецтехника в свою очередь продолжит и дальше поддерживать команду на специализированных выставках и мероприятиях, где будет представлена «КАМАЗ-мастер», укрепляя связь между спортивными достижениями, промышленной экспертизой и цифровыми платформами.

Реклама ООО «КЕХ еКоммерц», ИНН: 7710668349, erid: 2VtzqxiRaBy

Показать полностью
Гонки Ралли Автоспорт Скорость Блоги компаний
80
rogerfire
rogerfire
7 месяцев назад
Аниме

К чёрту Кембридж, унаследую папенькину бизнес-империю⁠⁠

К чёрту Кембридж, унаследую папенькину бизнес-империю Аниме, Anime Art, Аниме мемы, Shinomiya Kaguya, Kaguya-sama wa Kokurasetai, Assembler, IT юмор

Автор: ichimi_renge

Показать полностью 1
Аниме Anime Art Аниме мемы Shinomiya Kaguya Kaguya-sama wa Kokurasetai Assembler IT юмор
7
4
Ivengospb
Ivengospb
9 месяцев назад

Нужен программист⁠⁠

Всем доброго времени суток. Ищу программиста, способного в прошивку контроллера PIC24 сделать исправления, не существенные. Программист нужен в Санкт-Петербурге.
может нна Пикабу найдется нужный человек...

[моё] Программист Assembler Текст
25
549
quazr
1 год назад

Правда жизни⁠⁠

Правда жизни Мемы, IT юмор, Картинка с текстом, Программирование, IT, Assembler, Telegram (ссылка)

айтификация

Мемы IT юмор Картинка с текстом Программирование IT Assembler Telegram (ссылка)
161
7
megavatt
megavatt
1 год назад

IT-контрацепция⁠⁠

IT-контрацепция Картинка с текстом, IT, Юмор, IT юмор, Контрацепция, Assembler, Telegram (ссылка), Перевел сам

itmemhub

Показать полностью 1
Картинка с текстом IT Юмор IT юмор Контрацепция Assembler Telegram (ссылка) Перевел сам
1
Блог компании Партнёрский материал Реклама
practicum.yandex
practicum.yandex
12 дней назад

Инженер машинного обучения — кто это, чем занимается и как им стать⁠⁠

Машинное обучение — технология, которая позволяет компьютеру самообучаться и распознавать закономерности. А помогают ему инженеры машинного обучения. Рассказываем, чем они занимаются, какие навыки им нужны и как войти в эту профессию.

Инженер машинного обучения — кто это, чем занимается и как им стать Обучение, IT, Длиннопост, Блоги компаний

Кто такой инженер машинного обучения

Инженер машинного обучения (ML-инженер — от англ. Machine Learning Engineer) — это специалист, который разрабатывает и внедряет алгоритмы, позволяющие программам обучаться на данных и принимать решения без явного программирования. Скажем, специалист по Data Science анализирует данные и строит модели, а ML-инженер оптимизирует их и интегрирует в реальные приложения.

Профессия находится на пересечении программирования, математики, статистики и прикладного машинного обучения. ML-инженер не просто строит модель, а делает так, чтобы она эффективно работала в продакшене, обрабатывала большие объемы данных, быстро реагировала на запросы пользователей и корректно обновлялась по мере поступления новых данных.

Чем занимается ML-инженер на практике

Работа ML-инженера включает сразу несколько направлений. В первую очередь это сбор и подготовка данных. Реальный мир далек от идеала, и данные часто приходят в сыром виде: с пропусками, ошибками и несоответствиями. Инженер должен очистить их, привести к единому формату и расширить с помощью внешних источников.

Следующий этап — выбор и обучение модели. Здесь инженер выбирает один или несколько алгоритмов, проводит эксперименты, настраивает параметры, оценивает качество. Он должен понимать, как работают линейные регрессии, деревья решений, градиентный бустинг, нейронные сети и уметь выбрать нужный инструмент под задачу.

Самое сложное и ответственное начинается после того, как модель готова. ML-инженер превращает ее в часть работающего приложения. Это означает упаковку модели в API, написание серверного кода, оптимизацию по скорости и памяти, мониторинг качества в реальном времени и повторное обучение по мере необходимости. Он также работает над масштабируемостью и надежностью, так как в реальных условиях модели должны обрабатывать тысячи или миллионы запросов ежедневно.

Кроме того, инженер взаимодействует с другими специалистами: аналитиками, продукт-менеджерами, разработчиками. Он объясняет, как работает модель, какие у нее ограничения, как интерпретировать результаты. Коммуникация — неотъемлемая часть его работы.

Инженер машинного обучения — кто это, чем занимается и как им стать Обучение, IT, Длиннопост, Блоги компаний

Какие навыки и знания нужны

Чтобы стать инженером машинного обучения, нужно сочетание теоретической базы и практических навыков:

  • Уверенное владение языками программирования, прежде всего Python. Большинство библиотек машинного обучения, таких как scikit-learn, TensorFlow, PyTorch, написаны именно на нем.

  • Знания математики, особенно линейной алгебры, теории вероятностей и математической статистики тоже играют важную роль. Без них невозможно понять, как и почему работает та или иная модель, как интерпретировать ее поведение и где могут возникнуть ошибки. Для повторения основ у нас есть отдельный бесплатный курс базовой математики.

  • Алгоритмы машинного обучения важно понимать на уровне реализаций: что такое переобучение, как работает регуляризация, какие метрики применимы для классификации, регрессии, кластеризации.

Также важно уметь работать с базами данных (SQL, NoSQL), системами хранения и обработки больших данных (Hadoop, Spark), знать основы DevOps и MLOps (Docker, CI/CD, Kubernetes, автоматизация моделей).

Плюсы и минусы профессии

➕ Востребованность и высокая оплата труда. Инженеры по машинному обучению — одни из самых востребованных специалистов в IT-сфере. Зарплаты выше среднего по рынку, особенно при наличии успешных проектов и глубоких знаний.

➕ Перспективность. ML активно применяется в медицине, финансах, ритейле, науке и других отраслях. Это дает широкие возможности для карьерного роста.

➕ Интеллектуальная работа. Работа подходит тем, кто любит решать сложные задачи и работать с данными.

➕ Богатая образовательная экосистема. По теме ML иного курсов, open-source инструментов, конференций и сообществ. Есть возможность постоянно учиться и обмениваться опытом.

➖ Высокий порог входа. Нужны глубокие знания математики, программирования, а также баз данных, алгоритмов и архитектур моделей.

➖ Работа бывает рутинной. Большую часть времени занимает обработка и подготовка данных, отладка моделей, а не изобретение революционных алгоритмов.

➖ Трудности с внедрением моделей. Не всегда удается успешно интегрировать модель в продукт. Требуются усилия по адаптации под инфраструктуру, масштабированию, мониторингу и учету бизнес-ограничений.

➖ Конкуренция. Растущая популярность профессии означает, что в крупных городах конкуренция среди кандидатов может быть высокой.

Зарплаты ML-инженеров

По данным Dream Job, средняя зарплата ML-инженеров в России за 2025 год составляет 165 000 рублей. Чаще всего зарплаты находятся в диапазоне от 100 000 до 230 000 рублей. Минимальная зафиксированная зарплата — 87 000 рублей, максимальная — 360 000.

Вилки джуниоров в машинном обучении, по данным HH Карьера, составляют от 70 000 до 110 000 рублей. Мидлов — от 220 000 до 250 000 рублей, а сеньоров — от 348 000 до 350 000 рублей.

Вот так выглядят зарплаты в профессии ML-инженер летом 2025 года.

1/2

Перспективы профессии

Машинное обучение используется в самых разных сферах: от финансов и медицины до логистики, маркетинга и развлечений. ML-инженеры разрабатывают алгоритмы для прогнозирования спроса, распознавания лиц, антифрод-систем и рекомендательных алгоритмов.

Спрос на таких специалистов продолжает расти, а уровень доходов остается одним из самых высоких на рынке. По данным исследования, наибольший спрос в сфере анализа данных и ML пришелся на последние четыре года — число предложений выросло в 2,5 раза.

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

Как стать ML-инженером

Многие специалисты приходят в машинное обучение из смежных областей:  математики, физики, программирования, аналитики. Часто у них есть техническое образование, хотя это необязательно. Важнее — желание учиться и практиковаться.

Один из самых надежных способов — пройти профильное обучение. Это может быть вуз, где есть направления по ИИ и анализу данных, или курсы, ориентированные на практику. Онлайн-платформы предлагают мощные программы, которые можно проходить параллельно с работой или учебой.

Например, стартовать в профессии поможет онлайн-курс «Инженер машинного обучения» Практикума — за 4 месяца вы изучите полный жизненный цикл модели машинного обучения и сможете строить продвинутые ML‑модели. Вы освоите Docker, FastAPI, Airflow, MLflow, Yandex Cloud и другие инструменты, добавите 7 ML-проектов в портфолио и получите диплом о профессиональной переподготовке.

Начните учиться бесплатно!

Реклама ООО «Яндекс», ИНН: 7736207543

Показать полностью 3
Обучение IT Длиннопост Блоги компаний
4
2753
MirVcegda23
MirVcegda23
1 год назад
IT-юмор

Вот что значит - профессионал⁠⁠

Вот что значит - профессионал
Юмор IT X (Twitter) Assembler Программирование Скриншот Мат
47
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии