LINUX.ORG.RU

Сообщения RazrFalcon

 

Объясните сишную магию v2

Форум — Development

В продолжение темы: Объясните сишную магию

Ковыряю сорцы Skia и наткнулся на такой забавный ужас (ссылка):

int fLastMoveToIndex = 5; // любое число
fLastMoveToIndex ^= ~fLastMoveToIndex >> (8 * sizeof(fLastMoveToIndex) - 1);

Экспериментально удалось выяснить, что данный код меняет знак и отнимает 1 только если число положительное. Как он это делает - я даже знать не хочу.

Вопрос: что мешало написать банальный if, или хотя бы оставить комментарий? Типичное сишное какерство?

PS: производительно данного куска кода на погоду не влияет.

 ,

RazrFalcon ()

В питон завозят паттерн-матчинг

Форум — Development

Кто бы мог подумать, ещё лет 5 назад, что питон получит типизацию и функциональщину. Но нет:

def is_tuple(node: Node) -> bool:
    match node:
        case Node(children=[LParen(), RParen()]):
            return True
        case Node(children=[Leaf(value="("), Node(), Leaf(value=")")]):
            return True
        case _:
            return False

История показывает, что участь любого популярного ЯП - С++ ужас.

https://www.python.org/dev/peps/pep-0622/

 

RazrFalcon ()

Как вам новый дизайн GitHub?

Форум — Talks

Спустя 1000 лет, GitHub решил обновить свой дизайн. Я, в целом, позитивно воспринимаю изменения, но это полный ужас. С моим ОКР, сам факт того, что теперь всё съехало влево - уже приговор. Да и редизайн в целом ограничился увеличением скругления углов и заменой всех цветов на более блёклые. Теперь даже GitLab выглядит не так ужасно…

И это сразу после новости о новом HIG для macOS, к которому тоже тонна вопросов.

 , , ,

RazrFalcon ()

Chrome и магия LTO?

Форум — Desktop

Решил посмотреть что из себя представляет ungoogled-chromium, поэтому собрал его из сорцов на генте. 2.5 часа с lto…

Чего я не ожидал, так это прироста «производительности». В бенче https://browserbench.org/Speedometer2.0/ :

  • google-chrome-bin - 135.5
  • ungoogled-chromium - 152.4

Почти 10% прирост на ровно месте. В обоих тестах использовался чистый профиль.

Есть объяснение такому поведению?

 ,

RazrFalcon ()

Ищу self-hosted галерею с упором на теги

Форум — General

Нужна self-hosted галерея/каталогизатор для фото/видео с упором на теги.

Нужно:

  • Поиск по нескольким тегам сразу + возможность исключений.
  • У тегов могут быть типы/категории/цветовое различие. Теги должны отображаться рядом с каждым фото.
  • Нужно некое подобие «ленты». Например при сортировке по дате.
  • Должно выглядеть вебдванольно.

Самое близкое из того что нашёл - это Lychee. Но там теги в зачаточном варианте.

PS: booru не подходит тоже, ибо привет из 90-х

 ,

RazrFalcon ()

Rust, 5-й год подряд, стал самым любимым языком по версии StackOverflow

Форум — Talks

 

RazrFalcon ()

70% багов в Chrome из-за неверной работы с памятью

Форум — Talks

https://www.chromium.org/Home/chromium-security/memory-safety

Не прошло и года с последних откровений: Про статическую типизацию и безопасный доступ к памяти, как гугл пришёл к тем же выводам, что и MS.

Что на это скажут приверженцы «они просто не умеют писать на C/C++», «в C++ тоже есть умные указатели, зачем вам этот раст» и «понанимали дебилов»?

Из интересного, они рассматривают вариант использования своей/патченой std и бан сырых указателей на уровне компилятора.

 , , ,

RazrFalcon ()

Как вы пишете асинхронный, интерактивный код?

Форум — Development

Имеется привычная ситуация: UI, в котором пользователь бездумно жмакает кнопочки, которые в свою очередь запускают асинхронные/параллельные задачи. Это может быть как и GUI, так и сайт, посылающий запросы серверу.

А теперь начинается интересное:

  1. Любое действие должно быть отменяемым (не убивание потока, а штатное завершение). Большинство async кода что я видел, не поддерживает такую простую фичу. Видимо вебсерверам это не интересно. Даже в Go, с его горутинами, это достигается велосипедами, а не средствами языка.
  2. Любое действие может быть продолжено. Это немного похоже на предыдущую задачу, но с тем нюансом, что у нас задача представляет собой не loop {}, а цепочку действий.
  3. Задача может общаться с родителем. Запрашивать новые данные, подтверждать действия.
  4. Задача может использовать глобальный контекст. То есть живёт не сама по себе.
  5. Задача может запускать свои асинхронные задачи и на неё распространяются те же требования, что и выше.
  6. Это не должно превратиться в callback hell.

Язык роли не играет. Производительность тоже. Интересует сам алгоритм.

 

RazrFalcon ()

Про непрерывный флуд

Форум — Linux-org-ru

Интересует мнение модераторов о братьях наших меньших, ака о фанбоях винды и мака. На лоре есть человек пять с клинической токсичностью, которые тупо флудят. Игнор на них хорошо работает, так как им и так никто не отвечает (видимо из-за всё того же игнора). Но почему их просто не банят? Пользы от них всё равно никакой.

 ,

RazrFalcon ()

Повод забанить метапрог?

Форум — Linux-org-ru

https://www.linux.org.ru/forum/talks/15707915

У пациента явное отклонение от нормы. А теперь ещё и про вирус начал шизу писать, на пару со Stanson. Напильника забанили, теперь очередь этих.

 ,

RazrFalcon ()

Bosque - очередной убийца C++ от MS

Форум — Development

https://github.com/microsoft/BosqueLanguage

Основные фичи:

  • GC в виде счетчика ссылок, ага
  • immutable
  • нет циклов, только функциональщина
  • дженерики, в том числе variadic
  • sum types/adt
  • синтаксически, смесь C++, Rust, Swift и OCaml, но страшнее
  • optional - часть языка, ака оператор ?
  • рекурсия должна быть явно объявлена через ключевое слово recursive
  • трансплитер написан на typescript и выплёвывает C++ (но это не точно)
  • они ещё используют Z3, но не ясно как именно

Пример:

entity Person {
    field name: String; 
}

function foo(arg?: {f: Int, n?: String} | String | Person): String {
    if(arg == none) {
        return "Blank";
    }
    else {
        return switch(arg) {
            type Record => arg.n ?| "Blank"
            type String => arg
            type Person => arg.name
        };
    }
}

foo()                    //"Blank"
foo(none)                //Type error - none not allowed
foo("Bob")               //Bob
foo(Person@{name="Bob"}) //Bob
foo({f=5})               //"Blank"

foo({f=1, n="Bob"})      //"Bob"
foo({g=1, n="Bob"})      //Type error - Missing f property

 

RazrFalcon ()

Ищу формат для древовидных/иерархических конфигов

Форум — Development

Собственно понадобились древовидных/иерархических конфиги для написания людьми. Такой себе DSL. Человек пишет декларативный конфиг - прога его обрабатывает и выдаёт результат.

Требования:

  1. Минимальное количество синтаксического шума.
  2. Коментарии.
  3. Многострочный текст.
  4. Иерархичность.
  5. Популярный формат, чтобы либа была для любого языка.

Что имеем:

  • YAML

    Самый очевидный выбор. Но провозившись с ним неделю - я возненавидел его. Он до безобразия переусложнён и не очевиден. Я до сих пор не могу предугадать как мой конфиг будет распарсен - это провал. Я даже пытался написать простенький парсер, чтобы лучше понять его. Но только больше запутался.

  • XML

    Тот случай, когда дедушка XML подходит лучше всего. Но хотелось бы что-то более простое.

  • JSON

    Не подходит по всем параметрам. Не для людей.

  • JSON5

    Ближе всего к идеалу, но малораспространён.

  • TOML

    Всем хорош, но не древовидный (да, если костыль, но это тихий ужас).

Есть идеи?

PS: шутки про s-expressions не интересны

 , ,

RazrFalcon ()

Как найти медленные функции после инлайна?

Форум — Development

В очередной раз столкнулся со старой проблемой: valgrind позволяет найти медленные функции до тех пор, пока они не инлайнятся. Можно это как-то обойти? У меня пару десятков функций, которые в релизе превращаются в одну. Как найти причину тормозов - не ясно.

Может есть какой-то профилировщик, который выплюнет asm и покажет какие куски дольше всего выполнялись? Типа flame graph.

PS: интересует софт только под линь.

 , ,

RazrFalcon ()

ttf-parser 0.5 — новая библиотека для работы с TrueType шрифтами

Новости — Open Source
Группа Open Source

ttf-parser — это библиотека для разбора TrueType/OpenType шрифтов. В новой версии появилась полноценная поддержка переменных шрифтов (variable fonts) и C API, вследствие чего я решил прорекламировать её на лоре.

До недавнего времени, если была необходимость работы с TrueType шрифтами, было ровно два варианта: FreeType и stb_truetype. Первый является огромным комбайном, второй поддерживает довольно небольшое количество функций.

ttf-parser находится где-то посредине. Он поддерживает все те же TrueType таблицы (формат TrueType состоит из множества отдельных бинарных таблиц) что и FreeType, но не занимается отрисовкой самих глифов.

