Fehler, Irrtümer, Fragen - Seite 2753

 
Alexey Navoykov:
In C# wird der const specifier nur für konstante Ausdrücke verwendet, die bei der Kompilierung berechnet werden, während C++ ein Analogon dafür hat: constexpr,und MQL hat es nicht.

ja

es handelt sich im Allgemeinen um syntaktische Konstruktionen von Sprachen

in einer natürlichen Sprache (in der Mathematik) ist eine Konstante... Nun, es ist eine Art Konstante! ))

In C++ ist eine Konstante eine maschinelle Überprüfung durch den Compiler auf eine Konstante im Geltungsbereich (oder in der Lebensdauer) einer Variablen

In C# hat eine Konstante eine syntaktische Bedeutung, die näher an den Regeln einer natürlichen Sprache liegt


und genau darum geht es in dieser Diskussion:

const MqlTick _Tick; // Текущий _Symbol-тик.

Imho entspricht dieses Konstrukt vollständig der C++-Syntax, oder zumindest hatte MQL4 Bid und Ask, und niemand hat in Frage gestellt, ob dies gerechtfertigt war




Ohne Demagogie brauchen wir die Möglichkeit, so schnell wie möglich auf aktuelle Preise zuzugreifen. Der Profiler zeigt, dass der ständige Zugriff auf SymbolInfoDouble() und SymbolInfoTick() die Optimierungsgeschwindigkeit verringert

 
Mihail Matkovskij:

Wie kann ich den Compiler ändern?

Ich habe herausgefunden, dass der Compiler in MetaEditor aus dem 900er Build eingebaut ist:https://www.mql5.com/ru/forum/21374

Warum wird dann ein Fenster mit einer Zeile angezeigt, die zum Verzeichnis führt, in dem VS installiert ist?

Kompilierer

Обратите внимание, что компилятор переехал внутрь MetaEditor, начиная с 900 билда
Обратите внимание, что компилятор переехал внутрь MetaEditor, начиная с 900 билда
  • 2014.03.01
  • www.mql5.com
Консольный компилятор MQL4/MQL5 остался, обновляется вместе с платформами МетаТрейдер 4/5 и всегда доступен по ссылкам:.
 
Igor Makanu:

Ohne Demagogie zu betreiben, müssen wir in der Lage sein, so schnell wie möglich auf aktuelle Preise zuzugreifen. Der Profiler zeigt, dass ständige Aufrufe von SymbolInfoDouble() und SymbolInfoTick() die Optimierungsgeschwindigkeit verringern.

Nun, hier wurde bereits vorgeschlagen, die Möglichkeit hinzuzufügen, NULL anstelle des aktuellen Symbolnamens zu übergeben. Das könnte die Arbeit in speziellen Fällen beschleunigen. Im Allgemeinen brauchen wir den Zugriff über Handles, nicht über Textwerte von Symbolen. Aber ich denke, die Entwickler werden sich kaum auf solche Komplikationen einlassen. Das Problem scheint weit hergeholt zu sein.

Bei den oben erwähnten Messungen betrugen die Kosten nur 6% des Leerlaufs des Testers (ohne Last). Und im Arbeitscode wird es eine Größenordnung weniger sein. Es lohnt sich nicht, auf solche Kleinigkeiten zu achten, und diese Funktionen mehr als einmal in einem Handler aufzurufen ist an sich schon eine falsche Entscheidung.

 
Alexey Navoykov:

Nun, hier wurde früher vorgeschlagen, die Möglichkeit hinzuzufügen, NULL anstelle des aktuellen Symbolnamens zu übergeben. Das könnte die Arbeit in speziellen Fällen beschleunigen. Aber im Allgemeinen brauchen wir den Zugriff über Handles, nicht über Textwerte von Zeichen. Aber ich denke, die Entwickler werden sich kaum auf solche Komplikationen einlassen. Und es lohnt sich auch nicht, wie mir scheint. Das Problem ist ziemlich weit hergeholt.

Es funktioniert bereits, aber es gibt keine Beschleunigung (ich habe es überprüft) - anscheinend ist alles bereits maximal beschleunigt oder umgekehrt - denn die Beschleunigung ist noch weit entfernt (bitte bitten Sie die Entwickler zu unterstreichen)

 
A100:

