Компиляторы
-
Хабрахабр
[Перевод] Каково это, создавать язык программирования сегодня?
«Эта книга – классика. Относитесь к ней бережно». Такую фразу произнёс архитектор из нашей команды, передавая мне The Dragon Book. Разработкой компиляторов я увлёкся где-то 15 лет назад ещё на заре своей карьеры. Как-то раз, читая эту книгу поздно вечером, я заснул, небрежно уронив её на пол. Надеюсь, владелец не заметил небольшую вмятину на обложке после того, как я ему…
Читать далее » -
Хабрахабр
11lc — инновационный компилятор для нового языка программирования
Данная статья посвящена находящемуся на стадии проектирования компилятору 11lc. В ней перечисляются наиболее яркие особенности этого компилятора. Отсутствие скрытой неэффективности Это свойство скорее языка программирования 11l, нежели компилятора. Однако оно настолько важно и настолько отличает язык 11l от C++, D или даже Nim, что я решил разобрать его подробно в данной статье. Уолтер Брайт, создатель языка D, писал: Templates in…
Читать далее » -
Хабрахабр
Поговорим об оптимизирующих компиляторах. Сказ пятый: удаление общих подвыражений
Это цикл статей об оптимизирующих компиляторах вообще и LLVM в частности. Смотри все статьи данного цикла: SSA форма Доминирование Неопределённое поведение Циклы CSE В этой статье мы поговорим о классе оптимизаций, которые позволяют избегать лишних вычислений при помощи переиспользования уже имеющихся результатов, а именно -- оптимизации семейства CSE. В разном виде такие оптимизации есть практически во всех известных компиляторах. Когда…
Читать далее » -
Хабрахабр
Как язык Аргентум делает быстрый dynamic_cast и диспетчеризацию методов интерфейсов четырьмя инструкциями процессора
Зачем вообще искать методы в рантайме Полиморфизм - один из трёх столпов объектно-ориентированного программирования - требует, чтобы объекты разных классов по-разному реагировали на одни и те же запросы. Например, вызов метода to_string у объекта Animal и объекта Engine будет приводить к кардинально разным результатам. В общем случае, имея ссылку на объект, мы не знаем точный код который будет реагировать на…
Читать далее » -
Хабрахабр
Внутреннее представление и оптимизации строк в JavaScript-движке V8: «отмываем» строки, «обгоняем» C++
С самого рождения JavaScript в каком-то смысле был языком для манипулирования текстом — от веб-страничек в самом начале до полноценных компиляторов сейчас. Неудивительно, что в современных JS-движках достаточно много сил уделено оптимизации внутреннего представления строк и операций над ними. В этой статье я хочу рассмотреть, как могут быть представлены строки в движке V8. Попытаюсь продемонстрировать их эффект, обогнав C++ в…
Читать далее » -
Хабрахабр
Считаем 2+2×2
Статья-туториал для тех, кто хочет узнать, как из заголовка получается «6» методом рекурсивного спуска. Начнём с самого простого и дойдём до вычисления -1. 82 или около того из строки -2. 1+ . 355 / (cos(pi % 3) + sin(0. 311)). Конечно, этот метод неоднократно описан на Хабре и зачитан каждому айтишному первокурснику. В своей версии я хочу изложить его очень просто и…
Читать далее » -
Хабрахабр
Управление временем жизни объектов: почему это важно и почему для этого пришлось создать новый язык «Аргентум»
В основе любого современного языка программирования лежит какая-то ссылочная модель, описывающая структуры данных которыми будут оперировать приложения. Она определяет как объекты ссылаются друг на друга, в какой момент объект можно удалить, когда и как объект можно изменять. Status Quo Большинство современных языков программирования строятся на одной из трех ссылочных моделей: Первая категория это языки с ручным управлением временем жизни объектов.…
Читать далее » -
Хабрахабр
Реализуем Type inference на Rust — Часть #1: Unification
Если вы пишете свой язык программирования, то вы наверное слышали о type inference. В этом цикле статей, без лишней теории, мы наглядно разберем как это работает и реализуем свой на Rust. Что такое type inference? Type inference в контексте компиляторов - это стадия компиляции, в которой компилятор определяет типы для выражений. Type inference в основном присущ функциональным языкам, но и…
Читать далее » -
Хабрахабр
Немного об оптимизации кода путем «свертки»
Я очень люблю придумывать для компилятора, который сопровождаю, всякие приемы мелкой, или, как я ее называю, «тактической» оптимизации.В компиляторе при генерации кода имеется такой момент, когда большинство команд будущей программы (точнее, компилируемого модуля) уже сгенерировано, но их еще можно менять или выбрасывать, поскольку адреса команд переходов и вызовов еще не вычислены, а окончательный размер кода программы (точнее, этого модуля) еще…
Читать далее » -
Хабрахабр
[Перевод] Rust 1.71.0: C-unwind ABI, атрибуты визуализации отладчика и константная инициализация thread local
Команда Rust рада сообщить о новой версии языка — 1. 71. 0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение. Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1. 71. 0 вам достаточно выполнить команду: rustup update stable Если у вас ещё не установлен rustup, вы можете установить…
Читать далее »