The Move to Python 3 Begins!

```html

Kapsülcüler,

EVE, EVE Gelişimi (EVE Evolved) inisiyatifinin bir parçası olarak gelişmeye devam ediyor ve şimdi sıra kodun kendisine ışık tutmaya geldi!

EVE Online'daki her geçit atlamasının, piyasa emrinin ve filo savaşının altında çok büyük miktarda Python kodu bulunmaktadır. Yeni Eden'ı yirmi yıldan fazla süredir çalıştırıyor ve şimdi Python 3'e geçişine başlıyor. Sizin için bu, hataları daha çabuk düzeltmek için daha iyi araçlar, yeni özellikler için alan ve zamanla daha hızlı bir EVE anlamına geliyor.

Bu geçişin başarı tanımı basit: ara sıra bir şeyler daha sorunsuz çalıştığında fark edilmesi dışında, tamamen fark edilmemesi gerekiyor.

Birçoğunuz Singularity'deki ilk adımlarımızı zaten test ettiniz ve bu değişiklikler bugün yayınlandı. Bu, önümüzdeki uzun yolun sadece başlangıcı.

Bazılarınızdan Daha Eski Bir Kod Tabanı

EVE, 2003 yılında, hafif "tasklet"leri sayesinde tek bir sunucu düğümünün binlerce pilotu aynı anda idare etmesine olanak tanıyan bir Python sürümü olan Stackless Python üzerine inşa edildi. Fenris Creations sadece Stackless'ı benimsemekle kalmadı; onun en önemli katkıcılarından biri haline geldi.

Bazılarınız 2007'de Stackless Python 2.5'e, ardından 2010'da Stackless Python 2.7'ye yükseltmeyi hatırlayabilir. EVE'nin Python sürümünü değiştirdiği son sefer buydu. Python 2.7 resmi yaşam sonuna 2020'de ulaştı, yazılım dünyasının geri kalanı ilerledi ve EVE aynı dil sürümünde kalırken, bir nesil kapsülcü doğdu, okula gitti ve fırkateyn uçurmaya başladı. O kadar güvenilirdi ki, büyük, potansiyel olarak riskli bir geçiş, şimdiye kadar kendini haklı çıkarmadı.

Aynı sürümde on altı yıl kalmak, ne kadar iyi çalıştığı hakkında çok şey söylüyor. Carbon motoru çok yardımcı oldu, ancak o da şimdi ilerledi!

Neden Python 3? Neden Şimdi?

python logo

Kısa versiyonu: Python 2'de kalmak EVE'yi giderek geride bırakıyor ve Python 3'e geçmek sizin için daha sağlıklı, daha iyi desteklenen bir oyun anlamına geliyor.

Bir neden performans. Son Python 3 sürümleri, bu dilin tarihindeki en büyük hız artışlarından bazılarını sağladı. Zamanla bu, daha hızlı bir EVE'nin kapısını açıyor, ancak bunun tam olarak ne anlama geleceğini söylemek için henüz çok erken.

Diğer bir neden ise ekosistem. Modern kütüphaneler, hata ayıklayıcılar ve profillerin hepsi Python 3 için yapılmıştır. Her yıl Python 2'de kaldığımızda, bunlardan daha fazlası erişimimizden kayıyor ve oyunu iyileştirmek yerine kendimiz sürdürmek zorunda kalıyoruz. Daha iyi araçlar, sorunları daha hızlı bulup düzeltmemiz anlamına geliyor.

Python 3, dilin birçok temel yapı taşını basitleştiriyor.

Metin, tek, tutarlı bir dize türü aracılığıyla işlenir ve yerelleştirmeyi daha güvenilir hale getirir. Tam sayılar artık keyfi boyut sınırlamalarına sahip değildir, gerektiğinde otomatik olarak büyür. Hatta Python'ın sınıf sistemi birleştirilmiş, eski davranışlar kaldırılmış ve nesne yönelimli kod daha tutarlı hale getirilmiştir.

Her karakter, her yetenek puanı, her hangardaki her varlık, her cüzdandaki her ISK Python 2 koduyla yazılmıştır ve bunların hepsi Python 3 altında tam olarak eskisi gibi okunmalıdır.

Önümüzdeki yol zorlu, EVE sizin için çalışmaya devam ederken çok büyük miktarda kodu güncellemeliyiz, ancak hedefe ulaşılabileceğini biliyoruz, çünkü EVE Frontier zaten Carbon motorumuzu modern Python 3 üzerinde çalıştırıyor ve bu işe yarıyor.

Frontier geçişi, on iki küçük Python sürümünü tek seferde, tek bir projede on altı yıllık dil evrimini kapsadı. Tranquility, yirmi üç yıllık birikmiş koda ve daha da önemlisi, yirmi üç yıllık gerçek oyuncu verisine, kapsülcülerin tarihine sahiptir. Ve her 24 saatten 23.75 saatini nefes alarak geçirmesi gerekiyor.

Dikkatli… Dikkatli…

EVE kod tabanı 2.4 milyon satır Python'dan oluşuyor. Bunun çoğu Python 2.7'den bile eski, Python 3'ün tamamen ayrıştırmayı reddettiği 2.3 ve 2.5 dönemi standartlarına göre yazılmış.

Peki 2.4 milyon satır kod nasıl göç ettirilir?

Çok dikkatli ve çok aşamalı olarak.

Bu aşamalardan bazıları Python topluluğu tarafından geliştirilen araçları kullanacak (örn. Python Futurize), bazıları ise EVE'nin benzersiz özelliklerine daha çok odaklanacak.

Kilit dönüm noktalarına ulaştığımızda, Temmuz ayında yaptığınız gibi Singularity'deki oyun testlerine katılarak yardımınızı isteyeceğiz, böylece güncellenmiş sistemin bazı bölümlerinin Tranquility sunucusuna daha yakın koşullar altında nasıl davrandığını gözlemleyebiliriz.

Şimdi bulunduğumuz ilk aşama, kodun Python 2.7'de çalışmaya devam ederken Python 3'e hazır hale getirilmesini içeriyor.

Python-Future adında bir araç kullanıyoruz, bu araç Python'ın bu tür bir geçişe yardımcı olmak için kendisinin de sağladığı aynı kod yeniden yazma mekanizması (2to3) üzerine inşa edilmiş. Otomatik "düzelticiler" uyguluyor, her biri eski bir deseni hem Python 2.7'nin hem de Python 3'ün kabul ettiği modern bir biçime dönüştürüyor.

Tüm kod her iki sürümde de çalıştıktan sonra, gerçekten zorlu iş başlıyor: her ikisinde de çalışan, ancak farklı davranan kod.

Dağı Ölçmek (ve Küçüldüğünü İzlemek)

Measuring the Mountain

Python 3'ten ne kadar uzakta olduğunuzu nasıl anlarsınız?

Onu ölçüyoruz. Yaklaşık 20 bin Python dosyamızın her biri gerçek bir Python 2.7 yorumlayıcısı ve gerçek bir Python 3 yorumlayıcısı altında derleniyor, çünkü derleyici, kodun ayrıştırılıp ayrıştırılmadığının temel gerçeğidir.

İlk tarama hoş bir sürpriz oldu: dosyaların %95,9'u zaten her iki sürüm altında da derlendi. Engellenen satırlar, yani Python 3 tarafından reddedilen sözdizimini kullananlar, 2.4 milyon içinde yaklaşık 3.300 idi.

Dağ, büyük ve çok ölçülebilir bir tepecik çıktı:

  • ~ 1.500 eski stil `print` ifadesi,

  • ~ 800 "long" sayı sabiti, 123L gibi,

  • ~ 600 istisna yan cümlesi, EVE var olmadan önce kullanımdan kaldırılmış bir sözdizimi ile,

  • `<>` kullanımının 50'si, "eşit değildir" yazmanın o kadar eski bir yolu ki birçok çalışan Python geliştiricisi bunu hiç görmedi.

Önümüzdeki Zorluklar

odysseus

Ayrıştırma kolay kısım.

Aynı tarama, her iki sürümde de iyi derlenen ancak Python 3'te farklı davranan yaklaşık 20.000 kod satırı sayıyor. Klasik örnek bölmedir: Python 2'de 1 / 2, 0'dır; Python 3'te ise 0.5'tir.

EVE'de bu sayıların hasar, ISK veya koordinatlar olabileceği yerlerde, bu satırların her biri mekanik bir düzeltme yerine insan kararı gerektiriyor. Bu çalışma Aşama 2'nin bir parçasıdır, bu yüzden Aşama 1 önce gelir: mekanik kalıntıları temizleyin ki insan dikkati yalnızca insanlara ihtiyaç duyulan yerlere gitsin.

Bu Sizin İçin Ne Anlama Geliyor

Kısa vadede hiçbir şey ve bu bilerek yapıldı. Aşama 1 değişikliklerinin görünmez olması amaçlanmıştır. Uzun vadede, bu, EVE'nin geleceği için atabileceğimiz en değerli temel çalışmalarından bazılarıdır: filo savaşlarını ve pazar merkezlerini güçlendirecek daha hızlı bir yorumlayıcı, hataları daha çabuk bulup düzeltmemize yardımcı olacak modern araçlar ve yeni geliştiricilerin daha üretken çalışabileceği bir kod tabanı, bu da özelliklerin size daha hızlı ulaşması anlamına gelir. Bu, EVE Online'ın önümüzdeki yirmi yılı için bir altyapıdır.

Bunu Kanıtlamamıza Yardım Ettiğiniz İçin Teşekkür Ederiz

Hiçbir şey fark etmemek hedefimiz ve ona ulaşmamıza yardımcı olan sizsiniz.

Temmuz sonunda, Singularity'deki ilk değişiklik setini test ettiniz. Katılan herkese teşekkür ederiz.

Şimdi bu değişiklikleri Tranquility'ye uyguluyoruz. Burada size güveniyoruz: her zaman yaptığınızı yapmaya devam edin ve herhangi bir şey yanlış gelirse, lütfen bir hata raporu göndererek bize bildirin.

Ek olarak, ajan görevi arka ucunu Python 3'e hazırlıyoruz, ancak hiçbir şey fark etmemelisiniz.

Bu, birçok adımın sadece ilkidir. Mekanik kalıntıları temizlemek kolay kısımdı. Gerçek iş, satır satır okunması gereken kod, hala önümüzde ve en çok size orada ihtiyacımız olacak.

Gelecek testler için kanallarımızı takip edin. Hiç korporasyon arkadaşlarınıza EVE'yi Python 3'e taşımaya yardım ettiğinizi söylemek istediyseniz, bu sizin şansınız!

Güvenle uçun, hangi Python sürümünde olursanız olun.

```