問題タブ [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.
templates - テンプレートとマクロでの型付き vs 型なし vs expr vs stmt
私は最近、テンプレートとマクロを使用していますが、これらの重要なタイプに関する情報はほとんど見つかりませんでした。これは私の表面的な理解です:
- typed/expr は事前に存在している必要がありますが、.immediate を使用できます。それらを克服するために。
- untyped/stmt は、以前に定義されていないもの/1 つ以上のステートメントです。
これは、タイプの非常に漠然とした概念です。どのタイプを戻り値として使用する必要があるかなど、それらについてのより良い説明が必要です。
nim-lang - 配列の MD5、array[0..63, uint8] から cstring への変換
array[0..63, uint8] で md5Update を実行しようとしていますが、
バッファではなくctring入力が必要なようです。バイナリ データに対して md5Update() を実行するにはどうすればよいですか? (最後にヌル文字は入れたくない…)
c++ - 次の C++ コードを Nim に変換する
コードのさまざまな部分を変換して Nim を学習しようとしていますが、これまで見たことのないものに出くわしました。
三項演算子とは何か、それがどのように機能するかは理解していますが、変数 "t" と "cnt" (両方とも整数) と配列 "p" (整数の配列) で何が起こっているのかはよくわかりません。"p" のインデックスとしてインクリメントを使用するとどのように機能しますか?
次に、並べ替え関数があります。これは、それが何をするかについてのドキュメントが見つからなかったため、完全にあきらめました (配列に追加された整数を取得しているという事実は明らかに役に立ちません)。
generic-programming - Nim テンプレートで expr の文字列表現を取得する方法
内の式 (または識別子) の文字列表現を取得する可能性はありtemplate
ますか? たとえば、次のコードがあります。
name
テンプレート内の式の文字列表現を取得することは可能ですか?
profiling - ニムプロフの使い方
私の Nim プロジェクトの 1 つで、パフォーマンスの問題が発生しています。私は今、nimprof
何が起こっているのかを見るために使用しようとしています。import nimprof
メインのソース ファイルに があり、--profiler:on
. プログラムを実行すると、次のメッセージが表示されます。
ただし、profile_results.txt
これのみが含まれます:
実行時間は約 1 分だったので、何かをサンプリングするのに十分な時間ではないと思います。からもっと意味のあるものを得る方法はありますnimprof
か?
nim-lang - Nim: Mac では、標準インポートを開くことができません
Mac で nim を使用していますが、次の行で問題が発生しています。
コンパイルしようとすると、次のエラーが発生します。
csvx.nim(1, 6) エラー: 'strutils' ~/dev/polyglot/csvx/ を開けません
「生成されたCコードに基づくインストール」オプションを使用してnimをインストールしました。
nim-lang - シーケンスから複数の変数をアンパック
以下のコードが印刷されることを期待していますchr7
。
代わりに、それは印刷し@[chr7, 127471196, 127472363]
ます。
シーケンスから複数の値を同時にアンパックする方法はありますか?
そして、要素が連続していない場合、上記を行う最も簡単な方法は何でしょうか? 例えば:
エラーが発生します:
nim-lang - Nim: nil でないことを証明するには?
私にとって、Nim の最も興味深い機能の 1 つはnot nil
アノテーションです。これは基本的に、コンパイラの助けを借りて、あらゆる種類の NPE / アクセス違反のバグを静的に完全に除外できるためです。しかし、実際に使うのは面倒です。最も基本的な使用例の 1 つを考えてみましょう。
ここで差し迫った落とし穴は、そのような をインスタンス化することさえSafeSeq
簡単ではないということです。試み
a が単に nil ではないことcannot prove 'newSeq(100)' is not nil
が予想されるため、これは驚くべきことです。newSeq
回避策は、次のようなヘルパーを使用するようです:
を使って何かをしようとすると、次の問題が発生しますSafeSeq
。たとえば、a をマップしたときSafeSeq
に結果が再び nil にならないことが予想される場合があります。ただし、次のようなものも失敗します。
一般的な問題は、戻り値の型が通常になるとすぐにseq
、コンパイラがプロパティを忘れてしまい、not nil
それを証明できなくなることです。
私のアイデアは、実際に証明できる小さな(おそらく醜い)ヘルパーメソッドを導入することでしたnot nil
:
ただし、コンパイラはnot nil
ここでも証明できません。私の質問は次のとおりです。
このような場合、コンパイラが推論するのをどのように支援すればよい
not nil
ですか?この機能の長期的な目標は何ですか?つまり、推論
not nil
をより強力にする計画はありますか? マニュアルの問題点は、proveNotNil
安全でない可能性があり、コンパイラが証明するという考えに反することです。ただし、proveNotNil
非常にまれなケースでのみ必要な場合は、それほど害はありません。
注: 私はそのseq
試みがnil
不可知論的であることを知っています。つまり、その場合でもすべてが正常に機能nil
します。ただし、これはNim 内にのみ適用されます。C コードとインターフェースする場合、nil-hiding-principle はバグの危険な原因になります。これは、nil
シーケンスが Nim 側でのみ無害であるためです...
nim-lang - エラー: 式にアドレスがありません
エラー:
コンパイラは何を望んでいますか?