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

 
Tapochun:
Подскажите пожалуйста, в индикаторе при вызове OnCalculate() в массив spread[] какие значение спреда передаются? Максимальные/минимальные/средние за свечу?
Те, что получил терминал с сервера.
 

Возник вопрос о порядке загрузки .dll. Если объявлено

#import "Test1.dll" //1
#import "Test2.dll" //2
#import

то они загрузятся в обратном порядке, т.е. сначала "Test2.dll". Казалось бы - а какая разница? Оказалось что это имеет существенное значение и в ряде случаев (.dll требуют определенного порядка загрузки) завершается ошибкой: Сannot load 'Test1.dll'.
Вопрос в том, чтобы изменить порядок загрузки на прямой, что с точки зрения кода было бы логичнее - либо гарантировать, что такой порядок не будет изменен в будущем (чтобы код подстроенный под обратный порядок не перестал вдруг работать). На текущий момент необходимо подстраивать код под обратный порядок.

 

Build 1191. Ошибка компиляции: code generation error

 

Даже не знаю где искать причину. А в build 1162 - все нормально.

 
A100:

Build 1191. Ошибка компиляции: code generation error

 

Даже не знаю где искать причину. А в build 1162 - все нормально.

Пожалуйста, пришлите код в сервисдеск.
 
Alexander:
Пожалуйста, пришлите код в сервисдеск.

Он сильно распределен - попробую собрать все в один файл.

Другой код - обратите внимание на время - оно выросло наверное в 20 раз

 

 
Ilyas:

На сегодня известно о двух случаях:
1) в операции bool &= (bool expression)
2) Лишняя запятая в инициализирующих последовательностях: val={ {...},{...}, }

Вот по первому случаю - у меня таких операций очень много в коде.  Раньше проблем не было, когда стоял билд 1159.   Когда можно ожидать исправлений?

 

Code generation error

Исходники проекта отправил в сервисдеск: #1332553

 
Alexander:
Пожалуйста, пришлите код в сервисдеск.

code generation error


//build 1191
class A {};
class B : public A {};
void f( A& a ) {}
B *h() { return new B; }
void OnStart()
{
        f( h() );
}

Просьба отнестись внимательно, чтобы в итоге не получилось как я описывал в кармане. Если есть возможность сделать без * как это работает сейчас и работало раньше в следующем примере

//build 1191
class A {};
void f( A& a ) {}
A *h() { return new A; }
void OnStart()
{
        f(  h() ); //нормально
        f( *h() ); //нормально
}
то пожалуйста сделайте, если нет - то может быть вообще есть смысл все откатить назад пока еще не начали пользоваться нововведением

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

A100, 2015.08.26 10:35

Фактически вы предлагаете простую и понятную запись

a = (b + c) - d*e + f;
заменить на
*a = (*b + *c) - *d**e + *f;
И это ради чего? Ради того чтобы Вы могли записать
bool c = *a == *b;

при том что для сравнения указателей на равенство можно использовать специальную функцию, а все остальные арифметические операции (сложение, вычитание, умножение и т.д.) с указателями не имеют смысла сами по себе, а интересны только с точки зрения возможности их перегрузки.

Только создав математический базовый и производный класс, переопределив несколько (а не одну-две) арифметических операций, сделав их виртуальными и затем протестировав сложные выражения (а не только a = b + c) на их основе - только это приблизит Вас к пониманию того, что сейчас всё сделано ОПТИМАЛЬНО. А пока Вы рассуждаете на начальном уровне.

Если вынести сравнение указателей на равенство в отдельную функцию, то останется только одно(!) узкое место

class A {};

A *a = b; //однозначно присвоение указателю значения
a = b;    //неоднозначно
которое тем не менее также должно трактоваться как присвоение, а не вызов operator=(), поскольку в настоящее время для присвоения указателю значения не существует другого синтаксиса, в то время как a.operator=( b ) можно вызвать и явно
 
A100:


Другой код - обратите внимание на время - оно выросло наверное в 20 раз

Это новый оптимизирующий компилятор для MQL5 (в MQL4 его нет) так работает.

За более качественный целевой код приходится платить более долгой компиляцией. Некоторые длинные функции, состоящие из сотен строк, он очень упорно оптимизирует.

 
Renat Fatkhullin:

Это новый оптимизирующий компилятор для MQL5 (в MQL4 его нет) так работает.

За более качественный целевой код приходится платить более долгой компиляцией. Некоторые длинные функции, состоящие из сотен строк, он очень упорно оптимизирует.

А оно вообще надо?  Не слишком ли высока цена за этот "качественный код"?  Замедлить скорость компиляции в десятки раз, ради относительно небольшого прироста производительности... Тем более что во многих случаях этот прирост и не важен особо.  А вот удлинение компиляции становится пыткой для программиста.

Может лучше сделать варианты компиляции "Debug" и "Release"?

Причина обращения: