FastNetMon

пятница, 22 января 2016 г.

C vs C++ 11 в одной странице

Меня часто спрашивают, почему  я не люблю, когда С используется для крупных проектов?

Пожалуй, я нашел ответ.

Привожу пример кода на С++ 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 (); 

5 комментариев :

  1. Это все здорово ровно до тех пор, пока в c++ проекте не начнешь искать, откуда баг прилез. Если в C все линейно и просто, то в с++ как зароешься в темплейты с перегруженными функциями так и не вылезешь.

    Почему го популярен - простой и более менее современный.

    ОтветитьУдалить
    Ответы
    1. Первый прнцип С - если можешь не писать на С - не пиши :) Go - С 21го века и покрывает 90% задач как "старого" С, так и современных Python/Perl/Ruby. И это при безопасной модели без управления памятью напрямую и очень лаконичном синтаксисе. Не язык - сказка.

      А проблемы с пониманием С++ - это от ООП головного мозга архитекторов. Тут можно на любом ООП языке устроить ад, но язык не виноватый =)

      Удалить
  2. в си можно (и нужно) всё контролировать самому. Это хорошо для мест, где нужна максимальная оптимизация, в ущерб скорости разработки. Впрочем, в кривых руках получаем продукт многократно медленнее и хуже чем на всяких java/python/go

    ОтветитьУдалить
    Ответы
    1. Это мягко говоря далеко от истины, все то что позволяет С, дает и С++ ибо является его чистым надмножеством и полностью обратно совместим :)

      Удалить
    2. Но при этом первое правило C++ не писать на нём код как на С))

      Удалить

Примечание. Отправлять комментарии могут только участники этого блога.