問題タブ [dynamic-typing]

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 に答える
887 参照

javascript - ポリモーフィックなインライン キャッシュは可変型でどのように機能しますか?

ポリモーフィック インライン キャッシュ (PIC) は、高価なルックアップ手順 (通常はハッシュテーブル ルックアップ) を回避するために、オブジェクトの型によって実際のメソッドをキャッシュすることによって機能します。

型オブジェクトが変更可能な場合 (つまり、メソッドが実行時に別のものにパッチされたサルである可能性がある場合)、型比較をどのように処理しますか?

私が思いついたアイデアの 1 つは、メソッドが調整されるたびにインクリメントされる「クラス カウンター」です。それらのメソッドが変更されていなくても、そのクラス。

この問題は JavaScript に直接当てはまり、大きな JavaScript 仮想マシンの 3 つすべてに PIC があることがわかっているため、これには適切な解決策があるに違いないと確信しています。

0 投票する
5 に答える
555 参照

c#-4.0 - 動的型付けと強い型付けの利点を融合した夢の言語はありますか?

オブジェクトを内部的にハッシュテーブル(JavaScriptなど)として処理する言語を学びたいと思いますが、オブジェクトを強力な型でラップして、設計時にコード補完/インテリセンスの利点を提供することができます。これが私がこの夢の言語が機能することを望む方法です:

このプログラムがエラーなしでコンパイルされ、例外なく実行 され、コンソールに「Miauew」と出力されることを望みます。これを行うことができる言語はありますか?多分C#4.0?

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

objective-c - Objective-C の動的型付けと戻り値

理解できない非常に奇妙な動作に遭遇しました。type のプロパティを持つTextureクラスがあります。このクラスは、 type のプロパティを持つクラスにラップされています。のは、基礎となるテクスチャのとして単純に計算されます。contentWidthintImagewidthintwidthImagecontentWidth

は、画像サイズを読み取りたいクラス (継承ではなく構成による) によってImage使用されます。Button

問題は、変数に(–2147483648)が含まれているのに、変数がheight正常に設定されることです。寸法を確認しましたが、約 200×100 程度で、限界にはほど遠いです。また、Xcode デバッガーのツールチップには、両方のプロパティが正しく表示されますが、幅が 2 つのアクセサーを通過した後でのみ、数値が文字化けします。オブジェクトは解放されません。私は何が欠けていますか?widthNaNintTexture


更新:Imageクラスのアクセサーを展開して、問題の原因を確認しました。

最初の行で改行すると、wが正しく設定されます。ステップ オーバーすると、実行は呼び出し元の関数に戻ります。

…そして、barcontains NaN.


更新:うーん、わかりました:

imageとして宣言されておりid、これがポイントです。誰かがこれを説明できますか?私は正しいwidthメソッドを呼び出していないと感じていますが、ここで何が起こっているのでしょうか? 私は常に変数をできるだけ厳密に入力しますが、ここではid型が便利です。このようなバグが発生する可能性があるとは思いもしませんでした。

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

c# - C# 4.0 から使用されている COM ライブラリで、動的型を大量に使用する必要があるのはなぜですか?

C# 4.0 のデモでは、動的型を使用するコードがたくさん見られます。たとえば、次のコードは Excel セルの値を設定します。

Excel.Cells[1, 1].Value = ...

ただし、キャストを使用して事前にバインドされた方法でセルにアクセスすることもできます。

((範囲)excel.Cells[1, 1]).Value = ...;

そもそも、Excel COM ライブラリで Cell 型を Range 型として記述しないのはなぜですか? 同様に、次のメソッドのすべての引数は動的です。

Excel.ActiveWorkbook.Charts.Add(...)

引数を静的にできなかったのはなぜですか? Excel のオブジェクト モデルを見ると、至る所に動的な型があります。これは、COM の表現力の制限によるものですか? COM ライブラリで静的型ではなく動的型が使用される場合のパターンはありますか?

0 投票する
7 に答える
6911 参照

language-design - 動的タイピングが解釈された言語に関連付けられることが多いのはなぜですか?

