[ad_1]
Python ve Rust, dil yelpazesinin görünüşte zıt uçlarını işgal eder. Çalışma zamanında yorumlanan Python, geliştiricilere esnek ve rahat bir programlama ortamı sunar, ancak ham hız pahasına. Rust, hızın yanı sıra bellek güvenliğini garanti eder, ancak bellek işlemlerini yürütmek için yeni bir paradigma öğrenmenizi gerektirir.
Teoride, bu diller rekabet etmemeli; işbirliği yapmalıdırlar. Ve pratikte yapabilirler. Rust, Python’un kullanım kolaylığından yararlanabilir ve Python, Rust’ın hızından ve güvenliğinden yararlanabilir.
Rust’ı Python ile veya Python’u Rust ile kullanmak istiyorsanız, en iyi sonuçları elde etmek için en azından her iki dile de aşina olmanız gerekir. Ayrıca, her bir yaklaşım için seçenekler önemli ölçüde farklı olduğundan, ikisinden hangisinin birincil diliniz olduğuna karar vermeniz gerekecektir.
PyO3 ile Python’dan Rust’ı çağırmak
Python birincil dilinizse, Rust ile entegrasyon, kavramsal olarak Python’u C ile entegre etmekle aynı şekilde çalışır. Python’un C ile yazılmış varsayılan uygulaması, C ile yazılmış veya C uyumlu bir ABI kullanan uzantıları kullanır. Aynı ABI’yi kullanan Rust’ta yazılmış uzantılar da işe yarayacaktır, ancak bu otomatik değildir; Python C API’sine Rust işlevleri için bağlantılar sağlamak üzere tasarlanmış kasaları kullanmanız gerekir.
Python’da Rust bağlamaları oluşturma
Python’da Rust bağlamaları oluşturmak için en çok tanınan proje PyO3. Python modüllerini Rust’a yazmak veya Python çalışma zamanını bir Rust ikili dosyasına gömmek için kullanılabilir.
PyO3 başka bir projeden yararlanıyor, maturin, Python paketleme ve bağlamaları ile Rust kasaları yazmak için bir araçtır. Bir Python sanal ortamına kurulduğunda, Maturin, Python bağlamaları etkinleştirilmiş yeni bir Rust projesini başlatmak için komut satırından kullanılabilir. Geliştirici Rust kodundaki yönergeleri kullanır hangi Rust işlevlerinin Python’a sunulacağını ve Rust projesinin tamamının içe aktarılabilir bir modül olarak Python’a nasıl sunulacağını belirtmek için.
Rust ve Python türlerini eşleme
PyO3’ün kullanışlı yönlerinden biri, Rust ve Python türleri arasındaki eşlemeler. Rust’ta yazılan işlevler, yerel Python türlerini veya Python türlerinden dönüştürülmüş Rust türlerini kabul edebilir. Örneğin, bir bytearray
veya bytes
Python’daki nesne, zarif bir şekilde bir Vec<u8>
Rust’ta ve bir str
Python’da Rust olarak işlenebilir String
.
Python’dan Rust’a dönüştürme, arama başına ücrete tabidir, ancak sizi Python türlerini tamamen Rust kodunda kullanmak zorunda bırakmaz. Cython dünyasında bu, C türlerine dönüşümlere benzer: Her dönüşümün bir maliyeti vardır, ancak hedefiniz tamamen C’de sayısal işleme ise, bunlar büyük hızlanmalar sağlar.
Python’u Rust’tan cpython sandığı ile çağırmak
Öncelikle bir Rust geliştiricisiyseniz ancak Python’u bir Rust uygulamasında kullanmak istiyorsanız, kpython sandığı yapmanın basit bir yoludur. bu cpython
sandık, en yaygın Python çalışma zamanı olan (C ile yazıldığı için bu şekilde adlandırılmıştır) CPython yorumlayıcısına Rust bağlamaları sağlar.
Rust programları, CPython yorumlayıcısını çağırabilir ve onunla çalışabilir, bu da Rust’ta Python nesneleri oluşturmanıza ve değiştirmenize ve kütüphane çağrıları yapmanıza olanak tanır. Belgelerde bir örnek Python çalışma zamanının nasıl başlatılacağını, modüllerin nasıl içe aktarılacağını, Python nesnelerinin nasıl oluşturulacağını ve yöntem çağrılarının nasıl yürütüleceğini gösterir.
bu cpython
sandık ayrıca birkaç yararlı içerir makrolar. bu py_fn!
makro, örneğin, Python’dan çağrılabilir olması için bir Rust işlevini sarar. bu py_class!
makrosu, Rust sınıflarını Python sınıfı nesneleri olarak oluşturmanıza olanak tanır.
Rust’ı Python’dan daha iyi tanıyorsanız, en azından biraz aşina olmak iyi bir fikirdir. Python C API’si ve dalmadan önce çeşitli Python nesne türleri.
Performans ipucu
Her ikisi için de önemli bir uyarı cpython
ve PyO3, verilerin iki dil arasında geçiş yapma sayısını her zaman en aza indirmektir. Python’dan Rust’a veya tam tersi her çağrı biraz ek yüke neden olur. Genel gider, Rust’ta yaptığınız işten daha ağır basarsa, önemli bir performans artışı görmezsiniz.
Örnek olarak, bir nesne koleksiyonu üzerinde döngü yapıyorsanız, nesneyi Rust’a gönderin ve döngüyü orada gerçekleştirin. Bu, Python tarafında döngü yapmaktan ve döngünün her yinelemesinde Rust kodunu çağırmaktan daha verimlidir.
Bu yönerge ayrıca genel olarak Python ile Cython modülleri gibi Python C ABI’yi kullanan diğer kodlar arasındaki entegrasyonlar için de geçerlidir.
Telif Hakkı © 2022 IDG Communications, Inc.
[ad_2]
Kaynak : https://www.infoworld.com/article/3664124/how-to-use-rust-with-python-and-python-with-rust.html#tk.rss_all