Возможно ли программно определить, что используется старый компилятор?

 

В изменениях к 880 билду добавлен макрос __MQL4BUILD__ и __MQL5BUILD__ которые позволят из MQL делать проверку, вводить варианты кода и обеспечивать независимость программ от разных версий компиляторов. 

Как отмечалось MetaQuotes - в новом MT4 будет одновременная поддержка программ, которые скомпилированы как в новой версии, так и в старой, не совмещенной с MQL5.
В связи с этим у меня вопрос - как из MQL4 программы определить, где она компилируется в старой версии MT4 компилятора или в новой, совмещенной с MQL5?

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

 

вам не кажется ли, что вопрос не имеет смысла?

ибо старые программы не запустятся на новом билде,  а новые на старом.

что вы определять собрались?

 
sergeev:

вам не кажется ли, что вопрос не имеет смысла?

ибо старые программы не запустятся на новом билде,  а новые на старом.

что вы определять собрались?

мне говорили что программы скомпилированные для 509 должны будут работать и под 555
 
sanyooooook:
мне говорили что программы скомпилированные для 509 должны будут работать и под 555

при чем здесь обратка.


в 509 ведь нет никаких директив что появились в новых  билдах.

вопрос не имеет смысла. написано не подумав.

 
sergeev:

при чем здесь обратка.


в 509 ведь нет никаких директив что появились в новых  билдах.

вопрос не имеет смысла. написано не подумав.

я так понял ему нужно знать на каком компиляторе сделан ex4 файл на новом или на старом. ведь ex4 для 509 будет работать на 555

ЗЫ: а хотя чё я сюда лезу ) 

 
sergeev:

при чем здесь обратка.

в 509 ведь нет никаких директив что появились в новых  билдах.

вопрос не имеет смысла. написано не подумав.

Отсутствие директив - это тоже признак, но как его проверить из MQL?

А может проверить как то по другому, потому и спросил про идеи, если у вас их нет, то какой смысл постить...
 

 
sanyooooook:

я так понял ему нужно знать на каком компиляторе сделан ex4 файл на новом или на старом. ведь ex4 для 509 будет работать на 555

ЗЫ: а хотя чё я сюда лезу ) 

Именно это и нужно, поскольку если сильно перекраивать код, где то улучшая его, а где то ухудшая, то хотелось бы иметь возможность использовать оба варианта, не теряя старые наработки.
 
sanyooooook:
мне говорили что программы скомпилированные для 509 должны будут работать и под 555

Да, старые программы для 500/509 билдов работают и в новой версии.

Поддержка старых исполнимых EX4 файлов является для нас приоритетом и мы специально держим две виртуальные машины исполнения для старого и нового вариантов.

 
revers45:

Отсутствие директив - это тоже признак, но как его проверить из MQL?

А может проверить как то по другому, потому и спросил про идеи, если у вас их нет, то какой смысл постить...

Идея есть, весьма простая :  если вообще не компилируется - значит билд слишком старый.  Вряд ли удастся соорудить более умную "автопроверку", поскольку старый компилятор не сможет адекватно отреагировать.

Самое простое - вставить вначале программы что-нибудь этакое :

#ifdef __MQL4__   // (1) ///  Внимание!  Если компилятор не хочет это компилировать - закомментируйте все строки помеченные (1) и раскомментируйте (2)
#property strict  // (1)
#endif            // (1)
#include "new_build.mqh"             (1)
// #include "old_build.mqh"             (2)
 
MetaDriver:

Идея есть, весьма простая :  если вообще не компилируется - значит билд слишком старый.  Вряд ли удастся соорудить более умную "автопроверку", поскольку старый компилятор не сможет адекватно отреагировать.

Самое простое - вставить вначале программы что-нибудь этакое :

Спасибо за идею, но к сожалениию это может сработать только один раз - при попытке компиляции в старом компиляторе нового кода, а после правки комментов(1)(2) это уже должно будет компилиться в обоих компиляторах, без никаких ошибок.
 
revers45:
Спасибо за идею, но к сожалениию это может сработать только один раз - при попытке компиляции в старом компиляторе нового кода, а после правки комментов(1)(2) это уже должно будет компилиться в обоих компиляторах, без никаких ошибок.

А вам сколько раз нужно?

//  Постарайтесь не придумывать лишних проблем.  Их и без того хватает.

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