Обновить
47.74

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

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

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

Книга в Markdown: Автоматическая сборка статического сайта mdBook и файла DOCX с оформлением по ГОСТ

Уровень сложностиПростой
Время на прочтение17 мин
Охват и читатели7.4K

Markdown — популярный и удобный язык разметки, но это также и очень ограниченный формат. Поэтому задача написания в Markdown сложной технической документации по ГОСТ, научной статьи с автоматической настройкой оформления для заданного издательства или хорошо оформленного онлайн-учебника может показаться неосуществимой. В этой статье рассмотрим способ работы над научно-техническими статьями и книгами в формате Markdown на основе подхода Docs as Code с учётом строгих ограничений на оформление, используемый Петром Советовым и мной при подготовке учебных материалов в РТУ МИРЭА.

Способ заключается в применении утилиты pandoc для построения дерева абстрактного синтаксиса (AST) Markdown-документа с последующим переписыванием AST набором фильтров на Lua и трансляцией AST в форматы docx и pdf, соответствующие ГОСТ, а также в диалект markdown, совместимый с mdBook, для генерации онлайн-учебника.

Онлайн-версии книг, написанных с использованием описанного подхода, и репозитории с исходным кодом книг опубликованы на GitHub и GitHub Pages: книга по конфигурационному управлению, книга по разработке кроссплатформенных программмных систем.

Читать далее

Новости

Запуск JIT-бенчмарков под двоичными трансляторами

Время на прочтение7 мин
Охват и читатели6.8K

В данной статье были проведены запуски JIT-бенчмарков под двоичными трансляторами из x86 в ARM Microsoft Prism Emulator, Apple Rosetta 2 и FEX Emulator. Также была проведена оценка влияния динамических модификаций кода на производительность двоичной трансляции.

Читать далее

Я написал компилятор на C++ при помощи LLVM

Уровень сложностиСредний
Время на прочтение56 мин
Охват и читатели13K

GitHub

Onyx — язык программирования, нацеленный на базовую безопасность памяти, приятный синтаксис и опыт использования. Onyx написан на C++ с компиляцией на базе LLVM. На момент написания статьи язык поддерживает:

Читать далее

Python без Python: как запускать код где угодно

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

Команда Python for Devs подготовила перевод статьи о том, как можно компилировать Python в быстрые, кроссплатформенные исполняемые файлы без изменения исходного кода. Автор подробно разбирает архитектуру компилятора, объясняет, зачем «понижать» Python до C++, как типы позволяют «приручить» динамику языка и почему эмпирическая оптимизация даёт лучший результат, чем ручной тюнинг.

Читать далее

Библиотека JIT-компиляции Loops для оптимизации нейросетей, СУБД и не только

Уровень сложностиСложный
Время на прочтение32 мин
Охват и читатели8.6K

Привет, Хабр! Меня зовут Пётр Чекмарёв, я старший инженер компании YADRO, занимаюсь компьютерным зрением на мобильных устройствах и низкоуровневой оптимизацией плотных вычислительных функций.

Оптимизация кода — вечная тема, особенно актуальная в дни триумфального шествия искусственного интеллекта. Оптимально написанные, но изолированные ядра сетей составляются в разные последовательности в зависимости от архитектуры модели. Но, если дать им информацию друг о друге во время компиляции, сеть удастся заметно ускорить. Выгружать программу для перекомпиляции, будь она движком инференса или СУБД ,— бессмысленно, поэтому компилировать надо во время работы, Just-In-Time. Я расскажу про свой пет-проект векторной JIT-кодогенерации и покажу, как она помогает в оптимизации.

Читать далее

Langium — инструмент для языкового моделирования

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

Разработка собственных языков и языковых серверов может быть сложной и рутинной задачей. Langium — инструмент на TypeScript, который упрощает создание предметно‑ориентированных языков (DSL) с готовым LSP‑сервером.

Меня зовут Денис Маматин, я работаю в R&D‑отделе СберТеха. В ходе разработки одного из наших проектов мы столкнулись с необходимостью создания собственного DSL, и в этом нам существенно помог Langium. В этой статье я рассмотрю, как устроена грамматика Langium, как создать первый проект и какие преимущества он даёт разработчику.

Читать далее

std::move ничего никуда не двигает: подробный рассказ о категориях значений в C++

Время на прочтение35 мин
Охват и читатели17K

Проблема: когда из-за «оптимизации» код замедляется

Начнём с ситуации, в которой могут спотыкаться даже опытные разработчики. Допустим, вы написали на C++ следующий код, который выглядит совершенно нормальным:

Читать далее

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

Уровень сложностиПростой
Время на прочтение23 мин
Охват и читатели8.6K

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

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

Заваривайте чай, доставайте вкусняшки — пора «старый стек превращать в удобрение для новых помидор»! 🍅

Читать далее

А не замахнуться ли нам на Вильяма нашего Аккермана?

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели7.1K

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

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

Читать далее

By the pricking of my thumbs, something wicked this way comes

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

Эту фразу из «Макбета» Шекспира автор осмелится перевести как «благодаря зуду на кончиках моих пальцев может появиться что‑то очень странное».

Изначально хотелось всего‑лишь ознакомиться с Verilog, но, «опасное это дело, выходить за порог: стоит ступить на дорогу и, если дашь волю ногам, неизвестно куда тебя занесет».

Занесло в сторону процессора с собственной архитектурой. Автор давно неровно дышит в сторону стековых процессоров, здесь так же присутствуют раздельные конвейеры для потоков управления/исполнения и расширяемая упаковка кода.

Надеюсь, это окажется кому‑то полезным, так же как когда‑то автору был полезен игрушечный hoc из книги Кернигана и Пайка «Unix — программное окружение».

