Size: a a a

Rust — русскоговорящее сообществo

2020 April 20

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
polunin.ai
крч @Psilon лучше бы ты в статье показал пример с LinkedList, он более похож на хаскелевский список чем Vec<>
А тут мы выясняем, что если ты используешь LinkedList в Rust, то он, во-первых, хуже, чем хаскеллевский лист, а во-вторых компилятор не натаскан на его оптимизацию.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
И ты получишь говно вместо производительности.
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
но ими никто не пользуется, а хаскельными списками - пользуются
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Бесплатный .pop(0) из вектора вообще ХЗ как сделать толком. Явно пример механически перенесён из хаскелля.
да, пример перенесен механически, потому что я и так подзаебался 20к слов переводить)
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
уж извините, творчески переосмыслить код, а не просто перевести с другого япа это конеш хорошоее предложение. Правда, я до сих пор не уверен что получилось бы наглядно
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
это про веки все знают, а когда нужно введение в 100 строк "вон там небольшая библиотечка написана, а етперь я вам расскажу как я её в статье юзаю"
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
у меня не было цели написать самую эффективную реализацию на диком западе, а просто показать подход
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Технически, можно этому NonEmptyVec сделать кастомный Drop, который пересобирает исходный вектор и освобождает
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Особенно если запретить нафиг вложенные NonEmptyVec
источник

Э

Эрик in Rust — русскоговорящее сообществo
Alex Zhukovsky
но ими никто не пользуется, а хаскельными списками - пользуются
В хаскелле список - тупо перевёрнутый вектор, если мы говорим про GHC.
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Эрик
В хаскелле список - тупо перевёрнутый вектор, если мы говорим про GHC.
в хаскелле список это что угодно, включая ничего вообще
источник

В

Вафель in Rust — русскоговорящее сообществo
Alex Zhukovsky
Игрался со структурками из статьи парс донт валидейт, вот что вышло: https://play.rust-lang.org/?version=nightly&mode=release&edition=2018&gist=4519d3d6631cea5f344bdc032ecbb609

Вроде эффективно
Мне кажется там нужно что-то вроде *const (T, [T]) (только вместо тупла #[repr(C)] структура).

Т.е. вместо копирования первого элемента оставить его на месте.

Но ещё + к этому надо внимательно прочитать про аллокации, потому что если мне не изменяет память, там освобождение должно быть по тому-же указателю что и аллокация
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Технически, можно этому NonEmptyVec сделать кастомный Drop, который пересобирает исходный вектор и освобождает
ну это классический размен памяти в перфоманс
источник

Э

Эрик in Rust — русскоговорящее сообществo
Alex Zhukovsky
в хаскелле список это что угодно, включая ничего вообще
Так, блет, ты говоришь про сферический список в вакууме или какую-то конкретную его реализацию?
Если про сферический список в вакууме, то не апеллируй к хаскеллю. А если про конкретную реализацию, то можно примеры этого "что угодно, включая ничего вообще"?
источник

p

polunin.ai in Rust — русскоговорящее сообществo
текс, если вы хотите списки обсуждать, то лучше в оффтопике
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Эрик
Так, блет, ты говоришь про сферический список в вакууме или какую-то конкретную его реализацию?
Если про сферический список в вакууме, то не апеллируй к хаскеллю. А если про конкретную реализацию, то можно примеры этого "что угодно, включая ничего вообще"?
foldl (+) 0 [1..x]
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Вафель
Мне кажется там нужно что-то вроде *const (T, [T]) (только вместо тупла #[repr(C)] структура).

Т.е. вместо копирования первого элемента оставить его на месте.

Но ещё + к этому надо внимательно прочитать про аллокации, потому что если мне не изменяет память, там освобождение должно быть по тому-же указателю что и аллокация
Типа того, да
А на дропе этой структуры как-то пересобрать вектор обратно и дропнуть его, а поля самой структуры не дропать
источник

Э

Эрик in Rust — русскоговорящее сообществo
Alex Zhukovsky
foldl (+) 0 [1..x]
Ну окей, и что?
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Эрик
Ну окей, и что?
я ожидаю что тут будет просто цикл, без векторов или еще чего
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Технически, можно этому NonEmptyVec сделать кастомный Drop, который пересобирает исходный вектор и освобождает
думаю все не так просто
источник