Это мой персональный дневник. Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Надо бы добавить мой strlen во «Флиппер»

Можно подумать, что я забросил возню с «Флиппером», так как какое-то время писал об этом часто, а сейчас поутих. На самом деле я всё жду, когда разработчики прошивки вмержат мой коммит для поддержки Юникода, плюс потихоньку вожусь со своей векторной реализацией функции для определения длины строки в кодировке UTF-8.

До недавнего времени я её надеялся ускорить, поэтому пытался вносить какие-то мелкие улучшения, но все они никакого эффекта не дали. Зато при аккуратном тестировании нашёл ошибку, — неправильно задал граничное условие в векторизованном куске. Хорошо, что проверил. В блоге у меня уже исправленная версия.

Будем считать, что с этим вопросом я закончил, хочу теперь попробовать добавить этот код в прошивку «Флиппера». Остались сделать два шага.

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

Второй шаг для меня сложнее. У меня уже есть выписанная прошивка «Флиппера», в которой торчит непринятый коммит. Я никогда раньше не создавал на «Гитхабе» два разных запроса в рамках одного чужого проекта, не знаю как это делается. Если кто-то умеет, расскажите в комментариях.

4 комментария
Оскар Шарипов 2 мес

Для второго шага. Создай у себя ветку fast-strlen, закомить изменения туда и сделай PR из bolknote/fast-strlen вместо bolknote/dev.

Евгений Степанищев 2 мес

О, спасибо!

Шурик Бабаев 2 мес

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

Евгений Степанищев 2 мес

Не, код изолирован один от другого, они независимые. Первая часть — поддержка Юникода, вот эта — ускорение конкретной функции.

Меня смущает, что в оригинальную-то ветку я свой коммит уже влил. Надо до точки вливания другую ветку создать что ли?

Шурик Бабаев 2 мес

Надо до точки вливания другую ветку создать что ли?

В оригинальную в своём форке? Да, тогда отдельную ветку перед этим.

Евгений Степанищев 2 мес

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

Шурик Бабаев 2 мес

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

Ага. Иногда проще для каждой фичи делать отдельную ветку, которую мержить, когда ревью пройден.

Евгений Степанищев 2 мес

Да я что-то не подумал, что могу начать пилить другую фичу, ещё не закончив предыдущую.