Rust VS Go, geliştiriciler 2023'te hangi dili seçmeli?

Kaynak: InfoQ

2023'te Rust'u öğrenmek için binlerce nedenimiz var.

7 Ağustos'ta Rust Vakfı, 2022 Rust Anket Raporu'nun sonuçlarını yayınladı. Rapor, Rust'ın benimsenme oranının artmaya devam ettiğini gösteriyor. Ankete katılanların %90'ından fazlası Rust kullanıcısı olduklarını belirtti; Rust, kodlamanın çoğunluğu , bir önceki yıla göre %51,8'lik önemli bir artış.

Hiç şüphe yok ki Rust, mükemmel bellek güvenliği ve eşzamanlılık performansı ile geliştiricilerin giderek daha fazla odak noktası haline geliyor. Bununla birlikte, bir zamanlar yılın programlama dili seçilen nispeten "kıdemli" bir oyuncu olan Go'yu da görmezden gelmek zor.

2009'da doğan Go dili, benzersiz eşzamanlılık modeli ve güçlü performans avantajlarından bu yana büyük ilgi gördü. Rust dili gibi, Go dilinin yaratıcısının da C++'dan "nefret ettiğini" ve Go'nun da bulut yerel dilinin baskın dili olduğunu belirtmekte fayda var.

Stack Overflow 2022 geliştirici anketinde, "insanları hem sevdiren hem de nefret ettiren bir programlama dili" sorusuna verilen 70.000 yanıt arasında programcılar açıkça Rust'u tercih ediyor, %86'sı Rust'u ve %64'ü Go'yu sevdiğini söyledi. Rust'ın sıcak durumuyla karşı karşıya kalan bazı geliştiriciler ruhlarına sordu: Go, 2023'te hala öğrenmeye değer mi?

Rust VS Go, geliştiriciler 2023'te hangi dili seçmeli?

Rust VS Go, geliştiriciler 2023'te hangi dili seçmeli?

Ek olarak, geçtiğimiz iki gün içinde Rust'un mu yoksa Go'nun mu seçileceği de Hacker News'te sıcak bir konu haline geldi:

Rust VS Go, geliştiriciler 2023'te hangi dili seçmeli?

Rust'u destekleyen bir netizen şunları söyledi: "Ben de uzun süredir bu seçimden rahatsızım. Sonunda Rust kazandı. Birincisi, Rust'ın önceki Pascal dönemindeki şeylere daha yakın olduğunu hissediyorum ve her şeyi kontrol edebiliyorsun." ; ikincisi, wasm ve ilgili teknolojiler büyük bir salgınsa, Rust daha güvenli bir seçim olacaktır; o zaman, hızlı geliştirme için zaten Python'a sahibiz, bu nedenle biraz daha aşırı bir şey seçmek mantıklı ve Go biraz orta noktada. Son olarak, Rust Core ve yüksek profil için kullanılmalı, bu yüzden ortadan kaldırılması pek mümkün değil."

Aynı fikirde olmayan başka bir geliştirici, "Neredeyse on yıldır Go'da geliştirme yapıyorum, ancak son zamanlarda Rust'ı da denedim. Şu anda Rust için bazı zorunlu ve yanıltıcı tercihler olduğunu düşünüyorum. şu anki Go, arka uç geliştirme için açık ara en iyi seçim! Not, performans, işlevsellik veya başka türlü... iki dil çok ama çok benzer! "

Go ve Rust'ın kesinlikle mükemmel programlama dilleri olduğunu söylemeliyim. Modern, güçlü, çok yönlüdürler ve mükemmel performans sunarlar. Ancak Go ve daha iyi olan Rust'u doğrudan karşılaştırmak gerçekten mantıklı değil, çünkü her programlama dili arkasında bir dizi derin değiş tokuşu temsil ediyor. Farklı ihtiyaçlar için farklı diller optimize edilecektir, bu nedenle bir dil seçerken, onu ne tür sorunları çözmek için kullanmak istediğimizi de düşünmeliyiz. Bu nedenle, Go ve Rust dillerinin uygulanabilir senaryolarından başlayacağız ve Go ve Rust'ın tasarımının "yolunu" tartışacağız.

Rust ve Go, sözdizimi ve stil açısından büyük farklılıklar gösterse de, her ikisi de yazılım oluşturmak için birinci sınıf araçlardır. Aşağıdaki özel analize başlayalım.

Go ve Rust: Benzerlikler

Rust ve Go'nun pek çok ortak noktası var, bu yüzden insanlar genellikle ikisini karşılaştırıyor. Hangi ortak hedefleri var?

Rust, güvenlik ve performansa daha fazla odaklanan, düşük seviyeli, statik olarak yazılmış, çok paradigmalı bir programlama dilidir.

