問題タブ [language-implementation]
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」を出力する必要があります。何か案は?
lua - Lua: テーブル配列部分とハッシュ部分を理解する
The Implementation of Lua 5.0のセクション 4 の Tables には、次の例があります。
local t = {100, 200, 300, x = 9.3}
だから私たちは持っていt[4] == nil
ます。と書くとハッシュ部分t[0] = 0
に行きます。
書いたらどこに行くの?配列部分またはハッシュ部分?
違いがある場合は、Lua 5.1、Lua 5.2、LuaJIT 2 の実装について回答をお待ちしています。t[5] = 500
eval - バイトコードコンパイル言語での REPL/eval の実装
私は、バイトコードにコンパイルされ、カスタム VM で実行される小さな言語を作成中です。そのアーキテクチャは、Python と Lua について読んだことの影響を大きく受けています。関数の引数、ローカル変数、および一時的な値を格納するデータ スタックと、アクティブな関数呼び出しごとに 1 つのエントリを含むフレーム スタックの 2 つのスタックがあります。フレーム スタックの各エントリには、現在の関数、命令ポインター (現在の関数のバイトコード配列へのインデックス)、ベース ポインター (データ スタックへのインデックス - 関数の args/locals の開始位置を示すマーク) などの情報が含まれます。
私が動けなくなったのは、REPL の実装、またはより具体的には の実装ですeval()
。これまでのアイデアは、同じスタック フレーム内でユーザー入力を継続的に評価することでしたが、内部で新しいローカル変数を作成できるようにするきれいな方法がわかりませんeval()
。一時データは常にスタックのローカルより上にある (スタックは上に成長する) ため、私が考えることができた唯一のアプローチは、新しいローカルが作成されたことにeval()
何らかの方法で気づき、ハッカーを使用してスタックを再配置することですが、これは一般的なケースで問題を引き起こします。たとえば、条件付きで使用される再帰関数がある場合eval()
、フレーム スタックを調べて、場合によってはフレームごとにデータ スタックを調整する必要があります。
私の VM は の適切な実装をサポートできeval()
ますか? はいの場合、上記のアプローチは賢明ですか? いいえの場合、どのようなアーキテクチャの変更が必要ですか?
c - memcpy() の実装を理解する
memcpy.c の実装を探していたところ、別の memcpy コードが見つかりました。なぜ彼らが (((ADDRESS) s) | ((ADDRESS) d) | c) & (sizeof(UINT) - 1) を行うのか理解できませんでした
python - CPython Dicts が負の 1 と負の 2 のハッシュ値の影響を受けないのはなぜですか?
ハッシュ テーブルは高パフォーマンスのマッピングであると想定されており、Python dict はハッシュ テーブルで実装されているため、高パフォーマンスでもあります。しかし、負の整数のハッシュ値を見ると、奇妙な結果に遭遇しました。
しかし、これは明らかに辞書には影響しません:
なぜこれが起こるのですか? また、辞書を使用しても影響を受けないのはなぜですか?
haskell - Haskell の実装に関する質問
Haskell は本当に素晴らしい言語です。大好きです。しかし、C++ プログラマーとして、コンピューター アーキテクチャーに関する基本的な知識を持っているので、Haskell の実装の詳細を知りたいと思っています。
たとえば、map
関数を意味します。私は文法、結果を知っています。ただし、この機能が実際にRAMでどのように機能するかを知りたいです。C ファミリー言語は、文法とコンピューターの動作の間のマッピングが非常に明確だからです。
では、関数型プログラミングの文法の背後にあるコンピューターの動作についてアイデアを持っている人はいますか? または、「C++ オブジェクト モデルの内部」など、これに関する本はありますか?
c - EOF は -1 であることが保証されていますか?
Cでコードを書くとき、それは良いスタイルで-1
あり、EOF
互換性がありますか? 標準はそれを保証しEOF
ます-1
か? または、値の実装が定義されていますか?
たとえば、EOF
特定のケースで関数が返される場合、関数が返されたかどうかをテストするのは良いスタイル-1
ですか?
関数が特定のケースで戻る-1
場合、関数が戻ったかどうかをテストするのは良いスタイルEOF
ですか?
python - self 引数は魔法のようにインスタンス メソッドにどのように渡されるのでしょうか?
私はコード アカデミー ストリームを行っており、Ruby の経験が少しあります。関数にパラメーターcheck_angles(self)
が必要な理由がわかりません。self
私が混乱している理由は、呼び出されたときに self パラメータを関数に渡す理由がわからないからです。関数呼び出し (コード ブロックの最後の行) は暗黙的に self を渡しているようですが、関数は self をパラメータとして明示的に定義する必要があります。
どうしてこれなの?