compilers

  • ХабрахабрФото [Перевод] Как реализованы JIT-компиляторы

    [Перевод] Как реализованы JIT-компиляторы

    В этой статье мы поговорим о подробностях реализации и работе разных JIT-компиляторов, а также о стратегиях оптимизации. Обсуждать будем достаточно подробно, однако многие важные концепции опустим. То есть в этой статье не будет достаточной информации, чтобы прийти к обоснованным заключениям при любых сравнениях реализаций и языков. Чтобы получить базовое представление о JIT-компиляторах, почитайте эту статью. Небольшое примечание: Я часто буду…

    Читать далее »
  • ХабрахабрФото Проверка компилятора GCC 10 с помощью PVS-Studio

    Проверка компилятора GCC 10 с помощью PVS-Studio

    Компилятор GCC написан с обильным использованием макросов. Очередная проверка кода GCC с помощью PVS-Studio вновь подтверждает мнение нашей команды, что макросы – это плохо. В таком коде тяжело разбираться не только статическому анализатору, но и программисту. Конечно, разработчики GCC уже привыкли к проекту и хорошо разбираются в нём. Но со стороны очень сложно что-то понять. Собственно, из-за макросов и не…

    Читать далее »
  • ХабрахабрФото Парсеры Пратта для чайников

    Парсеры Пратта для чайников

    Рекурсивный спуск работает идеально, когда вы можете принимать решение относительно разбираемого куска кода с помощью текущего контекста и токена. Картину портят выражения: постфиксные, инфиксные и прочие. Проблема: вы не можете понять, какого типа выражение вы обрабатываете до тех пор, пока не разберёте его первую половину. Зачастую для вас также важны приоритет операции и её ассоциативность, чтобы построенное AST имело правильную…

    Читать далее »
  • ХабрахабрФото [Перевод] Внутренности Go: оборачиваем переменные цикла в замыкании

    [Перевод] Внутренности Go: оборачиваем переменные цикла в замыкании

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

    Читать далее »
  • ХабрахабрФото Дефективное встраивание функций в Go

    Дефективное встраивание функций в Go

    Эквивалентен ли по производительности код, представленный ниже? // (A). Вызов HasPrefix будет встроен. return strings.HasPrefix(s, "#") // (B). Ручное встраивание тела HasPrefix. return len(s) >= len("#") && s[:len("#")] == "#" Ответ: нет. За подробностями и объяснениями прошу под кат. Доброго времени суток, перед тем, как раскрыть тему, хотел бы представиться.Меня зовут Искандер и я время от времени отправляю коммиты в…

    Читать далее »
  • ХабрахабрФото Компилятор Go: язык описания правил SSA оптимизаций

    Компилятор Go: язык описания правил SSA оптимизаций

    В компиляторе gc для описания Static Single Assignment (SSA) правил оптимизаций используется специальный Лисп-подобный предметно-ориентированный язык (DSL). Предлагаю разобрать основные элементы этого языка, его особенности и ограничения.В качестве упражнения, добавим в Go компилятор генерацию инструкции, которую он раньше не генерировал, оптимизируя выражение a*b+c. Это первая статья из серии про внутренности Go SSA compiler backend, поэтому помимо обзора самого DSL описания…

    Читать далее »
  • ХабрахабрФото LL(*) парсер с использованием Rust макросов

    LL(*) парсер с использованием Rust макросов

    Wow. Such Rust. Much macro. © картинка - Твиттер аккаунт Servo Язык Rust стремительно набирает обороты. Кто-то пророчит ему стать заменой C/C++, кому-то он просто нравится. Я скорее принадлежу ко второй группе. Разработчики стараются сделать его удобным и безопасным. В нем есть конструкции и принципы, которые еще не скоро появятся в "плюсах", ввиду инерции комитета и множества других причин. Поэтому,…

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


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