Вот уже последние лет 10 одна половина человечества стремительно проваливается в пучину бесполезного повторения одного и того же с каждый раз всё худшими показателями, а вторая половина запрещает абы что.

в github, vscode и windows абсолютно каждое обновление уже несколько лет связано только с "ИИ", при этом ни один реальный показатель этих программ не стал лучше. В каждый поисковой запрос встроен ИИ, а качество поиска в гугле стало хуже (считал ли кто-то, сколько электричества ушло на это?)

Компилятор go переписывают на go, JavaScript существует больше 20 лет, появился TypeScript, но он... Всё также компилируется в обычный JavaScript, даже более объёмный, чем написанный вручную. До сих пор все оптимизации передачи джаваскрипта по сети не пошли дальше удаления пробелов из исходного текста, хотя на поверхности лежит трансляция TypeScript в бинарный JS, который позже напрямую быстрее интерпретируется и тратит в разы меньше сетевого трафика

Недавно я зашёл в браузер хром и решил поискать небольшую фразу в довольно объёмном файле

вот это вот окошко поиска
вот это вот окошко поиска

В файле было 400 упоминаний строки, а поиск вёл себя странно. Если нажать кнопку поиска следующего вхождения, то поиск быстр, а если нажать поиск предыдущего вхождения, то всё зависает на несколько секунд

Проблема очевидна - браузер каждый раз при поиске предыдущего вхождения искал с самого начала файла и считал количество вхождений. В 2025 году. Хотя этот браузер развивается уже десятки лет громадными компаниями

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

как вам идея? Слишком tricky, сделаем неявно и криво
как вам идея? Слишком tricky, сделаем неявно и криво

Честно говоря грустно. Завершу эту статью кодом, который ищет подстроку в строке эффективно в одну сторону и в другую на С++

Дело нехитрое, чтобы найти подстроку в строке в обратную сторону нужно... Искать перевернутую подстроку в перевёрнутой строке. Всё

using pos_t = std::string_view::size_type;
using namespace std::ranges;
using std::string_view;

// ищет первое вхождение needle в text
// возвращает индекс начала этой позиции или npos, если не найдено
pos_t match_position_forward(string_view text, string_view needle) {
  auto [b, e] = search(text, needle);
  if (b == text.end())
    return text.npos;
  return b - text.begin();
}

// ищет последнее вхождение needle в text
// возвращает индекс начала этой позиции или npos, если не найдено
pos_t match_position_backward(string_view text, string_view needle) {
  auto [b, e] = search(text | views::reverse, needle | views::reverse);
  if (b == text.rend())
    return text.npos;
  return e.base() - text.begin();
}