Олололол, товарищ тут сделал простенький бенчмарк языков в тегах.
https://plus.google.com/1129120514579983...
Угадайте, кто соснул: плюсы, питон или хаскель?..
Вкратце, для неосиливших, суть такова: пишется наивный спелчекер на 20 строк. Слова из /usr/share/dict/words загружаются в какую-где-стандартную структуру данных, и затем для каждого слова из входного файла проводится проверка: есть ли это слово в словаре. Если нет, слово печатается на stdout.
Сразу же, исходники:
Питон: http://pastebin.com/ZMvMjA0i
Хаскель: http://pastebin.com/Y9N0Lye0
Плюсы: http://pastebin.com/2DhEvnde
Входные данные: /usr/share/dict/words дефолтный убунтовый, почти 100к слов; test.txt на входе собран из 100к строчек корпуса OANC:
% wc -l test.txt
100000 test.txt
Результаты:
Python: 1.30s
C++: 2.22s
Haskell: 4.71s
tl;dr плюсы соснули.
Мои догадки? STL-ный аллокатор тормозит, STL-ные структуры данных одна хуже другой, iostreams неюзабелен; сосаторство во все поля. Сиплюсплюс говно.
ulidtko
14.02.2012 02:03 уважением
Recommended by:
@eurekafag,
@asmer
Do you really want to delete ?
1M строчек:
% time python spell.py test.txt > /dev/null
python spell.py test.txt > /dev/null 12,23s user 0,57s system 98% cpu 12,949 total
% time ./spell test.txt > /dev/null
./spell test.txt > /dev/null 23,54s user 0,40s system 99% cpu 24,030 total
Питон: 12.23s
Плюсы: 23.54s
Нетрудно видеть, что в этом конкретном бенчмарке плюсы отсасывают по константе со значением примерно 2.
Кстати, косвенно здесь соснули и no-C-блядки. Посколько CPython же.
Алсо, дедфудик, я иду спать с мокреньким предвкушением твоего завтрашнего бугурта в этом треде :3
:-* :-* :-*
std::getline реквестирую вместо говноитератора с форматированием.
На pypy надо попробовать. А еще лучше на ironpython :]
STL всегда был тормознутым и ненужным говном. А вообще удивлен.
Дайте словарь на котором производился тест. C#-гей попробует выебать гвидон.
олсо, требую включения голых сей и луа (и раз вместо cpython юзают всякие подъёбки, то для Lua взять байкод LuaJIT) в тесты.
Ну наебош ня сях, я на сисярпе
Чувак охуенен сравнивать хеш-таблицу с set<string> на деревьях.
Ну и Data.Set туда же.
написали бы на чистых плюсах. а по факту, в питоне много алгоритмов реализовано в си, в том числе и сравнение строк
плюс сравнение неточное, в с++ используется хеш, а в питоне обычный list
Наоборот же. set<> это красно-черные деревья, а хеш — это unordered_set<>.
list != set
Я про плюсцы.
теоретически поиск в хешах должен быть быстрее поиска в списке.
Блядь, ну где там список?
> d = set(w.strip() for w in fd.readlines())
> set
Хеш-таблица же.
а, проглядел.
А что питонсорс хочет на входе f = open(sys.argv[1]) ? Какой блять файл то? Он наркоман? Там же файл со словарем указывается
Ну блин сисярпогеи соснулей. Результаты тестов:
C# — 18359 мс.
Python — 7983 мс.
Словарь — 2891909 элементов.
покажи код и словарь
Быдлокод http://pastebin.com/qNcceBTB
Словарь http://rghost.ru/36511111
а так? http://paste.org.ru/?ht69ws
Мать моя женщина :3
Это что за колдунство?
так чо там по скорости?
Необработанное исключение там.
Необработанное исключение: System.IndexOutOfRangeException: Индекс находился вне
границ массива.
в cleantest.Program.Main(String[] args) в c:\users\codemonkey\documents\visual s
tudio 2010\Projects\cleantest\cleantest\Program.cs:строка 19
ну два параметра на вход, файл с текстом и словарь
YOU ARE WIZARD! 8650 мс.
Поясни по хардкору за свое колдунство позязя.
ну епт, linq
> List<string> dict
В этом треде слишком много упоротых.
Ты имел ввиду поехавших?
я там кажется фигню скопипастил — попробуй так http://paste.org.ru/?lageg8
Я имел в виду тех, кто сравнивает хештаблицу на одном языке с деревьями на другом и бинарным поиском — на третьем.
Выиграл 80 мс с результатом 8570 мс.
Гуру, дай свой жид, хочу в личечку поговорить. Алсо с небольшой оптимизацией C# разорвал очко пистону с 3714 мс.
вот окончательный вариант (в тех вариантах неправильно слова из строк выделялись) — http://paste.org.ru/?0fs8oh — тут вроде четко.
Спермобляди даже простейшую программу поиска слов написать не могут, по десять раз переписывают, бгггггг.
зато у нее все красноглазые программы отсосали
Ну тогда окончательный результат 8621 мс. Погляди выше, можно 3714 мс. Слова искать в этом случае НИНУЖНО. Загляни в словарик. А вообще да. Дай свой жид или какой нибудь контакт вообще.
Мне почему-то кажется, что она сама у явы отсосёт только в путь, несмотря на всю её красноглазость.
у явы?? Не смеши пожалуйста. На яве тоже могу написать. Ты видел сравнения явы с сисярпом? Джависты требуют поебаться с ключами запуска JVM и сделать сотню "прогревочных" запусков тестов, и типа на стопервом у них получается в три раза медленее.
Ну тогда надо на яве запилить.
Я не видел, я предполагаю.
s/новость/срач/
Не благодари.
Так а я о чем. Зато честное сравнение.
Во-во. Наверное, еще и под надзором трех вебкамер.
> STL-ный аллокатор тормозит, STL-ные структуры данных одна хуже другой, iostreams неюзабелен
кэп? #oifios
> Сиплюсплюс говно
So what? Альтернатив то всё равно нету, так что учись уже дзену аруслана ^.^
Плюсы отсосали у C#
как-то совсем жирно
исходники выше в треде — и на плюсах и на сисярпе — можешь проверить, оптимизировать, дрочить секретные ключи компиляции, переписать — может поможет
да я не смотрел даже, наверняка опять какой-то синтетический тест а-ля "ороро пердон быстрее", кастую в тред @Cthulhu ;-)
STL всегда был тормознутым и ненужным говном. Ни разу не удивлен, учитесь уже писать нормально.
+1, а лучше fread
ороро, ну это вообще пушка, нет слов.
закруглится штоле
std::getline не подходит, нужен именно токенизатор.
здесь сравниваются те структуры данных, которые с минимальными усилиями доступны для выполнения этой задачи в языке. Назовёшь что-то лучше, чем std::set?
> написали бы на чистых плюсах
што. На них и написали, читай внимательнее.
не верно, в питоне set
> word = yoba.ReadLine();
Пиздец. Сишарпомудаки не могут даже задание до конца осознать. ТОКЕНИЗАЦИЯ ГДЕ БЛЯДЬ
ололололол, хорошо подмечено ;3
как мне собрать и протестировать твой код?
конструктивные замечания будут? или ты только кукарекать умеешь?
олололололол
> искусственный тест
о чём ты, лолка
> альтернатив нету
обожаю этот claim. Для тебя — нету, пиши на говне. А я поищу.
в моно что ли?
да, студии у меня нет
gmcs source.cs
[ERROR] FATAL UNHANDLED EXCEPTION: System.IndexOutOfRangeException: Array index is out of range.
at cleantest.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
код с этой ссылки http://paste.org.ru/?0fs8oh
ну епт, два параметра на вход, текст и словарь
да, уже вчитался
не работает
% ./spell.exe test.txt /usr/share/dict/words | head
april
21
1998
1
2
joe
18
98
marion
gill’s
% grep -i april /usr/share/dict/words
April
April's
Aprils
и даже несмотря на то, что в коде ошибки и он работает некорректно (при такой-то простой задаче да после стольких-то исправлений), время под mono не превосходит время «нативного кода»:
.d. % time ./spell.exe test.txt /usr/share/dict/words > /dev/null
./spell.exe test.txt /usr/share/dict/words > /dev/null 2,28s user 0,07s system 101% cpu 2,318 total
.d. /tmp/test ................................................................................ .............................................................. max
... % time ./spell test.txt /usr/share/dict/words > /dev/null
./spell test.txt /usr/share/dict/words > /dev/null 2,25s user 0,03s system 99% cpu 2,290 total
C++: 2.25s
C#: 2.28s
var dict = File.ReadAllLines(args[1]).Select(d => d.ToLower());
вот так работает.
?
мне ещё хотелось посмотреть на то, как плюсовый тест будет тормозить под студийным компилятором. Есть у кого-нибудь студия и cpython на одной машине? @DZhon?
ну ищи, скажеш как найдёшь, до тебя не раз уж искали: http://blog.gamedeff.com/?cat=10
а так ближайшее что есть — C99, но т.к. часть фич есть в цпп и он намного более распространён, конец немного предсказуем ;-)
тест чего?
у меня есть — дай мне словарь и текст
я бы сказал что ДАЖЕ моно не уступает плюсам — все таки моно не так хорошо пилят как петон-то
словарь: http://dump.bitcheese.net/files/ecudesi/...
текст: http://dump.bitcheese.net/files/atavofu/...
замеряй, пожалуйста, плюсовый тест, питон, и свой тест на шарпе
ЧТО УГОДНО лучше std::set.
а то что ты обосрался все уже поняли.
ты совсем норкоман?
очевидно о том же что и я в /61
ещё один поехавший шарпей, такими дерьмотестами весь инет наполнен, погугли "xxx-shitty-java-like-language 100500 times faster than C", надо ж людям маркетингом занимаццо среди таких хомячков, так что хватит уже тут покровы срывать ;-)
> что угодно
std::list, например, для этой задачи лучше, чем std::set?
че ещё спизданёшь?
нет, ни в одну ноздрю
О ЧЁМ ТЫ
ты хоть бы код почитал, да не позорился лишний раз
Поехавшие ИТТ.
Какая нахуй токенизация? Вы тут о чем? Сказано, что стандартными средствами. Не выебывайтесь.
съеби, не порти мне хорошее настроение
эй мудило, показывай свой код. На плюсах, ага
я забыл что ты не знаешь что стл говно, да
да, просто дебил, я уже понял
если стл говно, это автоматически означает что плюсы говно
так, этот тред окончательно проебан, U.
код на петоне выдает какую-то хуету — неправильно делит слова
код на плюсах не компилируется микрософтовским компилятором, выдает портянку стл-евого исключения. Попробую мингвой сейчас.
Как всегда, у спермоблядей начинается пердоленье с конпеляторами, когда дело доходит до кодинга, бгггг.
ога, кто там кукарекал про переписывание программы три раза? Вот и петоновскую и плюсовую программу тоже переписывать надо
Ну само собой, ведь кривой спермокомпилятор её не осиливает, бгггггг.
Ты ничего не понимаешь! Это же ВЕЛИКАЯ ОС для "сделать всё заебись", а не для какого-то там погромирования.
Да. А программы боженька сразу готовые выпускает, надо только setup.exe тыкнуть, лолол.
я подозреваю что ее не осилит ни один другой компилятор кроме гцц. Сайты под ие, программы под гцц, ага?
с программой-то на петоне что делать будем? Она не работает.
Правильно, потому что тупым юзерам — тупые корявые сайты на ActiveX, а умные программы для умных людей, владеющих GCC.
ну так ваши горе-вендузятики даже после перехода на говнобунту не изменяют своим традициям свято верить, что у всех во всём мире всё так же как у них.
это впрочем проблема совсем даже не гцц, а проблема говноплюсов — у них каждый компилятор компилирует свой код и выдает свои ошибки и говноеды-погромисты на плюсах считают это порядком вещей. Даже в сях такой хуйни нет.
>а мы и не соснули вовсе!
>и вроде как и не опустили нас совсем!
кстати, спешу напомнить, оба ваших анальных господина — и штольман и торвальдс — не любят и всячески пропагандируют отказываться от плюсов — весь истинно швабодный софт написан на сишечке.
Это их право, но т.к. никакой анальной власти у них нет, свобода разработчика писать на чём угодно, а свобода юзера — использовать результат трудов или нет. А вы жрите, что Господин после завтрака вывалит в сортир и не смейте рожу кривить, бгг.
поправил косяки в плюсопрограмме — http://paste.org.ru/?o325ox — все равно какая-то хуйня, неправильно делит слова, полагаю проблема в наборе символов-разделителей
там случайно не юникод?
да не, в словаре и в тексте только ascii
http://hpaste.org/63728
такой вариант проседает плюсам с std::unordered_map в 1.5 раза, и там ещё есть что оптимизировать
здесь кто-нибудь вообще напишет разбиение строки на слова нормально с первого раза? Это тоже неправильно работает, в /93 есть текст для разбора.
это работает так же, как исходный код на C++. что именно тебе не нравится? то, что от слов не отрезаются знаки препинания?
отрезаются, кстати. на своём тесте я проблем не вижу, вообще говоря, счас прогоню тот что в /93
http://hpaste.org/63729
вот кусок из вывода. что здесь не так?
Спермоблядям вечно попку печёт, всем-то они недовольны, всё-то у других не так, и языки неправильные, и компиляторы не нормальные, бгггггг.
не отрезаются же
кто? знаки препинания остаются только у слов, которых нет в словаре. clean выполняет зачистку только для сравнения, вывод остаётся неочищенным
окей, но регистр точно не игнорируется, такая же беда с April/april
http://hpaste.org/63732
пофиксил, но теперь непонятно с чем сравнивать. собственно, ошибка в том, что словарь набирается не в lower case
регистр игнорировать не нужно, April пишется всегда с большой
>tl;dr плюсы соснули.
Прямо бальзам на душу
ну, как оказалось, мы просто не умеем их готовить. Не так давно — всего в 2011 году — в STL появилась поддержка хешсетов, std::unordered_set. С помощью которых время выполнения плюсового теста можно уменьшить до времени CPython.
лолировал еще раз
а корректный вариант, кстати, замеряли? под mono было бы интересно на константу посмотреть
Ты меня извини, но это и правда как-то SLOW-ато. Ибо hash_set еще в SGI обитал.
Да и в бусте очень давно есть они уже. Акромя того, если уж говорить о стандартизации, все это появилось еще с TR1 (Пусть википедия мне будет пруфом: http://en.wikipedia.org/wiki/C%2B%2B_Tec... ) Студия 2008 с сервис паком, например, уже умела эти структуры из tr1.
BTW,
http://www.amazon.com/Effective-STL-Spec...
> Publication Date: June 16, 2001 | ISBN-10: 0201749629
>> Advice on choosing among standard STL containers (like vector and list), nonstandard STL containers (like hash_set and hash_map).
а какой сервис-пак поставить, чтоб обогнать c# и cpython?
писать на C
если шибко в лом — LuaJIT+FFI (по сути — однохуйственно почти)
что в очередной раз доказывает, что соснули именно плюсы
1) Не использовать std::set (в той же MSVS там на каждый чих создается копия, об этом Лававей всегда говорит в презентациях).
2) Не использовать медленные итераторы IO. Да и вообще, плюсовое IO не блещет скоростью, это любой плюсокодер знает. Лучше использовать платформенное API ну или хотя бы C-шное (которое его оборачивает).
3) Не сравнивать языки по отдельным синтетическим задачам.
*For example
да я как-тои не сомневался :)
Как-то да, справедливо.
Для этой задачи соснули — все верно.
пока джависты и плюсоебы рассказывают кучу тайных знаний о том, что надо и что не надо использовать, программы на других языках уже написаны и работают быстрее, в худшем случае так же.
Ох, не объедешь ты весь мир на корабле.
Игроделы & байтоебы все еще живут в мире C/C++, это ниша.
вот не надо к няшносишечке приписывать свои грязные плюсы :) Использовать С — разумно и для этого есть задачи, использовать С++, вникать в тонну костылей, стандартов разных лет, особенностей компиляторов и т.д. — неразумно нигде, кроме поддержки legacy-говна.
Какая унылота; я, к сожалению, отправлюсь в более интересные углы интернетов.
so typical для плюсоеба — "да, плюсы говно, но я их все равно продолжу жевать"
Смотрите-ка, луа-фанбой раскукарекался в непрофильном треде.