Читать далее

Компиляторы нового поколения: Искусственный интеллект на службе у кода

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

Автор: Денис Аветисян

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

Читать далее

IBM 5150 и разработка под самый первый PC

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

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

Читать далее

Как изучить программирование за 7 дней (до конца новогодних праздников)?

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

Перфолента.NET — это на удивление профессионально выглядящий язык программирования на платформе .NET, который поддерживает объектно-ориентированное и функциональное программирование, и на котором написан даже написан другой язык, функциональный язык программирования — Перфо.NET (интерпретатор).

Мой личный опыт

Когда я начал немного программировать на Перфоленте/Перфо, моё понимание языков программирования сильно изменилось. Я почувствовал себя как англоязычный программист, пишущий код на родном языке.

Это был очень интересный опыт. Я стал больше внимания уделять смыслу слов и терминов, стал строже относиться к названиям.

Раньше сложные понятия функционального программирования давались мне тяжело, но теперь всё стало проще. Лямбда-функции, замыкания, каррирование и т.д. — всё это я теперь понимаю по-другому. Особенно когда объясняю ребёнку.

Например, лямбда-функция — это просто формула из задачника по математике. Ребёнок понял это сразу! И мы пошли дальше, не останавливаясь.

По-моему, главный эффект даёт отказ от псевдонимов и алиасов. Я долго отучался давать названия, из которых сразу понятно, что это за сущность, а не «имена, которые означают...».

Второй эффект — это «сокращение контекста». Контекстное окно человека ограничено 3–5 вещами, которые он в состоянии держать в голове и обдумывать. «Псевдонимы/алиасы» съедают это контекстное окно. Поэтому избавление от прокладок в виде «print — это печать» и замена их на простые «вывести_в_консоль», «вывести_в_файл» и т.п. сильно облегчают понимание логики кода.

Читать далее

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

Как я в 15 лет собрал LLVM ToolChain на Windows без MSVC

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

Как я собрал актуальный LLVM со всеми инструментами (Clang, LLD, LLDB, clang-extra-tools) и всеми нужными для автономной работы рантаймами (libc++, libc++abi,libinwind,compiler-rt,UCRT) нативно под Windows. В этой статье я расскажу о своем 4-месячном пути: от накоплений со школьных обедов на первый ПК до борьбы с линковкой библиотек и поиска фиксов в экспериментальной ветке LLVM 22. История о том, почему я выбрал путь «чистого Upstream» и как заставил это всё работать в 15 лет.

Заинтересовало

Компилятор языка моделирования в одиночку: от C++ к Rust — находки и откровения

Уровень сложностиПростой
Время на прочтение22 мин
Охват и читатели11K

Тема специального языка для моделирования многокомпонентных динамических систем давно меня зацепила и хотелось написать свою реализацию для него, так как было жгучее желание сделать лучше: чтобы работало надёжнее и быстрее, чем у авторов языка (MVL - в статье подробнее про язык), и к тому же ещё и кроссплатформенно.

Расскажу про заходы к задаче на C++, почему перешёл в итоге к Rust - что приобрёл, где потерял - поделюсь деталями и самой реализации, которые, надеюсь, будут интересны и растаманам, и плюсовикам, и всем прочим доморощенным компиляторостроителям, а также тем, кого привлекают темы реализации языков, DSL или численного моделирования.

Читать далее

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

Время на прочтение3 мин
Охват и читатели7.7K

Представьте, что вам не нужно выбирать. Ни между красной и синей таблетками, ни между макарошками и пюрешкой, ни между светлой и темной сторонами. Вы можете взять лучшее от каждого предложения. Мы посмотрели все доклады System Level Meetup, выбрали самые интересные, собрали презентации и записи в одном месте. Для удобства разделили материал на треки , C++ и С/Linux Kernel, но смотреть можно все подряд.

Читать далее

Когда компиляторы удивляют

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

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

Читать далее

Развитие языка программирования Ü в 2025-м году

Уровень сложностиСложный
Время на прочтение24 мин
Охват и читатели10K

В 2025-м году язык Ü продолжил своё развитие. Сам язык был заметно улучшен, был исправлен ряд ошибок, существенно прибавила в объёме его стандартная библиотека а также инфраструктура языка заметно обогатилась. В данной статье я хотел бы рассказать, что было сделано и что изменилось.

Читать далее

Всё, что нужно знать про аллокаторы в Rust (и как написать свой)

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели11K

Мне в Rust всегда заходила одна штука. Он довольно быстро приучает не держать в голове мусор из серии «а я точно это освободил??». Большая часть рутины с памятью уезжает в автоматизм языка, и ты можно прям выдохнуть и думать про данные и инварианты, а не про то, где у тебя очередной free потерялся.

Но. Как только начинаешь копать чуть глубже, выясняется, что у Rust есть вполне конкретная рука, которая раздаёт память под все эти Box::new(42), Vec::push и растущие String. Имя этой руке простое: аллокатор. Он отвечает за то, что происходит в куче, и именно через него проходят почти все интересные истории про производительность и поведение памяти.

Читать далее

Визуальный язык программирования в NebuLeet: эволюция и дизайн

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

Пару лет я в соло разрабатывал максимально нишевую игру "для программистов" (NebuLeet) на довольно нишевых технологиях (Go + ebitengine), и вот теперь, после релиза, я хочу рассказать про одну из интересных особенностей этой игры - визуальном программировании логики игровых юнитов.

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

Вас ждёт увлекательная околокомпиляторная/языковая статья с игровым применением. Всё-таки, языки программирования для игр - это ведь отдельный жанр.

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

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