Старую собаку новым трюкам не обучишь, вот и я взялся за старое. Blurhash — это компактный способ представления размытой превьюшки изображения в виде ASCII-строки. Разработан финской компанией Wolt (аналог Delivery Club). Давно хотелось внедрить такое к себе в API, чтобы любой клиент мог более плавно и изящно делать загрузку контент на своем сайте. Но сколько я на него смотрел — всегда не давала покоя скорость работы, уж больно медленно и «в лоб» он был написан. Но вот время пришло наконец-то разобраться, что же он так медленно работает.
Рубрика «compilers»
Я ускорил генерацию blurhash в 3̶6̶ 8̶7̶ 128 раз
2024-10-11 в 21:44, admin, рубрики: blurhash, clang, compilers, gcc, pillow, simdЧто будет, если скрестить конструирование компиляторов, DDD и Clean Architecture? Опыт HydraScript
2024-09-03 в 14:01, admin, рубрики: clean architecture, compiler design, compilers, csharp, DDD, design patterns, dotnet, github, golang, open source, ruvds_статьи, solid, TypeScriptВ этой статье я расскажу о двухлетнем эксперименте, проводимом над моим пет-проектом, интерпретатором ЯП HydraScript. Почему к разработке из области системного программирования были применены промышленные практики, и зачем конструированию компиляторов нужен Domain Driver Design с чистой архитектурой?
Как поделить не деля или оптимизация деления компиляторам(и)
2024-08-02 в 16:13, admin, рубрики: compilers, division, optimisation, optimizationЕсли вы никогда не пробовали смотреть как код на C++ разворачивается компилятором в код Assembly – вас ждёт много сюрпризов, причём, не нужно смотреть какой-то замудренный исходный код полный templates или других сложных конструкций: рассмотрите следующий snippet:
uint8_t div10(uint8_t x)
{
return x/10;
}
Почему WebAssembly плохо годится для Java
2023-08-27 в 12:07, admin, рубрики: compilers, java, jvm, webassemblyКак разработчик TeaVMЧитать полностью »
C++23 — финал, C++26 — начало
2023-02-20 в 9:00, admin, рубрики: C, c++, c++23, c++26, c23, compilers, exception, exception handling, iso, ranges, stacktrace, standard library, Блог компании Яндекс, Компиляторы, Программирование, С++, с++23, с++26, с23С момента моей прошлой публикации состоялось уже две встречи международного комитета по стандартизации C++.
Комитет занимался полировкой C++23:
static operator[]
;static constexpr
вconstexpr
-функциях;- безопасный range-based for;
- взаимодействие
std::print
с другими консольными выводами; - монадический интерфейс для
std::expected
; static_assert(false)
и прочее.
И прорабатывал новые фичи C++26:
std::get
иstd::tuple_size
для агрегатов;#embed
;- получение
std::stacktrace
из исключений; - stackful-корутины.
Самый быстрый компилятор aka compiler-benchmark
2020-11-13 в 11:24, admin, рубрики: compilers, D, dlang, Компиляторы, ПрограммированиеОт переводчика: все началось с топика на форуме D.
После оценки скорости компиляции D по сравнению с другими языками мне было интересно, существует ли какой-нибудь язык, который компилируется в нативный код почти так же быстро или быстрее, чем D, за исключением C?
Если да, то скорее всего, он должен использовать бэкэнд, отличный от LLVM.
Я думаю, что Jai способен на это, но он еще не вышел в релиз.
Бенчмарки скорости компиляции различных комбинаций языков и компиляторов. Поддерживаемые языки:
Компиляторы в нативный код
Парсеры Пратта для чайников
2020-03-27 в 12:16, admin, рубрики: AST, compilers, Go, golang, parser, Компиляторы, ПрограммированиеРекурсивный спуск работает идеально, когда вы можете принимать решение относительно разбираемого куска кода с помощью текущего контекста и токена.
Картину портят выражения: постфиксные, инфиксные и прочие. Проблема: вы не можете понять, какого типа выражение вы обрабатываете до тех пор, пока не разберёте его первую половину. Зачастую для вас также важны приоритет операции и её ассоциативность, чтобы построенное AST имело правильную структуру.
После хаков для того, чтобы успешно парсить инфиксные выражения в рекурсивном спуске, через код становится трудно разглядеть разбираемую парсером грамматику.
В этой статье мы напишем парсер для диалекта Go, особенности которого мы рассмотрим чуть ниже. Как вы сможете убедиться, алгоритм Пратта решает большинство наших проблем.
Внутренности Go: оборачиваем переменные цикла в замыкании
2019-09-26 в 10:01, admin, рубрики: assembly, AST, compilers, Go, programming languages, Блог компании Badoo, высокая производительность, замыкания, Программирование, указатели
Сегодня я решил перевести для вас небольшую статью о внутренностях реализации так называемых замыканий или closures. В дополнение вы узнаете о том, как Go пытается автоматически определить, нужно ли использовать указатель/ссылку или значение в разных случаях. Понимание этих вещей позволит избежать ошибок. Да и просто все эти внутренности чертовски интересны, как мне кажется!
А еще я хотел бы пригласить вас на Golang Conf 2019, которая пройдет 7 октября в Москве. Я член программного комитета конференции, и мы с коллегами выбрали много не менее хардкорных и очень, очень интересных докладов. То, что я люблю!
Под катом передаю слово автору.
Дефективное встраивание функций в Go
2019-02-05 в 12:30, admin, рубрики: compilers, Go, golang, open source, optimizations, performance, высокая производительность, Компиляторы, системное программирование
Эквивалентен ли по производительности код, представленный ниже?
// (A). Вызов HasPrefix будет встроен.
return strings.HasPrefix(s, "#")
// (B). Ручное встраивание тела HasPrefix.
return len(s) >= len("#") && s[:len("#")] == "#"
Ответ: нет.
За подробностями и объяснениями прошу под кат.
Компилятор Go: язык описания правил SSA оптимизаций
2018-06-30 в 14:09, admin, рубрики: compilers, dancing-gopher, Go, golang, open source, optimization, s-expressions, ssa, Компиляторы, Программирование, системное программирование
В компиляторе gc
для описания Static Single Assignment (SSA) правил оптимизаций используется специальный Лисп-подобный предметно-ориентированный язык (DSL).
Предлагаю разобрать основные элементы этого языка, его особенности и ограничения.
В качестве упражнения, добавим в Go компилятор генерацию инструкции, которую он раньше не генерировал, оптимизируя выражение a*b+c
.
Это первая статья из серии про внутренности Go SSA compiler backend, поэтому помимо обзора самого DSL описания правил мы рассмотрим связанные компоненты, чтобы создать необходимую базу для нашей следующей сессии.