LINUX.ORG.RU

Поломана совместимость с С в С++11?

 


2

2
cat test.cpp 
#include <stdio.h>

int main(int argc, char** argv)
{
	auto int i = 2;
	printf("Hello!\n");
	return 0;
}
 gcc test.cpp.
/a.out
Hello!
 g++ test.cpp
 ./a.out 
Hello!
 g++ --std=c++11 test.cpp 
test.cpp: В функции «int main(int, char**)»:
test.cpp:5:11: ошибка: два или более типа в декларации имени «i»

Ваши мнения по этому поводу.

Ответ на: комментарий от anonymous

Ты тупой и ничтожный. Нельзя вот так вот просто взять и перевести с Си на C++. Можно только переписать с нуля.

anonymous
()
Ответ на: комментарий от anonymous

Тут анон с вашей стороны пишет, что можно. Правда не сразу, а постепенно. Говорит, что так делал.

Со своей стороны, скажу, что многие разработчики PostgreSQL не знают С++ и у них есть более интересные планы по изучению нового.

anonymous
()
Ответ на: комментарий от wota

есть большой проект на С, который появился с >=2000 года?

qemu, Subversion.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от RR42

Поток не должен никогда бесконечно крутиться в холостую. Всегда нужно применять ожидание события.

Спинлок? Не, не слышал.

baverman ★★★
()
Ответ на: комментарий от baverman

Так говно же. Никто уже с нитками в небиблиотечном софте так не работает. Пишутся библиотеки, логика работает на более высоком уровне с сообщениями/STM и т.д. и т.п.

anonymous
()
Ответ на: комментарий от anonymous

Пишутся библиотеки, логика работает на более высоком уровне с сообщениями/STM и т.д. и т.п.

Да чо уж там, весь нормальный софт давно на хацкеле пишется, он вообще автоматом все раскидывает по процам.

baverman ★★★
()
Ответ на: комментарий от anonymous

А вот то, что я перечислил - правда.

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

Много где шаренная память + синхронизация, тупо быстрее высокоуровневых костылей.

baverman ★★★
()
Последнее исправление: baverman (всего исправлений: 1)
Ответ на: комментарий от baverman

Не, в старых проектах есть еще. Но все переводят. Даже отсталый С++, в новом стандарте имеет более высокоуровневые концепции, чем обычные треды - std::async и std::future.

anonymous
()
Ответ на: комментарий от baverman

Почему потоконебезопасного? Еще раз, когда у тебя есть async и future тебе не нужно руками разруливать рейсы. Достаточно просто логически декомпозировать свой код согласно принципам конкурентного программирования.

anonymous
()
Ответ на: комментарий от anonymous

Еще раз, когда у тебя есть pthread_create и whatever для хранения результатов тебе не нужно руками разруливать рейсы. Достаточно просто логически декомпозировать свой код согласно принципам конкурентного программирования.

baverman ★★★
()
Ответ на: комментарий от imtw

Впрочем, в C тоже есть #pragma omp parallel for, но потокобезопасность она не гарантирует, отчего весь задний двор нашего ВМК завален отстреленными ногами.

imtw
()
Ответ на: комментарий от baverman

Если у тебя pthread_create, то ты уже по уши в ручном управлении нитками. И это уже не конкурентное программирование, а т.н. «многопоточное».

anonymous
()
Ответ на: комментарий от anonymous

И это уже не конкурентное программирование, а т.н. «многопоточное».

Анон, заканчивай курить эту дрянь. По факту, async дает запустить *любой* код, и чтобы там не думали эльфы, 95% будет напарываться на рейсы.

baverman ★★★
()
Ответ на: комментарий от anonymous

Примерчики бы...

Верблюдов должно быть два, не находишь? Причем верблюдатее, обычно, тот, кто пищит о «новых технологиях»™.

baverman ★★★
()
Ответ на: комментарий от baverman

Ты про идиотов? Это их проблемы. Отбирайте людей лучше.

Но вообще-то ошибиться тут сложнее, чем при ручном разруливании.

anonymous
()
Ответ на: комментарий от baverman

Подменяешь понятия. Тебе о том, что вместо разруливания руками, ты просто декомпозируешь свою задачу, а ты об ошибках...

anonymous
()
Ответ на: комментарий от anonymous

Но вообще-то ошибиться тут сложнее, чем при ручном разруливании.

Это всего лишь сахарок над джойном и возвращением результатов. От рейсов он помогает чуть менее чем никак.

baverman ★★★
()
Ответ на: комментарий от anonymous

ты просто декомпозируешь свою задачу

Та же самая декомпозиция препрекрасно ляжет на plain threads. Улавливаешь?

baverman ★★★
()
Ответ на: комментарий от baverman

