Задать вопрос
  • Почему timeout неправильно завершает скрипт?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Timeout шлёт сигнал sigint если приложение не завершилось за определенное время.

    Нет, по умолчанию он шлёт SIGTERM. Чтобы он слал SIGINT воспользуйтесь ключом --signal=INT (см).

    Почему после окончания таймаута, утилита завершается, но без надписи "session saved"?

    Потому что не тот сигнал?
    Ответ написан
    Комментировать
  • Как работает определение дружественной функции внутри класса?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Перегрузка большинства операторов может быть произведена любым из двух способов: внешней функцией или методом класса. Лишь некоторые операторы невозможно перегрузить в виде внешней функции, их перегрузка осуществляется только в виде метода класса.
    Иными словами, все операторы можно перегрузить в виде метода и только некоторые - в виде внешней функции.
    Разница между перегрузкой в виде внешней функции и перегрузкой в виде метода состоит в том, что метод является частью интерфейса класса и имеет доступ к его непубличным объявлениям, а внешняя функция частью интерфейса не является и доступ имеет только к публичным объявлениям класса.

    Дружественность к перегрузке операторов не имеет никакого отношения. Перегрузка оператора в виде внешней функции и добавление дружественности для этой перегрузки выглядит как признак незнания стандарта в плане перегрузки операторов. Потому что в этом случае перегрузку нужно проводить в виде метода.
    Исключением являться может только определение перегрузки оператора по месту объявления дружественности. Я уже объяснял почему это может быть удобно.
    Такая перегрузка становится только ADL-доступной и не может быть вызвана через полную квалификацию имени.

    Как я понимаю, эта техника позволяет писать перегрузку оператора внутри класса, как будто это член класса, а не глобальная бинарная дружественная функция.

    Это не так. У тебя неверное понимание. Наверное ты уже подзабыл мое прошлое объяснение по этому вопросу. Я рекомендую повторно обратиться к тому вопросу и ответу.
    friend std::ostream& operator<<(std::ostream& os, const Object & r) {/**/ return os;}

    Тут operator << все так же остается глобальной функцией, определенной в том же пространстве имен, где определен и тип Object, но не в пространстве имен типа Object. Но, будучи определенным по месту объявления дружественности, оператор стал только ADL-доступным. Обращение к этому оператору может быть найдено только тогда, когда в конструкции std::cout << obj; этот obj имеет тип Object.

    Но почему такая же логика не работает с обычной функцией?

    Минимально, потому что операторы никак нельзя сравнивать ни с глобальными функциями, ни с методами. У операторов своя отдельная методика вызова, отличная от функций.
    friend void fOUT (void) { }, опять же, является определением по месту объявления дружественности и доступна только через ADL. Но у нее нет аргументов чтобы ADL смог найти ее при обращении. Поэтому такая конструкция является бесполезной.
    Ответ написан
    Комментировать
  • Можете объяснить асинхронность в JS?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Да, всё верно. Операции попадают в Event Loop и оттуда они берутся на обработку.
    Здесь можно более подробно почитать https://blog.sessionstack.com/how-javascript-works...
    Ответ написан
    Комментировать
  • Можете объяснить асинхронность в JS?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    WebAPI браузера поедоставляет вещи типа setTimeout, или async await, коллбек-функции которые закидываются в очередь, а оттуда в порядке своей приоритетности попадают в стек по очереди. Промисы обрабатываются в приоритетном порядке.
    Обычные callback-функции не попадают в очередь, они вызываются в общем стеке. Кроме промисов в приоритетную очередь микрозадач функция может быть добавлена через queueMicrotask(function).
    А что если "асинхронные" операции занимают много памяти и выполняются долго. Если они выполняются в том же стеке, то они также перекроют доступ ко всем остальным операциям?
    Асинхронные операции выполняются отдельными служебными потоками параллельно с основным стеком. Поэтому сами они не могут заблокировать основной стек. По завершению/таймеру асинхронная операция кладёт функцию в очередь микро- или макрозадач.
    Ответ написан
    Комментировать
  • Как создать SQL запрос для получения суммы?

    iMedved2009
    @iMedved2009
    Не люблю людей
    select iduser, sum(prod.price) from sales join prod on sales.idprod = prod.idprod group by iduser;
    Ответ написан
    Комментировать
  • Как подключить Boost к Qt Creator?

    @JustSokol Автор вопроса
    newby programmer
    В общем все решилось тем что надо было правильно записать все в файл проекта (*.pro) и нажать qmake.
    При этом хоть изначальная библиотека (asio) основана только на header`ах и имплементациях, но использует другие библиотеки Boost и соответственно подключает/включает их при подключении соответствующего .hpp .
    То есть необходимо было собрать предварительно весь буст своим компилятором в либы, либо скачать уже готовые под винду с офф сайта .
    В итоге в файл .pro добавляется
    INCLUDEPATH += C:/WORK/boost_1_59_0
    LIBS += "-LC:\WORK\boost_1_59_0\lib64-msvc-12.0"

    жмется qmake и дальше все собирается.

    ПС: получилось что сам спросил - сам ответил.
    но надеюсь зато в следующий раз кто-то быстро найдет в поисковике проблему и увидит решение.
    Ответ написан
    Комментировать
  • Надо ли хранить pqxx::connection?

    terrier
    @terrier
    Создавать соединения постоянно, конечно, не надо. Пока вам достаточно одного соединения с базой можно хранить объект соединения. Для нескольких соединений нужен connection pool. Про его создание в документации libpqxx пишут, что
    spoiler

    If you want to have multiple concurrent transactions, let them work on different connections. An easy way to do this is to set up a connection pool: create a bunch of lazyconnection objects, all initialized with the same connection string. Connections of this type will set themselves up only when they are actually used, so there is no big cost to creating more than you're going to use.

    В реальном продакшне для таких целей используют pgbouncer
    Ответ написан
    2 комментария
  • Какую IDE лучше использовать для C (Си) и C++ под windows 8.1 64 bit?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Имхо есть лишь 3 адекватных ide для среднестатичтического разработчика (то есть не учитываем адептов vim/emacs - это отдельный человеческий подвид/высшие существа )
    Visual Studio Community
    Qt Creator - https://www.qt.io/qt-features-libraries-apis-tools...
    CLion https://www.jetbrains.com/clion/

    Можно также навернуть плагинов на VSCode и будет более-менее удобно, но это уже не для начинающих.
    Ответ написан
  • Как запустить Linux на Forth-процессоре?

    xarek1986
    @xarek1986
    Инженер
    Мне кажется, перед тем как покупать данный процессор, необходимо было себе задать один маленький, но очень важный вопрос: "Зачем Это мне?". И уже после полного и развёрнутого ответа на него... я думаю, после этого вы бы подобные вопросы не задовали
    Ответ написан
    Комментировать
  • Forth-процессоры программируются на Форт?

    @smartly
    Близко, но всё таки язык форт больше похож на макроассемблер для форт-процессора.
    Ответ написан
    Комментировать
  • Какими инструментами вы пользуетесь при разработке на C++?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    1) IDE (QtCretor) -- без комментариев
    2) gcc -- компилятор, gdb -- отладчик; иногда clang/lldb
    3) git и tig (текстовый интерфейс для гита)
    4) valgrind -- в основном профилирование
    5) meld -- дифы
    6) vim -- когда надо что-то мелкое поредактировать на сервере
    7) браузер -- без комметариев
    8) Ну разные консольные утилитки по необходимости, grep, sed, nm...
    9) cppcheck -- статический анализ
    10) Иногда кланговые санитайзеры
    Ответ написан
    Комментировать