—Gints Dreimanis

Ve:

Go, basit, güvenilir ve verimli yazılım oluşturmayı kolaylaştıran açık kaynaklı bir programlama dilidir.

—golang.org

Bellek Güvenliği

Go ve Rust, bellek güvenliğine önem veren modern programlama dilleri arasındadır. C ve C++ gibi daha eski dillerin onlarca yıllık gelişimi boyunca, hataların ve hataların temel nedenlerinden birinin belleğe güvensiz/yanlış erişim olduğu açık hale geldi.

Rust ve Go'nun her biri farklı çözümler sundu, ancak her ikisinin de amacı, bellek yönetimi açısından daha akıllı ve daha güvenli olmak ve geliştiricilerin mükemmel performansla doğru programlar yazmasına yardımcı olmaktır.

Hızlı, kompakt çalıştırılabilir

Her ikisi de derlenmiş dillerdir; bu, programların doğrudan yürütülebilir makine koduna çevrilebileceği ve böylece programların tek bir ikili dosya olarak konuşlandırılabileceği anlamına gelir. Python ve Ruby gibi yorumlanan dillerin aksine, programla birlikte bir yorumlayıcı ve çok sayıda kitaplık/bağımlılık göndermemize gerek yok. Bu temel gücün doğrudan bir yansıması olarak Rust and Go programları, yorumlanan dillerden daha hızlı çalışma eğilimindedir.

Genel Amaçlı Dil

Hem Rust hem de Go, web uygulamalarından dağıtılmış mikro hizmetlere, gömülü mikro denetleyicilere, mobil uygulamalara ve daha fazlasına kadar her türlü modern yazılımı geliştirmek için kullanabileceğiniz güçlü ve genişletilebilir genel amaçlı programlama dilleridir. **Her ikisi de mükemmel standart kitaplıklara ve gelişen üçüncü taraf ekosistemlere, ayrıca güçlü ticari desteğe ve geniş bir kullanıcı tabanına sahiptir. **Her ikisi de yıllardır var ve önümüzdeki yıllarda gelişmeye devam edecek. Go veya Rust'u öğrenmek, bu günlerde çok makul bir zaman ve enerji yatırımı olacaktır.

Pragmatik programlama stili

