Мерль
Snusmumriken
ИМХО не особо нужен
Ну и молодец :3
Snusmumriken
ИМХО не особо нужен
Тогда к тебе другой вопрос. Почему ты пишешь на медленной и скриптовой lua а не на асме или, на худой конец, сишке/фортране?
Мерль
Тогда к тебе другой вопрос. Почему ты пишешь на медленной и скриптовой lua а не на асме или, на худой конец, сишке/фортране?
Ещё я пишу на Go, C и Питоне и что? Если ты используешь медленный язык, то это не значит, что можно использовать неподходящие алгоритмы Это как-то нечистоплотно
Snusmumriken
Ещё я пишу на Go, C и Питоне и что? Если ты используешь медленный язык, то это не значит, что можно использовать неподходящие алгоритмы Это как-то нечистоплотно
Почему неподходящие? Прекрасно работают и удобны :3 Узкие места, конечно же, отдельно оптимизируются. Комфорт важнее скорости, в тех местах где это допустимо. Ты мог бы прочитать это у Гвидо.
Мерль
Snusmumriken
Они конечно работают, ога Но работают они кое-как И когда масса говнокода становится критической - всё рушится к чертям
Говнокод - применение неподходящих для данного конкретного случая инструментов (а так же нарушение иерархии блоков кода, написание нечитаемой фигни и так далее). Есть такое прикольное правило: сначала пиши так чтобы было сразу понятно, а оптимизируй потом, и только критические участки, ибо преждевременная оптимизация делает из кода нечитаемую фигню. За преждевременную оптимизацию отрывают руки
Snusmumriken
»применение неподходящих для данного конкретного случая инструментов Во-во
Тут не было указания случая :3 Абстрактный список. Когда не указывается длина, можно упрощать. Если бы я сказал, что этот список расположен на кластере серверов и занимает 900тб - другое дело
Snusmumriken
Кстати, и ты так и не указал своего подробного решения, без сдвигов. Если напишешь свой класс списков, которые будут удалять без сдвигов - вперед :3
Snusmumriken
У тебя там curr.remove(). Что это делает? А потом замени в моём варианте table.remove на curr.remove, и получишь твой любимый оптимизированный но читабельный вариант. Я давал пример логики, а ты мне про оптимизацию попёр. Воистину, когда человек указывает собаке пальцем, собака смотрит на палец.
Мерль
Вот результаты бенчмарков. Разница в 40 раз, Карл, на ста тысячах элементов
Мерль
А вот исходник
Мерль
Мерль
Но тебе конечно проще назвать оппонента собакой и продолжать говнокодить, чем почитать хотя бы одну книжку для новичков в программировании, лол
Snusmumriken
Ничего себе как сложно :3 Ты попробуй поддерживать данный код.
Snusmumriken
Чому хотя бы класс не замутил?
Мерль
Лол Если ЭТО для тебя сложно То я даже не знаю Может не стоит программировать? А то сложна
Snusmumriken
Хех, я покажу кому-нибудь твой образец.
Мерль
А то вдруг там R-дерево и всё капут сложна :3
Snusmumriken
Это все оформляется в маленький класс с тремя с половиной методами. Кстати, ты в курсе, что если ты непонятно написал, ты все равно что набыдлокодил? Смешал в одну кучу всё подряд. Я сейчас оформлю по-человечески. Хоть увидишь как люди делают.
Мерль
Мда Надо было методы прикрутить Меня это от лабвью не отпустило до сих пор видимо Ну впрочем этих листов пруд пруди Во всех видах
Snusmumriken
Всё листом - быдлокод. Ладно, расслабься. Кстати, на лабвью отлично делаются модули и даже ясное ООП. Событийное, правда.
Мерль
Мда Надо было методы прикрутить Меня это от лабвью не отпустило до сих пор видимо Ну впрочем этих листов пруд пруди Во всех видах
Лабвью, если кто не знает - это такой страшненький процедурный язык для автоматизации Никогда, слышите, никогда не трогайте лабвью
Мерль
Всё листом - быдлокод. Ладно, расслабься. Кстати, на лабвью отлично делаются модули и даже ясное ООП. Событийное, правда.
А ты хотел, чтобы я для бенчей делал бы отдельный модуль? Это демонстрация алгоритма Конечно, если делать что-то для рабочего кода - то велосипеды писать не надо, всё есть
Snusmumriken
Лабвью, если кто не знает - это такой страшненький процедурный язык для автоматизации Никогда, слышите, никогда не трогайте лабвью
Он нормальный. Сделан для ученых которым нафиг не нужно программировать, но нужен результат. Язык визуален. Представляет собой модули, между которыми проходят потоки данных в как-бы функциональном стиле. Очень мощная математическая база по обработке сигналов. Легко справляется с огромными потоками в реальном времени.
Snusmumriken
Я на нём спокойно делал нейронные сети, персептроны и прочую лабуду. Даже мануалы курить не надо.
Мерль
Он нормальный. Сделан для ученых которым нафиг не нужно программировать, но нужен результат. Язык визуален. Представляет собой модули, между которыми проходят потоки данных в как-бы функциональном стиле. Очень мощная математическая база по обработке сигналов. Легко справляется с огромными потоками в реальном времени.
Поверь Я с этими учоными, не умеющими в программирование, сижу в одной лабе Тебе в страшном сне не увидеть то, что они пишут Это адъ Математика там есть вся, что нужна для простенькой обработки данных, но пипец какая медленная И упаси боже тебя использовать его "огромных потоков", да ещё в "реальном времени" Для этого есть а) матлаб б) fpga в) с++
Мерль
На нём можно легко наговнокодить что-нибудь побыстрому и это будет работать С красивым интерфейсом Это да
Мерль
И многие сложные вещи делаются в нём очень просто но в остальном он ужасе
Мерль
Ой, я вполне себе прогонял через многослойные персептроны кучу сырых данных, поступающих от камеры. Успешно.
Чот я сомневаюсь, что у тебя было как-то много данных Да, на нём делают компьютер вижн, лично видел eye-tracker Вытянуть в лабвью больше 30 кадров просто нереально И эти 30 кадров без всякой обработки
Snusmumriken
В общем, на твоем месте я бы шел писать на асме и только на асме, идеально оптимизированный код. В противном случае, ты занимаешься выжиганием сахарных сердечек на торте паяльником
Мерль
Точнее си плюс плюсочка
Snusmumriken
Ну да, за столько лет, сишечка была доведена почти до совершенства. Но меня все равно интересует, что ты тут делаешь, и где твоя идеально оптимизированая операционная система :3
Snusmumriken
Сиплюсплюсочка не так совершена.
Мерль
Сиплюсплюсочка не так совершена.
прост в сишечку нормальных eigen не завезли И ещё кучу матановых библиотек
Snusmumriken
Ты слишком громко вопишь о скорости :3
Мерль
Тут речь не о скорости, а о банальной гигиене кода :3 Если ты привык говнокодить в таких мелочах, то значит будешь говнокодить и по-крупному
Snusmumriken
Ущербная экстраполяция, прости. Это вообще ничего не значит.
Мерль
Это не экстраполяция, это личный опыт (
Snusmumriken
Только твой. Или ты покрываешь всех людей? Тем не менее. Стоит повторить собаку.
Snusmumriken
Да. Кстати. Твой метод жрёт в 32 раза больше памяти. Обычная таблица на 100к элементов занимает 2мб, твой супер-список на 100к занимает 64мб памяти. Плюс ты лаконично обходишь время инициализации своего супер-списка, в сравнении с инициализацией обычной таблицы. Где-то тут надувательство.
Snusmumriken
Он быстр, но его применение.. очень специфично. Или для очень маленьких списков (но тогда теряется разница прироста скорости), или для промышленных серверов, где докупить лишние 64гб - не проблема. Нет, не вижу ничего плохого, используй это. Но в игрушках на телефон я подключу ffi и стороннюю либу с плюсовыми динамическими векторами, в которые можно запихнуть структуру (для хранения огромной тайловой карты с кучей параметров для каждого тайла, например). Тем не менее, я считаю что ты набыдлокодил в плане оформления кода, поддерживаемости и расхода памяти, занявшись предварительной оптимизацией.
Snusmumriken
Я посчитал время выполнения вместе с инициализацией. Время на моём нетбуке: твой список: 4.6с обычная таблица: 21.8с Разница уже всего лишь в пять раз. Хм.
Maxx
list 100000 samples, average 0.043713 deviation 0.002519 array 100000 samples, average 2.043139 deviation 2.032166 ghost 100000 samples, average 0.024545 deviation 0.002318 похоже, можно ещё быстре, если вообще ничего не удалять =)
Snusmumriken
В памяти все равно висит куча фигни лишней. Попробуй прямо замерить время. Особенно вместе с инициализацией. И увеличить размер обоих списков до сотни миллионов значений (советую поставить на ночь или уйти чай пить).
Maxx
https://gist.github.com/xogg/3e9f642e0bd6caf8b9ff348636c1204e всё честно: за один проход создаёшь массив нужных, неудалённых индексов, и делаешь его проксёй к исходному массиву.
Maxx
сотню миллионов я буду ждать до утра наверное, и не факт, что до следующего =)
Snusmumriken
Я попробую на I7, разбив на корутины :3
Snusmumriken
х32 перерасход памяти, не забывай.
Maxx
если задачу решить важнее памяти, то сойдёт =)
Maxx
я б ещё reduce какой-нибудь рассмотрел, но его нужно параллелить
Мерль
На луа это сложновато
Maxx
угу, нужно обвязку снаружи делать
Мерль
ну, лучше просто друго язык взять
Мерль
Хотя тут же всё зависит от обвязки Вроде бы в том же луа плагине для FAR реализованы неблокирующие зелёные потоки, причём с поддержкой многоядерности Врочем я не пробовал, так что точно не скажу
Snusmumriken
Есть либы для истинной асинхронной многопоточности.
Snusmumriken
http://lua-users.org/wiki/MultiTasking
Snusmumriken
Если что. Lua не работает в одиночку. Всегда есть сишная сторона. Её можно модифицировать, импортировать dll/so с многопоточностью и так далее.
Snusmumriken
Не ругайся. Тарантул, кстати, хорош.
Snusmumriken
О, кстати, тут один товарищ хотел макросы на lua? Есть metalua. Примерная работа:
Snusmumriken
Snusmumriken
А так - да, можно делать отдельный загрузчик, который проходится по коду регулярками. Может быть даже на основе самого кода, в котором определена зона замен.
void *
Спасибо, поковыряю на досуге
void *
фигасе наплыв
Snusmumriken
Та же фигня
Alexander
Выключите свет
Snusmumriken
Что они все тут делают? Хотят набраться мудрости по кодингу и посмотреть мемасы?
Михаил
Ну я посмотреть зашёл зачем люди луа используют. Ну и по сравнению с девопс каналом у вас ещё не большой наплыв
Alex
Ну я посмотреть зашёл зачем люди луа используют. Ну и по сравнению с девопс каналом у вас ещё не большой наплыв
Я хотел спросить как посмотреть за луа в принципе, но здесь всё немного по-другому. Казалось, что здесь чат разработчиков, ан нет — здесь ылитка на ылитке.
Uncel
Обмазываться вставками с avx
Михаил