Ouroboros-Logger 0.5.0
Восемь языков: Python, JavaScript/TypeScript, C, C++, Elixir, Go, Java, C#.
Что нового
Java — обмазка через try/catch/finally. Разборщик доставать неоткуда не надо: это компилятор, который уже лежит внутри любого JDK (javax.tools вместе с com.sun.source). Ввоза помощника не вставляется вовсе, ни одна врезка не содержит перевода строки — номера строк и след вызовов у необработанного исключения совпадают построчно.
C# — то же устройство. Roslyn берётся из самого пакета .NET SDK: путь выясняется из dotnet --list-sdks, качать нечего. Пять видов частей не обмазываются, потому что обмазанный вариант не собрался бы (yield, возврат по ссылке, указатели, ссылочные структуры, свойства с телом-выражением), и про каждую обмазка возвращает предупреждение с причиной.
Починена старая поломка в JavaScript. Обмазка портила файлы, где есть знак вне базовой плоскости: babel считает смещения в единицах UTF-16, питон режет по кодовым точкам, и один смайлик в комментарии делал обмазанный файл несобираемым. Молча, с сообщением об успехе. Было во всех прежних выпусках с обработчиком JavaScript.
Две проверки схемы записи ничего не проверяли. Проверка про опознаватели вызовов пересобирала программу между прогонами и тем сбивала условие, которое проверяла. Проверки на монотонные часы не было вовсе ни у одного языка — теперь есть.
Цена, снятая одним прогоном на всех восьми
| язык | добавка на вызов | байт на вызов |
|---|---|---|
| C# | 15,6 мкс | 251,4 |
| C | 19,9 мкс | 248,4 |
| JavaScript | 20,4 мкс | 236,5 |
| Java | 20,9 мкс | 251,4 |
| C++ | 22,2 мкс | 269,4 |
| Go | 28,9 мкс | 243,4 |
| Python | 58,2 мкс | 252,5 |
| Elixir | ~190 мкс | 254,4 |
Состояние
991 проверка, покрытие с ветвями 99,59 %. Набор равенства — 151 программа на восьми языках: каждая гоняется дважды, без обмазки и с обмазкой, и три исхода сверяются побайтово.