Ne aşırı işlevsel diller (Scala veya Elixir gibi) ne de tamamen nesne yönelimli (Java ve C# gibi). Aksine, hem Go hem de Rust, işlevsel ve nesne yönelimli programlama işlevlerine sahip olsalar da, her zaman pragmatik yönelimi vurgularlar - yani herkesi bir program kullanmaya zorlamak yerine sorunu en uygun şekilde çözerler. "ideoloji" yoluyla belirli bir yöntem, bir şeyler yapmanın yolu. **Fakat işlevsel programlama stilini gerçekten seviyorsanız, Rust tarafında Rust'ın Go'ya göre avantajlarından biri olan daha fazla ilgili araç seçeneği vardır. **

Gerçekten "nesne yönelimli" bir dilin ne olduğu hakkında kesinlikle tartışabiliriz. Ancak dürüst olmak gerekirse, C++, Java veya C# kullanıcılarının beklediği nesne yönelimli programlama tarzı Go veya Rust'ta gerçekten mevcut değil.

—Jack Mott

Devasa Geliştirme

Hem Rust hem de Go, büyük ölçekli programlama için pek çok yararlı özellik sağlar, böylece hem büyük geliştirme ekiplerinin hem de büyük kod tabanlarının gerçek dünyadaki ihtiyaçlarına uyum sağlayabilirler. **Örneğin, C programcıları yıllarca parantezleri nereye koyacaklarını ve kodun sekmelerle mi yoksa boşluklarla mı girilmesi gerektiğini tartıştılar; ancak Rust ve Go zaten standart biçimlendirme araçlarını kullanıyor (Go'da gofmt var, Rust Rust, rustfmt'dir) bunları tamamen çözüyor problemler. Uygun bir stil kullanarak kodunuzu otomatik olarak yeniden yazarlar.

Bu özel biçim incelikli değildir, ancak **Rust and Go programcıları daha pragmatiktir ve tek tip bir uygulama standardı seçmeyi tercih ederler. **

gofmt'un tarzı herkesin favorisi olmayabilir ama gofmt'ta herkes için bir şeyler vardır.

—Rob Pike

Bu iki dilin bir diğer büyük avantajı da build ardışık düzeninde yansıtılmaktadır. Her ikisi de mükemmel, yerleşik ve yüksek performanslı standart yapı ve bağımlılık yönetimi araçlarına sahiptir. Bu, programcıların karmaşık üçüncü taraf yapı sistemleriyle uğraşması gerekmediği veya birkaç yılda bir yeni bir sistem öğrenmesi gerekmediği anlamına gelir.

Kariyerimin başlarında Java ve Ruby kullandım, bu yüzden Go and Rust kodu yazmak her zaman biraz göz korkutucu ve kontrolüm dışında olmuştur. Ancak Google'a girip Go'da yazılmış bir hizmet gördüğümde gerçekten rahatladım çünkü oluşturmayı ve çalıştırmayı kolay buldum.

Aynısı Rust için de geçerli. Sadece küçük ölçekli projeler üzerinde araştırma yapmış olmama rağmen kullanım kolaylığını görebiliyorum. Keşke bu sonsuz şekilde yapılandırılabilen yapı sistemleri geçmişte kalsaydı, artık yeni diller kutudan çıkar çıkmaz çalışan kendi özel oluşturma araçlarıyla geldiğinden, o kadar iyi değil mi?

—Sam Gül

**Paslanmak mı Gitmek mi? **

Bu kadar çok konu hakkında konuştuktan ve her iki dilin de bu kadar iyi tasarlanmış ve güçlü olduğu gerçeğinden sonra, bu yarışmada herhangi bir sonuç var mı? Veya, her ikisi de mükemmel seçenekler olduğuna göre, insanlar neden sosyal medyada "Rust aptallar içindir" veya "Go hiç de bir programlama dili değildir" gibi uzun yorum blog yazıları yazarak öfkeleniyorlar.

Tabii ki, bazı insanlar sadece duygularını dışa vurmak isterler, ancak bu açıkça asıl sorunu çözmeye yardımcı olmaz. En azından bir projede hangi dilin kullanılacağı veya programlama dünyasına girmek için hangi dilin kullanılacağı söz konusu olduğunda, yüksek sesler açıkça doğru seçimi yapmaya yardımcı olmuyor.

Yetişkin tartışmasına geri dönelim ve rasyonel analiz altında Rust and Go'nun nasıl güçlü ve zayıf yönleri olduğunu görelim.

Go ve Rust: Performans

Daha önce bahsedildiği gibi, Go ve Rust tarafından oluşturulan programlar hızlıdır çünkü bir yorumlayıcı veya sanal makineden geçmeden yerel makine koduna derlenirler. Ancak endüstrinin performans ölçütleri olarak bilinen C ve C++ ile kıyaslandığında bile Rust'ın performansı yine de daha iyi. Ve bu eski moda dillerin aksine Rust, yürütme hızını neredeyse hiç etkilemeden bellek güvenliği ve eşzamanlılık güvenlik mekanizmaları da sağlar. Rust, geliştiricilerin çalışma zamanında bir performans cezası ödemeden karmaşık soyutlamalar oluşturmasına da olanak tanır.

Bunun aksine, Go programlarının performansı da iyi olsa da, tasarımın odak noktası uygulama derecesinden çok (derleme dahil) geliştirme hızıdır. Go programcıları net ve okunabilir kodu tercih eder, bu nedenle çalışma hızı biraz daha yavaştır.

Go derleyicisi ayrıca en verimli makine kodunu oluşturmak için fazla zaman harcamaz, daha çok büyük miktarda kodu hızlı bir şekilde derlemekle ilgilenir. **Bu nedenle, çalışma zamanı kıyaslamalarında genellikle Go programını aşan Rust programıdır. **

Çöp toplamayı kullanmadığı için Rust'ın çalışma zamanı performansı da oldukça tutarlı ve tahmin edilebilir. Go'nun çöp toplayıcısı çok verimlidir ve duraklama sürelerini olabildiğince kısa tutacak şekilde optimize edilmiştir (her Go sürümünde duraklama süreleri kısalır). Ancak yine de, çöp toplama, programın davranış biçiminde her zaman bir miktar öngörülemezlik getirir ve bu, belirli uygulamalar (gömülü sistemler gibi) için ciddi veya hatta tamamen kabul edilemez olabilir.

Rust'ın amacı, programcıya temeldeki donanım üzerinde tam kontrol sağlamak olduğundan, **Rust programları, makinenin maksimum teorik performansına yaklaşmak için derinlemesine optimize edilebilir. **Bu, Rust'ı oyun programlama, işletim sistemi çekirdekleri, web tarayıcı bileşenleri ve gerçek zamanlı kontrol sistemleri gibi yürütme hızının diğer her şeyden üstün olduğu belirli kullanım durumları için en iyi seçenek haline getirir.

  • Basitlik

Öğrenmesi çok zorsa ve çoğu insanı dışarıda tutuyorsa, bir programlama dilinin ne kadar güçlü olduğunun bir önemi yoktur. Go, kendisini C++ gibi karmaşıklığı artan dillerden ayırmak için kasıtlı olarak tasarlanmış gibi görünüyor: **Çok az sözdizimine, çok az anahtar kelimeye ve hatta çok fazla işleve sahip değil. **

Bu, Go dilinin öğrenilmesinin kolay olduğu ve biraz anladıktan sonra onunla çeşitli programlar yazabileceğiniz anlamına gelir.

Go'nun öğrenmesi gerçekten çok kolay. Bundan daha önce çokça bahsedildiğini duydum, ancak kullandıktan sonra üretkenliği ne kadar hızlı geliştirdiğine hâlâ hayret ediyorum. Go dili, ilgili dokümantasyon ve araçlar sayesinde sadece iki günde ilginç ve uygulanabilir kodlar yazdım.

—Rust Programcısının Go İle İlgili İlk İzlenimleri

Buradaki kilit nokta "basitlik" üç kelimedir. Tabii ki, basit kolay anlamına gelmez. Ancak küçük ve basit bir dili öğrenmek, büyük ve karmaşık bir dili öğrenmekten kesinlikle daha kolaydır. Tek bir etki elde etmenin pek çok yolu yoktur, bu nedenle yüksek kaliteli Go kodu neredeyse her zaman aynı görünür. Bunun başka bir faydası daha var: Aşina olmadığımız bir servisin ne işe yaradığını hızlıca anlayabiliyoruz.

Rust VS Go, geliştiriciler 2023'te hangi dili seçmeli?

**Go'nun temel ontolojisi küçüktür, ancak standart kitaplık çok güçlüdür. **Yani, Go sözdizimine ek olarak, öğrenme eğrimiz standart kitaplığın bu bölümünü de dikkate almalıdır.

Öte yandan, işlevlerin dilden standart kitaplığa aktarılması, herkesin yalnızca mevcut geliştirme gereksinimleriyle ilgili kitaplıkları öğrenmeye odaklanması gerektiği anlamına gelir. **Go aynı zamanda büyük ölçekli yazılım geliştirme gereksinimleri tamamen dikkate alınarak tasarlanmıştır ve büyük kod tabanlarını ve geliştirme ekiplerini güçlü bir şekilde destekleyebilir. **Bu tür bir senaryoda, yeni geliştiricilerin hızla başlayabilmesi gerekir. Bu amaçla Go topluluğu, programların basitliğine, açıklığına, çok yönlülüğüne ve doğrudanlığına her zaman öncelik vermiştir.

GO dilini kullanarak, genç geliştiricilerin üretken olması genellikle daha kolaydır, ancak orta düzey geliştiricilerin karmaşık soyutlamalar sunması ve dolayısıyla sorunlara neden olması daha zordur. Bu özelliği nedeniyle Rust, kurumsal yazılım geliştirme dünyasında Go'dan daha az çekici olma eğilimindedir.

— Loris Cro

  • İşlev

Rust, diğer bazı programlama dillerinden daha fazla karmaşıklığı destekler, bu nedenle karşılık gelen uygulama kapsamı da daha büyüktür.

— Devaton

**Rust, programcıların daha az kodla daha fazlasını yapmasına yardımcı olan çeşitli güçlü ve kullanışlı özellikleri içerecek şekilde özel olarak tasarlanmıştır. **Örneğin, Rust'ın eşleştirme işlevi, hızlı bir şekilde esnek ve anlamlı mantık yazmayı mümkün kılar:

Rust VS Go, geliştiriciler 2023'te hangi dili seçmeli?

Ancak Rust'ın birçok tasarım düşüncesi olduğundan, özellikle ilk aşamada öğrenmesi daha zordur. Ama sorun değil, C++ veya Java'nın öğrenecek çok şeyi var ve Rust'ın bellek güvenliği gibi gelişmiş özelliklerini bile sunmuyor. Bu nedenle, Rust'ın çok karmaşık sesini eleştirmek gerçekten mantıksız: ifadeyi ve zengin işlevleri vurgulamak için tasarlandı, faydalarından yararlanırken bu kadar basit ve saf olmasını bekleyemeyiz. Elbette Rust'ın kendi öğrenme eğrisi var. Ancak bu zorluk aşıldığı sürece önünüzde düzgün bir yol olacaktır.

En yüksek performans düzeyi karşılığında daha karmaşık sözdizimi ve anlambilim (ve kod okunabilirliği için daha yüksek bir çıta) öğrenmeye hazırsanız, Rust C++ ve D'ye bile rakip olabilir. —Dave Cheney

**Rust ve Go'nun bazı özellikleri (jenerikler gibi) birbirinden ödünç almasına rağmen, Rust'ın özelliklerinin hala üstün olduğunu ve Go'nun özelliklerinin nispeten eksik olduğunu söylemek doğru olur. **

  • Eşzamanlılık

Çoğu dil, eşzamanlı programlama için bir tür destek sağlar (yani, aynı anda birden çok işlemi gerçekleştirme), ancak Go, sıfırdan bunun için tasarlandı. **Go, işletim sistemi dizilerini kullanmaz, ancak hafif bir alternatif sunar: gorutinler. **Her goroutine, bağımsız olarak yürütülen bir Go işlevidir ve Go zamanlayıcısı, kontrol altındaki işletim sistemi iş parçacıklarından birine eşler. Diğer bir deyişle, programlayıcı, yalnızca sınırlı sayıda işletim sistemi iş parçacığı kullanırken çok sayıda eşzamanlı gorutini çok verimli bir şekilde yönetebilir.

Bu nedenle, ciddi performans sorunlarına neden olma endişesi olmadan, tek bir programda milyonlarca eşzamanlı goroutine çalıştırabiliriz. Bu nedenle **Go, web sunucuları ve mikro hizmetler gibi büyük ölçekli eşzamanlı uygulama senaryoları için eksiksiz bir çözümdür. **

Go ayrıca gorutinler için kanallar sağlar, bu kanal iletişim kurmanın ve verileri paylaşmanın hızlı, güvenli ve verimli bir yoludur. Go'nun eşzamanlı tasarım düzeyi gerçekten çok yüksek ve kullanım deneyimi oldukça rahat ve keyifli.

Genel olarak, eşzamanlı programların tasarımı çok zordur ve herhangi bir dilde güvenilir ve doğru eşzamanlı programlar oluşturmak hiç de kolay değildir. Ancak, bu gereklilik projenin başında dikkate alındığından, Go'daki eşzamanlı programlama mekanizması mümkün olduğunca basit ve iyi entegre edilmiştir.

Go, bir dizi mikro hizmet olarak konuşlandırılabilen ve eş zamanlılığın tüm avantajlarından yararlanabilen, dikkatlice yapısızlaştırılmış bir uygulama oluşturmayı kolaylaştırır. Rust'ta imkansız değil, sadece uygulaması daha zor. Bir anlamda, Rust, bellek sorunlarından kaynaklanan güvenlik açıklarına izin vermemesi gereken programcılar için daha uygundur; ancak buna bağlı olarak, diğer diller (GO dahil) için nispeten basit olan bazı görevleri yerine getirdiklerinde, ödemeyi tercih ederler. Daha fazla çaba. —Sonya Koptyev

Buna karşılık, Rust'taki eşzamanlılık mekanizması yeni geldi ve henüz dengelenmedi, dolayısıyla herkes bu aktif geliştirme yönüne dikkat etmeye devam edebilir. Bu da faydalıdır.Örneğin, Rust'un suni ipek kütüphanesi, sıralı hesaplamaları paralel hesaplamalara çevirebilen çok zarif ve hafif bir yöntem sunar.

Goroutinler oluşturmak ve kanalları kullanmak için hafif bir sözdizimine sahip olmak gerçekten güzel olurdu. Bu, dilbilgisinin gücünün doğrudan bir tezahürüdür ve çeşitli küçük ayrıntılar da Go'nun eşzamanlı programlama deneyimini diğer dillerden çok daha iyi hale getirir.

—Rust Programcısının Go İle İlgili İlk İzlenimleri

Rust'ta eşzamanlı programları uygulamak kolay olmasa da yine de mükemmel bir şekilde yapılabilir ve** bu programlar Rust'ın dikkatle tasarlanmış bellek güvenliği garantilerinden de yararlanır. **Örnek olarak standart kitaplığın Mutex sınıfını ele alalım: Go'da bir şeye erişmeden önce muteksi almayı unutabiliriz, ancak Rust'ta bunun için endişelenmenize hiç gerek yok.

Go, temel kavramlardan biri olarak eşzamanlılığa odaklanır. Bu, Go in Rust'a benzer eşzamanlılık efektleri elde edemeyeceğimiz anlamına gelmez, ancak uygulamanın zorluğu, programcılar için bir şekilde bir testtir. Go, temel kavramlarından biri olarak eşzamanlılığa odaklanır. Bu, Go in Rust'a benzer eşzamanlılık efektleri elde edemeyeceğimiz anlamına gelmez, ancak uygulamanın zorluğu, programcılar için bir şekilde bir testtir.

——Dave Cheney

  • emniyet

Daha önce bahsedildiği gibi, hem Go hem de Rust, özellikle bellek yönetimi ile ilgili sorunlar olmak üzere çeşitli yaygın programlama hatalarını önlemek için kendi yöntemlerine sahiptir. Ancak **Rust daha da ileri giderek, herkesin beklenmedik güvenlik hataları yapmamasını sağlamak için hiçbir çabadan kaçınmadığı söylenebilir. **

Rust'ın derleyicisi o kadar katıdır ki kullandığımız her değişkeni, başvurduğumuz her bellek adresini kontrol eder. Olası veri yarışı koşullarından kaçınır ve ayrıca sizi tanımlanmamış davranışlar konusunda bilgilendirir. Rust dünyasında eşzamanlılık ve bellek güvenliği sorunlarının ortaya çıkması neredeyse imkansızdır.

— Neden Rust'u seçmelisiniz?

Bununla birlikte, Rust'taki programlama deneyimi neredeyse tüm diğer dillerden farklıdır ve ilk tanıtıldığında oldukça zorlayıcı olabilir. Ancak birçok geliştiricinin gözünde bu çaba, verilen paraya kesinlikle değer.

Benim için Rust'ın en büyük avantajı, derleyicinin benim iyi yardımcım olması, tespit edilen hataları kaçırmaması (cidden, bazen bana sihir gibi geliyor).

—Grzegorz Nosek

Go da dahil olmak üzere birçok dil, programcıların hatalardan kaçınmasına yardımcı olacak araçlar sağlar, ancak Rust bu etkiyi yeni bir düzeye taşır. Birçok yanlış program hiç derlenmez bile.

Rust'ta çeşitli kütüphane olanakları, programcıların kullanıcı hatalarını önlemesine yardımcı olur. Rust, bir veri parçasını belirlememize ve ardından başka herhangi bir şeye ait olmadığını veya başka bir şey tarafından değiştirilemeyeceğini garanti etmemize olanak tanır. Daha önce yanlışlıkla kötüye kullanımı önlemek için bu kadar çok araç sağlayan ve harika hissettiren bir dil düşünemiyorum. —Sam Rose

Rust'a yeni gelenler için "ödünç denetleyiciyle savaşmak" bir zorunluluktur, ancak çoğunlukla, denetleyici gerçekten düşman değildir. Bulduğu sorunlar aslında koddaki gerçek hatalardır (veya en azından potansiyel hatalardır). Bu tür sorunlardan kaçınmak için programlarımızı temelden yeniden düzenlemeye zorlayabilir - Doğruluğu ve güvenilirliği gerçekten birinci önceliğiniz olarak görüyorsanız, bu katı gereklilik kesinlikle iyi bir şeydir.

Başka bir açıdan bakıldığında, programlama yöntemini değiştirmeyen yeni bir dile yeni dil denilebilir mi? Ve diğer dilleri kullanırken Rust bize güvenli düşünmeyi öğretir ki bu da eşit derecede önemlidir.

İnsanlar Rust'ı seçerse, bunun nedeni genellikle sağladığı garantili tasarımdır: boş işaretçiler/veri yarışları hakkında güvenlik, öngörülebilir çalışma zamanı davranışı ve donanım üzerinde tam kontrol. Bu size mantıklı gelmiyorsa, gerçekten Rust kullanmaya gerek yok. Ne de olsa, bu faydaların arkasında bir bedel var: Başlamak zor. Kötü alışkanlıkları kırmalı ve yeni kavramlarda ustalaşmalısınız. Başlangıçta, herkes borç kontrolörü tarafından işkence edilerek öldürülecek.

— Matthew Endler

Rust programlama modeline başlamanın gerçek zorluğu daha önce başka hangi dilleri kullandığınıza bağlı olabilir. Python veya Ruby programcıları Rust'ı çok kısıtlayıcı bulabilir, ancak başkaları netliği ve net kısıtlamaları hoş bulabilir.

Bir C veya C++ programcısıysanız ve haftalarca dilde bellek güvenlik hataları arayarak geçirdiyseniz, Rust'a bayılacaksınız. Yani "ödünç denetleyiciyle savaşmak", "bir derleyici ile bu hala mümkün mü? Harika!"

— Grzegorz Nosek

  • Çoğaltmak

Bugünün sunucu programları, yüzlerce programcı tarafından yazılmış on milyonlarca satır kod içerir ve neredeyse her gün güncellenir. Tasarım ve geliştirme açısından Go, böyle bir ortamda iş verimliliğini artırma ihtiyacını tamamen dikkate alır. Go için tasarım hususları arasında katı bağımlılık yönetimi, sistem büyüdükçe yazılım mimarisinin uyarlanabilirliği ve bileşen sınırları boyunca sağlamlık yer alır. —Rob Pike

Bir problemi tek başınıza veya küçük bir ekiple çözerken, basit bir dil mi yoksa zengin bir dil mi seçeceğiniz tamamen kişisel tercih meselesidir. Ancak yazılım ölçeğinin, karmaşıklığın ve ekibin genişlemesinin genişlemesiyle iki dil arasındaki farklar gerçekten ortaya çıkmaya başladı.

Büyük uygulamalar ve dağıtılmış sistemler için, kod yürütme hızı genellikle geliştirme hızından daha az önemlidir: Yalın tasarımı kasıtlı olarak vurgulayan Go gibi bir dil, yeni geliştiricilerin uyum süresini kısaltabilir ve onların daha hızlı katılımını sağlayabilir Büyük kod tabanlarına katkıda bulunmak.

GO dilini kullanarak, genç geliştiricilerin üretken olması genellikle daha kolaydır, ancak orta düzey geliştiricilerin karmaşık soyutlamalar sunması ve dolayısıyla sorunlara neden olması daha zordur. Bu özelliği nedeniyle Rust, kurumsal yazılım geliştirme dünyasında Go'dan daha az çekici olma eğilimindedir.

— Loris Cro

Büyük ölçekli yazılım geliştirme söz konusu olduğunda netlik ve okunabilirlik her zaman zarafetten daha önemlidir. **Go'nun sınırlamaları, Rust gibi daha karmaşık ve güçlü dillere göre onu işletmelerin ve büyük kuruluşların ihtiyaçlarına daha uyumlu hale getirir. **

Pas ve Gitme: Farklar

Hem Rust hem de Go popüler ve yaygın olarak kullanılan modern diller olsa da, tamamen farklı kullanım durumlarını hedefledikleri için gerçekten rakip değiller**.

Go'da programlamaya yönelik tüm yaklaşım Rust'tan tamamen farklıdır ve bu özellikler özellikle bazı insanlar için uygundur, ancak öte yandan diğerlerini tamamen rahatsız edebilir. Hangisi mantıklı, çünkü Rust ve Go temelde aynı sorunları temelde benzer yollarla çözüyorsa, neden iki ayrı dile ihtiyacımız var?

O halde Rust ve Go'nun yaklaşımlarından yola çıkıp özlerini yorumlayabilir miyiz? Gelin birlikte deneyelim.

  • çöp toplama

"Çöp toplamak ya da toplamamak" her zaman doğru cevabı olmayan bir sorudur. Genel olarak çöp toplama ve otomatik bellek yönetimi, hızlı ve kolay bir şekilde güvenilir ve verimli programlar geliştirmemize yardımcı olabilir. Dolayısıyla, bazı geliştiriciler için bunlar temel özelliklerdir.

Diğerleri, performans yükü ve genel duraklamalarla çöp toplamanın öngörülemeyen çalışma zamanı davranışına yol açabileceğini ve kabul edilemez gecikmeye neden olabileceğini savunuyor. Elbette bu sözün doğruluk payı var.

Go ve Rust çok farklı iki dildir. Her ikisi de basitçe bir sistem dili veya C'nin yerine geçen olarak tanımlanabilse de, hedefleri ve uygulama senaryoları, dil tasarım stilleri ve işlev öncelikleri gerçekten çok farklıdır. Çöp toplama, büyük bir temel farklılaştırıcıdır. Go'daki çöp toplama, dili daha basit, daha küçük ve daha kolay anlaşılır hale getirir. Rust'ın çöp toplama özelliği yoktur, bu da onu son derece hızlı kılar (bu özellikle yalnızca yüksek verim değil, aynı zamanda düşük gecikme süresi isteyen geliştiriciler için uygundur) ve ayrıca Go'nun hiç yapamayacağı bir dizi işlevi ve programlama modelini gerçekleştirir ( At en azından performanstan ödün vermeden).

— PingCAP

  • donanıma yakın

Bilgisayar programlama tarihinin giderek karmaşıklaşan soyut bir geliştirme süreci olduğu söylenebilir. Programcıların, altta yatan donanımın gerçekte nasıl çalıştığına çok fazla dikkat etmeden sorunları çözmelerine olanak tanır. Bu tasarım, programları yazmayı daha kolay ve daha taşınabilir yapar. Ancak diğer programlar için, donanıma erişim ve programın nasıl yürütüldüğü üzerinde kesin kontrol daha önemlidir.

**Rust'ın amacı, programcıların "donanıma yaklaşmasına" ve daha fazla kontrol sahibi olmasına izin vermektir; Go ise mimari detayları soyutlayarak programcıların soruna yaklaşmasına olanak tanır. **

Her iki dilin de farklı uygulama alanları vardır. Go, mikro hizmetler ve tipik "DevOps" görevleri yazmakta iyidir, ancak bir sistem programlama dili değildir. Rust, eşzamanlılık, güvenlik ve/veya performansı vurgulayan görevlerde daha güçlüdür ve Go'dan daha dik bir öğrenme eğrisine sahiptir.

— Matthew Endler

  • Önce performans

Aslında, çoğu program için performans, kodun okunabilirliğinden daha az önemlidir. Ancak bazı projeler performansı gerçekten ön planda tutuyorsa, **Rust'ta kodunuzun yürütme hızını sonuna kadar zorlamanıza yardımcı olacak birçok tasarım değiş tokuşu vardır. **

Buna karşılık Go, kod basitliğine daha çok önem verir ve hatta bunun için çalışma zamanı performansının bir kısmını feda etmeye isteklidir. Ancak Go'nun oluşturma hızı benzersizdir ve bu, büyük ölçekli kod projeleri için genellikle daha da önemlidir.

Rust, Go'dan daha hızlı çalışır. Kıyaslamalarda Rust, bazı durumlarda büyüklük sırasına göre gerçekten daha hızlıdır. Ancak Rust'ı seçmeden önce net olun: Go, çoğu kıyaslamada çok geride değil ve Java, C#, Java ve Python gibi dillere göre performans avantajını koruyor.

Birinci sınıf performansa ihtiyacınız varsa, bu iki dilden herhangi birini seçebilirsiniz ve hız performansı sizi asla hayal kırıklığına uğratmayacaktır. Ayrıca, yüksek yoğunluklu yüklerin üstesinden gelen ve esnek dikey/yatay ölçeklendirme gerektiren bir web hizmeti oluşturuyorsanız, her iki dil de ihtiyaçlarınızı karşılayabilir.

— Andrew Lader

  • Doğruluk

Öte yandan, programı asla yanlış gitmemesi için zorlamazsanız, takaslar farklı olacaktır. Çoğu kod, uzun süreli kullanım için tasarlanmamıştır, ancak bazı programlar üretimde yıllarca çalışır. Bu gerçeklerle karşı karşıya kalındığında, programın gelecekte ağır bir bakım yüküne maruz kalmadan doğru ve güvenilir bir şekilde çalışmasını sağlamak ve geliştirmek için biraz daha fazla zaman ayırmaya değer olabilir.

Hem Go hem de Rust, doğru programları yazmanıza farklı şekillerde yardımcı olur: **Go, mükemmel bir yerleşik test çerçevesi sağlarken, Rust ödünç alma denetleyicileri aracılığıyla çalışma zamanı hatalarını ortadan kaldırmaya odaklanır. **

Bence yarın çıkması gereken kod için Go'yu kullanın, eğer önümüzdeki beş yıl içinde stabil bir şekilde çalışması gereken kodsa Rust'ı seçin.

— Grzegorz Nosek

Hem Go hem de Rust, ciddi geliştirme projeleri için yeterince iyi olsa da, çeşitli özelliklerini ve avantajlarını tam olarak anlamak en iyisidir. Kısacası, başkalarının ne düşündüğü önemli değil: **Ekibiniz ve proje ihtiyaçlarınız için hangi programlama dilinin daha uygun olduğuna yalnızca siz karar verebilirsiniz. **

Geliştirmeyi hızlandırmak istiyorsanız, yazacak birçok farklı hizmetiniz olduğunu veya geliştirme ekibinin kendisinin büyük olduğunu varsayalım, Go dili kesinlikle doğru cevaptır. Go, eşzamanlılık için tasarıma özel önem verir ve güvenli olmayan bellek erişimi davranışını (Rust'ta olduğu gibi) tespit etmeye isteklidir, ancak sizi her ayrıntıyı ayrı ayrı yönetmeye zorlamaz.

Go hızlı ve güçlüdür, ancak özünde geliştiricilerin aradan çekilip basitlik ve birliğe odaklanmasına yardımcı olur. Öte yandan, performans boşluğunun her zerresini sıkıştırmanız gerekiyorsa, Rust idealdir.

—Andrew Lader

Sonuç Umarım bu makale, Rust and Go'nun ilgili önemli noktalarını anlamanıza yardımcı olabilir. Mümkünse bu iki dili biraz deneyimleseniz iyi olur çünkü amatör programlama meraklıları için bile her türlü teknik yolda çok faydalıdırlar.

Ancak zamanınızı yalnızca bir dili ciddi bir şekilde çalışarak geçiriyorsanız, bir seçim yapmadan önce lütfen Go ve Rust'ın ilgili uzmanlık ve eğilimlerinden emin olun.

Tabii ki, programlama dilleri bilgisi, başarılı bir yazılım mühendisi olmanın sadece küçük bir kısmıdır. Programlamaya ek olarak, mühendislerin tasarım, mühendislik, mimari, iletişim ve işbirliği konularında da yetkin olması gerekir. Aşağıdakileri herkes iyi yaptığı sürece, hangi programlama dilini seçerseniz seçin, mükemmel bir yazılım mühendisliği ustası olursunuz.

View Original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Reward
  • Comment
  • Share
Comment
0/400
No comments
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate app
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)