問題タブ [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.

0 投票する
2 に答える
113 参照

lisp - 特殊な形式を通常の値として扱うことを許可すると、どのような結果になるでしょうか?

Clojure では、特別なフォームを引数として渡すことも、変数に保存することもできないことがわかりました。

ラケット/スキーム:

それはいいですね。特別なフォームをラップする関数を書いて、その関数を渡すことができることはわかっています。

しかし、Lisp にこの制限がある理由と、これを許可するとどのような悪影響があるかを知りたいです。それを可能にする主要な方言はありますか?

0 投票する
1 に答える
349 参照

map - バインディングがマップのタイプに影響するのはなぜですか?

私はREPLで遊んでいて、奇妙な振る舞いをしました。

すべての小さなリテラルマップはのインスタンスだと思いましたが、。PersistentArrayMapでバインドされている場合はそうではないようですdef。使用するdefと、Clojureが私のlitteマップに別の表現を選択するのはなぜですか?おそらく奇妙な実装の詳細に過ぎないことは知っていますが、興味があります。

0 投票する
1 に答える
1369 参照

boolean - Boolean :: New()がHandle <>を返すのに、他のプリミティブがLocal <>を返すのはなぜですか?

これらは、V8 C++APIで新しいプリミティブを作成するための関数です。

なぜ他の人がをBoolean返すのに時間がかかるのだろうか。HandleLocal

私の仮定では、値が2つしかないブール値に関連していると思いますが、残念ながら、ドキュメントは非常に貧弱で、そのようなことについては言及されていません。

0 投票する
1 に答える
548 参照

functional-programming - 純粋な関数型言語での Prolog の実装

Prolog を実装するための単純な疑似コード アルゴリズムに大いに感謝します。疑似コードは純粋な関数型言語用と見なされます。

0 投票する
4 に答える
870 参照

python - Pythonリストの追加が同種でなければならないのはなぜですか?

Pythonの内部(CPythonまたは他の実装)に精通している人は、リストの追加が同種である必要がある理由を説明できますか?

上記が上記のトランスクリプトx+"foo"の最終値と同じ値を返さないのはなぜですか?x

この質問は、ここでのNPEの質問に続くものです。Pythonのリストの動作+ =反復可能であるかどうかは、どこにでも文書化されていますか?

更新:異種の作業は必須ではないことを私は知っています+=(しかし、そうします)。同様に、異種の作業が+エラーである必要はありません。この質問は、なぜ後者の選択がなされたのかについてです。

リストにシーケンスを追加した結果が不確実であると言っても過言ではありません。それが十分な異議である場合、異質性を防ぐことは理にかなってい+=ます。Update2:特に、Pythonは常に演算子の呼び出しを左側のオペランドに委任するため、「何をするのが正しいか」という問題は発生しません。左側のオブジェクトが常に支配します(右側に委任しない限り)。

Update3:これが設計上の決定であると主張する人のために、(a)それが文書化されていない理由を説明してください。または(b)文書化されている場合。

Update4:「何を[1] + (2, )返す必要がありますか?」の直後にx最初に保持されている変数の値と等しい結果値を返す必要があります。この結果は明確に定義されています。[1]x+=(2, )

0 投票する
3 に答える
3052 参照

c# - ArrayListの内部実装

うまくいけば、これは重複ではありません。

何よりもまず、ArrayListが最良の選択ではないことは知っていますが、これは単なる好奇心です。

簡単に言うと、ArrayListの実装について疑問に思っていました。私はそれがストレージに配列を使用していることを調べて理解しました。

アレイの場合、次の場合:

arrは配列の最初の要素を指し、整数として入力されているため、コンパイラーはジャンプ先を認識しています。

さて、ArrayListは型がないので、コンパイラが次の項目がどこにあるかをどのように把握できるのか疑問に思いました。コンパイラがポインタ演算を実行できるように、データが何であるかを示すオーバーヘッドがあると思います。

結果として、ArrayListは、前に何があるかを知る必要があるため、データにジャンプすることはできないため、他の型指定されたコレクションよりもはるかに低速である必要があります。これはLinkedListと非常によく似ています。

0 投票する
3 に答える
1636 参照

functional-programming - 関数型言語の実装方法

命令型言語と関数型言語の違いを学ぼうとしています。
また、クロージャとガベージ コレクタの実装方法についても学びたいと思います。そこで、関数型言語のインタープリターを実装してみることにしました。

私は関数型言語に詳しくないので、関数型言語を設計するのは難しすぎます。単純な関数型言語の構文とセマンティクスに関するリソースはありますか? これを行う方法に関するチュートリアルは非常に役立ちます。

0 投票する
2 に答える
13359 参照

ruby - __FILE__が大文字で__dir__が小文字であるのはなぜですか?

Ruby 2.0.0-p0では、__dir__現在実行中のファイルのディレクトリに簡単にアクセスできるように変数が導入されました。

__dir__大文字であるのに小文字であるのはなぜ__FILE__ですか?

0 投票する
1 に答える
223 参照

c# - System.String はその文字列をどのように保存しますか

.NET を使いこなすには、.Net-Framework 自体と、Microsoft がすべての優れた機能をどのように実装しているかを調べることが役立つことがわかりました。前回、逆コンパイラを使用して の実装をSystem.String-Class調べ、String-Object が実際の文字列を格納する方法を調べました。私は自分自身で最大のクラスに驚き、実際の文字列がクラスのどの部分を保存するかを明確に識別できませんでした。

クラスの開始部分と終了部分を示す逆コンパイルの 2 つのスクリーンショットを次に示します。 ここに画像の説明を入力 ここに画像の説明を入力

(最初のスクリーンショット[System.Reflection.DefaultMember("Chars")]の最初の行) および/またはプロパティpublic extern char this[int index](2 番目のスクリーンショットの中央) が探しているものだと思います。

それは正しいですか? はいの場合、どのように機能しますか?

0 投票する
4 に答える
249 参照

c++ - C/C++ によるコンパイルとコンパイラのバグ/制限

私は高水準 (Lisp のような) 言語を C (または、例外が十分に有用であることが判明した場合は C++) でコンパイルすることによって実装する可能性を検討しています。これは、多くのプロジェクトが以前に使用した戦略です。もちろん、これは C コードを生成するものであり、手動で作成するものとは異なり、おそらくいくつかの次元では複雑さを超えています。

最近の C コンパイラは、通常の使用では非常に信頼性が高いですが、異常なストレス下でのエッジ ケースにどのようなバグが潜んでいるのかを知るのは困難です。

これらの事実の偶然が不幸につながるかもしれないと私は思います。

主要なコンパイラ (GCC、Microsoft C++、Clang など) のかなり最近のバージョンで、生成されたコードがエッジ ケースのバグ/制限を超える既知のケースはありますか、またはケースを見つける良い方法はありますか?