Обновить
73
Роман Щёкин@QtRoS

Разработчик ПО/Teamlead

0,3
Рейтинг
35
Подписчики
Хабр КарьераХабр Эксперты
Отправить сообщение

По ходу чтения статьи кое-что гуглил, и наткнулся на замечательный тред, которому более 17 лет:

https://www.reddit.com/r/programming/comments/8fqgy/cmov_instruction_a_bad_idea_on_outoforder_cpus/

Люди из другого времени обсуждают оптимизации под Пентиумы. Кто-то в комментариях даже предложил использовать два бита под предсказания - несколько я знаю, позднее так действительно стали делать на практике.

О, я пришел в комменты позанудствовать аналогичным образом над похожим местом в статье:

99-й перцентиль достиг 15 секунд. Это половина от установленного тайм‑аута ожидания, то есть каждый сотый запрос ждёт 15 секунд, чтобы его обработали. 

Как практичное упрощение / эвристика сойдёт, но точнее как описано в комментарии выше.

итоговый бинарник vmlinux

Он вроде называется vmlinuz

Мне изначальный смысл понятия вайбкодинг именно таким и запомнился: когда ты на чиле без особого внимания и усилий чатишься с машиной, и она в итоге что-то даже полезное выдает, похожее на решение задачи. А потом любое программирование с ИИ так стали называть.

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

Не совсем понял в чем мотивация менять лицензию на MIT, которая в некотором смысле менее безопасная для сообщества, чем LGPL? 🤔

И второй вопрос: насколько вообще ситуация критична для такого утилитарного проекта, который и так забрали бы молча в свой проект, и никто не узнал бы? Другое дело какая-нибудь БД, которую станет можно выставить наружу как сервис за деньги. Или пока просто на кошках тренируются, прощупывают грани прецедента?

Кстати да, и сюда же вопрос - "должно работать на любом утюге", внедрение C++ никак на это влияет?

Из любопытства уточню: как именно происходит "добавление C++ в проект"? Компилятор меняется и на этом все или есть подводные камни?

И отдельно хочется прокомментировать

но как меняется код! 

Тут не поспоришь - поменялся заметно, только как по мне стало менее понятно. Код на C в общем и целом довольно легко читается, даже когда на нем не пишешь, чего не скажешь про C++. Круто, конечно, что теперь сложнее забыть освободить память, но какой ценой? И глядя на реализацию "guard_by_deleter" я прям поёжился, вспомнилось как для ознакомления открыл книгу Александреску по шаблонам и уже на первой странице ничего не понял 😅 Возможно я неисправимо покорапчен "казуальным" C++ в стиле Qt...

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

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

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

Согласился. Как раз сегодня про Сандуновские бани вспоминал, когда прошел мимо абстрактной вывески "Бани". Кажется, они до сих пользуются популярностью?

@x4team_only поддержу комментарий - основная мысль статьи считывается как "у меня все очень надежно". При этом как минимум в одном компоненте есть признанный индустрией коварный антипаттерн. Коварный потому, что в основном работает, но ломается в граничных случаях из-за отсутствия контроля. Такое очень трудно отлаживать и чинить в час X.

И уже на уровне мнения - я, например, попросту игнорирую все статьи по типу "наша новая замечательная БД не обладает недостатками всех существующих баз данных и не содержит tradeoff'ов", когда вижу под капотом memory mapped files. Сразу можно сделать выводы о том, какая боль в конечном счете ждет пользователей. Сама по себе это отличная технология, но кейсы ее применения в БД eventually неудачные.

За 14 часов включая ночь многое изменилось? 😅 Поберегите себя немного 🙏

А вот эта БД-шка redb - она тоже на memory mapped files, как и lmdb? Судя по беглому поиску - да. Похоже, в текущей архитектуре это слабое звено и потенциально станет точкой отказа. Хороший материал по теме: Are You Sure You Want to Use MMAP in Your Database Management System? Еще в документации SQLite тоже есть по теме, для удобства процитирую:

But there are also disadvantages:

  1. An I/O error on a memory-mapped file cannot be caught and dealt with by SQLite. Instead, the I/O error causes a signal which, if not caught by the application, results in a program crash.

  2. The operating system must have a unified buffer cache in order for the memory-mapped I/O extension to work correctly, especially in situations where two processes are accessing the same database file and one process is using memory-mapped I/O while the other is not. Not all operating systems have a unified buffer cache. In some operating systems that claim to have a unified buffer cache, the implementation is buggy and can lead to corrupt databases.

  3. Performance does not always increase with memory-mapped I/O. In fact, it is possible to construct test cases where performance is reduced by the use of memory-mapped I/O.

  4. Windows is unable to truncate a memory-mapped file. Hence, on Windows, if an operation such as VACUUM or auto_vacuum tries to reduce the size of a memory-mapped database file, the size reduction attempt will silently fail, leaving unused space at the end of the database file. No data is lost due to this problem, and the unused space will be reused again the next time the database grows. However if a version of SQLite prior to 3.7.0 runs PRAGMA integrity_check on such a database, it will (incorrectly) report database corruption due to the unused space at the end. Or if a version of SQLite prior to 3.7.0 writes to the database while it still has unused space at the end, it may make that unused space inaccessible and unavailable for reuse until after the next VACUUM.

Because of the potential disadvantages, memory-mapped I/O is disabled by default

Похоже в redb похожим вопросом уже задавались.

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

Вопрос на "поразмышлять": ОК, LLM с встроенной вероятностью выдать булшит by design всю интеллектуальную работу не заберут. Но когда появится что-то без этого недостатка - каков будет ответ разработчиков (или даже человечества в широком смысле)?..

Кажется, в статье не раскрыт важный технический момент - расширения предполагается писать на TypeScript насколько я помню, а у Вас почти весь код на C#. Как оно взаимодействует с приложением? Или, например, как рисуется UI - с помощью средств на TS или есть возможность получить нечто вроде DC и рисовать напрямую из C# стандартными средствами по типу System.Drawing? Мне кажется это было бы интересно раскрыть в статье или хотя бы комментарии.

Ага, тоже обратил на это внимание. Хорошие художники копируют, великие - воруют (с)

до godbolt

Минутка нудноты: инструмент называется Compiler explorer, а Godbolt это просто фамилия автора (Мэтт Годболт).

Вам нейронка за 3 секунды любую регулярку по вашему запросу напишет.

Нейронка и статью эту написала :) Тем не менее, с принципом согласен - важно знать о наличии возможности или суметь вовремя таковую найти. С другой стороны бывают случаи, когда что-то упало и важна каждая секунда - тогда умение применить команду по памяти трудно переоценить.

Статья полезная, однако местами не дочистили прямой вывод ИИ видимо, стиль резко меняется и точность формулировок падает. Но все равно спасибо!

1
23 ...

Информация

В рейтинге
2 943-й
Откуда
Россия
Работает в
Дата рождения
Зарегистрирован
Активность

Специализация

Бэкенд разработчик, Технический директор
Ведущий