Обновить
31.91

Компиляторы *

Из исходного кода в машинный

Сначала показывать
Порог рейтинга
Уровень сложности

Java 25: упрощённые исходники

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров10K

Язык Java развивается. Не так давно вышла очередная версия, в которой, помимо всего прочего, вышло любопытное обновление языка (JEP-512).

Изменения, в язык внесенные, делают его более пригодным и удобным для обучения и написания коротких программ.

В этой статье хочу рассказать о том, как это сделано. Для этого заглянем в компилятор и немного коснемся теории создания языков.

Читать далее

Новости

Некрокомпиляция или как собрать OpenWatcom для QNX4 под Debian 12 и прикрутить его к Eclipse

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров1.1K

Меня зовут Ярослав Бомбов и я более 30 лет занимаюсь созданием АСУТП. Как вы понимаете жизненные циклы в АСУТП штука длительная и иногда возникают задачи что-то добавить в систему работающую уже лет 20. И именно такой случай произошел - возникла необходимость изменить код в контроллере под управлением QNX4.

Можно конечно было поговорить на тему "вы в каком морге этого Франкенштейна получали туда и обращайтесь", но при ближайшем рассмотрении оказалось что код мой собственный ;). Самое простое решение открыть mcedit, что-то поправить и собрать в самом QNX4, но для начала надо вспомнить разобраться как все работает, а это удобней делать в современных IDE. Поиск бинарников OpenWatcom (OW) под линукс дал ровно два архива которые в моей системе не заработали. Поэтому решено действовать по принципу - лучше день потерять, потом за пять минут долететь.

Полетели

Новый сезон «Битовых масок» — подкаста о системном программировании и разработке процессоров

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров2.6K

В «Битовых масках» — подкасте «Истового инженера» — ведущие знакомят слушателей с инженерами, преподавателями и энтузиастами, которые делают железо и низкоуровневое ПО понятнее, ближе и интереснее.

В обширном списке тем — современные инструменты проектирования, open-source-инициативы, архитектуры процессоров, компиляторы, история вычислительной техники. В этом посте мы расскажем о самых известных гостях «Битовых масок» и поделимся планами по нему.

Читать далее

Подробно о неопределённом поведении в С и C++

Время на прочтение24 мин
Количество просмотров9.7K

При работе с C или C++ необходимо в какой-то степени разбираться в неопределённом поведении (UB): что это такое, каковы его эффекты, и как о него не споткнуться. Для простоты картины я буду в этой статье рассказывать только о C, но всё изложенное здесь также применимо и к C++, если явно не указано иное.

Читать далее

Как мы нашли баг в компиляторе Go

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров9.2K

Каждую секунду в дата-центры Cloudflare в 330 городах отправляется 84 миллиона HTTP-запросов. Из-за этого даже самые редкие из багов возникают достаточно часто. На самом деле, именно наши масштабы позволили нам недавно обнаружить в компиляторе Go на arm64 баг, вызывающий состояние гонки в генерируемом коде.

В этом посте мы расскажем о том, как впервые столкнулись с багом, исследовали его и докопались до его первопричины.

Читать далее

Онлайн IDE для .NET

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров5.6K

Обычно под .NET разрабатывают в Visual Studio, собирая и запуская приложения локально на компьютере. А что если IDE работала бы прямо в браузере? Как Figma, только для .NET приложений.

Мы задались именно этой целью — сделать онлайн IDE для .NET.

Сейчас в нашем инструменте уже работает:

✏️ Редактор UI на XAML (подмножество WPF) с drag-and-drop.

Компиляция C# и XAML полностью в браузере без участия сервера.

🖥️ Запуск приложения прямо в браузере в изолированном окружении.

☁️ Сохранение проектов на сервере и возможность скачать их для Visual Studio.

Можно поиграться и попробовать предварительную версию: https://xaml.io

А ниже — рассказ о том, как это всё работает под капотом.

Читать далее

Список докладов с PythoNN в рамках ITGorky

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров5.1K

Всем привет! Сегодня продолжаем нырять в глубины питона, но в другом формате.

