問題タブ [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.
c++ - C と自分の言語の間で FFI を作成する
私がプログラミング言語を実装したとしましょう (ここではAと呼びます)。Aは C によく似ています。
ユーザーが既存の C ライブラリから関数やデータ構造にアクセスできるようにしたいと考えています。これは可能ですか?もしそうなら、単純な実装はどのように見えるでしょうか?
あ
- C++で実装されています
- マシンコードにコンパイル
- クローズドソースの C ライブラリにアクセスする必要がある
python - 使用している Python 実装を確認するにはどうすればよいですか?
1 つのコマンドのように、使用している Python 実装 (CPython、JPython など) を見つけることができる簡単な方法はありますか?
python - オブジェクトから継承されたクラスでの super() と __init__() の動作は何ですか?
新しいクラス スタイルで python 2.7 を使用している場合、クラスがクラスから継承されている場合Object
、どのような動作になりsuper(ClassName, self).__init__()
ますか? つまり、舞台裏で何が起こっているのでしょうか? 省略した場合の違いは何ですか?
上記の例:
を省略した場合super
、舞台裏で何が起こっていますか?
ありがとう。
interpreted-language - インタープリターの実装言語としてインタープリター言語は適していますか?
Python のようなインタープリター言語で新しい言語のインタープリターを作成することは、速度など、あらゆる面で悪い考えでしょうか。
javascript - JavaScript内部メソッド実装のソースコード
JavaScript のメソッドの背後にあるコードを確認する方法はありますか? Web サイトの .html または .js ファイルの JavaScript メソッドではなく、JavaScript の内部メソッドです。
例えば:
offsetTop
JavaScriptが要素の を計算する方法を確認するにはどうすればよいですか?
java - JavaでのAtomicMarkableReferenceの「get」メソッド実装の背後にある理由は何ですか?
Java では、AtomicMarkableReferenceを使用して、オブジェクト参照をマーク ビットとともにアトミックに更新できます。
javadocには次のように記載されています。
実装に関する注意: この実装は、「ボックス化された」[参照、ブール値] ペアを表す内部オブジェクトを作成することにより、マーク可能な参照を維持します。
これは、クラスの Java 8 ソース コードで確認できる内容によると、当てはまります。
クラスのgetメソッドの設計の背後にある理由はありますか?
(値のペアを返す代わりに) そのようなブール配列を使用するポイントは何ですか? 並行性主導の選択ですか? それともレガシーコードですか?
c++ - 仮想継承の内部メカニズム
C++ のサンプル コード:
これは、ダイヤモンド問題の典型的なコード (ソリューション) です。virtual キーワードが使用される理由を認識しています。しかし、コンパイラが問題を処理する内部メカニズムは私にはわかりません。今、私は、以下に述べるように、上記のメカニズムについて2つの異なる理論に出くわしました.
クラスが virtual キーワードで継承されると、コンパイラは派生クラスに仮想ベース ポインターを追加します。派生クラスのサイズを確認しましたが、追加のポインターのサイズが含まれています。しかし、上記の例でクラス A のメンバーがクラス D で参照されている場合、それがどこを指しているのか、どのように機能するのかはわかりません。
コンストラクターごとに、コンパイラーは、プログラマーによって提供された各定義の 2 つのバージョンを作成します。 上記のコードなどで、このリンクから知りました。コンパイラは C のコンストラクタの 2 つのバージョンを生成します
そして、コンストラクター B の 2 つの異なるバージョン
したがって、D が構築されると、コンパイラは以下のコードのいずれかを生成します。
A のインスタンスが 1 つだけ作成されるようにするため、A の重複コピーが回避されます。
内部メカニズムを理解するのを手伝ってください。