Fragen von einem "Dummy" - Seite 127

 
Renat:

Sehr geehrter Herr, achten Sie auf den Kontext.

1) Wenn Sie von einer kontrollierten und sicheren Umgebung in einen völlig unkontrollierten Rohpuffer wechseln, sind Sie selbst für die Kompatibilität mit dieser binären Umgebung verantwortlich.

2) Wenn Sie Code schreiben, sind Sie für die Architektur dieses Codes verantwortlich. Und jammern Sie nicht, dass es schwer ist, "Pferd und Kuh in einen Wagen zu setzen", wenn Sie unterschiedliche Strukturen verwenden.

3) Ich empfehle Ihnen, die Beschreibung von CLBufferRead und CLBufferWrite zu lesen - dank der universellen void*-Referenz können Sie jede Art von Referenz an OpenCL übergeben. Und es gibt auch Versatzstücke und Größen.

1. ich bin bereit für diese Verantwortung. // eine imaginäre Krawatte zurechtrücken und sich das Lachen verkneifen.

2. ich weine nicht. Es ist einfach albern, eigene zwei- oder dreidimensionale Arrays zu schreiben, die in der Sprache bereits zu existieren scheinen. Und das müssen Sie auch.

3. ich werde es überprüfen. In der alten Version funktionierte die Übergabe eines zweidimensionalen Arrays NICHT. Ich habe es in der neuen Version aus alter Erinnerung nicht ausprobiert.

// ArrrayCopy() scheint auch Ihre Leere zu haben, aber es ist Plüsch und gilt nur für Array-Typ, nicht Dimension.

Ich wollte den dritten Punkt überprüfen.

 

Sie schreien geradezu und werfen uns Unzulänglichkeiten in diesem Prozess vor. Kein Grund also, herumzualbern.

Über mehrdimensionale Arrays:

  • Mehrdimensionale Arrays funktionieren.
  • OOP verwenden, Arrays innerhalb von Klassen behalten/ausblenden
  • weniger unvernünftige Übergabe von mehrdimensionalen Arrays als Parameter.
  • Strukturen aktiv nutzen - sie erleichtern das Leben und die Kontrolle und reduzieren die Komplexität.
Ab sofort wird es einfacher und korrekter werden.
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
Renat:

Sie weinen und beschuldigen uns der Unzulänglichkeiten. Kein Grund also, herumzualbern.

Über mehrdimensionale Arrays:

  • Mehrdimensionale Arrays funktionieren.
  • OOP verwenden, Arrays innerhalb von Klassen behalten/ausblenden
  • Weniger unvernünftige Übergabe von mehrdimensionalen Arrays als Parameter
  • Strukturen aktiv nutzen - sie erleichtern das Leben und die Kontrolle und reduzieren die Komplexität.
Es wird sofort einfacher und korrekter.

Und meine Unzufriedenheit war durchaus begründet, da (zum Beispiel) dieser Code in der vorherigen Version nicht funktionierte:

void gpuCalculate()
  {
//   for(int i=0; i<CountPass; i++) {for(int j=0; j<CountInd; j++) {nets[i*CountInd+j]=NETs[i][j];}}
//   CLBufferWrite(cl_Mem_NET,nets);
   CLBufferWrite(cl_Mem_NET,NETs);
   CLExecute(cl_Krn,1,Offs,Works);
   CLBufferRead(cl_Mem_Result,Result);
//   CLBufferRead(cl_Mem_NET,nets);
   CLBufferRead(cl_Mem_NET,NETs);
//   for(int i=0; i<CountPass; i++) {for(int j=0; j<CountInd; j++) {NETs[i][j]=nets[i*CountInd+j];}}
  }

Und ich musste das Array in jeder Verarbeitungsschleife zwei Mal redundant umschreiben (siehe den kommentierten Code).

In einer anderen Version habe ich ein virtuelles eigenes Objekt-Array (wie das von Nikolai) erstellt, aber es ist umständlich zu benutzen (besonders beim Schreiben der Genetik) - die funktionale Syntax ist stellenweise anstrengend.

Jetzt funktioniert der Code, das zweidimensionale Array wird tatsächlich in den Puffer geschrieben. Das ist ein Fortschritt. :)

OK, Frieden, Freundschaft, Kaugummi... :) Wenn Sie Operatorüberladung machen, werde ich die Syntax selbst korrigieren.

 
Die Überladung von Operatoren ist bereits fertiggestellt und wird in der nächsten Version verfügbar sein.
 
Renat:
Das Überladen von Operatoren ist bereits erledigt und wird im nächsten Build verfügbar sein.

Wow! Das ist eine nette Idee.

Vielen Dank an das gesamte Entwicklungsteam dafür!

Jetzt wird es möglich sein, wirklich schönen Code zu schreiben.

 
Renat:
Das Überladen von Operatoren wurde bereits durchgeführt und wird in der nächsten Version verfügbar sein.

Warum so kleine Buchstaben? Das ist eine rhetorische Frage.

Besser so:



Перегрузку операторов уже сделали, будет доступно в следующем билде.



 

Überlastung ist ein neues Konzept für mich. Eine ausführliche Beschreibung habe ich hier gefunden: http://programmersclub.ru/24/

Ist es das?

Уроки по С++, Урок 24. Перегрузка операторов
  • www.programmersclub.ru
Как вы уже знаете, тип переменной определяет набор значений, которые она может хранить, а также набор операций, которые можно выполнять над этой переменной. Например, над значением переменной типа int ваша программа может выполнять сложение, вычитание, умножение и деление. С другой стороны, использование оператора плюс для сложения двух строк...
 
tol64:

Überlastung ist ein neues Konzept für mich. Eine ausführliche Beschreibung habe ich hier gefunden: http://programmersclub.ru/24/

Ist es das?

Ja, das ist es.
 
Urain:

Warum so kleine Buchstaben? Das ist eine rhetorische Frage. Das ist mir lieber:



Перегрузку операторов уже сделали, будет доступно в следующем билде.




Ja, es wird ein sehr feierlicher Bau sein.

:)

 
Renat:

Ich fürchte, Sie wollten die Überschneidung in der Beschreibung nicht bemerken:

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

Die zweite Option ist viel sauberer, leistungsfähiger und bietet mehr Kontrolle. Es gibt keine Resonanz auf die Erfindung einer anderen, schwächeren Entität auf die bestehende Art und Weise.

Die zweite Version der Beschreibung ist nicht das Problem. Das Problem ist, dass sich die Syntax nicht zum Besseren verändert , wenn man sie verwendet.

Ich biete Ihnen einen leistungsfähigen und absolut sicheren Kompromiss an: "default"-Felder. Das Schlüsselwort default löst die Syntaxunterschiede vollständig auf. :)

In diesem Fall.

struct   Int8 
  { 
    int arr[8]; default;
  };

(C++ tut es, C# tut es, Delphi tut es, usw.)

D.h. wenn Sie auf ein solches Feld zugreifen, schreiben Sie einfach Int8Var[i] statt Int8Var.arr[i] - der Compiler wird es richtig verstehen.

// Und das Wichtigste ist, dass Sie dies nicht nur für Klassen, sondern auch für Strukturen tun müssen. :)

Grund der Beschwerde: