AT6MB2G MQ26O2LI:
vec!["a"].into_iter().map(|s| s.to_owned()).collect();
реально больше никак мне не создать &Vec<String> ?
^^^^^^^ a collection of type &std::vec::Vec<std::string::String> cannot be built from std::iter::Iterator<Item=std::string::String>
хммммм
Roman Proskuryakov:
Ну ты в переменную положи вектор, а потом уже от переменной возьми ссылку.
AT6MB2G MQ26O2LI:
ш-шта
Roman Proskuryakov:
let vec: Vec<String> = vec!["a"].into_iter().map(|s| s.to_owned()).collect();
let vec_ref = &vec;
AT6MB2G MQ26O2LI:
а иначе точно никак? както некраисво
Roman Proskuryakov:
Что значит некрасиво?
AT6MB2G MQ26O2LI:
ну в две строчки
Roman Proskuryakov:
.collect() создает временную переменную. Ты хочешь от временной переменной взять ссылку. Она сразу сдохнет после точки с запятой ; и твоя ссылка будет дохлая
поэтому раст тебя от этого защищает
AT6MB2G MQ26O2LI:
ух ясно спасибо)
https://t.iss.one/rust_beginners_ru/33912
vec!["a"].into_iter().map(|s| s.to_owned()).collect();
реально больше никак мне не создать &Vec<String> ?
^^^^^^^ a collection of type &std::vec::Vec<std::string::String> cannot be built from std::iter::Iterator<Item=std::string::String>
хммммм
Roman Proskuryakov:
Ну ты в переменную положи вектор, а потом уже от переменной возьми ссылку.
AT6MB2G MQ26O2LI:
ш-шта
Roman Proskuryakov:
let vec: Vec<String> = vec!["a"].into_iter().map(|s| s.to_owned()).collect();
let vec_ref = &vec;
AT6MB2G MQ26O2LI:
а иначе точно никак? както некраисво
Roman Proskuryakov:
Что значит некрасиво?
AT6MB2G MQ26O2LI:
ну в две строчки
Roman Proskuryakov:
.collect() создает временную переменную. Ты хочешь от временной переменной взять ссылку. Она сразу сдохнет после точки с запятой ; и твоя ссылка будет дохлая
поэтому раст тебя от этого защищает
AT6MB2G MQ26O2LI:
ух ясно спасибо)
https://t.iss.one/rust_beginners_ru/33912
Telegram
AT6MB2G MQ26O2LI in Rust Beginners
vec!["a"].into_iter().map(|s| s.to_owned()).collect();
реально больше никак мне не создать &Vec<String> ?
^^^^^^^ a collection of type &std::vec::Vec<std::string::String> cannot be built from std::iter::Iterator<Item=std::string::String>
хммммм
реально больше никак мне не создать &Vec<String> ?
^^^^^^^ a collection of type &std::vec::Vec<std::string::String> cannot be built from std::iter::Iterator<Item=std::string::String>
хммммм
Casual tears:
Разве? Вот в русте в стандартной библиотеке мапа на основе B дерева и судя по вот этим бенчам: https://github.com/Rufflewind/bench-maps оно намного лучше, чем красно-черное.
Там же меньше дереференсов надо, более кэш-френдли. С чего бы ему быть медленнее?
Собственно в официальной доке именно это и написано: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html
Разве? Вот в русте в стандартной библиотеке мапа на основе B дерева и судя по вот этим бенчам: https://github.com/Rufflewind/bench-maps оно намного лучше, чем красно-черное.
Там же меньше дереференсов надо, более кэш-френдли. С чего бы ему быть медленнее?
Собственно в официальной доке именно это и написано: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html
GitHub
GitHub - Rufflewind/bench-maps: Benchmark of map (associative array) implementations in C++ and Rust
Benchmark of map (associative array) implementations in C++ and Rust - Rufflewind/bench-maps
Forwarded from Антон
<shameless_plug>github.com/AnthonyMikh/tttxo</shameless_plug>
GitHub
AnthonyMikh/tttxo
Play into tic-tac-toe - right from your command line! - AnthonyMikh/tttxo
Forwarded from Leonid 🦇 Onokhov
Ненавижу хаскелистов за это вот
newtype Foo m a = Foo { ReaderT FooEnv m a }
doSomething :: MonadIO m => Blah -> BlahBlah -> Foo m aForwarded from Leonid 🦇 Onokhov
Зачем мне ещё один сраный уровень трансформеров? А? А?? АААА?
Forwarded from Leonid 🦇 Onokhov
newtype AppT m a
= AppT
{ unAppT :: ReaderT YourStuff m a
} deriving (Functor, Applicative, Monad, etc)
vs
newtype AppM a = AppM (ReaderT WhateverBullshit IO a)
parket:
@lonokhov не мог бы ты развить мысль, пожалуйста
λeonid Onokhov:
очень просто. не надо лепить трансформер где не надо
@lonokhov не мог бы ты развить мысль, пожалуйста
λeonid Onokhov:
очень просто. не надо лепить трансформер где не надо
Forwarded from Αλεχ Zhukovsky
Why Go and not Rust? | Loris Cro's Personal Blog
https://kristoff.it/blog/why-go-and-not-rust/
https://kristoff.it/blog/why-go-and-not-rust/
kristoff.it
Why Go and not Rust?
What's the role of Go in a universe where Rust exists?
Forwarded from Alex Gryzlov
вот тут намекают что ооп хорошо кодатой https://ix.cs.uoregon.edu/~pdownen/publications/esop2019.pdf
Forwarded from Alex Gryzlov
а вообще классический пейпер это
https://www.cs.utexas.edu/~wcook/Drafts/2009/essay.pdf Cook, "On Understanding Data Abstraction, Revisited"
https://www.cs.utexas.edu/~wcook/Drafts/2009/essay.pdf Cook, "On Understanding Data Abstraction, Revisited"
Nick Linker, [18.09.19 17:46]
В хаскеле такое до сих пор невозможно что ли?
я тут ткнул
Nick Linker, [18.09.19 17:48]
сейчас пришлю сниппет
A64m AL256m qn[cores], [18.09.19 17:49]
а какая "работа" ожидается - tdnr?
Nick Linker, [18.09.19 17:55]
Nick Linker, [18.09.19 17:56]
я просто обычно линзы использовал, а тут смотрю, в последних GHC есть прогресс по рекордам
Nick Linker, [18.09.19 17:56]
[In reply to весёлый кремовый торт]
да
Nick Linker, [18.09.19 17:56]
ну потому что, очевидно, personId неоднозначный
Nick Linker, [18.09.19 17:57]
я понимаю, почему ошибка, но не понимаю, в чём прогресс тогда?
весёлый кремовый торт, [18.09.19 17:57]
в том, что в остальных случаях работает
весёлый кремовый торт, [18.09.19 17:58]
это проблема классно решена в Optics при помощи OverloadedLabels
A64m AL256m qn[cores], [18.09.19 17:59]
[In reply to Nick Linker]
это раширение DRF не для работы с функциями геттерами (которые аннотацией типов все равно можно заставить работать, но это неудобно) а для использования с ПМ, вайлдкардами или с лейблами
Nick Linker, [18.09.19 18:00]
[In reply to весёлый кремовый торт]
посмотрю, спасибо
Nick Linker, [18.09.19 18:00]
[In reply to A64m AL256m qn[cores]]
мех.
Вот уже GHC 8.8 на подходе, а счастья как не было, так и нет.
Nick Ivanych, [18.09.19 18:00]
[In reply to Nick Linker]
Оно же вышло уже.
A64m AL256m qn[cores], [18.09.19 18:01]
[In reply to Nick Linker]
TDNR - это щастье штоле? люто ненавидел, когда на емельне писал
Nick Linker, [18.09.19 18:01]
[In reply to A64m AL256m qn[cores]]
ну я и говорю, что нет
весёлый кремовый торт, [18.09.19 18:01]
tdnr?
A64m AL256m qn[cores], [18.09.19 18:02]
[In reply to Nick Linker]
так если его в принципе нет, какая разница какая версия на подходе n или n+1?
A64m AL256m qn[cores], [18.09.19 18:02]
[In reply to весёлый кремовый торт]
тайп директед нейм резолюшен
Yuriy Syrovetskiy, [18.09.19 18:09]
[In reply to Nick Linker]
почему вы ожидаете, что personId продолжит себя вести как функция?
Nick Linker, [18.09.19 18:09]
не, ну правда, вот эта тягомотина с рекордами тянется уже два десятилетия. При этом в пурсе как-то умудрились в первых версиях запилить вменяемое поведение.
Nick Ivanych, [18.09.19 18:10]
[In reply to Nick Linker]
Но они пожертвовали оператором точка!!
Nick Linker, [18.09.19 18:10]
[In reply to Yuriy Syrovetskiy]
понятия не имею, хаскель так приучил. В других местах я к полям обращаюсь как
[In reply to Nick Linker]
ну хаскель не один человек делает, а два человека - это уже три системы рекордов
Yuriy Syrovetskiy, [18.09.19 18:12]
[In reply to Nick Linker]
меня тот же Хаскель приучил иначе:
[In reply to Nick Ivanych]
а как же они композят?
весёлый кремовый торт, [18.09.19 18:13]
[In reply to Nick Linker]
ну и дженерик-ленз лучше пурскриптовых рекордов (если анонимные не нужны)
Зигохистоморфный Препроморфизм, [18.09.19 18:17]
[In reply to A64m AL256m qn[cores]]
чем?
весёлый кремовый торт, [18.09.19 18:18]
[In reply to A64m AL256m qn[cores]]
а optics не лучше generic-lens?
A64m AL256m qn[cores], [18.09.19 18:18]
[In reply to весёлый кремовый торт]
не знаю
В хаскеле такое до сих пор невозможно что ли?
data Person = Person { personId :: Int, name :: String }
data Address = Address { personId :: Int, address :: String }
весёлый кремовый торт, [18.09.19 17:46]{-# LANGUAGE DuplicateRecordFields #-}
Nick Linker, [18.09.19 17:47]я тут ткнул
DuplicateRecordFields, а оно не похоже, что работаетNick Linker, [18.09.19 17:48]
сейчас пришлю сниппет
A64m AL256m qn[cores], [18.09.19 17:49]
а какая "работа" ожидается - tdnr?
Nick Linker, [18.09.19 17:55]
data Person = Person { personId :: Int, name :: String } deriving (Show)
data Address = Address { personId :: Int, address :: String } deriving (Show)
test :: IO ()
test = do
let person = Person 123 "Holmes"
let address = Address 33 "Baker street"
let pid = personId person
putStrLn $ "pid = " <> show pid
let newAddress = address { personId = 44 }
putStrLn $ "newAddr = " <> show newAddress
return ()
весёлый кремовый торт, [18.09.19 17:56]let pid = personId personвот на этой строчке ломается?
Nick Linker, [18.09.19 17:56]
я просто обычно линзы использовал, а тут смотрю, в последних GHC есть прогресс по рекордам
Nick Linker, [18.09.19 17:56]
[In reply to весёлый кремовый торт]
да
Nick Linker, [18.09.19 17:56]
ну потому что, очевидно, personId неоднозначный
Nick Linker, [18.09.19 17:57]
я понимаю, почему ошибка, но не понимаю, в чём прогресс тогда?
весёлый кремовый торт, [18.09.19 17:57]
в том, что в остальных случаях работает
весёлый кремовый торт, [18.09.19 17:58]
это проблема классно решена в Optics при помощи OverloadedLabels
A64m AL256m qn[cores], [18.09.19 17:59]
[In reply to Nick Linker]
это раширение DRF не для работы с функциями геттерами (которые аннотацией типов все равно можно заставить работать, но это неудобно) а для использования с ПМ, вайлдкардами или с лейблами
Nick Linker, [18.09.19 18:00]
[In reply to весёлый кремовый торт]
посмотрю, спасибо
Nick Linker, [18.09.19 18:00]
[In reply to A64m AL256m qn[cores]]
мех.
Вот уже GHC 8.8 на подходе, а счастья как не было, так и нет.
Nick Ivanych, [18.09.19 18:00]
[In reply to Nick Linker]
Оно же вышло уже.
A64m AL256m qn[cores], [18.09.19 18:01]
[In reply to Nick Linker]
TDNR - это щастье штоле? люто ненавидел, когда на емельне писал
Nick Linker, [18.09.19 18:01]
[In reply to A64m AL256m qn[cores]]
ну я и говорю, что нет
весёлый кремовый торт, [18.09.19 18:01]
tdnr?
A64m AL256m qn[cores], [18.09.19 18:02]
[In reply to Nick Linker]
так если его в принципе нет, какая разница какая версия на подходе n или n+1?
A64m AL256m qn[cores], [18.09.19 18:02]
[In reply to весёлый кремовый торт]
тайп директед нейм резолюшен
Yuriy Syrovetskiy, [18.09.19 18:09]
[In reply to Nick Linker]
почему вы ожидаете, что personId продолжит себя вести как функция?
Nick Linker, [18.09.19 18:09]
не, ну правда, вот эта тягомотина с рекордами тянется уже два десятилетия. При этом в пурсе как-то умудрились в первых версиях запилить вменяемое поведение.
Nick Ivanych, [18.09.19 18:10]
[In reply to Nick Linker]
Но они пожертвовали оператором точка!!
Nick Linker, [18.09.19 18:10]
[In reply to Yuriy Syrovetskiy]
понятия не имею, хаскель так приучил. В других местах я к полям обращаюсь как
.personId
A64m AL256m qn[cores], [18.09.19 18:12][In reply to Nick Linker]
ну хаскель не один человек делает, а два человека - это уже три системы рекордов
Yuriy Syrovetskiy, [18.09.19 18:12]
[In reply to Nick Linker]
меня тот же Хаскель приучил иначе:
let Person{personId = pid} = person
Yuriy Syrovetskiy, [18.09.19 18:13][In reply to Nick Ivanych]
а как же они композят?
весёлый кремовый торт, [18.09.19 18:13]
g <<< f
A64m AL256m qn[cores], [18.09.19 18:13][In reply to Nick Linker]
ну и дженерик-ленз лучше пурскриптовых рекордов (если анонимные не нужны)
Зигохистоморфный Препроморфизм, [18.09.19 18:17]
[In reply to A64m AL256m qn[cores]]
чем?
весёлый кремовый торт, [18.09.19 18:18]
[In reply to A64m AL256m qn[cores]]
а optics не лучше generic-lens?
A64m AL256m qn[cores], [18.09.19 18:18]
[In reply to весёлый кремовый торт]
не знаю
Nick Ivanych, [18.09.19 18:19]
"Если и хуже, то не сильно" ;-)
Nick Linker, [18.09.19 18:19]
[In reply to Yuriy Syrovetskiy]
но если продолжить твой, Юрий, вариант, то будет так:
Nick Linker, [18.09.19 18:19]
раньше по-крайней мере я такого не припомню, чтобы работало
Зигохистоморфный Препроморфизм, [18.09.19 18:19]
[In reply to A64m AL256m qn[cores]]
так чем лучше?
Nick Linker, [18.09.19 18:20]
но строчка
A64m AL256m qn[cores], [18.09.19 18:20]
[In reply to Зигохистоморфный Препроморфизм]
более развитый интерфейс. если просто как геттеры использовать - ничем не лучше.
Зигохистоморфный Препроморфизм, [18.09.19 18:20]
[In reply to A64m AL256m qn[cores]]
ну теже траверсы и линзы для рекордов есть в профункторной оптике
A64m AL256m qn[cores], [18.09.19 18:21]
[In reply to Nick Linker]
можно еще
[In reply to Nick Linker]
[In reply to A64m AL256m qn[cores]]
при этом 2-мя строчками выше написан биндинг для
.^person ^. < ##personId## >
мы так ранньше никнеймы писали с клановыми тегами
весёлый кремовый торт, [18.09.19 18:23]
ну вот не надо, не так много символов и читать их достаточно просто
A64m AL256m qn[cores], [18.09.19 18:23]
или
еще
Oleg ℕizhnik, [18.09.19 18:23]
[In reply to весёлый кремовый торт]
да, всего четыре символа
A64m AL256m qn[cores], [18.09.19 18:24]
[In reply to Nick Linker]
идиоту мож и понятно, но вывод типов это ломает везде где он есть
весёлый кремовый торт, [18.09.19 18:24]
[In reply to A64m AL256m qn[cores]]
из-за
A64m AL256m qn[cores], [18.09.19 18:24]
[In reply to весёлый кремовый торт]
да
Зигохистоморфный Препроморфизм, [18.09.19 18:24]
[In reply to A64m AL256m qn[cores]]
[In reply to A64m AL256m qn[cores]]
жаль, увы. Но спасибо, наверное даже я обойдусь без линз на этот раз.
Oleg ℕizhnik, [18.09.19 18:25]
Надо дампнуть тред и скинуть в чат питонистов\жаваскриптёров\etc.
Oleg ℕizhnik, [18.09.19 18:25]
Хаскелисты придумывают способы написать object.property
Nick Ivanych, [18.09.19 18:26]
;-) ;-)
A64m AL256m qn[cores], [18.09.19 18:26]
[In reply to Oleg ℕizhnik]
чтоб не писать
[In reply to Nick Linker]
или еще
"Если и хуже, то не сильно" ;-)
Nick Linker, [18.09.19 18:19]
[In reply to Yuriy Syrovetskiy]
λ> :t personId(это если убрать одно из определений)
personId :: Person -> Int
но если продолжить твой, Юрий, вариант, то будет так:
test :: IO ()это работает, теперь я вижу прогресс!
test = do
let person = Person 123 "Holmes"
let address = Address 33 "Baker street"
let Person { personId = pid } = person
putStrLn $ "pid = " <> show pid
let newAddress = (address :: Address) { personId = 44 }
putStrLn $ "newAddr = " <> show newAddress
Nick Linker, [18.09.19 18:19]
раньше по-крайней мере я такого не припомню, чтобы работало
Зигохистоморфный Препроморфизм, [18.09.19 18:19]
[In reply to A64m AL256m qn[cores]]
так чем лучше?
Nick Linker, [18.09.19 18:20]
но строчка
let newAddress = (address :: Address) { personId = 44 } чудеснаA64m AL256m qn[cores], [18.09.19 18:20]
[In reply to Зигохистоморфный Препроморфизм]
более развитый интерфейс. если просто как геттеры использовать - ничем не лучше.
Зигохистоморфный Препроморфизм, [18.09.19 18:20]
[In reply to A64m AL256m qn[cores]]
ну теже траверсы и линзы для рекордов есть в профункторной оптике
A64m AL256m qn[cores], [18.09.19 18:21]
[In reply to Nick Linker]
можно еще
let pid = personId (person :: Person)весёлый кремовый торт, [18.09.19 18:21]
[In reply to Nick Linker]
let pid = person ^. #personId
Nick Linker, [18.09.19 18:22][In reply to A64m AL256m qn[cores]]
при этом 2-мя строчками выше написан биндинг для
person и даже идиоту понятно, что у него тип Persion
Oleg ℕizhnik, [18.09.19 18:22].^person ^. < ##personId## >
мы так ранньше никнеймы писали с клановыми тегами
весёлый кремовый торт, [18.09.19 18:23]
ну вот не надо, не так много символов и читать их достаточно просто
A64m AL256m qn[cores], [18.09.19 18:23]
или
#personId personв случае других инстансов
getField @"personId" еще
Oleg ℕizhnik, [18.09.19 18:23]
[In reply to весёлый кремовый торт]
да, всего четыре символа
A64m AL256m qn[cores], [18.09.19 18:24]
[In reply to Nick Linker]
идиоту мож и понятно, но вывод типов это ломает везде где он есть
весёлый кремовый торт, [18.09.19 18:24]
[In reply to A64m AL256m qn[cores]]
из-за
#personId person придётся не очень хороший инстанс IsLabel писатьA64m AL256m qn[cores], [18.09.19 18:24]
[In reply to весёлый кремовый торт]
да
Зигохистоморфный Препроморфизм, [18.09.19 18:24]
[In reply to A64m AL256m qn[cores]]
prop (SProxy :: _ "personId")
Nick Linker, [18.09.19 18:25][In reply to A64m AL256m qn[cores]]
жаль, увы. Но спасибо, наверное даже я обойдусь без линз на этот раз.
Oleg ℕizhnik, [18.09.19 18:25]
Надо дампнуть тред и скинуть в чат питонистов\жаваскриптёров\etc.
Oleg ℕizhnik, [18.09.19 18:25]
Хаскелисты придумывают способы написать object.property
Nick Ivanych, [18.09.19 18:26]
;-) ;-)
A64m AL256m qn[cores], [18.09.19 18:26]
[In reply to Oleg ℕizhnik]
чтоб не писать
foo >>> bar >>>> baz >>> quux >>>>>>>>>>>>A64m AL256m qn[cores], [18.09.19 18:28]
[In reply to Nick Linker]
или еще
r @Person personId personвсего 1024 способа собирания из 256 частей