В субботу (20 сентября 2025го) у нас завершилась наша первая бесплатная конференция сообществ Нижнего Новгорода.

На ней у нас был шикарный Python-трек с очень глубокими докладами от наших любимых хабравчан про устройство разных частей интерпретатора и несколькими вводными на смежные темы. Выступали и новички, и «старички» :)

Как по мне — вышло отлично.

Под катом будет полный список докладов и материалов, заходите и смотрите!

Читать далее

Rust 1.90.0: ldd для x86_64-unknown-linux-gnu, публикация рабочих пространств и понижение x86_64-apple-darwin до Tier 2

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.6K

Команда Rust рада сообщить о новой версии языка — 1.90.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.

Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.90.0 вам достаточно выполнить команду:

$ rustup update stable

Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.

Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta) или nightly (rustup default nightly). Пожалуйста, сообщайте обо всех встреченных вами ошибках.

Что стабилизировано в 1.90.0

AsmX G3 v29: Эволюция компилятора — от стабильности к упаковке Linux приложений. упаковка для Debian-based систем, AUR

Уровень сложностиСложный
Время на прочтение22 мин
Количество просмотров1.2K

AsmX G3 v29-rev1.0 меняет игру: компилятор, который не только генерирует код, но и пакует его в .deb для Debian/Ubuntu и живёт в AUR с asmx-g3-git, asmx-stable, asmx-official. Проект даёт разработчикам контроль над низкоуровневым кодом и упрощает дистрибуцию приложений. Мощный TAPI и стабильность — всё, чтобы ваш код стал приложением быстрее, чем вы скажете yay -S или paru -S!

Читать полностью

Как замедлить программу и почему это может быть полезно?

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров5.4K

Основная часть исследований производительности языков программирования задаётся разными вариациями единственного вопроса: как нам ускорить некую конкретную программу? Реже мы исследуем, как она может использовать меньше памяти. Это означает, что подавляющая масса исследований сосредоточена исключительно на снижении объёма ресурсов, необходимых для выполнения какой-то вычислительной задачи.

Тогда почему нас может интересовать, как замедлять программы?

Читать далее

3 кусочка «сахара» к синтаксису языка Lua

Время на прочтение10 мин
Количество просмотров2.9K

Lua — симпатичный и хороший язык — умещает богатый функционал в очень маленькой реализации (интерпретатор и библиотека — это всего один исполнимый файл на 300кб) — и притом изначально ориентирован на «человечный» синтаксис. Хотя он не в топе популярности, но за простоту встраивания (помимо человечности и функциональности) он используется в ряде популярных проектов — от Roblox до Tarantool, например.

Однако есть мелочи которые несколько снижают радость от его использования. Когда я встроил его у себя на сайте для того чтобы сделать несколько «игровых» задач на программирование, пользователи высказывали неодобрение из‑за непривычного оператора неравенства, отсутствия комбинированных операторов присваивания и пр.

В этой статье мы разберемся как (и куда) внести маленькие дополнения чтобы усовершенствовать синтаксис интерпретатора, но сохранить совместимость. Результат можно «потыкать живьём» в онлайновой «песочнице».

Читать далее

Возвратиться или продолжить: поговорим про continuations

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров3.2K

Одна из самых эзотерических тем в программировании и computer science это продолжения (continuations), ограниченные продолжения (delimited continuations) и continuation-passing style. Я попытаюсь раскрыть эту тему понятным для обычного программиста языком. Предполагается, что обычный программист знаком с понятиями функции/подпрограммы, фрейма вызова (stack frame), а также имеет базовое знания языка Scheme, хотя бы на уровне первых глав SICP.

Читать далее

vm5277, пример компиляции для AVR

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров2.2K

Пишем один код - собираем на разные 8 бит МК!

https://vm5277.ru- это универсальное решение для embedded-разработки, которое позволяет сократить время создания прошивки для 8 бит микроконтроллеров в разы.

Как это работает:

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

Компилятор автоматически генерирует оптимизированный ассемблерный код под выбранную платформу

