Anonymous
Но уже сделал более грамотно
Alexander "SonnySlave"
Что такое реверанс?первый раз слышу
реверанс == хитрый жест, в данном случае
🐙 Antony
Если вылрожишь код, накидаем годных коментов по оптимизации, использованию C++ и безопасности в принципе
🐙 Antony
https://godbolt.org/g/zdiaSy
Хм, кажется что GCC генерирует чуть более оптимальный код: на инструкцию меньше и регистр xmm2 не используется 3 раза подряд. Если у GCC строчки 5 и 6 местами поменять, то ещё уберётся использование xmm2 два раза подряд (может станет быстрее, стоит перепроверить и зарепортить). Посмори кстати без -ffast-math , там веселее получается
Billy
вопрос офтопик, пошлите меня куда надо, если кто знает. Кто-нибудь Scylla юзает в продакшене? (это бада данных Cassandra inspired написана на С++)
Nikolay
Всем привет. Я плохо читаю референс, или в С++ действительно нет аналогов операций над множествами для хэш-таблиц? На конкретном примере: нужен set_difference и set_intersection для unordered_set.
Nikolay
Нет.
Nikolay
Там предусловие - отсортированность, так что это не сработает.
Anatoly
Всем привет. Я плохо читаю референс, или в С++ действительно нет аналогов операций над множествами для хэш-таблиц? На конкретном примере: нужен set_difference и set_intersection для unordered_set.
видимо, посчитали, что тривиально, со сложностью O(N), хотя надо еще у Антона спросить @antoshkka : unordered_set<int> a = {0, 10, 30}; unordered_set<int> b = { 10, 30, 40}; // intersection unordered_set<int> i; copy_if(a.begin(), a.end(), inserter(i, i.end()), [&b](auto&& e) { return b.find(e) != b.end(); }); // difference unordered_set<int> d; copy_if(a.begin(), a.end(), inserter(d, d.end()), [&i](auto&& e) { return i.find(e) == i.end(); });
MrEarnestWhim
Привет спп комьюнити :D Вопрос такой, есть ли тут человек, который на бусте делал либы .so из под убунты для 3-его питона? Если да, швырнитесь ссылочкой, как это делать, а то я что то застрял =(
MrEarnestWhim
работаю на CLion, если это принесёт какой то смысл
MrEarnestWhim
CMakeLists.txt» cmake_minimum_required(VERSION 3.8) project(test_boost_1) set(CMAKE_CXX_STANDARD 11) find_package(PythonLibs REQUIRED) include_directories(${PYTHON_INCLUDE_DIRS}) find_package(Boost 1.58 COMPONENTS python3) include_directories (${Boost_INCLUDE_DIRS}) set(SOURCE_FILES library.h library.cpp warp.cpp) add_library(test_boost_1 SHARED ${SOURCE_FILES}) target_link_libraries (test_boost_1 boost_python ${PYTHON_LIBRARIES} ${Boost_LIBRARIES} )
Egor
И что конкретно не получается?
Egor
И какую конкретно задачу вы хотите решить?
MrEarnestWhim
/tools/clion-2017.2.1/bin/cmake/bin/cmake --build /home/mew/CLionProjects/test_boost_1/cmake-build-debug --target test_boost_1 -- -j 4 Scanning dependencies of target test_boost_1 [ 33%] Building CXX object CMakeFiles/test_boost_1.dir/library.cpp.o [ 66%] Building CXX object CMakeFiles/test_boost_1.dir/warp.cpp.o [100%] Linking CXX shared library libtest_boost_1.so [100%] Built target test_boost_1 Тут вроде все норм
MrEarnestWhim
/test_boost_1/cmake-build-debug$ python3 Python 3.5.2 (default, Sep 14 2017, 22:51:06) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from libtest_boost_1 import * Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: /usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.58.0: undefined symbol: PyClass_Type
MrEarnestWhim
А уже тут нет =(
MrEarnestWhim
Я так понимаю он компилит на 27 питон
MrEarnestWhim
но как это правится, че то скилла не хватает
MrEarnestWhim
а вот что сказал 27 питон
MrEarnestWhim
/test_boost_1/cmake-build-debug$ python Python 2.7.12 (default, Nov 20 2017, 18:23:56) [GCC 5.4.0 20160609] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from libtest_boost_1 import * Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: ./libtest_boost_1.so: undefined symbol: _ZN4Some17NOT_AN_IDENTIFIERE
Egor
А уберите-ка boost_python из списка target_link_libraries
Egor
По идее всё нужное уже должно быть в ${Boost_LIBRARIES}
MrEarnestWhim
Сейчас попробую
MrEarnestWhim
»> from libtest_boost_1 import * Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: /home/mew/CLionProjects/test_boost_1/cmake-build-debug/libtest_boost_1.so: undefined symbol: _ZNK5boost6python7objects21py_function_impl_base9max_arityEv
Berkus
там в командной строке кстати разрешены undefined symbols в SOшке?
Berkus
подозреваю что оно не всё линкует
MrEarnestWhim
Что то я не понял вас, сложно :D
MrEarnestWhim
я вот смотрю, как народ извращается include_directories(${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS} "/usr/include/python2.7") И меня это наталкивает на мыслю, что можно явно указать какой питон нужен...
Berkus
а что буст питон находит, он должен писать же
MrEarnestWhim
MrEarnestWhim
Ну как минимум он конфиги подтягивает, и компилит, до этого такого небыло и оно рассыпалось
MrEarnestWhim
Но меня почему то терзают сомнения за версию
MrEarnestWhim
Минутку, сейчас попробую
MrEarnestWhim
ImportError: /home/mew/CLionProjects/test_boost_1/cmake-build-debug/libtest_boost_1.so: undefined symbol: _ZN4Some17NOT_AN_IDENTIFIERE
Berkus
что такое Some::NOT_AN_IDENTIFIER и где оно определено?
MrEarnestWhim
Тут CLion решил файлы перечитать, сейчас его отпустит я и покажу :D
MrEarnestWhim
Балуюсь вот по этому гайду https://habrahabr.ru/post/168083/
MrEarnestWhim
Some::Some() : mID(NOT_AN_IDENTIFIER) { }
Egor
А где определяется сам NOT_AN_INDENTIFIER?
Egor
Какой тип, какое значение, в каких файлах это всё?
Egor
http://www.stroustrup.com/bs_faq2.html#in-class У определённой таким образом константы нельзя взять адрес.
Egor
Вот и происходит ошибка линковки.
MrEarnestWhim
.h https://pastebin.com/BfGGdUke .cpp https://pastebin.com/E0d7UUud .cpp https://pastebin.com/kGuvcc4A
MrEarnestWhim
Egor
А можно что то из серии, не делай так, а делай вот так?)
Да, там в конце секции примерчик есть: надо в ровно одном .cpp файле добавить определение этой константы. const int Some::NOT_AN_IDENTIFIER;
Egor
Значение не указываем, так как уже указано в заголовке
MrEarnestWhim
Хм, сейчас попробую еще по страдать
MrEarnestWhim
>>> from libtest_boost_1 import * Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: /home/mew/CLionProjects/test_boost_1/cmake-build-debug/libtest_boost_1.so: undefined symbol: _ZN5boost6python6detail11init_moduleER11PyModuleDefPFvvE
Egor
Жаль. Есть подозрение, что почему-то не подгружается динамическая библиотека с бустом.
MrEarnestWhim
ставил так: sudo apt-get install libboost-python-dev
MrEarnestWhim
Так как не разобрался, как скомпилить того монстра на 600 метров
Egor
Я бы ещё поставил libboost-python3 на всякий случай
MrEarnestWhim
E: Не удалось найти пакет libboost-python3
MrEarnestWhim
сейчас сёрчем пробегусь
MrEarnestWhim
посмотрю что там вообще есть
MrEarnestWhim
kill it with fire D:
Все прямо таки плохо?
kitsu
да не, на самом деле не то, чтобы очень
MrEarnestWhim
серч сказал что есть такое: libboost-python-dev/xenial,now 1.58.0.1ubuntu1 amd64 [установлен] Boost.Python Library development files (default version) libboost-python1.58-dev/xenial-updates,now 1.58.0+dfsg-5ubuntu3.1 amd64 [установлен, автоматически] Boost.Python Library development files libboost-python1.58.0/xenial-updates,now 1.58.0+dfsg-5ubuntu3.1 amd64 [установлен, автоматически] Boost.Python Library
MrEarnestWhim
да не, на самом деле не то, чтобы очень
мб есть что по интереснее?
Berkus
его надо в цпп задавать
Berkus
в хедере получится вафля, это же статическое поле
Berkus
сначала буст потом питон?
MrEarnestWhim
Сейчас посмотрю
kitsu
Если именно плюсы<>питон - то лучше ничего и не сышешь Если есть возможность запилить сишные биндинги - лучше ctags/cffi Если потенциально расширять на что-то большее яб порекомендовал взглянуть на SWIG, он впринципе и проще для базовых фич языка. Единственное надо будет немного пошаманить со сборкой всего этого
Berkus
Сейчас посмотрю
и надо найти как включается флаг чтобы SOшка обязательно при линковке разрезолвила все символы
Berkus
ldd на нее напусти например для начала
Alex
Поставил наконец-то TinyDnn через Cmake (также поменял INCLUDE) и принялся за написание кода, Но возникает ошибка:
Alex
Alex
Как избавиться от этой ошибки?