Anonymous
Но уже сделал более грамотно
Anonymous
Vladimir
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();
});
Berkus
Nikolay
видимо, посчитали, что тривиально, со сложностью 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();
});
Да, спасибо, у меня похожая реализация, хотелось удостовериться в том, что нет стандартного решения)
Berkus
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
Сейчас попробую
Berkus
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
Ну как минимум он конфиги подтягивает, и компилит, до этого такого небыло и оно рассыпалось
Berkus
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
Значение не указываем, так как уже указано в заголовке
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
посмотрю что там вообще есть
kitsu
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
Berkus
сначала буст потом питон?
MrEarnestWhim
Сейчас посмотрю
kitsu
Если именно плюсы<>питон - то лучше ничего и не сышешь
Если есть возможность запилить сишные биндинги - лучше ctags/cffi
Если потенциально расширять на что-то большее яб порекомендовал взглянуть на SWIG, он впринципе и проще для базовых фич языка. Единственное надо будет немного пошаманить со сборкой всего этого
Berkus
Сейчас посмотрю
и надо найти как включается флаг чтобы SOшка обязательно при линковке разрезолвила все символы
Berkus
ldd на нее напусти например для начала
Alex
Поставил наконец-то TinyDnn через Cmake (также поменял INCLUDE) и принялся за написание кода, Но возникает ошибка:
Alex
Alex
Как избавиться от этой ошибки?