La nuova sintassi MQL4

 

È passato un po' di tempo da quando la Beta è stata rilasciata, e ho notato una nota da qualche parte, che il rilascio regolare potrebbe apparire a metà gennaio. Anche se dubito che accadrà, forse alcuni codificatori potrebbero avere interesse a condividere idee e problemi che hanno imparato con la Beta.

Ha già senso iniziare una discussione sulla nuova sintassi dei sorgenti MQL4, l'editor, il compilatore, i modelli, l'OOP, o qualsiasi altra cosa collegata?

Per favore niente segnalazioni di bug, niente grida, solo discussioni costruttive in questo argomento.

 

Ho rivelato che la direttiva #include viene ignorata se ripetuta, cioè

int OnStart() {
#include <dummy.mqh>
#include <dummy.mqh>
#include <dummy.mqh>
#include <dummy.mqh>
}

funziona come

int OnStart() {
#include <dummy.mqh>
}

Anche se è un comportamento molto gradito se si hanno dichiarazioni di classe in file separati, non è menzionato nel file di aiuto.

 

La nuova versione sembra essere un po' più veloce.

Gli array dinamici impostati come serie sembrano spostarsi automaticamente.

Il sovraccarico difunzioni fornisce un'interfaccia migliore degli switch.

 
Apprezzerei un suggerimento su come individuare la causa della "memoria persa". C'è qualche buona pratica?
 
Ovo: Apprezzerei un suggerimento su come individuare la causa della "memoria persa". C'è qualche buona pratica?
Stai chiedendo una domanda di programmazione generale come assicurarsi di "cancellare la memoria allocata dinamicamente" || "limitare l'uso di funzioni ricorsive". O ti stai riferendo a un bug di perdita di memoria all'interno della beta?
 
ubzen:
Stai facendo una domanda di programmazione generale come assicurarsi di "cancellare la memoria allocata dinamicamente" || "limitare l'uso di funzioni ricorsive". O ti stai riferendo a un bug di perdita di memoria all'interno della beta?


Decisamente il primo. Non ho alcuna esperienza nel prendermi cura dei riferimenti a oggetti inutilizzati, poiché il mio background proviene da JAVA. Perciò voglio dire che apprezzo un suggerimento per trovare gli oggetti che perdono dopo aver ricevuto il generico messaggio di avvertimento (se tale suggerimento esiste). In questo momento sto cercando di identificare la classe dell'oggetto trapelato dal numero di byte che l'avviso stampa.

 
Ovo: Decisamente la prima. Non ho alcuna esperienza nel prendermi cura dei riferimenti di oggetti inutilizzati, poiché il mio background proviene da JAVA. Quindi voglio dire che apprezzo un suggerimento per trovare gli oggetti trapelati dopo aver ottenuto il messaggio di avvertimento generico (se tale suggerimento esiste). In questo momento sto cercando di identificare la classe dell'oggetto trapelato dal numero di byte che l'avviso stampa.

È incompleto rispetto a mt5. Ci dovrebbe essere un'altra linea che dice il nome della classe. Speriamo che lo aggiungano presto.

 

Beh, la caccia alle perdite si è rivelata davvero fastidiosa... più di quanto mi aspettassi.

Ho speso qualche sforzo per creare uno strumento, ma non ho avuto alcun successo. Anche se ho scoperto che potevo ridefinire le dichiarazioni nuove/cancellate, mi sono reso conto che non avevo nulla con cui sostituirle. Se fossero funzioni con parentesi, allora sarebbe abbastanza semplice, ma sfortunatamente sono dichiarazioni. Potrei creare un wrapper intorno alle dichiarazioni new/delete per registrarle, ma sarebbe una soluzione molto dolorosa che non ha futuro.

Se qualcuno ha qualche esperienza su come individuare la fonte della perdita, per favore lasci una nota.

 
Ovo:<br / translate="no">

Beh, la caccia alle perdite si è rivelata davvero fastidiosa... più di quanto mi aspettassi.

Ho speso qualche sforzo per creare uno strumento ma non ho avuto alcun successo. Anche se ho scoperto che potevo ridefinire le dichiarazioni nuove/cancellate, mi sono reso conto che non avevo nulla con cui sostituirle. Se fossero funzioni con parentesi, allora sarebbe abbastanza semplice, ma sfortunatamente sono dichiarazioni. Potrei creare un wrapper intorno alle dichiarazioni new/delete per registrarle, ma sarebbe una soluzione molto dolorosa che non ha futuro.

Se qualcuno ha qualche esperienza su come individuare la fonte della perdita, per favore lasciate una nota.

Forse questi articoli (per mql5 ma lo stesso vale per i nuovi mql4) possono aiutarvi a trovare una soluzione:

L'ordine di creazione e distruzione degli oggetti in MQL5

Utilizzo dei puntatori ad oggetto in MQL5
 
angevoyageur:

Forse questi articoli (per mql5 ma lo stesso vale per i nuovi mql4) possono aiutarti a trovare una soluzione:

L'ordine di creazione e distruzione degli oggetti in MQL5

Usare i puntatori agli oggetti in MQL5



Grazie per la vostra nota.

Purtroppo non sembra aiutare a trattare le perdite, spiega solo perché accadono.

L'unica soluzione che ho usato finora è codificare un test unitario per ogni pezzo di codice che creo, ed eseguire frequentemente i test unitari durante lo sviluppo. Così se la perdita appare, posso cercare di isolare il testcase che l'ha causata. Tuttavia alcuni test sono piuttosto complessi, quindi non è una soluzione facile per lo scopo. E l'editor è un vero dolore.

 

Come distinguere la nuova sintassi?

Sento che ho bisogno di una parola diversa per indicare la sintassi "prossima" e la sintassi "originale". Sembra che MQ non si preoccupi dei nomi ufficiali e continui a fingere che siano compatibili.

Quindi sembra che dobbiamo trovare noi stessi dei nomi appropriati. Qualche suggerimento? MQL4 V2, OMQL4 (cioè Object-), MQL4.1 ...?

Motivazione: