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

 

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"?

 
Alexey Navoykov:

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

Ага, и потом получать ошибки "Recompile your debug code" от тестера :)
 
Renat Fatkhullin:

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

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

Компилятор сейчас реально работает очень медленно, то что раньше компилировалось мгновенно, теперь происходит несколько десятков секунд. Примеры приводить не буду, чисто на уровне оценки.