来自一个 "傻瓜 "的问题 - 页 125 1...118119120121122123124125126127128129130131132...277 新评论 Renat Fatkhullin 2012.04.02 15:02 #1241 MetaDriver:哦,现在我明白了。雷纳特,我有一个建议,而且正是这个主题。 请为数组做一个命名的类型,至少对静态数组(所有其他类型已经有)。例如,可以这样声明:typedef Int8 = int[8];。它可以通过结构轻松完成。我们根本不会把它复杂化。struct Int8 { int arr[8]; }; Vladimir Gomonov 2012.04.02 15:52 #1242 Renat:这很容易通过结构来实现。我们不要把它搞得太复杂。哦,太好了,容易,这就是我们要做的!但我需要什么?一个简单的 事情吗?你不觉得你的 奥卡姆剃刀和我们(用户) 的奥卡姆剃刀是两把截然不同的剃刀吗? 你的 极简主义倾向于在用户中 制造这样的过剩,是时候把奥卡姆挂在最近的栅栏上了。如果你如此关心简单性,那么就使其能够将通常的子数传递到函数中!每个人都会高兴,极简主义者也会高兴。// 顺便说一下,在F4中工作正常--对动态的也是如此。:) Yedelkin 2012.04.02 15:56 #1243 Renat: 当然,是静态的。 好了,你去吧。太晚了,无法检查 :/ Renat Fatkhullin 2012.04.02 17:22 #1244 MetaDriver:哦,太好了,这很容易,我们就是这样做的!但我需要什么?在水平上 ?我所提出的结构是创建新实体的标准方式。 没有必要为任何事情感到兴奋。 Renat Fatkhullin 2012.04.02 17:29 #1245 MetaDriver: 目前,在mql5中,由于不可能将子数 传入函数,我们不得不做很多额外的步骤,写很多歪曲的代码。你说的是指向不受控制的内存块的指针,这在MQL5中是完全禁止的。在MQL5中,每个对象/类型都必须是可控的 - 这是语言安全的直接要求。如果你需要传递一个数组的一部分,你应该使用传递数组本身的引用和它的位置。这将使你完全控制阵列本身。 Vladimir Gomonov 2012.04.02 17:55 #1246 Renat:你说的是指向不可控制的内存块的指针,这在MQL5中是完全禁止的。在MQL5中,每个对象/类型都必须是可控的 - 这是语言安全的直接要求。2.如果你想传递一个数组的一部分,使用传递数组本身的引用和数组中的位置。这将对阵列本身的完全控制起作用。此外,它是唯一没有实施命名的地方,所以它很符合语言实体普遍化的意识形态。2.都一样:首先,它是歪的,其次,它根本不具有普遍性。建议一种方法(1)将二维的mql-array复制到OpenCL缓冲区,而不需要不必要的重写和包装成结构,或者(2)使用(为了速度)你自己的函数ArrayCopy(...)来处理非均匀数组。// 对上一篇文章的突然性感到抱歉。真的没有必要。我听到 "不要把事情复杂化 "就很兴奋。因为这只会导致复杂化。2a.我认为你对ArrayCopy()等函数的 "一维约束 "在许多情况下可以通过注释中的一个基本条款无痛苦地软化。"该函数也适用于多维 数组,只要多维数组被完整地复制。"很多问题都会消失。// 但不是全部,当然。 Документация по MQL5: Основы языка / Переменные www.mql5.com Основы языка / Переменные - Документация по MQL5 Renat Fatkhullin 2012.04.02 18:10 #1247 MetaDriver:1.这是我的建议,即引入命名,从而引入严格的类型化,特别是因为这是唯一没有被命名覆盖的地方,因此很符合语言实体普遍化的思想。恐怕你不想注意到这一描述的巧合。typedef Int8 = int[8]; struct Int8 { int arr[8]; };第二种方式更清洁、更有力、更可控。完全没有理由用现有的方法再发明一个更弱的方法。2.做同样的事情。都一样:首先,它是歪的,其次,它根本不具有普遍性。建议一种方法(1)将二维的mql-array复制到OpenCL缓冲区,而不需要不必要的重写和包装成结构,或者(2)使用(为了速度)你自己的函数ArrayCopy(...)来处理非二维数组。首先,它不是歪的。其次,在直接不受控制的内存访问风格中,安全性高于任何优化方法。也就是说,对于所有的语言来说,"我怎样才能把一个二进制块直接倒入一个被监督的实体 "是一个普遍的、基本的(可解决性差)的问题。如果你必须处理不同系统之间的数组传输(在OpenCL中),就必须考虑一个 简单而直接兼容的数据结构。 看看最简单的CLBufferWrite多类型函数绑定类,方便数据传输。 附加的文件: OpenCLSimple.mqh 13 kb Vladimir Gomonov 2012.04.02 18:15 #1248 Renat:你说的是指向不受控制的内存块的指针,这在MQL5中是完全禁止的。顺便说一句,你在浓缩。编译器在传递参数 的时候就知道被传递的数组的大小。 当试图这样做时,它甚至会产生一个错误。:)另一件事是,你必须在每次函数调用时引入额外的隐式参数化(大致如你建议我显式地做)。但你这边的解决方案会更加普遍--例如,通过使用你自己的标准函数和对象库。同样的ArrayCopy()和FileWriteArray()会顺利工作。 Документация по MQL5: Основы языка / Функции / Передача параметров www.mql5.com Основы языка / Функции / Передача параметров - Документация по MQL5 Renat Fatkhullin 2012.04.02 18:21 #1249 papaklass: 你可以用简单的例子来配合你的陈述,对于像我这样的人。MetaDriver理解你,但像我这样的人没有任何例子就不明白我们在说什么?而且你想知道发生了什么事。我担心这将是对文件的一种替代。在搜索中查找它--那里有大量的信息。安全访问一些阵列成员。void MyFunc(double& array[],uint pos,uint size) { while(size>0) { Print("[",pos,"] = ",array[pos]); pos++; size--; } }考虑到编译器对内联函数非常敏锐,事实上,函数可能完全内置于调用处,所有的开销都将降为零。这意味着,在MQL5中,你可以不用害怕写小的 "正确 "的函数--它们有一个标准的全内联的命运,有适当的优化。这意味着参数传输 和索引的成本降低了。 Renat Fatkhullin 2012.04.02 18:27 #1250 MetaDriver:顺便说一句,你是在浓缩。编译器在参数传递 时知道被传递的数组的大小。 从什么时候开始,所有的数组都变成了静态的,还有所有的索引和大小? 由于数组几乎总是动态的,而索引是变量,所以我们不能在调用的时候进行任何严肃的静态检查。你只需要做meta/rtti检查,这就是为什么对整个对象/描述的访问如此重要,而不是随意在一块内存上工作。同样的ArrayCopy()和FileWriteArray()会毫无问题地工作。别担心,一切都在很久以前就已经想好了。 破坏我们非常熟悉的安全原则的后果是 "在4月份我们又修复了12个关键的错误,以突破虚拟机并获得对系统的控制 "的方式。 1...118119120121122123124125126127128129130131132...277 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
哦,现在我明白了。
雷纳特,我有一个建议,而且正是这个主题。 请为数组做一个命名的类型,至少对静态数组(所有其他类型已经有)。
例如,可以这样声明:typedef Int8 = int[8];。
它可以通过结构轻松完成。我们根本不会把它复杂化。
这很容易通过结构来实现。我们不要把它搞得太复杂。
哦,太好了,容易,这就是我们要做的!但我需要什么?一个简单的 事情吗?
你不觉得你的 奥卡姆剃刀和我们(用户) 的奥卡姆剃刀是两把截然不同的剃刀吗? 你的 极简主义倾向于在用户中 制造这样的过剩,是时候把奥卡姆挂在最近的栅栏上了。
如果你如此关心简单性,那么就使其能够将通常的子数传递到函数中!每个人都会高兴,极简主义者也会高兴。
// 顺便说一下,在F4中工作正常--对动态的也是如此。:)
当然,是静态的。
哦,太好了,这很容易,我们就是这样做的!但我需要什么?在水平上 ?
我所提出的结构是创建新实体的标准方式。
没有必要为任何事情感到兴奋。
目前,在mql5中,由于不可能将子数 传入函数,我们不得不做很多额外的步骤,写很多歪曲的代码。
你说的是指向不受控制的内存块的指针,这在MQL5中是完全禁止的。
在MQL5中,每个对象/类型都必须是可控的 - 这是语言安全的直接要求。
如果你需要传递一个数组的一部分,你应该使用传递数组本身的引用和它的位置。这将使你完全控制阵列本身。
你说的是指向不可控制的内存块的指针,这在MQL5中是完全禁止的。
在MQL5中,每个对象/类型都必须是可控的 - 这是语言安全的直接要求。
2.如果你想传递一个数组的一部分,使用传递数组本身的引用和数组中的位置。这将对阵列本身的完全控制起作用。
此外,它是唯一没有实施命名的地方,所以它很符合语言实体普遍化的意识形态。
2.都一样:首先,它是歪的,其次,它根本不具有普遍性。建议一种方法(1)将二维的mql-array复制到OpenCL缓冲区,而不需要不必要的重写和包装成结构,或者(2)使用(为了速度)你自己的函数ArrayCopy(...)来处理非均匀数组。
// 对上一篇文章的突然性感到抱歉。真的没有必要。我听到 "不要把事情复杂化 "就很兴奋。因为这只会导致复杂化。
2a.我认为你对ArrayCopy()等函数的 "一维约束 "在许多情况下可以通过注释中的一个基本条款无痛苦地软化。"该函数也适用于多维 数组,只要多维数组被完整地复制。"
很多问题都会消失。// 但不是全部,当然。
1.这是我的建议,即引入命名,从而引入严格的类型化,特别是因为这是唯一没有被命名覆盖的地方,因此很符合语言实体普遍化的思想。
恐怕你不想注意到这一描述的巧合。
第二种方式更清洁、更有力、更可控。完全没有理由用现有的方法再发明一个更弱的方法。
2.做同样的事情。都一样:首先,它是歪的,其次,它根本不具有普遍性。建议一种方法(1)将二维的mql-array复制到OpenCL缓冲区,而不需要不必要的重写和包装成结构,或者(2)使用(为了速度)你自己的函数ArrayCopy(...)来处理非二维数组。
首先,它不是歪的。其次,在直接不受控制的内存访问风格中,安全性高于任何优化方法。也就是说,对于所有的语言来说,"我怎样才能把一个二进制块直接倒入一个被监督的实体 "是一个普遍的、基本的(可解决性差)的问题。
如果你必须处理不同系统之间的数组传输(在OpenCL中),就必须考虑一个 简单而直接兼容的数据结构。
看看最简单的CLBufferWrite多类型函数绑定类,方便数据传输。
你说的是指向不受控制的内存块的指针,这在MQL5中是完全禁止的。
顺便说一句,你在浓缩。编译器在传递参数 的时候就知道被传递的数组的大小。
当试图这样做时,它甚至会产生一个错误。:)另一件事是,你必须在每次函数调用时引入额外的隐式参数化(大致如你建议我显式地做)。但你这边的解决方案会更加普遍--例如,通过使用你自己的标准函数和对象库。同样的ArrayCopy()和FileWriteArray()会顺利工作。
你可以用简单的例子来配合你的陈述,对于像我这样的人。MetaDriver理解你,但像我这样的人没有任何例子就不明白我们在说什么?而且你想知道发生了什么事。
我担心这将是对文件的一种替代。在搜索中查找它--那里有大量的信息。
安全访问一些阵列成员。
考虑到编译器对内联函数非常敏锐,事实上,函数可能完全内置于调用处,所有的开销都将降为零。
这意味着,在MQL5中,你可以不用害怕写小的 "正确 "的函数--它们有一个标准的全内联的命运,有适当的优化。
这意味着参数传输 和索引的成本降低了。
顺便说一句,你是在浓缩。编译器在参数传递 时知道被传递的数组的大小。
从什么时候开始,所有的数组都变成了静态的,还有所有的索引和大小?
由于数组几乎总是动态的,而索引是变量,所以我们不能在调用的时候进行任何严肃的静态检查。你只需要做meta/rtti检查,这就是为什么对整个对象/描述的访问如此重要,而不是随意在一块内存上工作。
同样的ArrayCopy()和FileWriteArray()会毫无问题地工作。
别担心,一切都在很久以前就已经想好了。
破坏我们非常熟悉的安全原则的后果是 "在4月份我们又修复了12个关键的错误,以突破虚拟机并获得对系统的控制 "的方式。