찻주전자의 질문 - 페이지 125

 
MetaDriver :

오, 이제 명확해졌습니다.

Renat, 내 제안은 주제에 대해서만 오랫동안 숙성되었습니다. 배열에 대해 명명된 유형을 지정하십시오. 최소한 정적 유형(다른 모든 유형의 경우 이미 존재함).

예를 들어 다음을 선언하는 기능: typedef Int8 = int[8]; .

이것은 구조를 통해 쉽게 수행됩니다. 갑자기 일을 복잡하게 만들지 맙시다.

 struct Int8 { int arr[ 8 ]; };
 
Renat :

이것은 구조를 통해 쉽게 수행됩니다. 갑자기 일을 복잡하게 만들지 맙시다.

자, 다치게. 용이하게. 그래서 우리는! 저만 필요한건가요?? 평지 에서??

당신의 오컴의 면도기와 우리의 (사용자) 오컴의 면도기는 완전히 다른 두 면도기라고 생각하지 않습니까? 당신의 미니멀리즘 은 사용자들 사이 에 과잉을 만들어내는 경향이 있어서 Ockham이 가장 가까운 울타리에 목을 매는 것이 옳습니다.

단순성에 관심이 있다면 일반 하위 배열을 함수에 전달할 수 있도록 하십시오! 모두가 괜찮을 것이고 미니멀리스트들은 행복할 것입니다.

// 네 가지 방법은 아주 잘 작동합니다. 동적 포함. :)

 
Renat :
확실히 정적입니다.
잘. 체크에 늦었습니다 :/
 
MetaDriver :

자, 다치게. 용이하게. 그래서 우리는! 저만 필요한건가요?? 평지 에서??

내가 제공하는 구조의 변형은 새로운 엔티티를 생성할 수 있는 표준 가능성입니다.

갑자기 흥분할 필요가 없습니다.

 
MetaDriver :

이제 mql5에서 많은 불필요한 움직임을 만들고 하위 배열을 함수 로 전달할 수 없기 때문에 비뚤어진 코드를 작성해야 합니다.

MQL5에서 완전히 금지된 제어되지 않은 메모리 청크에 대한 포인터에 대해 이야기하고 있습니다.

MQL5에서는 각 개체/유형을 제어해야 합니다. 이는 언어 보안을 위한 직접적인 요구 사항입니다.

배열의 일부를 전달해야 하는 경우 배열 자체 및 배열의 위치에 대한 참조 전달을 사용하십시오. 따라서 어레이 자체에 대한 완전한 제어가 작동합니다.

 
Renat :

1. MQL5에서 완전히 금지된 제어되지 않는 메모리 조각에 대한 포인터에 대해 이야기하고 있습니다.

MQL5에서는 각 개체/유형을 제어해야 합니다. 이는 언어 보안을 위한 직접적인 요구 사항입니다.

2. 배열의 일부를 전달해야 하는 경우 배열 자체와 배열의 위치에 대한 참조 전송을 사용합니다. 따라서 어레이 자체에 대한 완전한 제어가 작동합니다.

1. 그래서 네이밍을 도입하고 하드 타이핑을 제안했습니다. 더욱이 명목형이 적용되지 않는 유일한 곳이기 때문에 언어 개체의 보편화 이데올로기에 잘 맞습니다.

2. 나도 똑같이 한다. 그것은 모두 동일합니다. 첫째, 비뚤어지고 둘째, 결코 보편적이지 않습니다. 다음은 불필요한 재작성 및 구조 래핑 없이 2차원 mql 배열을 OpenCL 버퍼에 복사하는 방법( 1 )입니다. 또는 ( 2 ) (속도를 위해) 1차원이 아닌 배열에 대해 고유한 ArrayCopy(..) 함수를 사용합니다.

// 이전 게시물의 거친 부분에 대해 죄송합니다. 정말 중복입니다. "복잡하지 말자"고 흥분했다. 어려움을 낳기 때문입니다.

2a. 나는 많은 경우에 ArrayCopy()와 같은 함수에 대한 "1차원 제약"이 주석에서 하나의 기본 면책 조항으로 고통 없이 완화될 수 있다고 생각합니다. "이 함수는다차원 배열 에서도 작동 합니다.

많은 문제가 사라질 것입니다. // 물론 전부는 아닙니다.

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
MetaDriver :

1. 그래서 네이밍을 도입하고 하드 타이핑을 제안했습니다. 더욱이 명목형이 적용되지 않는 유일한 곳이기 때문에 언어 개체의 보편화 이데올로기에 잘 맞습니다.

나는 당신이 설명의 우연의 일치를 눈치 채고 싶지 않았는지 유감입니다.

