
Александр
09.01.2018
12:48:57
Я просто не понял, к чему сообщение Антона
Ну ясно, что после 17 готовят 20-й

Ignat
09.01.2018
12:49:59
Или 21-й

Google

Ignat
09.01.2018
12:50:02
Или как получится

Berkus
09.01.2018
12:50:03

Александр
09.01.2018
12:50:38
его один человек в силе будет охватить целиком?
Вообще, время "охренеть каких сложных фич" в плюсах давно прошло. Сейчас многие нововведения относительно просты для понимания и вводятся для удобства разработчика. Жесть была, когда люди с нуля шаблоны изучали, например. Со всеми тонкостями, конечно

Серж
09.01.2018
12:58:30
если не разбираться что там под капотом происходит то да, но почему тогда просто не взять джаву?

Berkus
09.01.2018
12:59:04

Vernat
09.01.2018
13:21:10

Artem
09.01.2018
14:22:09
Подскажите как можно ускорить работу регулярных выражений, читаю файл размером 1 мегабайт в строку, и по регулярке ищу урлы, ищет 40 секунд 300 совпадений, хотя на питоне делал подобное за 3 секунды 1000000 строк чекал, куда копать или может есть феншуй в плюсах какой нибудь?

Ignat
09.01.2018
14:23:31
Маловато входных данных
Код на плюсах и питоне, например, явно не был бы лишним

Дед Пегас
09.01.2018
14:24:26
Да, код в студию.
Минимально воспроизводимый пример)

Pavel
09.01.2018
14:24:57
взять pcre, а лучше не юзать регулярки. для такой то задачи.

Google

Artem
09.01.2018
14:25:18
Ща секунду
вот метод
auto OpenFile(string file) {
ifstream fileobj;
fileobj.open(file);
if (fileobj.is_open())
{
cout << "Файл открыт!" << endl;
regex pattern("((\\w+\\.)?\\w+\\.\\w{2,4})");
stringstream stringdata;
stringdata << fileobj.rdbuf();
string strline = stringdata.str();
auto words_begin = sregex_iterator(strline.begin(), strline.end(), pattern);
auto words_end = sregex_iterator();
for (sregex_iterator i = words_begin; i != words_end; ++i) {
smatch match = *i;
string match_str = match.str();
UrlVector.insert(UrlVector.end(),match_str);
}
sort(UrlVector.begin(), UrlVector.end());
UrlVector.resize(unique(UrlVector.begin(), UrlVector.end()) - UrlVector.begin());
cout << (int)UrlVector.size() << endl;
}
else
{
cout << "Файл не открыт!" << endl;
}
fileobj.close();
}
сиоуты для теста в работе их нет

Egor
09.01.2018
14:27:59
Лучше на ideone.com минимальный и самодостаточный пример (который запускается и видно, что он матчит).

Artem
09.01.2018
14:28:17
ок я только учусь не знаю как лучше
ща сделаю

Egor
09.01.2018
14:29:29
И код на питоне тоже куда-нибудь на ideone.com в виде отдельной программы, которая что-то читает и матчит.

Artem
09.01.2018
14:32:50
вот https://ideone.com/2lFbkc
только там для работы файл нужен test.txt
желательно строк 500 и что бы там ссылок было хотя бы 300
был вы очень рад понять как за несколько секунд обрабоать например миллион строк

Egor
09.01.2018
14:35:26
А что за компилятор, с какими флагами компилируете?

Artem
09.01.2018
14:36:31
я еще не сильгно соображаю, но это вижуал обычный 2017.3 с++17 жму кнопку отладить или собрать

Alexander
09.01.2018
14:36:33

Artem
09.01.2018
14:36:37
стандартный компил собирает

Alexander
09.01.2018
14:36:41
вот правильный вопрос
и я рекомендую обратиться в @supapro

Artem
09.01.2018
14:37:02
и релиз и дебаг тормозят почти одинакого

Google

Alexander
09.01.2018
14:37:22

Pavel
09.01.2018
14:37:32
выкинуть регексп — правильный ответ

Artem
09.01.2018
14:37:44
а как ссылки пасрить тогда

Pavel
09.01.2018
14:37:46
ну или хотябы выкинуть std::regex. или его уже починили?

Alexander
09.01.2018
14:38:37
ты про скорость работы?

Pavel
09.01.2018
14:38:54
это же он называется просто страшно, а на самом деле тяп ляп и получится уже гораздо быстрее

