错误、漏洞、问题 - 页 2163

 
Комбинатор:


我相信你在优化方面要好得多,但从一个普通用户的角度来看,这看起来很奇怪--你声称MQL编译器生成的代码可以与C++相媲美,但后来发现MQL中的数组根本就不快。

管理/被管理的语言显然意味着数组必须被严格控制。没有这一点,语言就不可能是安全的。

对于静态数 组,控制是比较简单的,在代码优化阶段可以部分简化。对于动态阵列,有更多的控制,而且很难简化。

代码是以C++的质量水平生成的,但在管理的事情上肯定有开销。数学、循环和其他一切都处于C++水平。

 
Комбинатор:

数组索引 充其量也只是一个直接的单一汇编命令,所以问题仍然存在

在托管语言中,只在静态 数组中使用恒定 索引。也就是说,如果优化器100%确定不需要检查边界和缓冲区的可用性。

如果条件被违反,就会出现缓冲区和边界[s]检查。

这是编程时需要掌握的基本知识。

 
Vladimir Pastushak:
如果一个重载函数有一个enumToString,那么在为一个整数调用它时就会出现问题...

我一直在关注这个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

如果我们的能力有限,为什么还需要项目?

一个项目是PROJECT!!!!!,它可能有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中执行,ALU腾出时间,它们在很大程度上开始并行工作。
 
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

如果我们的能力有限,为什么还需要项目?

一个项目是PROJECT!!!!!,它可能有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?

因为C++在编译过程中报告了一个错误,因为这两个函数显然都适合,而且在MQL中的当前顺序根本不允许明确地调用函数(2)。

如果这个错误被消除了,给定的代码在大部分情况下将变得无法操作。

 

编译错误:树形优化错误

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个字符只用于描述设置,甚至没有描述一半的功能......
原因: