Вопрос разработчикам по работе GV переменных

 

Уважаемые господа разработчики.

Возникла необходимость выяснить максимальную длину имени GV-переменной, для этого я написал небольшую тестовую программку:

//+------------------------------------------------------------------+
//|                                                         Test.mq4 |
//|                             Copyright © 2012 valenok2003@mail.ru |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012 valenok2003@mail.ru"
#property link      ""

int Cnt;
string Txt;   
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init(){
//----
   Cnt = 1;  
   Txt = "a"; // латиница
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit(){
//----
   GlobalVariablesDeleteAll("a");
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start(){
//----
   bool ALARM = false;
   for(int i=0; i<100; i++){
      if(GlobalVariableSet(Txt,Cnt)==0){
         ALARM = true; 
         break;
      }
      Txt = Txt+"a";
      Cnt++; 
   }  
   if(ALARM)Alert("всего символов " + Cnt);
//----
   return(0);
}
//+------------------------------------------------------------------+
//+-------

я получил след результат

 

через некоторое время

 

то есть, не происходит обработка ошибки превышения длины имени GV-переменной, поскольку алерт так и не был выдан,

после превышения длины имена интерпретируются как одно и тоже, поскольку до значения 62 переменные переписываются, а последняя строка почему-то нарастает, 

и кроме того, последняя переменная  не удаляется вручную, а только программно при помощи функции  GlobalVariablesDeleteAll("a");

Прошу вас дать разъяснения по этому поводу
 

 

Бросая в воду камешки, смотри на круги, ими образуемые; иначе такое бросание будет пустою забавою. (Козьма Прутков)

Посмотрел скрипт.  Небольшие модификации позволяют установить следующее:

длина имени глобальной переменной от 0 до 63 символов.  Длинные строки обрезаются до 63 символов. Глобальные переменные с длиной имени 0 и 63 символа, действительно,  ручками не удаляются.

 
Mislaid:

Бросая в воду камешки, смотри на круги, ими образуемые; иначе такое бросание будет пустою забавою. (Козьма Прутков)

Посмотрел скрипт.  Небольшие модификации позволяют установить следующее:

длина имени глобальной переменной от 0 до 63 символов.  Длинные строки обрезаются до 63 символов. Глобальные переменные с длиной имени 0 и 63 символа, действительно,  ручками не удаляются.

 


Что интересно пустое имя "" тоже принимается терминалом. И почему 63, а не 64?
 

Один символ отводится под завершающий /0

valenok2003:

и кроме того, последняя переменная  не удаляется вручную, а только программно при помощи функции  GlobalVariablesDeleteAll("a");
Прошу вас дать разъяснения по этому поводу

А вот это смахивает на баг ) надо на 5ке проверить.

 
TheXpert:

Один символ отводится под завершающий /0

А вот это смахивает на баг ) надо на 5ке проверить.

Гораздо хуже ИМХО, что при создании имени длиннее 63 не выдает ошибку создания переменной. Какие же ошибки тогда обрабатываются?
 
valenok2003:
Гораздо хуже ИМХО, что при создании имении длиннее 63 не выдает ошибку создания переменной

Ну... Я уже привык как-то.

На граф объекты такое же ограничение если что. И текстовые поля для объектов тоже.

Но вот выделенное мной выше... Этот баг имхо, гораздо хуже. Его по сокращенному имени и программно не удалишь по ходу.

 
TheXpert:

Ну... Я уже привык как-то.

На граф объекты такое же ограничение если что. И текстовые поля для объектов тоже.

Но вот выделенное мной выше... Этот баг имхо, гораздо хуже. Его по сокращенному имени и программно не удалишь по ходу.



В моём примере программно удаляется по сокращенному имени. deinit благополучно отрабатывает.
 
valenok2003:
В моём примере программно удаляется по сокращенному имени. deinit благополучно отрабатывает.
В твоем примере есть GlobalVariablesDeleteAll ) поименного удаления нет.
 
TheXpert:
В твоем примере есть GlobalVariablesDeleteAll ) поименного удаления нет.


Ну да - удалить всё по префиксу работает. А по полному имени - даже и не знаю что будет.
 
Молчат разработчики. Пятым все заняты...
 
Интересно, каково состояние с GV на самом деле? По отсутствию вопросов по работе с GV (на форуме вообще) складывается впечатление, что либо "не всякая птица долетит...", либо, приходя к работе с GV, "приходящие" автоматически становятся специалистами "по работе с базам данных"... По-моему, ветка типа "Примеры работы с GV", должна быть востребована не менее, чем "Кимовские функции". Есть мнения? 
Причина обращения: