Var olan bir projeyi yeni bir sürüme taşımak
Rust, bir projeyi bir surumden sonrakine otomatik olarak tasimaya yardim eden araclar sunar. Bu araclar kaynak kodunuzu bir sonraki surumle uyumlu olacak sekilde gunceller.
Kisaca, bir sonraki surume gecmek icin adimlar sunlardir:
- Bagimliliklarinizi en guncel surumlere yuklemek icin
cargo updatecalistirin. cargo fix --editioncalistirin.Cargo.tomldosyasini duzenleyipeditionalanini bir sonraki surume ayarlayin; orneginedition = "2024".- Duzeltmelerin ise yaradigini dogrulamak icin
cargo buildveyacargo testcalistirin. - Projeyi yeniden bicimlendirmek icin
cargo fmtcalistirin.
Asagidaki bolumler bu adimlarin ayrintilarina ve yolda karsilasabileceginiz bazi sorunlara daha yakindan bakar.
Amacimiz, yeni surumlere gecisin olabildigince sorunsuz olmasidir. En yeni surume yukseltmek sizin icin zorsa, bunu bir hata olarak goruyoruz. Bu surecte bir sorunla karsilasirsaniz lutfen bir hata bildirimi olusturun.
Taşımaya başlamak
Ornek olarak 2015 surumunden 2018 surumune gecise bakalim. 2021 gibi baska surumlere geciste de adimlar temelde aynidir.
Elimizde src/lib.rs icinde su kodun oldugu bir crate oldugunu dusunun:
#![allow(unused)]
fn main() {
trait Ozellik {
fn islem(&self, i32);
}
}
Bu kod adsiz bir parametre, yani i32, kullaniyor. Bu yapi Rust 2018’de
desteklenmez, bu yuzden kod
derlenmez. Haydi bunu guncel hale getirelim.
Bağımlılıkları güncelleme
Baslamadan once bagimliliklarinizi guncellemeniz tavsiye edilir. Ozellikle bazi proc-macro’lar veya derleme zamaninda kod ureten bagimliliklar, yeni surumlerle uyumluluk sorunu yasayabilir. Son guncellemeden bu yana bu sorunlari gideren yeni yayinlar cikmis olabilir. Su komutu calistirin:
cargo update
Guncellemeden sonra her seyin calistigini dogrulamak icin testlerinizi
calistirmak isteyebilirsiniz. git gibi bir surum kontrol araci
kullaniyorsaniz, mantiksal ayrimi korumak icin bu degisiklikleri ayri bir
commit olarak kaydetmek isteyebilirsiniz.
Kodu yeni sürümle uyumlu hale getirme
Kodunuz yeni surumle uyumsuz ozellikler kullaniyor da olabilir, kullanmiyor da.
Bir sonraki surume gecisi kolaylastirmak icin Cargo, kaynak kodunuzu otomatik
olarak guncelleyebilen cargo fix alt komutunu sunar. Baslamak icin sunu
calistiralim:
cargo fix --edition
Bu komut kodunuzu denetler ve duzeltebildigi sorunlari otomatik olarak
duzeltir. src/lib.rs dosyasina tekrar bakalim:
#![allow(unused)]
fn main() {
trait Ozellik {
fn islem(&self, _: i32);
}
}
Kod, bu i32 degeri icin bir parametre adi eklenecek sekilde yeniden yazildi.
Bu ornekte daha once bir ad olmadigi icin cargo fix, kullanilmayan
degiskenlerde geleneksel oldugu uzere _ koydu.
cargo fix kodunuzu her zaman otomatik olarak duzeltemez. Bir seyi
duzeltemezse konsola bununla ilgili bir uyari yazar. Boyle bir uyari
gorurseniz kodu elle guncellemeniz gerekir. Tasima sureciyle calismaya dair
daha fazla ayrinti icin Gelişmis taşıma stratejileri bolumune bakin; hangi
degisikliklerin gerekli oldugunu aciklayan ilgili rehber bolumlerini de
okuyun. Sorun yasarsaniz kullanici forumlarindan
yardim isteyebilirsiniz.
Yeni özellikleri kullanmak için yeni sürümü etkinleştirme
Bazi yeni ozellikleri kullanabilmek icin yeni surume acikca gecmeniz gerekir.
Devam etmeye hazir oldugunuzda Cargo.toml dosyanizi duzenleyip yeni
edition anahtar/deger ciftini ekleyin. Ornegin:
[package]
name = "ornek"
version = "0.1.0"
edition = "2018"
Eger edition anahtari yoksa Cargo varsayilan olarak Rust 2015’i kullanir.
Ama bu ornekte 2018 secildigi icin kodumuz Rust 2018 ile derlenecektir.
Yeni sürümde kodu test etme
Siradaki adim, projenizi yeni surumde test etmektir. Her seyin hala dogru
calistigini dogrulamak icin proje testlerinizi, ornegin cargo test
kullanarak, calistirin. Yeni uyarilar cikarsa, derleyicinin onerilerini
uygulamak icin cargo fix komutunu --edition bayragi olmadan yeniden
calistirmayi dusunebilirsiniz.
Bu noktada yine de bazi elle degisiklikler gerekebilir. Ornegin otomatik tasima doctest’leri guncellemez; derleme zamaninda kod ureten yapilar veya makrolar da elle guncellenmek isteyebilir. Daha fazla bilgi icin [gelismis tasimalar bolumune] bakin.
Tebrikler. Kodunuz artik hem Rust 2015 hem de Rust 2018 icin gecerli.
Rustfmt ile yeniden biçimlendirme
Eger projenizde bicimlendirmeyi otomatik korumak icin rustfmt kullaniyorsaniz, yeni surumun bicimlendirme kurallarini kullanarak kodu yeniden bicimlendirmeyi dusunmelisiniz.
Yeniden bicimlendirmeden once, eger git gibi bir surum kontrol araci
kullaniyorsaniz, bu adımdan onceye kadar yaptiginiz tum degisiklikleri commit
etmek isteyebilirsiniz. Bicimlendirme degisikliklerini ayri bir commit’te
tutmak faydali olabilir; boylece hangi degisikliklerin sadece bicimlendirme,
hangilerinin ise gercek kod degisikligi oldugunu daha kolay gorebilirsiniz. Bu
ayrim git blame kullanirken de ise yarar.
cargo fmt
Daha fazla bilgi icin [stil surumleri bolumune] bakin.
Kararsız bir sürüme geçiş
Bir surum yayinlandiktan sonra, bir sonraki surume kadar yaklasik uc yillik bir zaman araligi olur. Bu surede bir sonraki surume yeni ozellikler eklenebilir; bu ozellikler yalnizca nightly kanalinda kullanilabilir. Bu ozellikler kararli hale gelmeden once test etmeye yardim etmek isterseniz nightly kanalini kullanabilirsiniz.
Adimlar kararli kanaldakine kabaca benzer:
- En guncel nightly surumu kurun:
rustup update nightly. cargo +nightly fix --editioncalistirin.Cargo.tomldosyasini duzenleyip en uste ([package]bolumunun ustune)cargo-features = ["edition20xx"]ekleyin veeditionalanini gecmek istediginiz surumu gosterecek sekildeedition = "20xx"yapin.- Yeni surumde calistigini dogrulamak icin
cargo +nightly checkcalistirin.
⚠ Dikkat: Bir sonraki surumde uygulanacak ozellikler icin
cargo fixtarafinda otomatik tasimalar henuz bulunmayabilir; ozelliklerin kendisi de tamamlanmamis olabilir. Mumkun oldugunda bu rehber, nightly’de hangi ozelliklerin uygulanmis oldugunu ve durumlarini aciklamalidir. Surum kararli hale gelmeden birkac ay once, tum yeni ozelliklerin tamamlanmis olmasi beklenir ve Rust Blog test cagrisi yapar.