Refactor Önerileri

  • Konuyu açan Konuyu açan 0x23
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 4
  • Gösterim Gösterim 191

0x23

Çaylak Üye
Üye
Mesaj
12
Beğeni
21
Puan
10
Ticaret Puanı
0
selamlar, "Geliştirici Günlüğü" bölümünden gördüğüm kadarıyla metin2 developer arkadaşlar kodları bir tık yenileme eğiliminde, bu arkadaşlara bir kaç öneri ve kısaca bazı sebeplerini anlatacağım.

1: C Style Array to std::array
-> `std::array` c style arrayler ile aynı işlevleri görüp herhangi bir overhead içermez, memoryde contigous olarak sıralanır
-> parametreye argüman geçerken `array decay` uygulanmaz
-> c style arrayin sizeını alırken uzun syntaxtan ve olası hatalardan sizi member functionları sayesinde kurtarır(c++17'de gelen std::size fonksiyonu c style arraylerde kullanılabilir tabii)
-> random access iterator kategorisindedir, alakalı algoritmalar ile uyumludur
-> copy elisondan faydalanılabilir
-> "out of bound" kaynaklı undefined behavior durumlarına karşı "out_of_range" throw eder
-> tabii en önemlisi kodun Modern C++ ile uyumlu olması

Örnek:
C++:
Genişlet Daralt Kopyala
// c style
static const int lowerBox[] = { 50197, 50198, 50199 };
// std::array
static constexpr std::array<int, 3U> lowerBox{50197, 50198, 50199};

2: char array to std::string
-> en önemlisi gereksiz allocate durumudur, sourceda gördüğüm çoğu char array ihtiyaç olandan çok çok daha fazlasıyla oluşturulmuş
-> unutulmaması gereken bir nokta std::string bir containerdır ve heap üzerinde allocation yapar.
-> tuttuğunuz yazı çok büyük değilse derleyici SSO(small string optimization) yapacak ve heapda alan tahsis edilmeyecek bu sebeple özellikle size olarak küçük stringlerde tercih edilebilir
-> random access iterator kategorisindedir, alakalı algoritmalar ile uyumludur
-> member functionlarda cabası

3: std::bind optimization
-> alakalı yazıya paylaştığım bu konudan ulaşabilirsiniz;


4: Rule of Zero uyumu
-> kaynak yöneten bir classınız yoksa bırakın ctor ve assignment operatörlerinizi implicitly olarak derleyiciniz yazsın, siz yazmayın

5: C++ sürümü
-> bence minimum base artık C++17 hatta 20(belki) olmalıdır, 10+ sene önce release edilmiş sürümleri kullanmayın

6: string_view
-> özellikle parametrelerde tavsiye ederim, sizi gereksiz kopya maliyetinden kurtaracaktır
-> c style string(const char*) ve std::string ile uyumludur
-> verilen yazının başlangıç adresini ve sizeını tutmasından ötürü kullanımına dikkat edilmeli
-> uzun uzun yazmayayım ama ne kadar faydalı olsa da undefined behaviora sebep olabilecek durumlara dikkat edilmeli

tabii bunlar sadece 3-5 ufak trick, şimdiye kadar gördüklerime örnek verdim. C++ için ciddi bir eğitim ve tecrübe(tabii 5+ yıllık "developer" kişilerin bunlardan bihaber olduğu oluyor, siz herkesin peşinden koşmayın) gerekir, herkes C++ yazabilir ama bu dilde uzmanlık farklı bir konudur. burda bütün konuların olması mümkün değil metin2 iş dışında müsait oldukça sourcesine baktığım bir yazılım, bir şeyler gördükçe veya aklıma geldikçe düzenleme yapar veya yorum olarak eklerim.
 
Son düzenleme:
hocam yanlış anlamada diğer forumda da aynısını yapıyorsun bence hiçbir faydan yok tamamen boş yani yanlış anlama yinede. metin2 yi bilmiyorsun source yapısını bilmiyorsun sadece şunu şöyle yapın falan diyorsun. iyi forumlar.
 
hocam yanlış anlamada diğer forumda da aynısını yapıyorsun bence hiçbir faydan yok tamamen boş yani yanlış anlama yinede. metin2 yi bilmiyorsun source yapısını bilmiyorsun sadece şunu şöyle yapın falan diyorsun. iyi forumlar.
selamlar, düşüncelere saygım var elbet, siz berbat yazılmış pluginlere/eklentilere faydalı diyip bunlara faydasız bakıyorsanız bir şey diyemem, olta kullanmayı bilmeden balık tutamazsınız. benim herhangi bir hocam embeddeddan gelme değildi, temeli bilmeden üstüne çıktığınız ne kadar sağlıklı?

bunlara ek olarak;
konunun neresinde metin2 yapısıyla alakalı bir şey yazıyor?

metin2 yapısı dediğiniz client ile TCP/IP protokolü üzerinden haberleşen bir yazılım, bana “metin2 source uzmanı” varsa gösterebilir misiniz?

paylaşılan pluginlerin kaç tanesi “metin2 yapısı” bağımlı? tek yapılan paket ekleyip datayı işlemek

ben metin2de mi şöyle yapın demişim kod yazarken C++’a mı uyun demişim?
 
Son düzenleme:
selamlar, düşüncelere saygım var elbet, siz berbat yazılmış pluginlere/eklentilere faydalı diyip bunlara faydasız bakıyorsanız bir şey diyemem, olta kullanmayı bilmeden balık tutamazsınız. benim herhangi bir hocam embeddeddan gelme değildi, temeli bilmeden üstüne çıktığınız ne kadar sağlıklı?
burda herkes parasına bakıyor senin bu yazdıklarının hiçbirini yapmadan milyonlar kazanan arkadaşlar var (metin2 pvp açarak) yani bilgin var evet ama bence farklı oyun projelerine daha çok katkın olur. bu şey gibi derler ya burada harcanıyorsun öyle bence. tamamen şahsi fikrim yanlış anlaşılmasın lütfen.
 
burda herkes parasına bakıyor senin bu yazdıklarının hiçbirini yapmadan milyonlar kazanan arkadaşlar var (metin2 pvp açarak) yani bilgin var evet ama bence farklı oyun projelerine daha çok katkın olur. bu şey gibi derler ya burada harcanıyorsun öyle bence. tamamen şahsi fikrim yanlış anlaşılmasın lütfen.
yanlış anlayacağım bir şey yok, bilgi paylaştıkça güzeldir. benim burdan herhangi bir maddi manevi çıkarım yok, kazanana allah daha çok versin. daha önceleri belirttiğim gibi amaç bilgi paylaşımıdır.
 
Geri
Üst