配列の参照 - ページ 6

 

情報については

  1. MQL5のすべての配列は参照渡し(スタックに4バイトまたは8バイト)だけなので、関数内部で配列を渡すことを恐れないでください - 特別なコストはかかりません。
  2. 実メモリ参照、特に端末自身が制御する配列(インジケータバッファ、OHLCバッファ)への参照を保存することは、実際に変更/再割り当てされるため、非常に危険である。さらに、EAへの呼び出し(スクリプトコードへの出力と入力)間の文書化されていない参照を保存することは不可能である。
  3. DLLに配列を渡す場合、データブロックの開始アドレスを指定し、次元は別途指定する必要があります。
 
mql5:

まず理解すべきは「WHY」です。そして、その使い道は?

リンクを作らなくても、自分たちでやる。

そして、このスレッドの書き込みのおかげで、ヘルプの記述が 古いことが参加者のおかげでわかりました...。

はい、愉快です ) .でも、本当に、ヘルプに掲載されるとは思ってもみなかったんです。

それでは、もうすべての国旗について教えてください。

レナート

情報については

  1. MQL5のすべての配列は参照渡し(スタックに4バイトまたは8バイト)なので、関数内部で配列を渡すことを恐れないでください - 特別なコストはかかりません。

怖くはない、安価であることは十分承知している。不便なだけです。

  1. 実メモリ参照、特に端末自身が管理する配列(インジケータバッファ、OHLCバッファ)への参照を保存することは、実際に変更/再割り当てされるため非常に危険である。さらに、EAの呼び出し(スクリプトコードの終了と入力)間の文書化されていない参照は、保存してはいけません。

この点について詳しく教えてください。OnCalculate中にメモリの再割り当てを行うことができますか?これはデタラメだ。

通話間については、もちろんクリアしています。

一般的にインジケータやターミナルを束縛するような機能は嫌なので、一番安全なバリアントで対応します。

 
TheXpert:

OnCalculate中にメモリの再割り当てを行うことは可能でしょうか?そんなのおかしいよ。


間」ではなく、「間」。
 
TheXpert:

OnCalculate中にメモリの再割り当てを行うことは可能でしょうか?それは残念だ。

通話間については、もちろん理解できる。

もちろん、コール間の再分配も可能という話です。

問題は、誰かが間違って、または明示的に呼び出し間の参照を保存することで、99%のケースですべてがクラッシュするまで動作します。その後、「Metakvotsのせいだ」という考えがかなり出てくるはずです。

例えば、ある同志からそのような思いを放送され、通話間の履歴が入れ替わる/変更されることを受け入れられず、数年間続けてきたことがあります。

 
Renat:

もちろん、通話間の再分配も可能という話です。

問題は、誰かが間違って、または明示的に呼び出しの間のリンクを保存するに違いない、99%のケースで、すべてがクラッシュするまで動作します。その後、「Metakwotsのせいだ」という感想が予想されます。

"罪を恐れることは、前を向いて歩くことではない"(C)。

そしてもうひとつ、「やらなかったことより、やったことを後悔するほうがいい」。

レナト 参照変数が問題の原因になる可能性があることには同意するとして、これはほとんどすべてのツールについて言えることです。人は時に、ドライバーで他人を突くことがある。今さらドライバーを禁止しても意味がないし、家庭でもそれほど問題なく作れるのだから、生産から外すだけならもっと無意味だ。

mqlのエンティティとしての「参照」は、変数という形でなく、関数から参照(lvalue)を返す可能性として、非常に望ましいものです。 これによって、少なくともコンテナ用の高速な左インデックスを作ることができますし、他にも多くの追加機能を提供することができるようになります。

MyTree.Search(Key).GetElement() = NewVal;

また、関数からローカル変数への 参照を返したいと思う人がいることも理解しています

じゃあ、参考文献のことは忘れろ、馬鹿が生きづらくなるからだ、とでも言うのか?)

--

mql5のこのような制限(リンクの欠如など)は、MT5をブローカーとの接続を提供する「マーケットドライバー」に変えてしまう「DLLへの逃避」を強く動機付けることがあります。 しかし、本来のアイデアは、「すべてがここに ある」ので、外部プログラミングツールを使う必要性を排除するという、正反対のものでした。

 

最大限の言語セキュリティを目指して、もう後戻りはできません。

生リンクとの連携は、クラッシュへの確かな、そして確実な一歩となります。そして、仮想化システムを丸ごと持ち出したプログラムのクラッシュは許されない。

私たちの決断は、十分な情報を得た上でのものです。MQL5は、膨大な数のコンピュータで、人間が関与せずに動作するプログラムを書く ために使用されます。

 

とにかく、必要な人には原理がわかるといいのですが。とりあえず、独り占めしておこうと思います。でも、彼女はきっとそうなるし、オープンになる。

intのような基本的な型の参照は、問題なく作ることができるのは説明するまでもないでしょう。

複雑さと実装上の問題を引き起こす唯一の問題は、基礎となる変数のスコープです。本当に幅広い可能性がありますね。

________

また、リンクは、例えばラッパーのような、さらなる可能性を開くものであることも、モチベーションを高めるために知っておく価値があります。

 
lvalueリンクは予定です...
 
mql5:
lvalueリンクは予定です...
男、すぐに言ってくれればいいのに)苦労はしなかったよ。でも、これはすごいことなんです。
 

皆様にご挨拶申し上げます。


8年経って何か変わったのだろうか?

それとも、やはりmsvcrt.dllとmemcpy関数を使ってOnCalculate()から配列のアドレスを取得することしかできないのでしょうか?

それとも、クラス構造 全体を通して配列への参照を「ドラッグ」しているのでしょうか(あるいは、独自の配列を編成し、その内容を毎回コピーしているのでしょうか)?