Search
Write a publication
Pull to refresh
3
0
Александр @aegoroff

.NET, Go, Rust

Send message

Извините, но не смог удержаться, - сходить чтобы тебе сопли вытерли за твои же деньги? В армии такое обычно вылечивается парой гаупт вахт.

Какие-то все чуствительные стали - чуть что не так, - сразу выгорание. Работаю уже около 25 лет (в разных местах), но ни разу не было подобного, да, было всякое - рутина, неинтересные задачи, остановка в развитии и пр. но это не повод опускать руки. Просто банально переключайтесь на занятия не связанные с компьютерами - спорт, автомобили, женщины и т.д. Ну а если работа не устраивает - меняем, но лучше сначала подождать - вдруг первое впечатление совсем обманчивое.

По опыту скажу что меньше чем за полгода, год, более менее в большой компании(проекте) нереально разобраться что к чему.

От нескольких дней, до пары недель будете плакать, бороться с компилятором, — потом привыкните и будете получать удовольствие, периодически налетая на подводные камни. И очень внимательно изучайте doc.rust-lang.org/book и начинать лучше, с 4 главы
отлично конечно, но при использовании for вы совсем не обязаны знать таких тонкостей и при это такой код понятен не то что Junior разработчику, но даже школьнику и при этом он гарантированно быстрый (хотя и страшный конечно)

Впрочем foreach конечно еще проще :)
сам себе отвечу — нет не всегда при foreach создается замыкание и следовательно не всегда происходит аллокация. Получается ввел в заблуждение

stackoverflow.com/questions/18552669/memory-allocation-when-using-foreach-loops-in-c-sharp

Foreach can cause allocations, but at least in newer versions .NET and Mono, it doesn't if you're dealing with the concrete System.Collections.Generic types or arrays. Older versions of these compilers (such as the version of Mono used by Unity3D until 5.5) always generate allocations.

The C# compiler uses duck typing to look for a GetEnumerator() method and uses that if possible. Most GetEnumerator() methods on System.Collection.Generic types have GetEnumerator() methods that return structs, and arrays are handled specially. If your GetEnumerator() method doesn't allocate, you can usually avoid allocations.

However, you will always get an allocation if you are dealing with one of the interfaces IEnumerable, IEnumerable, IList or IList. Even if your implementing class returns a struct, the struct will be boxed and cast to IEnumerator or IEnumerator, which requires an allocation.
Потому что при использовании foreach создается замыкание и происходит выделение памяти. Никогда не обращали внимания на то, что плагин для R#/Rider показывающий выделения, всегда подчеркивает in в foreach?

Лучше особо критичные места итерируйте через for(...) тем более что у вас List много где. Да понимаю что хардкор, но скорость того стоит - мне лично таким способом удалось потребление памяти снизить с 40+ Гб до 10-15 Гб

Ну вот как раз я xml-rs и выбирал по количеству загрузок — у него их больше всего, среди тех, что работают с XML

crates.io/search?q=xml&sort=downloads
на самом деле 25 секунд оказалось только в первый раз — все остальные за 15 секунд проходят :) так, как кэширование OS начинает работать, и скорость IO возрастает до 1.5 Гб/сек, разумеется такие цифры на NVMe SSD получаются
c quick-xml все сильно быстрее.

В общем вывод — все зависит от используемого crait
Замена xml-rs на quick-xml уменьшила время разбора с 880 секунд до 25 т.е. в 35 раз!

что-то явно не так с xml-rs

При работе с xml-rs у меня io приложения порядка 30 мб/сек, с quick-xml доходит до 1 гб/сек
Не знаю что я делаю не так, но, я сравнил 2 примерно одинаковые утилиты на golang и rust, которые разбирают большой xml файл (размером более 22 гигабайт), — просто вытаскивают из него нужные элементы, используя SAX парсинг (такой DOM не влезет в память). Так вот утилита на golang, которая делает сильно больше (разбор + создание неких объектов + вставка этих объектов в mongodb), работает в 2 РАЗА БЫСТРЕЕ (6 минут против 14), при этом код на rust просто считает количество открытых и закрытых тегов, ничего не вставляет в базу и не создает.

В качестве SAX парсера на rust я использовал xml-rs = «0.8» (https://docs.rs/crate/xml-rs/0.8.3)
а панель Touch Bar вместо физических кнопок вы тоже разлочкой собрались поменять?
Я думаю что это просто очень дорого — память же по сути, — это очень много конденсаторов, и в кристалле этого сделать нельзя (в кристалле у нас только транзисторы), делать же память всю на транзисторах — нереально (их нужно очень много), поэтому и появились кэши L2, L3
Да, конечно, но это не совсем то, чтобы память интегрированна в чип, как было в презентации
да, да — увидел в оригинальной статье на увеличенном фото
Я посмотрел внимательнее фото в оригинальной статье — там видно что память распаяна на одной подложке с кристаллом M1 и формально (с натяжкой) получается что да память интегрирована с чипом, но по факту она все же вынесена из кристалла, поэтому они и пишут интегрированных в кавычках

Information

Rating
8,641-st
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity