問題タブ [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.
interpreter - Nimrod の Brainfuck 通訳
私は言語で Brainfuck インタープリターを作成することにより、 nim (執筆時点ではまだ nimrod と呼ばれています) をいじっています。ループを実装しないと、次のようになります。
正常にコンパイルされますが、次のような入力をスローすると:
「N」を返す文字「A」を出力する必要があります。何か案は?
bitwise-operators - Nimrod では、ビット演算の構文は何ですか?
Nimrod を発見したばかりで、基本的な質問があります (ドキュメントで答えが見つかりませんでした)。
ビット演算をどのように使用しますか? x が int として定義されている次のコードがあります。
これはコンパイルされません:
そして、私が試してみると:
私は得る
トリックは何ですか?
inheritance - Nimrod プログラムをコンパイルする継承された型の宣言されていないフィールド
次のコードをコンパイルしようとします。
しかし、次のエラーが表示されます。
エラー: 宣言されていないフィールド: 'id'
どのようにid
宣言されていませんか?コード サンプルは、チュートリアルから直接引用したものです。チュートリアルに反映されていない言語の変更はありましたか?
また、次のコードを実行しようとすると:
次のエラーが表示されます。
SIGSEGV: 不正なストレージ アクセスです。(nil から読み取ろうとしていますか?)
なんで?
include - Nim で失敗したインポートから回復するにはどうすればよいですか?
Nimでは、次のコードを記述して外部モジュールをインポートできます。
これは、モジュールがある限り問題なく機能しますが、コードをダウンロードする可能性があり、モジュールがインストールされていない場合、コンパイルはあまりユーザーフレンドリーではないメッセージで失敗します。
例外と同様にキャッチして、ステートメントと同様のコードの代替ブランチを実行import
できるようにラップする方法はありますか? のようなマクロまたは次のように使用できるものを見つけたいと思っていました。when
importable
実際、単純なエラー メッセージではなく、いくつかのモジュールをオプションにしたいと考えています。これにより、おそらく機能が制限された状態でコンパイルが続行されます。これは可能ですか?
解決策の編集:ここでの回答に基づいて、問題を解決する方法を私のバージョンに示します。最初moduleChecker
に、次のソースを含むバイナリが必要です。
次に、このコマンドを使用できるようにすると、次のマクロを使用できます。
staticWrite
現在のバージョンにはコンパイル時にファイルを生成するプロセスがないため、外部コンパイルだけでなく、チェック用の一時ファイルを生成する別のプロセスも生成する必要があるのは非常に残念です。
parsing - Nimrod でコンパイル時に文字列を解析するにはどうすればよいですか?
Nimrodのチュートリアルの第 2 部を進めていくと、マクロについて説明する部分に到達しました。ドキュメントには、コンパイル時に実行されると書かれているので、文字列を解析してドメイン固有の言語を自分で作成できると考えました。ただし、これを行う方法の例はありません。デバッグ マクロの例には、文字列パラメーターの処理方法が表示されていません。
次のようなコードを変換したい:
…手書きで次のように記述します。
明らかに、この例はあまり役に立ちませんが、より複雑なものを実装するのに役立つ単純なもの (複数行/カンマ分割、変換) を見てみたいと思います。
ここでの私の問題は、マクロがどのように入力文字列を取得し、それを解析するか (コンパイル時!)、およびコンパイル時に実行できるコードの種類 (それは単なる言語のサブセットですか? 他のマクロ/コードを使用できますか?インポートされたモジュール)?
編集:答えに基づいて、質問に対する可能なコード解決策があります:
macros - 複雑なパラメーターを Nimrod マクロに渡す
設定パラメータをマクロに渡したいです。これらのパラメーター (シーケンスのタプル) に基づいて Nimrod コードの文字列を生成する手順が既にあります。文字列を渡してstrValで変換できることはわかっています(回答https://stackoverflow.com/a/19956317/334703を参照)。より複雑なデータでも同じことができますか?
または、この Nimrod コードの文字列をコンパイル時のプロシージャで使用して、 parseStmtなどのプロシージャを呼び出すことはできますか?
編集: Nimrod コードの生成は、私のアイデアをテストするのに役立ちました。AST を直接生成する必要があることに同意します。
これが私が考えている構造の例です。
pointers - Nimの値と参照のモデルは何ですか?
注:ポインターと参照の違いについて質問しているわけではありません。この質問では、まったく関係ありません。
明示的に述べられていないことが 1 つあります。Nim はどのモデルを使用していますか?
C++ のように -- 値があり、new
データへのポインタを作成する場所 (このような場合、変数はポインタへのポインタへのポインタを保持できます... データへのポインタ)?
または、C# のように、値として POD 型を持っていますが、(暗黙的に) 参照されるユーザー定義オブジェクトがありますか?
Goのように、逆参照のみが自動であることがわかりました。
言い換えます。Student
たとえば、新しいタイプを(名前、大学、住所で)定義します。あなたが書く:
- (型/クラスの)
student
実際のデータを保持するStudent
student
データへのポインタを保持するstudent
データへのポインタへのポインタを保持する
それともそれらの点からいくつかは不可能ですか?
ubuntu - Nimrod に Babel をインストールする際の問題
のインストールに問題がありbabel
ます。
まず、github からすべてをダウンロードしました。
そして、私は使用してインストールしようとしました、
しかし、私はこれを手に入れました、
Ubuntu 12.04 LTS を実行しており、Nimrod 0.9.2 が にインストールされてい/opt/nimrod/
ます。私の最初の本能は を行うsudo chmod a+rwx /opt/nimrod
ことでしたが、それは何も解決しませんでした. 何かアイデアはありますか?