Код работает поверх легковесной RTOS, написанной на ассемблере для максимальной производительности

Ассемблер-сборщик финализирует проект в бинарный файл прошивки

Читать далее

Ближайшие события

Мое видение универсального языка программирования

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров7.9K

Язык программирования, даже общего назначения, - это инструмент. Каждый язык хорош в решении задач своей сферы: C++ позволяет писать эффективные программы, Haskell - писать элегантный параллельный и математический код, C# - создавать программы на гибкой масштабируемой архитектуре. Современные языки заставляют нас мириться с их недостатками: отсутствие нужной системы типов, нехватка синтаксического сахара, отсутствие парадигмы X. Все хоть раз мечтали о языке, который удобен для решения любой задачи.

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

Читать далее

Думай о секундах свысока — как бы говорит нам Modern C++

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров5.4K

Думай о секундах свысока - как бы говорит нам Modern C++.

Зачем нам использовать Modern C++, особенно старших версий? Дурацкий вопрос, скажут сектанты, фанаты, фанатики, адепты. Оно же необходимо для большей выразительности, читабельности и ускорения всех возможных процессов, включая метаболизм; и еще для экономии времени. Что-то в этом есть, а кое-чего нет. Давайте рассмотрим пример из жизни.

Один программист (имя сохранено в редакции) писал себе спокойно код и написал примерно такое (для справки: используемый стандарт 2017):

пример из жизни

Первый Спутник, язык FORTH и немного о JIT-компиляции

Время на прочтение10 мин
Количество просмотров2.9K

Здесь не будет песен и сказок о том какой крутой и недооценённый язык Forth:) По совокупности обстоятельств он скорее уже история. Однако некоторые связанные с ним аспекты поучительны и перспективны (например, для энтузиастов и разработчиков языков и компиляторов) — и хочется их записать на память, да и поделиться с коллегами.

-

Читать далее

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

Уровень сложностиСложный
Время на прочтение16 мин
Количество просмотров8.8K

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

Мы начнем с вводной части о статическом и динамическом полиморфизме, рассмотрим факторы, влияющие на девиртуализацию, и ее примеры разной сложности — в том числе те, что мы используем в реальной разработке. А напоследок познакомим вас со спекулятивной девиртуализацией и дадим рекомендации, как подходить к виртуальным функциям в разработке на C++.

Читать далее

Теряем невинность с Таненбаумом: Amsterdam Compiler Kit

Уровень сложностиСложный
Время на прочтение9 мин
Количество просмотров3.3K

Пока вы рождались, ходили в школу, заканчивали учебу и выходили на свою первую работу, на свете существовал совершенно особенный набор компиляторов, о котором крайне мало известно на просторах РФ.

Именно о нем пойдет сегодняшний рассказ.

Читать далее

Визуализатор сборок в режиме реального времени

Время на прочтение5 мин
Количество просмотров5.1K

Под катом – анимация, демонстрирующая сборку приложения для macOS в режиме реального времени:

Я расскажу, как она получилась, но для начала обрисую контекст этого проекта.

Компиляция конкретного софта может быть очень длительной просто потому, что в этой программе очень много кода — как, например, в проекте LLVM. Но бывает и так, что сборка идёт медленно по глупым и вполне устранимым причинам. Подозреваю, что большинство сборок просто тормозят из-за ерунды, но проверить это мне пока не удавалось. Поэтому я разработал кроссплатформенный инструмент для визуализации сборок (пока он существует в приватной бета-версии, ссылка в конце статьи). Он работает с любой системой сборки и с любым языком программирования (а не только C/C++/Rust).

Читать далее

Как правильно вызывать CUDA

Время на прочтение16 мин
Количество просмотров6.8K

Вероятно, вам уже попадались подобные руководства по CUDA: хрестоматийный пример «Hello World», в котором перемешан код для ЦП и графического процессора. Всё это сложено в один гетерогенный файл с исходниками на CUDA C++, а для запуска ядра применяется синтаксис NVCC с тройными угловыми скобками <<<>>>, который уже стал культовым:

Читать далее
1
23 ...

Вклад авторов