Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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:

  1. Bagimliliklarinizi en guncel surumlere yuklemek icin cargo update calistirin.
  2. cargo fix --edition calistirin.
  3. Cargo.toml dosyasini duzenleyip edition alanini bir sonraki surume ayarlayin; ornegin edition = "2024".
  4. Duzeltmelerin ise yaradigini dogrulamak icin cargo build veya cargo test calistirin.
  5. Projeyi yeniden bicimlendirmek icin cargo fmt calistirin.

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:

  1. En guncel nightly surumu kurun: rustup update nightly.
  2. cargo +nightly fix --edition calistirin.
  3. Cargo.toml dosyasini duzenleyip en uste ([package] bolumunun ustune) cargo-features = ["edition20xx"] ekleyin ve edition alanini gecmek istediginiz surumu gosterecek sekilde edition = "20xx" yapin.
  4. Yeni surumde calistigini dogrulamak icin cargo +nightly check calistirin.

⚠ Dikkat: Bir sonraki surumde uygulanacak ozellikler icin cargo fix tarafinda 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.