簡単な質問: 私は C++/Java のようなコンパイル済み言語や Python/Javascript のようなインタープリター型言語で (専門的にも個人的にも) 多くのプログラミングを行っています。個人的には、静的に型付けされた言語でプログラミングすると、ほとんどの場合、コードがより堅牢になることがわかりました。ただし、私が遭遇するほとんどすべてのインタープリター言語は、動的型付け (PHP、Perl、Python など) を使用しています。コンパイルされた言語が (ほとんどの場合) 静的型付けを使用する理由はわかっていますが、解釈された言語設計で静的型付けを嫌う理由がわかりません。

急激な切断はなぜですか?それはインタープリター言語の性質の一部ですか?おっと?

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

java - ruby のオブジェクト参照の型

私はRubyが初めてで、現在ガイドとして使用しているRubyの本からいくつかの例を試しています:

これは、同じスクリプト ファイル内に 2 つのクラスを含む非常に単純な例です。credit メソッドと debit メソッドに渡す引数の型について混乱しています。Java から来て、私はまだ型の観点から物事を考えているので、明らかに、私が渡すアカウント変数の型、たとえば debit メソッドは Account 型でなければなりません。

ruby は動的に型付けされ、型をチェックしないため、渡す引数を安全に操作し、account.balance -+ amount と言って残りのメソッドを定義するにはどうすればよいでしょうか?

debit メソッドに Account 以外のオブジェクトへの参照を渡すと、どのような安全性があるのか​​を理解しようとしています。

以下のメソッドの本体が定義されると、指定されたパラメーター アカウントが使用されます。今、私はまだアイデアを理解できないので、私は自分自身を繰り返していると思います...どうすれば引数アカウントを取得できますか(誰もチェックしていないので、どのようなタイプでもかまいません)、ドットを使用していくつかのロジックを構築できます演算子を使用して、そのインスタンス変数を要求するか、他のメソッドを呼び出して、正しい種類 (または型) であるかどうかに関係なく、オブジェクトに対して計算を実行しますか? もちろん、暗黙のうちに Account 型にしたいと思います。

また、2 つのクラスを別のファイルで宣言した場合、同じ例はどのように機能しますか?

初心者の質問については、事前に心からお詫び申し上げます。動的型付けについて理解するのが難しいと思います。この本はこれについて少し曖昧であるか、Java だけで考えてトンネルのビジョンを揺るがすことができないかのどちらかです。

実用的な説明があれば大歓迎です。

0 投票する
17 に答える
519191 参照

programming-languages - 静的型付け言語と動的型付け言語の違いは何ですか?

新しいプログラミング言語は動的に型付けされるとよく​​耳にしますが、言語が動的に型付けされるのか静的に型付けされるのかというと、実際にはどういう意味ですか?

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

java - Javaでタイプのインスタンスを動的に作成するにはどうすればよいですか

私のJavaアプリケーションにはメソッドがあります

このメソッド内で、 Transactionを拡張するオブジェクトTのインスタンスを作成する必要があります。

このようにするのは正しいですか

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

java - CLR と JVM における動的型付けへのさまざまなアプローチ

.NET 4.0 では、動的に型指定されたオブジェクトの呼び出しをディスパッチするための新しいサポートが導入されています。私が理解できる限り、これには次のことが含まれます。

  • CLR に変更はありません
  • BCL の新しい型
  • 新しい構文を新しい型の使用法に変換する新しいコンパイラ

Java スペースでは、JVM に新しいdynamicinvokeバイトコードを追加して、ディスパッチが中間言語の抽象化の背後で JIT によって処理されるようにすることについて議論しています。

Java のアプローチは、多くの重要な関係者から支持されています。

これらは、2 つの根本的に異なるアプローチのように見えます。それぞれのメリットは何ですか? また、なぜ両方の陣営が異なる道を選んだのですか? 私は、両方のソリューションの柔軟性と実行時のパフォーマンスに特に関心があります。両方の VM が最終的に同じことを達成しようとしていますか?

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

static-typing - 厳密な型付けシステムに対する「増大する反乱」の引用はありますか?

新しいGo 言語FAQでは、次のように明示的に主張しています。

Java や C++ のような面倒な型システムに対する反抗が高まっており、人々を Python や JavaScript などの動的に型付けされた言語に向かわせています。

そのような主張を実際に裏付ける (逸話的ではない) データはありますか? 私は常に動的型付けがだらしなくて面倒だと思っていましたが、慣れていない場合は、少なくとも警告が必要です。