Birçokları için ilginç bir konu: MetaTrader 4 ve MQL4'te neler olacak - büyük değişiklikler yolda - sayfa 10

 

Bir çok küçük işlevi birleştiren çok iyi bir inliner'ımız olduğunu unutmayın, bu nedenle hız kaybı olmaz.

Ayrıca, çoğu durumda, vtable aracılığıyla sanal işlevlere yapılan çağrılar, doğrudan çağrılara dönüştürülür. Bu, etkili optimize edici yöntemlerinden biridir. Bu, çoklu satır içi ile birleştiğinde, karmaşık çok seviyeli aramalardan neredeyse tamamen kurtulmanıza ve kodu düz bir görünüme dönüştürmenize olanak tanır.

Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Виртуальные функции
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Виртуальные функции
  • www.mql5.com
Основы языка / Объектно-ориентированное программирование / Виртуальные функции - Документация по MQL5
 
Renat :

Bir çok küçük işlevi birleştiren çok iyi bir inliner'ımız olduğunu unutmayın, bu nedenle hız kaybı olmaz.

Ayrıca, çoğu durumda, vtable aracılığıyla sanal işlevlere yapılan çağrılar, doğrudan çağrılara dönüştürülür. Bu, etkili optimize edici yöntemlerinden biridir. Bu, çoklu satır içi ile birleştiğinde, karmaşık çok seviyeli aramalardan neredeyse tamamen kurtulmanıza ve kodu düz bir görünüme dönüştürmenize olanak tanır.

:) gülümsedi. Ve hiç kimse derleyicinin kodu mükemmel bir şekilde optimize ettiğini iddia etmiyor, ben sadece arkadaşıma neden SB'nin önünde secde etmediğim fikrini getiriyorum.

Tamam, birkaç örnek verelim:

 class CiCustom : public CIndicator : public CDoubleBuffer

                пользуется включением class CSeries : public CArrayObj который в свою очередь

                                                     пользуется включением class CArrayDouble : public CArray и

                                                                           class CArrayObj : public CArray ну и конечно куда как без

                                                                                  включения class CArray : public CObject который включает

                                                                                                           class CObject и #include "StdLibErr.mqh"

pratikte basit bir standart fonksiyon ile değiştirilir

 CopyBuffer (...);

Sanat için sanatımız var. Ve böylece, bir şey yapan her öğe için (anladığınız gibi geri kalanı, son öğelerin çalışması için yazılmıştır).

Evet, evrenselliğe katılıyorum, evet iyi yapılandırılmış koda katılıyorum (çalışma için bir örnek diyebilirsiniz).

Ve nokta nedir? Sonuç olarak, bu kitaplık öncelikle "MQL5 Sihirbazı" için ve OOP üzerine bir ders kitabı olarak ihtiyaç duyulmaktadır.

 
Urain :

Arkadaşıma Güvenlik Konseyi'nin önünde neden secde etmediğim fikrini getiriyorum.

Evet, evet, bir kez daha vurgulayacağım - hiçbir argümanınıza ciddi bir itirazım yok. Bu konudaki tartışma nesnel olmaktan çok dini olacaktır.

Burada, sadece kendi örneğinizde, kişisel olarak BENİM için ve BENİM DURUMDA, kodun ilk sürümü, tam olarak göstergenin evrenselliğini ve tüm arayüzlerle uyumluluğunu sağlayan tüm bu çok seviyeli eklemeler nedeniyle daha kabul edilebilir görünüyor. CObject'a ve CiCustom'om ile biten. Bu nesne, bu seviyelerden biriyle nasıl çalışacağını bilen herhangi bir kullanıcıya iletilebilir ve ek bir çaba gerektirmez.

Ancak diğer yandan, tüm zaman serilerim ve göstergelerim istek üzerine oluşturulur, tek bir koleksiyona sığdırılır ve ardından tüm kullanıcılar tarafından kullanılabilir. Ve arabelleği BİR KEZ kopyalamanız gerektiğinde - soru ortaya çıkıyor - bahçeyi çitle ne için?

Yani basit bir durumda - CopyBuffer() kullanmak kesinlikle çok daha kolay olacaktır.