typedef Int8 = int [ 8 ];
struct    Int8 { int arr[ 8 ]; };

두 번째 옵션은 훨씬 깨끗하고 강력하며 제어하기 쉽습니다. 기존 방식으로 또 다른 약한 개체를 발명할 이유가 없습니다.

2. 나도 똑같이 한다. 그것은 모두 동일합니다. 첫째, 비뚤어지고 둘째, 결코 보편적이지 않습니다. 다음은 불필요한 재작성 및 구조 래핑 없이 2차원 mql 배열을 OpenCL 버퍼에 복사하는 방법( 1 )입니다. 또는 ( 2 ) (속도를 위해) 1차원이 아닌 배열에 대해 고유한 ArrayCopy(..) 함수를 사용합니다.

첫째, 구부러지지 않습니다. 둘째, 직접 제어되지 않는 메모리 액세스 스타일의 어떤 최적화 방법보다 보안이 높습니다. 즉, "이진 블록을 제어된 엔터티에 직접 붓는 방법"에 대한 질문은 관리되는 언어에 대한 일반적이고 기본(약하게 해결됨)입니다.

OpenCL에서 서로 다른 시스템 간에 배열을 전달해야 하는 경우 간단하고 직접적으로 호환되는 데이터 구조 를 생각하는 것이 중요합니다.

데이터 전송의 편의를 위해 CLBufferWrite 함수의 다중 유형 바인딩이 있는 가장 간단한 클래스를 살펴보십시오.

파일:
 
Renat :

MQL5에서 완전히 금지된 제어되지 않은 메모리 청크에 대한 포인터에 대해 이야기하고 있습니다.

그건 그렇고, 당신은 압축하고 있습니다. 매개변수를 전달하는 시점에서 컴파일러는 전달되는 배열의 차원을 완벽하게 알고 있습니다.

시도할 때도 오류가 발생합니다. :) 또 다른 것은 각 함수 호출과 함께 추가적인 암시적 매개변수화를 도입해야 한다는 것입니다(대략 명시적으로 하라고 조언한 대로). 그러나 귀하의 솔루션은 훨씬 더 보편적일 것입니다. 예를 들어 고유한 표준 함수 및 개체 라이브러리를 사용하는 것입니다. 동일한 ArrayCopy() 및 FileWriteArray()는 문제 없이 작동합니다.

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
papaklass :
나와 같은 사람들을 위해 간단한 예를 들어 귀하의 진술을 동반할 수 있습니다. MetaDriver는 당신을 이해하지만 나 같은 사람들은 예가 없으면 우리가 말하는 것을 이해하지 못합니까? 그리고 무슨 일이 일어나고 있는지 알고 싶습니다.

이것이 문서를 대체할 것 같아 두렵습니다. 검색을 살펴보세요. 수많은 정보가 있습니다.

일부 어레이 구성원에 대한 안전한 액세스:

 void MyFunc( double & array[], uint pos, uint size)
  {
   while (size> 0 )
     {
       Print ( "[" ,pos, "] = " ,array[pos]);
      pos++;
      size--;
     }
  }

인라인 함수에 대한 컴파일러의 심각성을 고려하면 실제로 함수가 호출 사이트에 완전히 내장되어 모든 오버헤드 비용이 0으로 감소할 수 있습니다.

즉, MQL5에서는 작은 "올바른" 기능을 작성하는 것을 두려워할 수 없습니다. 이 기능은 동반되는 최적화와 함께 완전한 인라인이라는 표준 운명을 가지고 있습니다.

이는 매개변수 전달 및 인덱싱 비용이 절감됨을 의미합니다.

 
MetaDriver :

그건 그렇고, 당신은 압축하고 있습니다. 매개변수를 전달하는 시점에서 컴파일러는 전달되는 배열의 차원을 완벽하게 알고 있습니다.

그리고 언제부터 모든 배열이 정적이고 모든 인덱스와 크기가 되었습니까?

배열은 거의 항상 동적이기 때문에 인덱스는 변수이므로 호출 시 심각한 정적 검사를 수행할 수 없습니다 . 메타 정보/rtti를 기반으로 한 검사 만 수행해야 하므로 전체 개체/설명에 액세스하는 것이 중요하고 메모리 조각으로 무작위로 작동하지 않는 것이 중요합니다.


동일한 ArrayCopy() 및 FileWriteArray()는 문제 없이 작동합니다.

걱정하지 마십시오. 모든 것이 오랫동안 생각되었습니다.

우리는 보호 원칙 위반의 결과를 잘 알고 있습니다. 이것은 "4월에 12개의 더 심각한 오류가 수정되어 가상 머신에서 벗어나 시스템을 제어할 수 있게 되었습니다."라는 경로입니다.