Меня часто спрашивают, почему я не люблю, когда С используется для крупных проектов?
Пожалуй, я нашел ответ.
Привожу пример кода на С++ 11, который запрашивает данные из Mongo DB:
mongocxx::driver::client c{“mongo://example.com:27017”};А теперь тоже самое на С:
auto col = c[“testdb”][“testcol”];
for (auto doc : col.find({}) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
bson_error_t error;
bson_oid_t oid;
bson_t query;
mongoc_init ();
bson_init (&query);
mongoc_client_t* client = mongoc_client_new (connection_string);
if (!client) {
printf("Can't connect to MongoDB database with credentials %s", connection_string);
return false;
}
mongoc_collection_t* collection = mongoc_client_get_collection (client, mongodb_database_name, collection_name);
mongoc_cursor_t* cursor = mongoc_collection_find (
collection,
MONGOC_QUERY_NONE, 0, 0, 0, &query, NULL, / Fields, NULL for all. /
NULL
); / Read Prefs, NULL for default /
const bson_t *doc = nullptr;
while (mongoc_cursor_next (cursor, &doc)) {
char *str = bson_as_json (doc, NULL);
json_document = std::string(str);
//fprintf (stdout, "%s\n", str);
bson_free (str);
}
mongoc_cursor_destroy (cursor); mongoc_collection_destroy (collection);
mongoc_client_destroy (client);
mongoc_cleanup ();
Это все здорово ровно до тех пор, пока в c++ проекте не начнешь искать, откуда баг прилез. Если в C все линейно и просто, то в с++ как зароешься в темплейты с перегруженными функциями так и не вылезешь.
ReplyDeleteПочему го популярен - простой и более менее современный.
Первый прнцип С - если можешь не писать на С - не пиши :) Go - С 21го века и покрывает 90% задач как "старого" С, так и современных Python/Perl/Ruby. И это при безопасной модели без управления памятью напрямую и очень лаконичном синтаксисе. Не язык - сказка.
DeleteА проблемы с пониманием С++ - это от ООП головного мозга архитекторов. Тут можно на любом ООП языке устроить ад, но язык не виноватый =)
в си можно (и нужно) всё контролировать самому. Это хорошо для мест, где нужна максимальная оптимизация, в ущерб скорости разработки. Впрочем, в кривых руках получаем продукт многократно медленнее и хуже чем на всяких java/python/go
ReplyDeleteЭто мягко говоря далеко от истины, все то что позволяет С, дает и С++ ибо является его чистым надмножеством и полностью обратно совместим :)
DeleteНо при этом первое правило C++ не писать на нём код как на С))
Delete