Yazılım·3 dk okuma·

Python Alternatiflerinden 10.000 Kat Daha Hızlı: Rust ile Sürüm Yükseltme Aracı

Paylaş
Python Alternatiflerinden 10.000 Kat Daha Hızlı: Rust ile Sürüm Yükseltme Aracı

Tüm sürüm yükseltme meraklılarına, uykusuz Rust geliştiricilerine ve bumpversion kavramıyla yeni tanışan yazılım arkeologlarına selamlar! Gece saat 02:00'de bir projenin 0.1.0 sürümünü yayınlamak için bump-my-version patch komutunu çalıştırıp işlemci fanınızın SpaceX roketi gibi dönmesini izlemek ve yalnızca 0.1.0 → 0.1.1 gibi minik bir sayıyı artırmak için tam bir saniye beklemek oldukça tanıdık bir senaryodur. Bu noktada her rasyonel mühendisin yapacağı adım atıldı: Araç sıfırdan Rust ile yeniden yazıldı.

Python ve Node.js bağlamaları (bindings), modern bir CLI, no_std desteği ve saf Rust ile Git operasyonları yürüten gix kütüphanesiyle geliştirilen bump2version 0.2.0, yerini aldığı Python tabanlı CLI aracından ölçülebilir biçimde yaklaşık 10.000 kat daha hızlı çalışıyor.

🤔 Bekle, bump2version Tam Olarak Nedir?

Yazılım dağıtımı yaparken Cargo.toml, package.json, pyproject.toml, CHANGELOG.md ve README gibi dosyalarda sürüm numarasını tek tek arayıp güncellemek yorucudur. 11 farklı yerde sürümü değiştirip birini unuttuğunuzda CI hattı çöker. bump2version bu süreci otomatikleştirerek şu 5 temel işlevi sunar:

  • Sürüm dizgilerini tamamen yapılandırılabilir bir regex ile ayrıştırır (varsayılan: major.minor.patch SemVer).
  • Belirttiğiniz herhangi bir bileşeni artırır: major, minor, patch veya alpha → beta → stable gibi özel döngüsel aşamalar.
  • Uygun (?ms) DOTALL + MULTILINE semantiğini kullanan çok satırlı CHANGELOG desenleri dahil, birden çok dosyadaki sürüm ifadelerini yeniden yazar.
  • gix aracılığıyla commit ve etiket (tag) oluşturur — sıfır alt işlem (subprocess) çağrısıyla %100 saf Rust Git desteği sağlar ve commit geçmişinde hayalet yazarlar bırakmaz.
  • Tüm bu işlemleri crate kökünde #![forbid(unsafe_code)] yönergesi ile tamamen güvenli Rust (safe Rust) ilkelerine bağlı kalarak yürütür.

Yapılandırma: .bumpversion.toml

Tek bir yapılandırma dosyası ile birden çok dosya güncellenir, tek bir Git commit'i ve etiketi oluşturularak süreç tamamlanır:

[bumpversion]
current_version = "0.2.0"
commit = true
tag = true

[bumpversion:file:Cargo.toml]
search = 'version = "{current_version}"'
replace = 'version = "{new_version}"'

[bumpversion:file:CHANGELOG.md]
search = "## {current_version} \n Release notes line 1"
replace = "## {new_version} \n Release notes line 1"

🦀 Rust, Python ve Node.js: Bir Aşk Üçgeni

bump2version yalnızca bir Rust aracı değil; tek bir çatı altında farklı ekosistemleri buluşturan hibrit bir kütüphanedir:

Rust Crate Olarak:

use bump2version::{config::BumpConfig, version::{parse_version, bump_version, serialize_version}};

fn main() {
    let cfg = BumpConfig::default();
    let v = parse_version("1.2.3", &cfg).unwrap();
    let v2 = bump_version(&v, "patch", &cfg).unwrap();
    println!("{}", serialize_version(&v2, &cfg)); // 1.2.4
}

Python Paketi Olarak:

from bump_rs import bump_version, BumpConfig
print(bump_version("1.2.3", "patch")) # "1.2.4"
print(bump_version("1.2.3", "minor")) # "1.3.0"
print(bump_version("1.2.3", "major")) # "2.0.0"

💡 Yazılım Geliştirme Açısından Yorum ve Pratik Çıkarımlar

Bu çalışma, modern geliştirici araçlarının tasarımına dair önemli dersler sunar:

  1. Çalışma Zamanı ve Alt Süreç Yükü: Python CLI'larının yorumlayıcı başlatma ve kabuk üzerinden Git subprocess'leri çağırma maliyeti, gix ile saf bellek içi Rust operasyonları karşısında büyük bir darboğaz oluşturur.
  2. Çoklu Ekosistem Stratejisi: Performans kritik çekirdeği Rust ile güvenli inşa edip Python (bump-rs) veya Node.js katmanına bağlamak, geliştirici ergonomisi ile saf hızı birleştiren en ideal mimaridir.

[Orijinal kaynağa buradan ulaşabilirsiniz.](https://dev.to/wiseai/i-built-a-version-bump-tool-in-rust-that-is-10000x-faster-than-its-python-counterparts-i6b)

Paylaş

Bu konuyu daha derinlemesine öğrenmek ister misin?

Edumints'teki ücretsiz kursları incele ve bugün başla.

Kurslara Göz At →