Daher sollten wir der Strenge halber Digits() anstelle von _Digits verwenden. Dann ist - formal und ohne logischen Widerspruch - Digits() nicht durch den Modifikator const gebunden.

Soweit ich verstanden habe, wurde _Digits für die Kompatibilität mit MT4 benötigt - mehr nicht.

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Wanzen, Wanzen, Fragen

Ilyas, 2020.05.20 15:39

der Aufruf von Symbol() greift IMMER auf die globale Variable _Symbol zu, ebenso wie Digits(), Point(), Period(), GetLastError(), IsStopped(), UninitializeReason()

 
Mihail Matkovskij:

Während der Fehlersuche und wenn der Indikator selbst arbeitet, schreibt er im Protokoll plötzlich Stack overflow. Beim Debugging selbst erscheint die Meldung "Kritischer Fehler aufgetreten, Debugging gestoppt". Hier ist mein ähnlicher Thread:https://www.mql5.com/ru/forum/338301. Aber während der Kompilierung schimpft der Compiler nicht und alles geht gut. Beim Debuggen ist es unmöglich festzustellen, an welchem Punkt das Programm abstürzt.

Vielleicht liegt es am Compiler? Ich bin nicht wirklich an dem Compiler interessiert, den ich verwende, aber in meinen Einstellungen sieht es so aus:

Ich habe VS installiert, also habe ich diesen Link in den Einstellungen. Der Compiler ist also auch geeignet...? Aber welchen Compiler es gab, als ich VS noch nicht hatte, habe ich ehrlich gesagt nicht herausgefunden. Vielleicht sollte ich versuchen, zu diesem Compiler zurückzukehren und das Projekt mit ihm zu kompilieren?

Während ich nach Möglichkeiten suchte, das Problem zu lösen, funktionierte das Debugging mit der Ankunft eines weiteren Terminal-Updates einwandfrei. Es ist mir gelungen, Fehler zu finden. Einige Methoden liefen in einer Schleife und riefen sich selbst auf. Deshalb stürzte das Programm mit der Meldung "Stack overflow" ab. Aber mit Hilfe eines funktionierenden Debuggers ist es mir gelungen, alle problematischen Zeilen zu finden und sie zu beheben. Ich bedanke mich bei den Entwicklern für die schnelle Behebung des Fehlers mit Debugging!

[Gelöscht]  

в естественном языке (в математике) константа это... ну как бы константа! ))

In C++ ist eine Konstante eine maschinelle Prüfung des Compilers auf Beständigkeit im Gültigkeitsbereich (oder der Lebensdauer) einer Variablen.

Sowohl in C++ als auch in MQL kann eine Konstante einmal bei der Erstellung definiert und nie wieder geändert werden. Spielräume haben damit nichts zu tun.

Das ist nicht viel anders als in der Mathematik.


[Gelöscht]  
Mihail Matkovskij:

Ich habe herausgefunden, dass der Compiler in MetaEditor aus dem 900er Build eingebaut ist:https://www.mql5.com/ru/forum/21374

Warum dann dieses Fenster mit einer Zeile, die zu dem Verzeichnis führt, in dem VS installiert ist?


Der VS-Compiler wird verwendet, wenn Sie eine DLL schreiben.

 
fxsaber:

Dies bestätigt einmal mehr, dass es keinen Sinn macht,_Digits,_Point , _Period, _LastError usw.direkt zu verwenden(und selbst _Symbol kann durch NULL ersetzt werden). Tatsächlich müssen sie als konstant flüchtig deklariert werden

Und Sie schlagen im Gegenteil vor, Folgendes hinzuzufügen

 
A100:

Dies bestätigt einmal mehr, dass es keinen Sinn macht,_Digits,_Point , _Period, _LastError usw.direkt zu verwenden. Und auch _Symbol kann durch NULL ersetzt werden.

Und Sie bieten im Gegenteil an, diese Reihe zu ergänzen.

Der Sinn liegt in der Möglichkeit, eine Referenz zu übergeben.