Peki ya bu arabelleğin bir düzine kullanıcımız varsa? Benim durumumda, hepsi arabellek için başvuracak, ilk istekte arabellek oluşturulacak ve diğer herkes ona bir bağlantı alacak. Ve eğer CopyBuffer() "alnında" kullanırsak - o zaman bir yerine on kopyamız olur. CopyBuffer()'ın daha incelikli bir kullanımıyla, kime ve hangi arabellek tahsis edildiğinin kaydını tutmanın faydasını görüyoruz, ki bunlar bahsettiğiniz kapsülleme maliyetine oldukça eşdeğerdir.

Şahsen ben rasyonellikten yanayım. Bir yer için, bir bahçeyi OOP ile çitlemek mantıklı değil. Çok sayıda kullanıcımız varsa, bence OOP yaklaşımı kendini haklı çıkarır.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyBuffer - Документация по MQL5
 
Urain :

Ardından, bir kodun hem mql4 hem de mql5 altında derlenebilmesi için istisnalar sunmanın zamanı geldi.

BE olarak birleşme sorunu demleniyor.

Desteklerim. Çok kullanışlı bir özellik.
C-4 :
Burada iki dili birleştirirken #ifdef gibi koşullu derleme yönergelerinin kesinlikle gerekli olduğu düşünüldü - bu, iki platform arasındaki kodların birleştirilmesini büyük ölçüde kolaylaştıracak ve platforma bağlı API, derleme aşamasında belirlendi.
Zaten en az dört kişiyiz :)
 
Renat :
Ne yazık ki hayır. Test cihazı , MQL5 Cloud Network olmadan tek iş parçacıklı kalacaktır.
Peki ya çoklu para birimi?
 
Mt4'te test edenin ideolojisi aynı kalacaktır. En azından yakın gelecekte köklü değişikliklere gitmeyeceğiz.
 
Renat :

Bir çok küçük işlevi birleştiren çok iyi bir inliner'ımız olduğunu unutmayın, bu nedenle hız kaybı olmaz.

Ayrıca, çoğu durumda, vtable aracılığıyla sanal işlevlere yapılan çağrılar, doğrudan çağrılara optimize edilir. Bu, etkili optimize edici yöntemlerinden biridir. Bu, çoklu satır içi ile birleştiğinde, karmaşık çok seviyeli aramalardan neredeyse tamamen kurtulmanıza ve kodu düz bir görünüme dönüştürmenize olanak tanır.

Ahhh... Şimdi neden program yazarken en sık yaptığım hatalardan birinin "Fonksiyonun bir gövdesi olmalı" olduğunu anlıyorum.

Bu inliner gerektirir... Aksi takdirde, bu benim için şaşırtıcıydı, işlev başlığı modülü derlemek için oldukça yeterli gibi görünüyor, ama hayır ... Bir gövdeye ihtiyacınız var ...

İyi iyi.

 
Laryx :

Ahhh... Şimdi neden program yazarken en sık yaptığım hatalardan birinin "Fonksiyonun bir gövdesi olmalı" olduğunu anlıyorum.

Bu inliner gerektirir... Aksi takdirde, bu benim için şaşırtıcıydı, işlev başlığı modülü derlemek için oldukça yeterli gibi görünüyor, ama hayır ... Bir gövdeye ihtiyacınız var ...

Hepsi doğru yazıyor, ancak optimize ediciyle hiçbir ilgisi yok.

Bir sınıf fonksiyonunun prototipi tanımlanmışsa, gövde de olmalıdır. Boş olsa bile.

Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
 

Renat , MT4'te, grafikteki konumların görünürlüğünü terminalin genel parametrelerinde değil, her bir çizelge için ayrı ayrı kontrol etmenizi öneririm (MT5'te yapıldığı gibi).

SD'ye bu konudaki başvurum ikinci aydır hareketsiz duruyor.

 
Interesting :

Renat , MT4'te, grafikteki konumların görünürlüğünü terminalin genel parametrelerinde değil, her bir çizelge için ayrı ayrı kontrol etmenizi öneririm (MT5'te yapıldığı gibi).

SD'ye bu konudaki başvurum ikinci aydır hareketsiz duruyor.

Nesneler üzerinde çalışırken görelim.
Neden: