Ваши впечатления от Rust Edition 2018 Preview

Кто-нибудь пробовал уже Rust 2018?

Как вам, что понравилось/не понравилось?

Я хотел с Земеротом попробовать, но руками задолбался править пути в импортах, а автоматический rustfix не завелся почему-то. Отложил.

UPD: Из нравящегося, например рад такой мелочи как импорт макросов через use. Глядишь так макросы потихоньку и станут более органичной частью языка.

2 лайка

В rss прилетело


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

Сделал как говорят, вроде cargo fix завелся. Закомитил все это дело в отдельную ветку: https://github.com/ozkriff/zemeroth/commits/rust2018

В общем-то, cargo fix к локальным импортам crate приписал и все. В этом пока весь переход и заключается - теперь это rust2018-код, использующий кучу rust2015 зависимостей.

После дописывания #![warn(rust_2018_idioms)] появился еще миллион предупреждений вида

warning: unreachable `pub` item               
  --> src/screen/mod.rs:65:5                  
   |                                          
65 |     pub fn resize(&mut self, aspect_ratio: f32) {                                      
   |     ---^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                        
   |     |                                    
   |     help: consider restricting its visibility: `crate`                                 

которые cargo fix править не хочет - видимо, руками надо.

В мастер пока все это комитить не буду (на stable перстанет собираться тогда), просто поигрался.

Частично перешёл в своём проекте.
cargo fix поправил пути импортов, но во второй проход вносить изменения отказался, ссылаясь на то, что проект не компилится.

Попробовал поменять все pub на crate: find src -name '*.rs' -exec sed -i 's/pub/crate/g' "{}" \;
Попытка провалилась. Выяснилось, что в quick-error! ожидается либо enum, либо pub enum и никаких crate enum принимать не хочет.
Временный фикс: find src -name '*.rs' -exec sed -i 's/crate enum Error/pub enum Error/g' "{}" \;
Пока не решил, нужно ли с него переходить.

Все лайфтаймы пришлось исправлять вручную…

Пока не разобрался с импортом макросов через use, писать для slog в каждом файле по пачке use выглядит не круто, а как заюзать для всего проекта не понятно.

2 лайка

cargo fix это хорошо, но это лишь про пути.

А кто-нибудь разбирался что поменяется в редакции в целом, как теперь идиоматично писать код, и всё такое?

Как я понял по задумке он должен править всё в 2 прохода, но у меня не получилось из-за quick-error!.