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

 
Комбинатор:


Я верю что вы на порядок лучше разбираетесь в оптимизациях, но с точки зрения простого юзера все выглядит немого странно -- вы заявляете что MQL компилятор генерирует код сравнимый по скорости с С++, но тут вдруг выясняется, что массивы в MQL нифига не быстрые.

Управляемый/managed язык однозначно означает, что массивы должны жестко контролироваться. Без этого язык не может быть защищенным.

У статических массивов контроль проще и может частично упрощен на этапе оптимизатора кода. Для динамических контроля больше и его сложно упростить.

Код генерится на уровне качества C++, но в managed вещах конечно есть оверхед. Математика, циклы и все остальное на уровне C++.

 
Комбинатор:

индекс массива в лучшем случае тоже сводится к прямой одиночной ассемблерной команде, так что вопрос остается в силе

В managed языке только в статическом массиве с константным индексированием. То есть, если оптимизатор на 100% уверен, что не надо проверять границы и наличие буфера.

При нарушении условий появляется контроль наличия буфера и границ[ы].

Это базовые знания, которые надо иметь при программировании.

 
Vladimir Pastushak:
Если в перегруженной функции есть енум то стринг то при вызове её для интегера возникает проблема... 

Я обращал внимание на это https://www.mql5.com/ru/forum/1111/page1297#comment_1382986

Но менять ничего не стали, поэтому ::EnumToString в шаблонах во многих случаях бесполезен

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2015.02.16
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 

Продолжаем осваивать проекты и натыкаемся на 

#resource "\\Experts\\[Project 2018]\\Expert Name\\Resources\\img\\open_buy.bmp"

resource name is too long '\Experts\[Project 2018]\Expert Name\Resources\img\open_buy.bmp' CPanel.mqh 6 1

Зачем нужны проекты если мы ограничены ?

Проект это ПРОЕКТ!!!!! в котором может быть 1000 картинок, звуков, справок файлов и Мы должны все свалить в одну папку ?

Я не любитель винегрета в каталогах, что бы писать много качественно должен быть порядок не только в голове но и везде...



 
A100:

Я обращал внимание на это https://www.mql5.com/ru/forum/1111/page1297#comment_1382986

Но менять ничего не стали, поэтому ::EnumToString в шаблонах во многих случаях бесполезен

Привет от fxsaber:

// Для enum-ов
template <typename T>
string EnumToString2( T Value ) { return(EnumToString(Value)); }
 
// Для кастомных типов
template <typename T>
string EnumToString2( const T& ) { return(NULL); }
 
 
// Для стандартных типов
#define ENUMTOSTRING(A) string EnumToString2( A ) { return(NULL); }
  ENUMTOSTRING(int)
  ENUMTOSTRING(string)
// .....
#undef ENUMTOSTRING
 
#define EnumToString EnumToString2
 
template<typename T>
string ETS( T t ) { return ( typename( t ) == "int" ? "OK" : ::EnumToString( t ) ); }
enum ENUM {     ENUM__ };
 
void OnStart()
{
        ENUM i1 = ENUM__;       Print( ETS( i1 )); //нормально
        int  i2 = 0;            Print( ETS( i2 )); //"ошибка компиляции"
        string i3 = NULL;       Print( ETS( i3 )); //"ошибка компиляции"
}
 
Комбинатор:

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

Но невзятие еще быстрее. Как-то заметил, что если вместо целых использовать числа с плавающей точкой, моя программа работает раза в полтора быстрее. Для себя объяснил это тем, что сопроцессор FPU у меня по большей часть простаивал. В основном использовал целые числа. В рассматриваемом случае тоже можно принять это во внимание: SQRT выполняется в FPU, у АЛУ освобождается время, они начинают работать в значительной степени параллельно.
 
Vladimir Pastushak:

Продолжаем осваивать проекты и натыкаемся на 

#resource "\\Experts\\[Project 2018]\\Expert Name\\Resources\\img\\open_buy.bmp"

resource name is too long '\Experts\[Project 2018]\Expert Name\Resources\img\open_buy.bmp' CPanel.mqh 6 1

Зачем нужны проекты если мы ограничены ?

Проект это ПРОЕКТ!!!!! в котором может быть 1000 картинок, звуков, справок файлов и Мы должны все свалить в одну папку ?

Я не любитель винегрета в каталогах, что бы писать много качественно должен быть порядок не только в голове но и везде...

Частично поправим для обьектов, включаемых на этапе компиляции и не попадающие в код как именованный обьект.

Дело в том, что внутри EX файла заложено физическое ограничение на именованные ресурсы в 64 символа.
 
Artyom Trishkin:

Привет от fxsaber:

Приведенный код основан на недоработке компилятора

void f(       int  ) { Print( 1 ); } //(1)
void f( const int& ) { Print( 2 ); } //(2)
void OnStart()
{
    int i = 0;
    f( i ); //нормально ???
}

Результат: 1... а почему не 2 ?

При том что С++ сообщает при компиляции об ошибке, поскольку очевидно подходят обе функции и кроме того существующий сейчас в MQL порядок вообще не позволяет явно вызвать функцию (2)

Если эту ошибку устранят, то приведенный код станет по большей части неработоспособным

 

Ошибка при компиляции: tree optimization error

class A {
public:
    void f() {}
};
typedef A* (*fn)();
#import "Test.ex5"
    fn g();
#import
void OnStart() { g()().f(); }
 
Renat Fatkhullin:
Частично поправим для обьектов, включаемых на этапе компиляции и не попадающие в код как именованный обьект.

Дело в том, что внутри EX файла заложено физическое ограничение на именованные ресурсы в 64 символа.

Очень не хватает места в описании продуктов.

3600 символов это крайне мало для больших и серьезных программ.

Я думаю что многие со мной согласятся.

Для описания программ нужно не меньше 5000 - 10000 символов. Ну или на крайний вкладка с именем настройки программы

Модератор всегда может попросить убрать воду.

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