Ошибки, баги, вопросы - страница 2670

 

Дефекты в работе кеша шаблонной функции/класса:
(не исправлено MT5(build 2361)) ***  (up)   Undefined Behavior, создаешь сложный несколько раз обернутый объект с внутренним типом "С", а там оказывается совсем другой тип данных, может "B", может "int", что хочешь...
(не исправлено MT5(build 2361)) *             Compile Error, баг при передаче в качестве const ref template аргумента указателя на функцию.
(не исправлено MT5(build 2361)) *             Compile Error, объект B<int> можно создать после объекта класса B<void*>, но если сделать это перед, то возникает ошибка компиляции.


Дефекты в работе шаблонной функции/класса:
(не исправлено MT5(build 2361)) *** (up)   Compile Error, баг внутри шаблонной функции, переданный указатель в рамках операции явного приведения типа ведет себя как класс в остальных случаях - как указатель.
(не исправлено MT5(build 2361)) **           Compile Error, баг с генерацией кода шаблонного класса при использовании internal class.
(не исправлено MT5(build 2361)) **           Compile Error, баг при попытке доступа к internal class для шаблонного параметра шаблонной функции.
(не исправлено MT5(build 2361)) *            Compile Error, баг при генерации шаблонного метода/класса, процесс "автозамены" шаблонного параметра выходит за пределы скоупа в основной код программы.
(не исправлено MT5(build 2361)) *            Compile Error, баг с отсутствием автоматической генерации кода шаблонного класса, когда шаблонный класс выступает в качестве return value для шаблонного метода.
(не исправлено MT5(build 2361)) *            Compile Error, баг при передаче internal struct в шаблонную функцию, полученный тип данных невозможно использовать как базовый тип данных для другой internal struct в шаблонном классе.
(не исправлено MT5(build 2361)) *            Compile Error, баг при вызове шаблонной функции с явным указанием типов аргументов, когда вызов выполняется из перегруженной нешаблонной функции.

(не исправлено MT5(build 2361))              Compile Error, баг при определении internal class - отсутствует возможность явно сослаться на глобальное пространство имен при указании базового класса.
(не исправлено MT5(build 2361)) *** (new) Compile Error,
Основная претензия к неуместному выводу warning - "deprecated behavior, hidden method calling will be disabled in a future MQL compiler version". Текущая реализация - это стрельба с  пушки по воробьям.
(не исправлено MT5(build 2361)) **  (new) Compile Error, баг касается возвращаемого значения шаблонной функции, когда возвращаемое значение - internal class, расположенный внутри шаблонного класса, тип параметра которого задается типом аргумента шаблонной функции.
(не исправлено MT5(build 2361)) *   (new) Compile Error, не выполняется проверка на наличие повторно использованных имен шаблонных типов при объявлении шаблонной функции внутри шаблонного класса, что приводит к неожидаемому поведению.
(не исправлено MT5(build 2361)) *   (new) Runtimer Error, в конструкторе базового класса невозможно выполнить explicit typecast по приведению указателя на объект базового класса к указателю на родительский класс.
(не исправлено MT5(build 2361))     (new) Compile Error, множество дефектов связанных с return "in place created" object, когда объектом выступает шаблонный класс/структура.


Дефекты связанные с несоответствием приоритетов вызовов перегруженных функций в MQL в сравнении с С++:
(не исправлено MT5(build 2361)) ***          Compile Error, когда есть наследование классов A <= B <= C <= D и реализованы две overloading функции, например одна c параметра А*, а вторая с B*, то передача в такую функцию объекта C* или D* в MQL вызывает ошибку компиляции "ambiguous call to overloaded function".
(не исправлено MT5(build 2361)) **           Runtime, Несоответствие приоритетов для вызовов перегруженных шаблонных функций.
(не исправлено MT5(build 2361)) **           Compile Error, приоритет вызовов перегруженных шаблонных функций в действительности зависит от типа шаблонного параметра, который, в теории ни как не должен влиять на результат компиляции.
(не исправлено MT5(build 2361)) **           Compile Error, при генерации кода шаблонной функции возникает ошибка компиляции несмотря на то, что имеется перегруженная шаблонная функция с подходящей сигнатурой для передаваемых параметров.


Дефекты связанные с медленным выполнением функций, работой оптимизатора кода:
(не исправлено MT5(build 2361)) **  (new) Runtime, большой overhead при добавлении по одному элементу в массив с помощью ArrayResize, не смотря на то, что память для них была заранее зарезервирована, например для структур аж до 7-ми раз медленнее.


Предложения:
ссылка - о предоставлении возможности передавать литералы и временные переменные в виде const ref аргументов функции.
ссылка - при перемещении файлов проекта во вкладке "Project", для перемещаемых файлов, которые открыты и находятся во вкладках ME, автоматически обновлять их путь расположения.
ссылка - о необходимости введения в MQL typedef declaration функциональности.
ссылка - о предоставлении возможности принудительной генерации дефолтных конструкторов копирования и операторов присвоения.

 
fxsaber:

Визуализатор по архитектурным причинам не всегда показывает актуальное состояние.

Alexey Klenov:
Спасибо, буду иметь в виду.

Лечится пуском нескольких тиков (F12) после постановки на паузу.

 
Andrey Khatimlianskii:

Лечится пуском нескольких тиков (F12) после постановки на паузу.

Спасибо. Попробую.

 
Sergey Dzyublik:

Очередная встреча с ранее описанным багом - "Undefined Behavior, создаешь сложный несколько раз обернутый объект с внутренним типом "С", а там оказывается совсем другой тип данных, может "B", может "int", что хочешь...".
Фактически день ушел на локализацию, воспроизведение и поиск обходных путей, к сожалению все безрезультатно...

Наконец-то удалось найти приемлемое решение.
Оказывается использование статического члена класса дает возможность обойти вышеописанный баг:

template<typename _Tp, typename _Opt>
struct It_g{
   class Opt : public _Opt{}; 
   _Tp p;
   
   static Opt opt;
};

template<typename _Tp, typename _Opt>
static It_g::Opt It_g::opt;


template<typename _Tp>
class A_g{
public:
   struct It : public It_g<_Tp, Opt_g<_Tp>>{};
};

template<typename _Tp>
class V{
public:
   struct It : public  A_g<_Tp>::It{};
   It b;
};


template<typename _Tp>
class Opt_g{
   template<typename _It>
   static void test(_It &it){      
      printf(typename(_Tp));          // ClassA*
      printf(typename(it.p));         // ClassA*
      
      _Tp p = it.p;                   // OK
   };
};


template<typename _It>
void test(_It &it){
   it.opt.test(it);
}

class ClassA{};


void OnStart(){ 
   V<int> v1;
   test(v1.b);
   
   V<ClassA*> v2;
   test(v2.b);
   
   V<int>::It it3;
   test(it3);
   
   V<ClassA*>::It it4;
   test(it4);
}
 

Как исправить эту ошибку хранилища?


Постепенно отказывает сохранять всё больше и больше файлов. Скоро всё, что хранится будет невозможно актуализировать.

 

Неправильно рассчитываются прибыли/убытки во всплывающей подсказке для buy stop limit ордеров и для sell stop limit ордеров.

При наведении мышкой на tp

при наведении мышкой на sl

 

Ребят, я взял работку во фрилансе. Заказчик скинул мне файл в последний момент. Очень похоже на декомпил. Хочу сначала убедиться что это так перед жалобой. Прикладываю кусок кода.

int f0_0(string As_0, int &Ai_8, int &Aia_12[]) {
   string Ls_16;
   if (StringLen(As_0) == 0) return (-1);
   string Ls_24 = As_0;
   int Li_32 = 0;
   Ai_8 = 0;
   ArrayResize(Aia_12, Ai_8);
   while (StringLen(Ls_24) > 0) {
      Li_32 = StringFind(Ls_24, ",");
      if (Li_32 > 0) {
         Ls_16 = StringSubstr(Ls_24, 0, Li_32);
         Ls_24 = StringSubstr(Ls_24, Li_32 + 1, StringLen(Ls_24));
      } else {
         if (StringLen(Ls_24) > 0) {
            Ls_16 = Ls_24;
            Ls_24 = "";
         }
      }
      if (f0_2(Ls_16, Ai_8, Aia_12) == 0) return (-2);
   }
   return (1);
}

Одна из функций. Все переменные и функции выглядят как то так.

 
Кроме переменных в настройках индикатора, но их могли сменить до меня.
 
Dmitri Custurov:

Ребят, я взял работку во фрилансе. Заказчик скинул мне файл в последний момент. Очень похоже на декомпил. Хочу сначала убедиться что это так перед жалобой. Прикладываю кусок кода.

Одна из функций. Все переменные и функции выглядят как то так.

Декомпил однозначно.
 
Как в этом случае разойтись с заказчиком? На нарушение указал, но сделка уже заключена. Отменить кроме как через арбитраж нельзя будет что ли?