Плохо ляжет. Ты в итоге сначала сделаешь свои async и future, а потом на них же решишь задачу. Так чего ты споришь-то?

anonymous
()
Ответ на: комментарий от anonymous

У тебя Си головного мозга...

Бугога. Тебе про Фому, а ты про Ерему. Я не против сахара. Перечитай ветку еще раз.

baverman ★★★
()
Ответ на: комментарий от baverman

Еще раз, когда у тебя есть pthread_create и whatever для хранения результатов тебе не нужно руками разруливать рейсы

struct thread_pool
{
    thread_pool( size_t count ) {
        for( size_t i = 0 ; i < count ; ++i )
            workers_.push_back( thread( worker( *this ) ) );
    }

    ~thread_pool( void ) {
        condition_.notify_all();
        
        for( auto& it : workers_ )
            it.join();
    }
                                
    void enqueue( int socket ) {
        queue_mutex_.lock();
        sockets_.push( skt );
        queue_mutex_.unlock();

        condition_.notify_one();
    }                                
        
    condition_variable  condition_;
    mutex               queue_mutex_;
    queue<int>          sockets_;
    vector<thread>      workers_;
};

можно «правильный» аналог на С?

wota ★★
()
Ответ на: комментарий от baverman

Это всего лишь сахарок над джойном и возвращением результатов. От рейсов он помогает чуть менее чем никак.

А не надо общих данных заводить.

tailgunner ★★★★★
()
Ответ на: комментарий от baverman

Золотые слова.

здорово, мне все интересней увидеть ваш аналог на С кода для пула тредов

wota ★★
()
Ответ на: комментарий от baverman

а причем тут С++ vs C, мне просто удобней на первом писать, а вот ты рассуждаешь про спинлоки, «не нужно руками разруливать рейсы» и т.п.,хотелось бы посмотреть как выглядит твой код

wota ★★
()
Ответ на: комментарий от wota

Убери явный unlock и используй unique_lock.

anonymous
()
Ответ на: комментарий от wota

Если есть возможность, стараюсь всё писать на питоне, нет — java. Поэтому ваши «высокоуровневые стандартные средства C++», выглядят так же смешно как и тебе кажутся сишные.

    queue_mutex_.lock();
    sockets_.push( skt );
    queue_mutex_.unlock();

В жабском коде не будет синхронизации, будет просто использована потокобезопасная очередь (скорее всего с lockless имплементацией внутре). Да и вообще, ThreadPool там уже есть.

baverman ★★★
()
Ответ на: комментарий от anonymous

Анон должен отвечать за слова другого анона.

baverman ★★★
()
Ответ на: комментарий от baverman

thread_pool'ов для С++ тоже достаточно. А вместо

    queue_mutex_.lock();
    sockets_.push( skt );
    queue_mutex_.unlock();
нужно так писать:
    unique_lock<mutex> lock(queue_mutex);
    sockets_.push( skt );

anonymous
()
Ответ на: комментарий от baverman

Если есть возможность, стараюсь всё писать на питоне, нет — java. Поэтому ваши «высокоуровневые стандартные средства C++», выглядят так же смешно как и тебе кажутся сишные.

вообще-то на С этот код выглядит почти 1:1, если что, поэтому фраза «ваши «высокоуровневые стандартные средства C++»» выдает в вас дилетанта

wota ★★
()
Ответ на: комментарий от anonymous

нужно так писать:

так и пишу, но для одной строки делаю исключение, чтоб не заворачивать все в отдельный блок

wota ★★
()
Ответ на: комментарий от baverman

ОМГ. Питон и ява в отношении потоков работают на том же уровне, что и С++. Ладно бы clojure в пример привел...

anonymous
()
Ответ на: комментарий от wota

вообще-то на С этот код выглядит почти 1:1

На любом языке с явными потоками этот код будет выглядеть 1:1.

Больше чем уверен, если бы эта портянка появилась, ты бы пожаловался на ее невозможную длину, хе-хе.

baverman ★★★
()
Ответ на: комментарий от baverman

На любом языке с явными потоками этот код будет выглядеть 1:1.

поздно отмазываться

Больше чем уверен, если бы эта портянка появилась, ты бы пожаловался на ее невозможную длину, хе-хе.

нет, т.к. мне было интересно совсем другое, кстати длина бы там была небольшой - я писал такое на С

wota ★★
()
Последнее исправление: wota (всего исправлений: 1)
Ответ на: комментарий от anonymous

Питон и ява в отношении потоков работают на том же уровне, что и С++.

ThreadPool из коробки есть? И что-то нехорошее я слышал про потокобезопасность коллекций из std::

И в java есть *ключевое слово* synchronized. Поэтому, да, будут повыше.

baverman ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.