À mon avis, très peu de personnes ont besoin de tout cela.
A en juger par le code dans Kodobase - 95% des utilisateurs utilisent très peu la POO. Et pour les 5% restants de la majorité - toutes ces fonctionnalités sont peu utilisées. Certes, elles sont agréables et peuvent même être utiles, mais toutes ces améliorations ne sont pas vraiment nécessaires, à mon avis.
À mon avis, très peu de personnes ont besoin de tout cela.
A en juger par le code dans Kodobase - 95% des utilisateurs utilisent très mal la POO. Et parmi les 5% restants, la plupart n'utilisent pas beaucoup ces fonctionnalités. Bien sûr, elles sont agréables et peuvent même être utiles, mais à mon avis, toutes ces améliorations ne sont pas vraiment nécessaires.
Oui, je comprends, mais en plus de kodobase il y a Freelance et Market, et là MQ doit être intéressé par la qualité des produits. Et la qualité du langage affecte la qualité et la rapidité du développement et du débogage d'une manière ou d'une autre.
Si l'on parle de pourcentages comme ça, alors pourquoi MQL5 a été créé en premier lieu ? Nous serions toujours assis dans le vieux MQL4 hardcore où la POO ou toute autre chose n'est pas nécessaire... 99% des utilisateurs en sont satisfaits)
Peut-être que les programmeurs normaux ne vont pas vers MQL précisément parce que c'est encore un langage incomplet.
J'ai décidé de créer un tel sujet, car selon mes observations, le développement de la syntaxe MQL stagne depuis longtemps, aucune amélioration du langage au cours des dernières années. Je ne sais pas si les développeurs vont travailler sur MQL du tout, mais de nombreuses fonctionnalités sont vraiment manquantes, dont certaines sont d'une importance critique.
Dans ce fil de discussion, j'ai décidé de dresser une liste de mes principales demandes. Je vais d'abord donner ma liste, peut-être que quelqu'un ajoutera quelque chose d'autre, et ensuite peut-être que les développeurs se joindront à moi et partageront leur vision, ce serait bien.
J'ai classé cette liste par ordre d'importance (comme je le vois), mais pas dans l'ordre de mes priorités personnelles, c'est-à-dire que j'ai mis en premier les choses les plus fondamentales et indispensables pour la langue. Prendre comme référence les fonctionnalités de C++ et C#
1. Travailler avec les types : typedef, decltype, auto
Il s'agit en fait d'une fonctionnalité de base, du moins les deux premiers spécificateurs. Les opérations de nommage et de saut de type sont conçues non seulement pour la commodité, mais aussi pour la fiabilité et la flexibilité du code. Si vous définissez une valeur fixe sur des types concrets de variables utilisées à différents endroits, vous aurez des problèmes lorsque vous devrez changer l'un des types.
Beaucoup d'entre vous connaissent déjà le typedef, mais malheureusement, il s'agit encore d'une souche qui ne fonctionne qu'avec les pointeurs de fonction. Quant au decltype, laissez-moi le clarifier pour ceux qui ne le connaissent pas : il renvoie le type de l'expression qui lui est passée en argument, ce qui permet une certaine flexibilité pour définir des types de variables ou de fonctions basés sur d'autres types :
Soit en utilisant le typedef :
En C#, using est utilisé à la place de typedef.
2. Espaces de noms : namespace
Ce sujet a déjà été abordé récemment. Pour moi, il est vraiment étrange qu'elle n'ait pas encore été implémentée, car c'est une fonctionnalité indispensable du langage. Surtout si l'on considère la tendance à la communauté, à la base de données et au développement de groupe. Dans ce cas, le problème de la correspondance des noms devient très pertinent.
En général, il n'est pas bon d'avoir tout en une seule pile dans un seul espace.
Sans elle, les typesdéfinis par l'utilisateur sont intrinsèquement incomplets et la flexibilité est fortement réduite.
En général, cela se fait simplement : surchargez le constructeur et l'instruction cast avec le type correspondant, et vous obtenez une compatibilité totale de notre structure avec ce type :
Mais en MQL, il est nécessaire de créer une méthode séparée to_datetime() et d'écrire son appel partout. Ou bien l'appel de la fonction cible de DATETIME & type doit être surchargé ce qui n'augmente pas non plus le confort et la flexibilité.
4. Interfaces multiples... Eh bien, il y a déjà eu beaucoup de rumeurs et de discussions à ce sujet (je me souviens qu'il y a trois ans, ils ont écrit dans le service-desk que le travail était en cours), mais ça traîne... Si cela se produit.
5. Lesupport des interfaces pour les structures est nécessaire pour un travail unifié avec la POO. Actuellement, nous devons souvent fabriquer des béquilles.
Cette fonctionnalité pourrait être mise en œuvre de deux manières : soit comme en C# - via l'empaquetage/dépaquetage (boxing), soit de manière plus flexible - en créant un handle dynamique pour la structure liée à un descripteur d'objet dynamique qui contient la structure - ce serait plus efficace, et vous pourriez créer des pointeurs vers des structures et d'autres types de données, ce qui augmenterait la flexibilité.
6. Possibilité de passer les structures par valeur, ce qui est important lors du passage des petites structures (DATETIME de l'exemple ci-dessus), ce qui permettrait des conversions flexibles à la volée d'un type à l'autre, si le constructeur de la structure supporte ce type. Lors d'un transfert par référence, cette flexibilité n'existe pas, bien que si des interfaces pour les structures sont implémentées, cela deviendra moins pertinent.
7. Possibilité de spécifier les paramètres numériques du modèle :
Quant au deuxième exemple, dans MQL4, vous pouvez vous en passer, car les fonctions acceptent des tableaux de n'importe quelle dimension. Et dans MQL5, tout est beaucoup plus compliqué avec les tableaux multidimensionnels.
Et ainsi de suite pour les petites choses :
9. La possibilité de couler (explicitement ou implicitement) un tableau de pointeurs vers un tableau de pointeurs de base. Dans les anciennes versions, cela fonctionnait et était très pratique :
Nous devons maintenant recopier le tableau dans un nouveau tableau, puis le recopier à nouveau, un gaspillage d'efforts.
12. Possibilité de convertir explicitement un pointeur en une valeur numérique.
Cela permettrait de trier les tableaux de pointeurs par leurs valeurs afin de trouver rapidement le pointeur nécessaire par une recherche binaire ou en créant une table de hachage. Maintenant, il n'est possible d'obtenir une valeur numérique qu'en la convertissant en une forme textuelle, ce qui tue l'idée entière.
13. Définition des paramètres par défaut des modèles
Je soutiens.
À mon avis, un très petit nombre de personnes ont besoin de tout cela.
A en juger par le code dans Kodobase - 95% des utilisateurs utilisent très peu la POO. Et pour les 5% restants - la plus grande partie - toutes ces fonctionnalités sont peu utilisées. Bien sûr, elles sont agréables, et peuvent même être utiles, mais il n'y a pas grand besoin de toutes ces améliorations, à mon avis.
Ce petit nombre de personnes peut écrire des bibliothèques que tout le monde utilisera.
14. Permet de passer un objet temporaire si l'argument de la fonction est une référence constante.
template< typename Type > struct complex { Type Re; Type Im; complex() : Re(), Im(){} complex( Type re, Type im ) : Re(re), Im(im){} }; template< typename Type > void Func( const Type& val ) { } void OnStart() { Func( 5.0 ); complex< double > C( 1.0, 5.0 ); Func( C ); Func( complex< double >( 2.0, 4.0 ) ); }
15. le mot-clé ami.
Pour certaines classes, vous voulez donner l'accès aux membres privés, à une classe particulière, mais pas à toutes.
template< typename Type > class Matrix; template< typename Type > class MatrixData { friend class Matrix< Type >; int mRefCount; int mRows; int mColumns; Type mArray[]; public: MatrixData(); MatrixData( int rows, int cols ); }; template< typename Type > class matrix { MatrixData< Type >* mData; public: Matrix(); Matrix( int rows, int cols ); };
16. annuler une variable lors de l'appel explicite du constructeur pour les types intégrés.
Cela s'avère utile pour les modèles.
double x; // Не инициализирована double y(); // Инициализирована нулём double z = 5.0; // Инициализирована 5.0
J'ai décidé de créer un tel sujet, car selon mes observations, le développement de la syntaxe MQL stagne depuis longtemps, aucune amélioration n'a été apportée au langage au cours des dernières années. Je ne sais pas si les développeurs vont travailler sur MQL du tout, mais de nombreuses fonctionnalités sont vraiment manquantes, certaines d'entre elles sont absolument nécessaires.
Dans ce fil de discussion, j'ai décidé de compiler les principaux souhaits, d'abord je vais donner ma liste, peut-être que quelqu'un ajoutera quelque chose d'autre. Et puis peut-être que les développeurs se connecteront et exprimeront leur vision, ce serait génial.
************
Attendez-vous à un bannissement, la critique des écritures n'est pas autorisée :)
PS : Les améliorations étaient, pas si globales, mais il y avait
Ils n'ont même pas de pointeurs) ce qui pourrait être plus fondamental)
Il n'y en aura pas, la langue est gérée, mais sans GC.
Sharp les a aussi uniquement en mode non sécurisé.
Oui, je comprends, mais en plus de kodobase il y a Freelance et Market, et là MQ doit être intéressé par la qualité des produits. Et la qualité du langage affecte la qualité et la rapidité du développement et du débogage d'une manière ou d'une autre.
Si l'on parle de pourcentages comme ça, alors pourquoi MQL5 a été créé en premier lieu ? Nous serions toujours assis dans le vieux MQL4 hardcore où la POO ou toute autre chose n'est pas nécessaire... 99% des utilisateurs en sont satisfaits)
Peut-être que les programmeurs normaux ne vont pas vers MQL parce que c'est encore un langage incomplet.
Kodobase n'est pas du tout une poubelle à 95%. Cela fait longtemps que je n'ai pas vu de nouvelles versions de MT5. Renat, je me souviens, a promis quelque chose de global dans la nouvelle version.
PS : Il y a eu des améliorations, pas si globales, mais il y a eu
La dernière chose dont je me souviens était un opérateur de copie implicite permettant de copier des objets dynamiques, mais ce n'est rien, d'autant que beaucoup de temps a passé depuis.
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
J'ai décidé de créer un tel sujet, car selon mes observations, le développement de la syntaxe MQL stagne depuis longtemps, je ne vois pas d'amélioration du langage ces dernières années. Je ne sais pas si les développeurs vont travailler sur MQL, mais de nombreuses fonctionnalités sont très manquantes, dont certaines sont absolument nécessaires.
Dans ce fil de discussion, j'ai décidé de dresser une liste de mes principales demandes. Je vais d'abord donner ma liste, peut-être que quelqu'un ajoutera quelque chose d'autre, et ensuite peut-être que les développeurs se joindront à moi et partageront leur vision, ce serait bien.
Cette liste, je la mets par ordre d'importance (comme je la vois), mais pas par ordre de mes priorités personnelles, c'est-à-dire que je mets d'abord les choses les plus fondamentales et indispensables pour la langue. Prendre comme référence les fonctionnalités de C++ et C#
1. Travailler avec les types : typedef, decltype, auto
Il s'agit en fait d'une fonctionnalité de base, du moins les deux premiers spécificateurs. Les opérations de nommage et de saut de type sont créées non seulement pour la commodité, mais aussi pour la fiabilité et la flexibilité du code. Si vous définissez une valeur fixe sur des types concrets de variables utilisées à différents endroits, vous aurez des problèmes lorsque vous devrez changer l'un des types.
Beaucoup d'entre vous connaissent déjà le typedef, mais malheureusement, il s'agit encore d'une souche qui ne fonctionne qu'avec les pointeurs de fonction. Quant au decltype, laissez-moi le clarifier pour ceux qui ne le connaissent pas : il renvoie le type de l'expression qui lui est passée en argument, ce qui permet une certaine flexibilité pour définir des types de variables ou de fonctions basés sur d'autres types :
Soit en utilisant le typedef :
En C#, using est utilisé à la place de typedef.
2. Espaces de noms : namespace
Ce sujet a déjà été abordé récemment. Pour moi, il est vraiment étrange qu'elle n'ait pas encore été implémentée, car c'est une fonctionnalité indispensable du langage. Surtout si l'on considère la tendance à la communauté, à la base de données et au développement de groupe. Dans ce cas, le problème de la correspondance des noms devient très pertinent.
En général, il n'est pas bon d'avoir tout en une seule pile dans un seul espace.
Sans elle, les typesdéfinis par l'utilisateur sont intrinsèquement incomplets et la flexibilité est fortement réduite.
En général, cela se fait simplement : surchargez le constructeur et l'instruction cast avec le type correspondant, et vous obtenez une compatibilité totale de notre structure avec ce type :
Mais en MQL, il est nécessaire de créer une méthode séparée to_datetime() et d'écrire son appel partout. Ou bien l'appel de la fonction cible de DATETIME & type doit être surchargé ce qui n'augmente pas non plus le confort et la flexibilité.
4. Interfaces multiples... Eh bien, il y a déjà eu beaucoup de rumeurs et de discussions à ce sujet (je me souviens qu'il y a trois ans, ils ont écrit dans le service-desk que le travail était en cours), mais ça traîne... Si cela se produit.
5. Lesupport des interfaces pour les structures est nécessaire pour un travail unifié avec la POO. Actuellement, nous devons souvent fabriquer des béquilles.
Cette fonctionnalité pourrait être mise en œuvre de deux manières : soit comme en C# - via l'empaquetage/dépaquetage (boxing), soit de manière plus flexible - en créant un handle dynamique pour la structure liée à un descripteur d'objet dynamique qui contient la structure - ce serait plus efficace, et vous pourriez créer des pointeurs vers des structures et d'autres types de données, ce qui augmenterait la flexibilité.
6. Possibilité de passer les structures par valeur, ce qui est important lors du passage des petites structures (DATETIME de l'exemple ci-dessus), ce qui permettrait des conversions flexibles à la volée d'un type à l'autre, si le constructeur de la structure supporte ce type. Il n'y a pas cette flexibilité lors d'un transfert par référence, bien que si des interfaces pour les structures sont mises en œuvre, cela deviendra moins pertinent.
7. Possibilité de spécifier les paramètres numériques du modèle :
Quant au deuxième exemple, dans MQL4, vous pouvez vous en passer, car les fonctions acceptent des tableaux de n'importe quelle dimension. Et dans MQL5, tout est beaucoup plus compliqué avec les tableaux multidimensionnels.
Et ainsi de suite pour les petites choses :
9. La possibilité de couler (explicitement ou implicitement) un tableau de pointeurs vers un tableau de pointeurs de base. Dans les anciennes versions, cela fonctionnait et était très pratique :
Nous devons maintenant recopier le tableau dans un nouveau tableau, puis le recopier à nouveau, un gaspillage d'efforts.
12. Possibilité de convertir explicitement un pointeur en une valeur numérique.
Cela permettrait de trier les tableaux de pointeurs par leurs valeurs afin de trouver rapidement le pointeur nécessaire par une recherche binaire ou en créant une table de hachage. Maintenant, il n'est possible d'obtenir une valeur numérique qu'en la convertissant en une forme textuelle, ce qui tue l'idée entière.
13. Définition des paramètres par défaut des modèles