Pull to refresh
10
0
Андрей @sys_int64

User

Send message
Такие приложения, как базы данных, работают с большим количеством данных и поэтому тут больше выигрывают разные хитрые алгоритмические решения, а вот для приложений, которые работают в рантайме на обычном железе, такие как игры, браузеры IDE итд, уже надо не только об эффективных алгоритмах думать (если конечно хочется повысить производительность). Как по мне в java одна фатальная проблема — это сплошные классы везде, нету value типов совсем (ну кроме самых примитивных типа int), что затрудняет работать с памятью эффективно, да и вообще выделить что-то не на куче, за счет этого и тормоза. И вся существующая экосистема вокруг java именно построена на классах с выделением на куче. Простенький пример: хочется мне рендерить интерфейс и у меня как обычно есть луп где постоянно вызывается какойнить progress и render, есть пара методов для отрисовки, в методе для отрисовке надо передать экземпляр класса Rect, к пример для указания определенных границ, и вместо того, чтобы это сделать value типом, т.е. структурой и просто выделить на стеке, передать и забыть, мы либо создаем экземпляр в лупе и имеем с этого кучу проблем, либо костылим. В новую java собираются добавить value типы, вот как добавят, вот заживем.
более специфичное это какое? Данный пример хорошо демонстрирует что нужно знать архитектуру компьютера и задача не всегда состоит в том, чтобы использовать существующий алгоритм, бывает нужно просто пробежаться по данным, и иногда выгоднее данные скопировать просто в линейный массив (к примеру из дерева) и потом в отдельной задаче пробежаться по нему и выполнить всю необходимую работу (на примере дерева — будет значительно быстрее чем выполнять эту же самую задачу в каждом узле), как пример подобной задачи — ray tracing, в один массив складываем простые структуры — запросы с нужными данными для вычисления, в другой массив складываем результат, при обходе сцены состваляем запросы, в конце линейно обходим данный массив, выполняем задачи рейтрейсинга и складываем результат своей работы в другой массив. Вот другие примеры: поиск в линейном массиве может быть быстрее чем поиск в heap-based BST дереве, log n бинарный поиск в отсортированном массиве может быть быстрее чем O(1) поиск в heap-based хеш табличах. Big-O нотация чаще выигрывает для больших значений n.
Пример рейтресинга взят отсуюда: gamesfromwithin.com/data-oriented-design-now-and-in-the-future
также может быть интересно: vimeo.com/97337258
Попробую, но в последний раз goland мне просто удалил кусок кода )
специально только что проверил, режим в emacs'е для D вместе с языковым сервером, линтером, автоформатером и прочими дополнительными скриптами отъедает 220 МБ оперативной памяти. Для сравнения intellij idea 1.2 ГБ, и время от времени циферка увеличивается.
Не знаю, может есть какие-то плагины для emacs'а с такими фичами. Но вангую что нет, и выше я уже писал что emacs по фичам проигрывает, но тем не менее вполне себе можно создать из него IDE.
я хорошо знаю свои инструменты, в том числе и ide, которыми пользуюсь, я писал выше, что не дотягивает по фичам, но и не сильно таки уступает, по поводу отжора памяти не замечал ничего подобного, у меня старый ноутбук, на котором всего 2ГБ оперативки + всякие language server линтенры и прочее работают и все это съедает около 200-400МБ максимум (вместе с emacs'ом). Когда я выбираю emacs или IDEA (другие IDE я не воспринимаю), я всегда смотрю на то как хорошо IDEA поддерживает язык, и если все супер, конечно же я использую IDEA, потому-что действительно много удобных фичей, теже тайп хинты, override, implement, работа с бд итд, но если язык плохо поддерживается или поддержка языка слишком уж убогая и тормозная, то я предпочту использовать emacs. Лично я для Java, Kotlin, Python использую IDEA, для go и D только emacs. Главное настроить все надо, а сделать из emacs удобный и приятный инструмент довольно не простая задача.
О нотация показывает как растет функция т.е. показывает ассимптотическую сложность и при этом опускаются постоянные коэфициенты, как примеру — сортировка вставкой будет работать быстрее на маленьком количестве данных чем быстрая сортировка.
www.quora.com/Why-is-an-insertion-sort-faster-than-Quicksort-in-little-arrays
Плюс ко всему при сортировке вставкой данные намного лучше ложатся в кеш, за счет линейности.
тем не менее помимо сложности алгоритмо есть еще и внутренне устройство компьютера, которая может алгоритм сложность 0(N^2) выполнить быстрее чем O(N log(N)) за счет особенностей архитектуры и особенностей данных с которыми работает программист. Да и когда разработчики накручивают кучу абстракций поверх абстраций поверх абстракции поверх фреймфорков тоже играет свою роль.
Сразу видно, что вы не умеете нормально пользоваться текстовыми редакторами P.S. я пользуюсь IDEA и emacs в зависимости от проектов и emacs не сильно проигрывает по фичам IDEA, зато жрет памяти и нагружет процессор намного меньше, если emacs может кушать 150 МБ, то IDEA будет может кушать 2-4 ГБ., а если это android studio то и все 16 ГБ сожрет.
Если же сравнивать emacs с чем-то не ide, например, sublime — все работает практически так же быстро, если не наставить кривых плагинов.

Вот не согласен, саблайму до емакса очень далеко, из емакса вполне себе можно соорудить полноценную IDE, чаще всего емакс может все что может и IDEA от JetBrains, согласен, emacs по функционалу не дотягивает до JetBrains продкуции, но не дотягивает он совсем чуть-чуть, для меня emacs — это второй выбор после IDEA, если нет нормально поддержи для языка в IDEA, то я лучше выбиру emacs, для питона есть + всякие приятные плюшки в виде работы с базой данных (в про версии), а вот для го я ничего такого не увидел что может emacs, при этом emacs работает в разы быстрее, стабильнее и полностью настраиваемый, написать расширение для емакса намного проще (пару строк на лиспе), если чего-то не хватает, а вот написать расширение для IDEA уже намного сложнее (я имею опыт написания расширений и под емакс и под IDEA)
а вот emacs'ом я и до сих пор пользуюсь, второй после IDEA инструмент для написания кода.
Не знаю про 90е, но вот я помню как работал в 3D редакторе — Maya 7 с 1 ГБ оперативки и все летало, на больших сценах у меня начинала тормозить графика, в итоге докуил еще 1 ГБ оперативки и программа стала просто нереально быстрой.
Конечно излишнаяя приверженность — это плохо, но забивать на нее тоже нельзя, вообще сильно зависит от размеров проекта, если проект очень большой, то тут сразу лучше начать адекватно разрабатывать архитектуру, если проект постоянно меняется, то правильная архитектура поможет быстро выпилвать устаревший функциаонал и внедрить новый, легко протестировать все это итд. Если же проект не большой, то сильно можно и не заморачиваться и возможно получится все удержать в голове. По поводу преждевременной оптимизации — лучше бы люди все же иногда задумывались бы об оптимизациях, а то последнее время все полюбили это правило и вообще не оптимизируют ничего, что относительно простые программы тормозят на весьма не плохом железе.
Ага, посмотри что компилятор генерирует, он может такое нагенерировать ради оптимизации кода, что нарушит все ваши правила, и не важно какой чистый и продуманный код вы напишете.
чтобы писать контракты удобнее использовать truffle и testrpc.
Для меня наоборот менее читабельный подобный код, я в таком коде начинаю немного путаться с таким обилием кудрявых скобок и вложенностей.
Мне показалось, что это можно считать завершением моего временного отшельничества и я написал Кате.

Я решил, что, когда мы встретимся, предложу ей переехать жить ко мне и ни о чем не париться.

Сдался мужик, а так хорошо ее отшивал.
многослойный перцептрон

Это как? я думал таких в природе не существует.

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity