Компиляторы

  • ХабрахабрФото Ломаем хаскелем Brainfuck

    Ломаем хаскелем Brainfuck

    Немного о bfc Brainfuck — очень глупый язык. Там есть лента из 30к ячеек, по байту каждая. Команды bfc это: Передвижение по ленте влево и вправо (символы < и >) Увеличение и уменьшение значения в ячейке (символы + и -) Ввод и вывод текущей ячейки (символы . и ,) И цикл while, который продолжается пока значение в текущей ячейке не…

    Читать далее »
  • ХабрахабрФото Из серии: заглянем под капот clang-e2k/llvm-e2k из штатного дистрибутива для Эльбруса

    Из серии: заглянем под капот clang-e2k/llvm-e2k из штатного дистрибутива для Эльбруса

    Тема непосредственно самого процессора Эльбрус уже достаточно хорошо раскрыта в различных статьях, в том числе, в статьях, опубликованных на habr.ru. Кроме самого процессора Эльбрус время от времени на просторах рунета можно встретить обсуждения, посвященные вопросу портирования компилятора clang/llvm на Эльбрус. Пожалуй, данная тема еще не получала подробного освещения. Данная заметка призвана заполнить этот «пробел». Если вкратце, то llvm из e2k-дистрибутива…

    Читать далее »
  • ХабрахабрФото Поговорим об оптимизирующих компиляторах. Сказ второй: Доминирование

    Поговорим об оптимизирующих компиляторах. Сказ второй: Доминирование

    Сегодня мы продолжаем наш разговор об оптимизирующих компиляторах для самых маленьких и не очень. Для тех, кто пока не в курсе происходящего, но желает приобщиться - я поставил себе задачу написать цикл вводных статей в эту область для совсем-совсем начинающих. Первую часть, где рассказывается об SSA-форме, можно и нужно прочитать здесь. Сегодня мы поговорим о доминировании. Это одна из фундаментальных…

    Читать далее »
  • ХабрахабрФото Поговорим об оптимизирующих компиляторах. Сказ первый: SSA-форма

    Поговорим об оптимизирующих компиляторах. Сказ первый: SSA-форма

    Всем привет. Сегодня я хотел бы поговорить об устройстве современных оптимизирующих компиляторов. Я никогда не публиковался на Хабре ранее, но надеюсь, что мне удастся написать серию статей, которая просуммирует мой опыт в этой области. Коротко обо мне. Меня зовут Макс, и так получилось, что я вот уже 10 лет, почти с самого начала своей карьеры, занимаюсь оптимизирующими компиляторами. Я начинал…

    Читать далее »
  • ХабрахабрФото Язык Umka 1.0 и игровой фреймворк Tophat

    Язык Umka 1.0 и игровой фреймворк Tophat

    Платформер-головоломка, написанный на Tophat (автор — Святослав Шатунов) После трёх лет неторопливой разработки вышла версия 1. 0 моего скриптового языка Umka. Это статически типизированный язык, предназначенный для встраивания в программы на C/C++. Синтаксис и некоторые особенности семантики Umka были вдохновлены языком Go, однако Umka никак не зависит от экосистемы Go и не требует для работы ничего, кроме стандартной библиотеки C.…

    Читать далее »
  • ХабрахабрФото [Перевод] Полезен ли сегодня быстрый обратный квадратный корень из Quake III?

    [Перевод] Полезен ли сегодня быстрый обратный квадратный корень из Quake III?

    В 2005 году id Software опубликовала под лицензией GPL-2 исходный код своей игры 1999 года Quake III Arena. В файле code/game/q_math.c есть функция для вычисления обратного квадратного корня числа, которая на первый взгляд выглядит очень любопытным алгоритмом: float Q_rsqrt( float number ) Об этом алгоритме написано множество статей, и ему посвящена хорошая страница Википедии, где он назван fast inverse square…

    Читать далее »
  • ХабрахабрФото Создаем свой собственный язык программирования с использованием LLVM. Часть 5: Поддержка классов и перегрузки функций

    Создаем свой собственный язык программирования с использованием LLVM. Часть 5: Поддержка классов и перегрузки функций

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

    Читать далее »
  • ХабрахабрФото Неестественное выравнивание

    Неестественное выравнивание

    Вот уже 10 лет прошло, как я переводил свои средства программирования в среду x86-64 для Windows 7. А как будто вчера было! Поскольку тогда многие особенности этой среды были для меня внове, они вызывали недоумение. Вот типичный пример. Моя программа вызывала тривиальную функцию WinAPI с названием InternetGetConnectedState. Ниже для иллюстраций я буду использовать собственный маленький интерактивный отладчик, который автоматически вставляется…

    Читать далее »
  • ХабрахабрФото Создаем свой собственный язык программирования с использованием LLVM. Часть 4: Поддержка составных типов

    Создаем свой собственный язык программирования с использованием LLVM. Часть 4: Поддержка составных типов

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

    Читать далее »
  • ХабрахабрФото [Перевод] Rust 1.68.0: разреженный протокол cargo, локальный pin, обработчик ошибок аллокации

    [Перевод] Rust 1.68.0: разреженный протокол cargo, локальный pin, обработчик ошибок аллокации

    Команда Rust рада сообщить о новой версии языка — 1. 68. 0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение. Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1. 68. 0 вам достаточно выполнить команду: rustup update stable Если у вас ещё не установлен rustup, вы можете установить…

    Читать далее »


Кнопка «Наверх»