問題タブ [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.
objective-c - 構造に関する基本的な質問
したがって、first_structure のメンバーを参照するには、次のように記述します。
私が書く場合:
次に、*two_numbers* タグを使用して、次のような 2 つ目の構造を作成できます。
また、typedef を使用してシノニムを作成できることも理解しています。
しかし、以下のコードを理解できません( http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocObjectsClasses.htmlのページから):
したがって、すべてのオブジェクトには、インスタンスであるクラスを示す isa 変数があります。
どのようにそれを伝えることができますか???? このコードの意味を教えてください。
ありがとうございました。
compilation - バイトコードスタックと3アドレス
バイトコードインタープリターを設計するとき、スタックまたは3アドレス形式(または他の何か?)のどちらが優れているかについて、最近のコンセンサスはありますか?私はこれらの考慮事項を見ています:
目的言語は、Javascriptにかなり似た動的言語です。
パフォーマンスは重要ですが、開発のスピードと移植性は今のところもっと重要です。
したがって、実装は当面は厳密にインタプリタになります。リソースが許せば、JITコンパイラは後で来るかもしれません。
インタプリタはCで書かれます。
lisp - Lisp やその他の関数型言語で、長さが O(1) でないのはなぜですか
Lisp のリスト プリミティブでは、演算子の長さが次のように定義されています。
一部の Lisp の実装者は、長さを一定時間で計算されるプリミティブにできないのはなぜですか?
ありがとう
arrays - 配列のサブレンジを共有するためのスマートガベージコレクター?
なぜサブ文字列がC#でO(n)を取るのかについてのこの人気のある質問では、提供された主な回答の1つは、大きな配列が割り当てられ、新しい文字列が配列の小さなスライスを参照するだけでサブ文字列が計算された場合、ガベージコレクターは元の文字列が参照されなくなった場合でも、より大きな文字列を含む文字の配列を再利用することはできません。
これは完全に有効な答えのように見えますが、理論的には、アレイのガベージコレクターを構築して、まだ使用されている小さなサブアレイを残しながら、ほとんどのアレイをガベージコレクションできるようにすることができるようです。言い換えると、50,000要素の配列があり、そのうち100要素の小さなスライスだけがまだ使用されている場合、ガベージコレクターは、配列を3つの部分(100要素のスライスの前の要素、100要素の要素)に分割できます。それ自体をスライスし、100要素のスライスの後の要素をスライスします。次に、これらのピースの最初と最後をガベージコレクションします。
私の質問は、言語実装が実際にこの種のガベージコレクターを使用するのか、それとも理論上のみ存在するのかということです。このようなガベージコレクターを持つ言語実装の例を知っている人はいますか?
python - 異なる実装 (jython/ironpython/pypy/etc) がほぼ互換性のある cpython のバージョンは何ですか?
つまり、jython (または他の実装) バージョン xy は、cpython バージョン ab とほぼ同等です。
代替実装のバージョンをリストしてください。また、複数のバージョンを自由にリストして
、このリストが将来も役立つようにしてください。可能であれば
、各バージョンの (cpython との) 大きな非互換性を一覧表示します。ただし、c インターフェイスや依存または参照カウントなどは除きます。
c - 関数型言語をCにコンパイルする
関数型言語をポータブルCにコンパイルしていると仮定します。また、さまざまな理由から、保守的なガベージコレクションではなく正確なガベージコレクションが必要であると仮定します。ガベージコレクターがCスタック上のポインターであるかどうかを把握するための移植可能な方法はありません(おそらく一般的な場合はまったく方法がありません)。この問題には2つの解決策があるように思われます。
シャドウスタック。各C関数に、ポインターであるものとポインターではないものに関する簿記情報を保持させます。これは、LLVMなどで推奨されているアプローチです。
関数型言語をコンパイルしているという事実を利用してください。つまり、メインラインコードには副作用がありません。アロケータがメモリ不足を検出すると、ガベージコレクタ自体を呼び出す代わりに、longjmpを使用して現在の操作を中止し、メインループに戻ります。メインループは、ガベージコレクタを呼び出します(ポインタを含む可能性のある変数のセットがわかっている場合)。事前に)その後、操作を再開します。
2番目のアプローチが適用できる純粋な関数型言語を扱っている場合は、最初のアプローチよりも効率的であり、手書きのCと簡単に組み合わせることができる必要があるように思われます。
私が見落としている問題はありますか?この手法の既存の議論または実装への参照はありますか?
compiler-construction - コンパイル済み言語でのガベージ コレクションの実装
正確なガベージ コレクションを実装する場合、スタック上のどのワードがポインターであり、どのワードが整数や浮動小数点数などの他の種類のデータであるかを把握するという問題が常に発生します。解釈された言語は通常、すべてをポインターにすることでこの問題を解決します。Lisp などの一部の言語のコンパイラは、通常、タグ ビットを使用してポインタと整数を区別することで解決します。
しかし、ボックス化されていない機械語整数と浮動小数点数を完全にサポートする Java や C# などの言語用の JIT コンパイラはどうでしょうか? スタックと CPU レジスタの内容のどれがポインタであるかをどのように判断するのでしょうか?
compiler-construction - コンパイラを設計するとき、再帰の処理には特別な処理が必要ですか?
関数呼び出しは、スタック データ構造を介して処理されます。これは再帰をサポートするのに十分ですか?
c# - 「yield」キーワードは構文糖ですか? その実装は何ですか
重複の可能性:
yield ステートメントの実装
私はmsdnのドキュメントを見てきましたが、次のように書かれています:
yield キーワードは、それが現れるメソッドが反復子ブロックであることをコンパイラに通知します。コンパイラは、反復子ブロックで表現される動作を実装するクラスを生成します。iterator ブロックでは、yield キーワードを return キーワードと共に使用して、列挙子オブジェクトに値を提供します。
つまり、yield
キーワードはシンタックス シュガーであり、コンパイラは Iterator を生成するという大変な作業を行います。(私は正しいですか?)
では、このシンタックス シュガーに対して生成された実装コードは何でしょうか。
variables - 「set!」を使わずに「letrec」を実装するにはどうすればよいですか?
を使用せずにどのletrec
ように実装できますset!
か?
set!
これは命令型プログラミング構造であり、それを使用すると関数型プログラミングの利点が失われるように私には思えます。