Constantine
09.01.2018
14:41:59

Artem
09.01.2018
14:43:34
про кнечный автомат не понял но регексп не бесконечный)
просто он долгий

Ignat
09.01.2018
14:43:57
ну там в бусте есть какие-то модные компайл-тайм почти-регулярки
небось перформансные!

Pavel
09.01.2018
14:44:22

Ignat
09.01.2018
14:44:38
(это не руководство к действию, а совет посмотреть нестандартные реализации)

Pavel
09.01.2018
14:44:38
а с++ не компаил тайм? (не стащщили из буста?)

Egor
09.01.2018
14:44:46
А ответы у питона и плюсов одинаковые?
Можете ещё код на питоне показать?

Artem
09.01.2018
14:45:31
питон вообще все делает за три секунды с 1кк строк по жтой же регулярке, и причем я ему загоняю инфу построчно

Google

Artem
09.01.2018
14:45:42
если построчно это делать в ++ то вообще хана
может и пол часа выполнять

Egor
09.01.2018
14:46:37
И код — ..?

Artem
09.01.2018
14:47:18
def get_links(file):
lists = []
data = open(file, 'r').read()
pattern = '(?:[\w\.]+)\.(?:[a-z]{2,6}\.?)'
result = re.findall(pattern, data)
for url in list(set(result)):
lists.append("https://" + url)
lists.append("http://" + url)
print(f'Всего {len(lists)} элементов')
return lists
вот так питон делает на лету
а с++ подыхает на регулярке в чем прикол неопнятно

Simon
09.01.2018
14:49:03
в том, что ты не понимаешь, что делаешь

Artem
09.01.2018
14:49:48
я создают массив в питоне вектор в ++ читаю файл прогоняю через регулярку и добавляю в вектор а в питоне в массив
все одинакого

Egor
09.01.2018
14:50:30
Предлагаю переместиться в #supapro

Artem
09.01.2018
14:51:06
ладно, спс

Ignat
09.01.2018
14:51:46
Зачем писать «#supapro», если можно «@supapro.cxx»?

Egor
09.01.2018
14:52:16
Не помню, как пишется полное название чата

Ignat
09.01.2018
14:53:11
Даже нет ведь, просто @supapro

Alexander
09.01.2018
14:54:23

Berkus
09.01.2018
15:02:36
std::regex выкинь, попробуй pcrepp какой-нибудь напрямую

Alexander
09.01.2018
15:06:43
кстати как вариант попробовать заюзать libc++ - мб у них под капотом что-то более шустрое

Ignat
09.01.2018
15:06:59
очевидно слишком сложный совет

Alexander
09.01.2018
15:07:10

Antony
09.01.2018
15:18:24

Google

Egor
09.01.2018
15:18:45
Реальный юзкейс: найти URL в файле (эта регулярка - префикс более сложной). Вероятно, regex_search в гцц и вижаке работает за квадрат в лучшем случае. В clang, как говорят в соседнем чате, ситуация сильно лучше.

Alexander
09.01.2018
15:20:19

Antony
09.01.2018
15:26:10
Похоже на багу

Artem
09.01.2018
15:30:58
Подвожу итог с холиваром по длительной работе регулярке, запустил тот же код на Маке в Силионе с компилом Сланг - результат в раз 30 лучше что меня полностью удовлетворяет

Antony
09.01.2018
15:32:14
У GCC похоже вот на эту багу: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79539
Но я на всякий пожарный заведу отдельный тикет

Berkus
09.01.2018
15:33:04

Artem
09.01.2018
15:36:18
Быстрее питона пока не встречал обработку регулярок но про руби тоже хорошо отзываются, но для виндового приложения clang вполне справляется и со стандартной либой regex

Olesya
09.01.2018
15:40:04
попробуйте re2, он быстрее pcre https://github.com/google/re2

Vsevolod
09.01.2018
15:40:53
Hyperscan быстрее всего
А c++ regexp - какаха
В libc++ и libstdc++, по крайней мере

Olesya
09.01.2018
15:41:47
у re2 ещё api удобное + там можно больше регэксп запихнуть, чем в pcre

Ignat
09.01.2018
15:46:20

Antony
09.01.2018
15:50:40

Pirate
09.01.2018
16:03:10
Попробовал Qt Creator, понравился, спасибо за совет
Там и MSVC Build Tools 2013-2017 в комплекте идут, btw