Comments 18
Чтобы многопоточно было, и с общим кэшем (как в Firebird).
Очень не хватает.
Читаю с крайним интересом — в голове держу тот факт что рано или поздно придется лезть в потроха постгреса — расширяю кругозор так сказать. Предельно ясное изложение + пачка полезных ссылок — рецепт хорошей статьи выдержан идеально! )
Грустно, конечно, видеть что очень много усилий разработчиков в таких проектах тратятся на то, что в С++ компилятор сделал бы сам.
Например, большую часть кода из патча можно было бы заменить на std::vector<>
и пару шаблонных функций. При этом получили бы type safety.
Но понятно, что никто никогда не станет переписывать такие проекты на другом языке.
есть кое-что в этом направлении
Довольно неожиданно, но интересно.
Для этого нужна определенная смелость.
Вы не подскажете, это некая официальная инициатива, или просто пет-проджект энтузиаста без какой либо поддержки сообщества?
есть интересное обсуждение в рассылке pgsql-general. там можно узнать мнение некоторых разработчиков по этому вопросу.
в общем, насколько я понял, полноценно поддерживать такие начинания они не торопятся.
В том то и вопрос, что сообщество не будет переписывать по сути весь проект, профитов недостаточно, а багов можно таких наделать, что огого.
При этом одиночные энтузиасты будут потом мучительно мержить свой форк с мастером.
Так что без поддержки это просто не выгорит и в лучшем случае просто не будет получать обновления из основного репозитория.
Вы имеете ввиду простоту маршалинга данных между другим языком и С?
Конечно, Python или JS не знают о std::string
, никто не спорит.
Тут никто не отрицает низкоуровневые плюсы языка С.
Однако, выставить интерфейс для биндинга можно и на С++ (никто не мешает в публичном API принимать const char*
).
Например, в ICU примерно так и сделано: внешний API по сути на С, а внутри он оперирует С++ объектами.
В случае С++ вы можете быть поставлены перед выбором: использовать std::vector или писать свой код на malloc + realloc.
Если не хочется использовать Boost\STL — так не используйте, никто же не заставляет.
В случае С вы даже выбора не имеете, ни шаблонов ни деструкторов (RAII), ни move семантики.
Так что разработчик вынужден тратить кучу времени на колупание с указателями, удалением и прочей рутиной.
Основной принцип С++: Вы не платите за то, что не используете.
Про «Вы не платите за то, что не используете» смотрите мой пост.
Хочу также подчеркнуть что мое субъективное мнение — это мое субъективное мнение. Я ни в коем случае никому его не навязываю.
Примеры реальных патчей в PostgreSQL: часть 2 из N