問題タブ [nim-lang]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gcc - nim プログラムの c コードを取得するにはどうすればよいですか?
ドキュメントに従ってコンパイルしましnim compileToC helloworld.nim
たが、実行可能ファイルを吐き出すだけです。中間の C 表現を確認するにはどうすればよいですか?
inheritance - Nim のシーケンスからの継承
seq
私は約1日Nimを試してきましたが、操作するプロシージャがseq
カスタムタイプも処理できるように、タイプをビルトインから継承する方法を知りたいと思っていました。
TestCol
以下に、 a がシーケンスをラップ/プロキシする最小限の例を含めました。手順を再定義せずに、 などをTestCol
サポートする方法はありますか?map
filter
できれば、解決策として、パフォーマンス上の理由からカスタム シーケンスを通常のシーケンスに変換する必要はありません。変換は上記よりも簡単ではありません (def- で提案されているように、今のところはそのようにします)。
実際の使用例は、 RingBuffer.nimに配列ヘルパーを実装することです。
import - Nim はインポートするモジュールをどこで検索しますか?
ステートメントを使用する場合、import
Nim はどのように/どこでモジュールの検索を実行しますか?
ファイル パスを使用できることはわかっていますが、ファイル パスを使用したくない場合は、ローカルで定義したモジュールを自分のマシンのどこに配置すればよいでしょうか?
私はまだ Nimble を使用したことがなく、それが 1 つの方法だと思いますが、モジュールがローカルでのみ定義されている場合にどのように行われるかについてもっと興味があります。
pointers - const からアドレスを取得する
マニュアルから:
変数のアドレスを取得できますが、let ステートメントで宣言された変数には使用できません。
これは安全を確保するために行われていることを理解しています。さて、const からアドレスをどうしても取得したい場合、回避策はありますか?
pointers - Nim: パラメータのアドレスと可変性
の背後にある Nim のポリシーについて決心しようとしていexpression has no address
ます。特に、データ バッファーのポインター (+ 長さなど) を受け取る C 関数があります。この関数がデータを変更しないことはわかっています。簡略化:
一方では、これは理にかなっています。パラメーターは、let
「アドレスを持たない」バインドとまったく同じように動作するように見えるからです。一方、私はマニュアルの次の記述に困惑しています。
var パラメーターは、効率的なパラメーターの受け渡しには必要ありません。
私の知る限り、データのコピーを回避する唯一の方法は次のいずれかです。
- パラメータを次のように渡す
buf: var Buffer
- 参照を渡す、つまり
ref object
.
どちらの場合も、これは私の関数がデータを変更することを示唆しています。さらに、呼び出し元サイトに可変性が導入されます (つまり、ユーザーはバッファーに let バインディングを使用できなくなります)。私にとっての重要な質問は次のとおりです。「私は知っている」callToC
が読み取り専用であるため、コピーなしで両方の不変性を許可するように Nim を説得できますか? 呼び出しが不変であることを確実に知る必要があるため、これは危険です。したがって、これにはある種の「安全でないアドレス」メカニズムが必要になり、不変データへのポインタを強制できますか?
そして、パラメーター アドレスの最後の謎: タイプを に変更して、コピーの必要性を明示しようとしましたBuffer {.bycopy.} = object
。この場合、コピーは呼び出し時に既に行われており、今すぐアドレスにアクセスできると予想されます。この場合もアクセスが拒否されるのはなぜですか?
generics - Nim でジェネリックを使用して型を変換するときの ObjectConversionError
次のような単純なクラス階層を作成する場合:
x
型のメンバー変数にアクセスすると、期待される出力 (行に表示) が得られますbazObj
。
ジェネリックを使用して同様の階層を作成すると、コードは正常にコンパイルされますが、ObjectConversionError
例外がスローされます。私の構文は間違っていますか?それとも、Nim ではサポートされていないジェネリックを使用したこのタイプのオブジェクト変換ですか?
22 行目を に置き換えるとecho bazObj(troz).x
、コンパイル時に次のようになります。
nim-lang - Nim でのコンパイル時の呼び出し回数
次のコードはコンパイルされませんが、私がやりたいことを示しています。 Nim のこの側面はまだ)。
次のコードが各テスト レポート行の先頭に [1/2] と [2/2] を出力できるようにするには、このコードをどのように変更すればよいでしょうか?
編集:コードに質問を追加
nim-lang - Nimで循環依存を行う標準的な方法
2 つのモジュールがあるとします。1 つは Object を定義し、もう 1 つは ObjectFactory を定義します。オブジェクトは、ObjectFactory にアクセスしてその関数の一部を使用する必要があり、ObjectFactory は、オブジェクトをインスタンス化できるようにオブジェクトにアクセスする必要があります。
オブジェクトがモジュールに実装され、ObjectFactory が別のモジュールに実装されている場合、Nim でこれを解決する標準的な方法は何ですか?