TGViewer
Никита Федькин - мысли, заметки, анонсы Никита Федькин - мысли, заметки, анонсы @nixel2007_thoughts · 2.88K subscribers
Post #538 4.25K
Пулл-реквест Димы навёл меня на размышления. Почему вообще пулл-реквесты могут висеть в непринятом состоянии годами?
Немного подумав, я придумал два ответа.

1. Проблема применимости. Иногда контрибьюторы приносят новую классную фичу, которая совершенно не ложится в текущую архитектуру проекта. Так, например, было с честной поддержкой препроцессора в BSL Parser.

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

А делать-то с этим всем что?

Фича в вакууме - крутая и нужная. Именно так надо парсить исходные файлы при наличии препроцессора.

Но в BSL Language Server не заложен концепт значений символов препроцессора. И даже если заложить, все равно на клиент-серверных, например, модулях получается ситуация, что на выходе из одного и того же исходника разные деревья разбора. Как с этим работать в BSL Language Server? Диагностики ещё, допустим, можно как-то смержить. А остальные фичи? Сворачивание блоков? Переход к определению функции? А какой, если по препроцессору их несколько, но в разных контекстах (и даже разных файлах)? А базу всех методов как строить во всем этом великолепии?

Очень сложные вопросы, ответа на которые у меня до сих пор нет. Так и висит этот замечательный пулл-реквест в репе парсера. Уже... Четвёртый год?

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

Такие вот грустные мысли.

Но надеюсь, это хоть немного объяснит то, что происходит с опенсорс проектами и вашими (очень нужными!) пулл-реквестами.

P.S. А ещё мейнтейнер может не заметить или забить на проект. Такое тоже бывает, к сожалению, да.
  • 👍 27
  • 😢 4
  • ❤ 1
  • 😨 1
More from @nixel2007_thoughts
  1. Sep 28, 2026Вторую картинку в посте потерял. Вот так менять/задавать пароль.
  2. Sep 28, 2026Если вы можете прочесть этот пост, то вероятно, ваш телефон находится, кхм-кхм, за границе…
  3. Sep 28, 2026video post
  4. Sep 28, 2026#анонс Полишинеля Я разрываюсь между двумя фразами на анонс, пускай будут обе: 1. Мы строи…
  5. Sep 27, 2026Внимательный разбор телеметрии показал, что основной причиной падений хаба последних дней…
  6. Sep 21, 2026Совместно с @EvilBeaver, @Segate и @nivanchenko готовим новый хаб оскрипта к релизу. Проек…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →