Здравствуйте, Олег К., Вы писали:
ОК>И C++ и современная разработка софта переусложнены.
Принципиально повлиять на это я не могу. Так что из этого тезиса сделать какие-то полезные выводы не представляется возможным.
ОК>Я знаю, что ты знаешь последний стандарт плюсов
Как раз не знаю.
ОК>но разработка софта это не про запихивание последних фич стандарта в код.
Это да.
ОК>Как пример, сравни дизайн своего кода ниже с аналогичным кодом из .NET. В .NET-е и дизайн более высокоуровневый и клиентский код чище.
Не вижу смысла. В .NET-е есть свои возможности, под .NET следовало бы писать в стиле .NET.
В C++ есть свои возможности (и нет многого, что есть в .NET). Мы делали свой дизайн под a) возможности тогдашнего C++ (это был C++14) и b) под свои представления о прекрасном.
ОК>Вообще просто сравни свой стиль программирования со стилем из QT, например.
В Qt свой стиль, который отлично подходит под некоторые типы GUI-приложений.
Однако применительно к другим вещам, типа работы с сетью, могут возникать вопросы.
Но если смотреть
примеры из Qt, то там, в принципе, ведь почти тоже самое:
QHttpServer httpServer;
httpServer.route("/", []() {
return "Hello world";
});
httpServer.route("/query", [] (const QHttpServerRequest &request) {
return host(request) + u"/query/"_s;
});
httpServer.route("/query/", [] (qint32 id, const QHttpServerRequest &request) {
return u"%1/query/%2"_s.arg(host(request)).arg(id);
});
httpServer.route("/query/<arg>/log", [] (qint32 id, const QHttpServerRequest &request) {
return u"%1/query/%2/log"_s.arg(host(request)).arg(id);
});
httpServer.route("/query/<arg>/log/", [] (qint32 id, float threshold,
const QHttpServerRequest &request) {
return u"%1/query/%2/log/%3"_s.arg(host(request)).arg(id).arg(threshold);
});
httpServer.route("/user/", [] (const qint32 id) {
return u"User "_s + QString::number(id);
});
...
Только еще и с дополнительными телодвижениями со стороны пользователя:
auto tcpserver = std::make_unique<QTcpServer>();
if (!tcpserver->listen() || !httpServer.bind(tcpserver.get())) {
qWarning() << QCoreApplication::translate("QHttpServerExample",
"Server failed to listen on a port.");
return -1;
}
quint16 port = tcpserver->serverPort();
tcpserver.release();
Не вижу принципиальных различий с
чем-то вот таким:
// GET request to homepage.
router->http_get( "/", []( auto req, auto ){
return
init_resp( req->create_response() )
.set_body( "GET request to the homepage.")
.done();
} );
// POST request to homepage.
router->http_post( "/", []( auto req, auto ){
return
init_resp( req->create_response() )
.set_body( "POST request to the homepage.\nbody: " + req->body() )
.done();
} );
// GET request with single parameter.
router->http_get( "/single/:param", []( auto req, auto params ){
return
init_resp( req->create_response() )
.set_body(
fmt::format(
RESTINIO_FMT_FORMAT_STRING(
"GET request with single parameter: '{}'" ),
restinio::fmtlib_tools::streamed( params[ "param" ] ) ) )
.done();
} );
ОК>Только не надо говорить, что на современном C++ так не пишут.
На современном C++ иногда пишут так, что лучше бы я этого никогда не видел.
S>>Upd. Нашлось вот это: https://www.govnokod.ru/23374
S>>Но пример взят не с сайта, а из комментария на Хабре, да еще и с измененным пространством имен.
ОК>Этот пример на сайте и был. Вроде внизу были у вас несколько примеров кода для разных библиотек. Посмотри в своей системе контроля версий.
У нас в системе контроля версий сохранилась информация только с 2018-го года. И ничего подобного не видно. Скорее всего подобные сравнения были не на сайте, а в каких-то публикациях. Помнится, мы даже отдельно делали сравнение с тогдашней версией Beast-а.
Посредством web.archive тоже ничего подобного не находится.