При этом, ttf-parser содержит множество других значительных отличий:

  1. ttf-parser написан на Rust без использования unsafe. FreeType и stb_truetype написаны на C.
  2. ttf-parser является единственной безопасной (memory-safe) реализацией. Чтение произвольной памяти невозможно. Во FreeType постоянно исправляют уязвимости, а stb_truetype в принципе не предназначен для чтения произвольных шрифтов.
  3. ttf-parser является единственной thread-safe реализацией. Все методы парсинга константны. Единственным исключением является задание координат для переменных шрифтов, но эта функция reentrant. FreeType в принципе однопоточный. stb_truetype - reentrant (можно использовать отдельные копии в разных потоках, но не одну из множества).
  4. ttf-parser является единственной реализацией не использующей аллокации в «куче». Это позволяет ускорить разбор и избежать проблем при OOM.
  5. Также, почти все арифметические операции и приведение числовых типов проверяются (в том числе статически).
  6. В самом худшем случае библиотека может бросить исключение. При этом в C API исключения будут перехвачены и функция вернёт ошибку, но не упадёт.

И несмотря на все гарантии безопасности, ttf-parser также является и самой быстрой реализацией. Например разбор CFF2 в 3.5 раза быстрее чем в FreeType. Разбор glyf тем временем на 10% медленнее чем в stb_truetype, но это из-за того, что он не поддерживает переменные шрифты, для реализации которых требуется хранить доп. информацию. Больше подробностей в README.

>>> Подробности

 ,

RazrFalcon ()

Apple начинает переписывать сишку на Rust

Форум — Talks

Не успел Dropbox порадовать переписыванием своего движка на Rust, как появились новые вакансии у Apple:

https://jobs.apple.com/en-us/details/200144575/software-engineer

Following a very successful first foray into Rust we are migrating an established codebase from C to Rust, and building new functionality primarily in Rust.

Перемещено a1batross из development

 ,

RazrFalcon ()

Как отключить Fn+F12?

Форум — Desktop

При нажатии темнеет экран, но через пару сек возвращается в норму. Не пойму что он пытается сделать и как это отключить.

Бесит потому, что Fn+F11 у меня увеличивает громкость и я часто промахиваюсь.

 

RazrFalcon ()

Как заставить работать clang-tidy в Qt Creator на Gentoo?

Форум — Development

Как я понял, QtC работает только со специально собранным clang. Иначе получаем:

:-1: error: Failed to analyze "test.cpp": Clang-Tidy and Clazy finished with exit code: 1.

Есть какие-то методы решения этого бага? Ничего толкового/рабочего не нагуглил.

PS: dev-qt/qt-creator-4.10.1, sys-devel/clang-8.0.1/9.0.1

PSS: почему qtc вечно такой бородатой версии в генту?

 ,

RazrFalcon ()

Ищу напарника со знанием современного веба

Форум — Development

Собственно есть идея написать статическое веб-приложение для разбора определенного бинарного формата. Такой себе аналог Kaitai Struct IDE, но для одного формата.

Слева у нас HexView, справа - TreeView. Проблема в том, что TreeView может содержать под 100к записей, соответственно нужна реализация, способная это переварить.

Как я это вижу:

  • Read-only HexView. Нужно отображать не больше пары мегабайт. Но нужна возможность выделять блоки байт (как в Kaitai Struct IDE).
  • TreeView, способный или переваривать 100500 записей, или способный подгружать/парсить дочерние элементы при необходимости (даже лучше).
  • react + material-ui PWA на github pages с TypeScript для парсера бинарника.

Соответственно, кто-то пишет морду, а я пишу разбор. Всё это публикуется на github под MIT.

Если кому-то интересно - пишите сюда. Сам я такое не потяну, так как в вебе полный 0 и времени учить всю эту кухню пока нет.

Не в jobs, ибо на интерес.

 , ,

RazrFalcon ()

Там опять Go ругают

Форум — Development

сабж

Статья вызвала бурю эмоций на HN.

Сама статья мне очень понравилась. Очень красочно описывает моё отношение к Go.

This fake “simplicity” runs deep in the Go ecosystem. Rust has the opposite problem - things look scary at first, but it’s for a good reason. The problems tackled have inherent complexity, and it takes some effort to model them appropriately.

Ну или как я люблю говорить: Go примитивный, а не простой.

PS: Работа со строками в Go напомнила недавний холивар (C рулит и педалит.). @grem’у понравится. Путь к файлу содержит недопустимые символы? Та забей!

@WitcherGeralt

 , ,

RazrFalcon ()

Как сгенерировать доку для одного файла?

Форум — Development

Есть скрипт на питоне состоящий из одного файла. Пытаюсь сгененировать для него доку (html страничку), но sphinx брыкается и не хочет ничего делать. Провозился уже больше часа - толку 0. Уже ошибок 10 разных видел. Что не так с этим питоном?

Даже doxygen более вменяемый. И уже тем более cargo doc --open.

 

RazrFalcon ()

RSS подписка на новые темы