問題タブ [static-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.
delphi - このコードが DISTINCT 型を宣言するのはなぜですか?
ShlObj.pas 行 9922 (Delphi XE と同様):
ここで David Heffernan のコメントに答える理由は、これが関連する背景の概要を説明していると思うからです。質問。Windows API 起源のコールバック ルーチンの手続き型は、型エイリアスとして宣言されます (標準的な API 名 + "Pascalized" エイリアス、またはその逆の場合もあります)。例はWindows.PIMAGE_TLS_CALLBACK
、ShlObj.LPFNDFMCALLBACK
などです。上記の型宣言は例外です。それが私が尋ねている理由です:-)
python - オプションの静的型付けは、Python API 設計にメリットがありますか、それともデメリットになりますか? (型チェックデコレータの例を含む)
私は長い間 Python 開発者であり、言語の動的な性質が大好きですが、Python がオプションの静的型付けの恩恵を受けるかどうか疑問に思っています。 ライブラリの API に静的型付けを適用できると便利でしょうか? また、これにはどのような欠点がありますか?
Pastebin で実行時静的型チェックを実装するデコレータを簡単にスケッチしたところ、次のように動作します。
ライブラリの API 関数でこのようなデコレータを使用することは実用的でしょうか? 私の観点では、ライブラリのドメイン固有モジュールの内部動作では型チェックは必要ありませんが、ライブラリとそのクライアントの間の接続ポイントでは、型チェックを適用することによる契約による単純なバージョンの設計が役立つ可能性があります。特に、ライブラリのクライアントに対して何を期待し、何を返すかを明確に示す強制ドキュメントの一種として。
この例のように、addObjectToQueue()
とisObjectProcessed()
はクライアントが使用するために公開されておりprocessTheQueueAndDoAdvancedStuff()
、内部ライブラリ関数です。型チェックは外向きの関数では役立つと思いますが、内部関数で使用すると、python の動的性と有用性が肥大化して制限されるだけです。
この手法を使用することの欠点は何ですか? ペーストビンでの私の素朴な実装の欠点は何ですか?
Python を静的に型付けされた言語に変換することについて議論する回答ではなく、API 設計固有の長所と短所についての考えです。(質問ではないと考える場合は、これをprogrammers.stackexchange.comに移動してください)
lisp - Common Lisp 型宣言が期待どおりに機能しない
Common Lisp で次のように関数を定義すると:
(foo "a")
like の呼び出しがすぐに失敗することを期待していましたが、代わりに への呼び出しで失敗し+
ます。フォームはdeclare
静的型チェックを保証していませんか?
programming-languages - JVM と CLR の両方で動作する静的型付け言語はありますか?
最終的には PC、Xbox、Android プラットフォームで実行したいコードを書いています。可能であれば、Mac と Linux も実行します。プラットフォームごとに書き直すのではなく、すべてのプラットフォームで動作する言語で一度書きたいと思います。Fantomも検討しましたが、どうやらAndroidでは動かず、静的型付けやジェネリクスのサポートが限定的で、ScalaはCLRで動くと聞いていますが、現在CLRには対応していません。これにより、XNA で使用できなくなります。動的型付け言語は実行が遅く (特にスマートフォンでは重要)、デバッグが難しいため、動的型付け言語は使用したくありません。
python - この基準を満たす言語は?
私は Java プログラミングをいくつか行い、C および PHP プログラミングもほとんど行いませんでした。最近、言語が面白そうだったので Python を学び始めました。
しかし、SO に関するいくつかの投稿は、Python が並行プログラミングに適していないことを示しているようです。また、コンパイラを持つ言語と比較して遅いです。私は静的型付け言語の利点も気に入っていますが、Python は動的型付けです。私の質問は、次の基準を満たす言語があるかどうかです。
1) インタープリターを持っている (開発を高速化するため)
2)コンパイラを持っている(コンパイルされたコードがより速く実行されるため)
3) OO 機能を持っている
4) 静的型付け
上記の基準を満たす OCaml に出会いました。しかし、SO に関する投稿を見て、OCaml は並行プログラミングには適していないと思いました。したがって、5番目の基準は
5) 並行プログラミングに適しています。
PS :- 私はプログラミング言語の専門家ではないので、上記の観察結果のいずれかが間違っている場合はご容赦ください。
python - 静的に型付けされたクラス属性の Python モジュール
値を属性に割り当てるときに、値の型を Python クラスで自動的にチェックするようにします。
enthought のtraitsモジュールがあり、IPython にはそのサブモジュールIPython.utils.traitletsとして純粋な python バージョンがあります。類似のモジュールはありますか? そのモジュールにこれらの属性を設定するための自動コマンドライン引数パーサーがある場合、それはより良いでしょう。
編集:スニペットをありがとう。しかし、私はPythonライブラリが欲しいです。それを行うためのライブラリが存在する場合、私は自分で再実装したくありません。
haskell - 複数のクラス制約を持つHaskell型シグネチャ
どうすれば複数のクラス制約を設定できるので、A
がで、Eq
がB
である場合Num
、次のいずれかを言うことができます。
また
Eq a =>
それで、どうすればNum b =>
同時に持つことができますか?
f :: Eq a => Num b => a -> b
、f :: Eq a -> Num b => a -> b
、 とf :: Eq a, Num b => a -> b
私が望んでいたことをしませんでした。
java - Java でのスクリプト言語の静的型付け
ゲーム用に Java でスクリプト言語を構築しており、現在はパーサーに取り組んでいます。この言語は、カスタムの呪文や効果を作成するために、プレイヤー/改造者/私自身によって利用されます。ただし、現在のシステムで静的型付けをスムーズに実装する方法を想像するのは困難です (パフォーマンスのニーズによって引き起こされる苦痛な必要性)。コンパイルが高速かどうかはあまり気にしませんが、実際の実行は可能な限り高速である必要があります (少なくとも、合理的な範囲内で。これをすぐに実行したいと考えています)。
したがって、パーサーには 、トークンのストリームを反復処理するためのメソッドがnext()
あります。peek()
現在、型の優先順位を保持する方法で相互に呼び出す階層メソッド (定数、変数などを返す「最下位」のメソッド) で構築されています。各メソッドは、それが「解決」するIResolve
ジェネリック型を持つ を返します。<T>
たとえば、「and」がより緊密に結合された「or」式を処理するメソッドを次に示します。
問題は、型に依存する関数を実装する必要がある場合です。お気づきかもしれませんが、ジェネリック型はパーサーによって指定されておらず、設計上の問題の一部です。この関数では、次のようなことをしたいと思っていました (ジェネリック型の消去のためにこれは機能しませんが...)
接続できるようにしたい問題点は、switch ステートメントにあります。int
特に将来ユーザー定義クラスをサポートしたい場合は、IResolve を非ジェネリックにし、何かを返す「getType()」メソッドを与える必要があることはすでに確信しています。
質問は:
私の現在の構造と混合継承 (Java や C# などのユーザー定義のクラスとインターフェイス) への欲求を考慮して、静的型付けを実現する最善の方法は何ですか? 良い方法がない場合、それを達成するために構造を変更または再構築するにはどうすればよいですか?
注: 私は、自分が何に夢中になってしまったのかを理解しているとは主張していません。建設的な批判は大歓迎です。何か明確にする必要がある場合は、お知らせください。
別のメモ: あなたが「なぜ静的型付けなのか?」と考えていることは知っていますが、通常はその意見に同意しますが、ゲームの世界はボクセル (正確には Minecraft の mod です) で構成されており、それらを操作するには速いです。O(n^2) アルゴリズムが 100 ブロック以上を 1 秒間に 20 回反復するスクリプトを想像してみてください。30 人以上のプレイヤーが、すでにかろうじて音を立てている安価なサーバーで... または、1 回の大規模な爆発が必然的に数千のブロックに影響を与えます。恐ろしいラグスパイクを引き起こします。したがって、バックエンドの型チェックやダックタイピングの任意の形式は、それをカットするつもりはありません (私はそれがどうしても欲しくてたまらないのですが)。
language-agnostic - 変数型を宣言する必要がない言語の品質は、弱い型付けまたは動的型付けの例ですか?
変数の型を宣言する必要のない言語 (PHP や Perl など) の品質は、弱い型付けまたは動的型付けと呼ばれますか? 2つの用語について頭を悩ませています。
動的/静的型付けは型変換に関係するのに対し、弱い/強い型付けは変数の減速に関係するというのは正しいですか?
scala - Scala (最新の 2.10) と Groovy++ (最新の 0.9.1?) の比較
Groovy の発明者である James Strachanのビデオを見たところです。そのため、Groovy についてもっと知りたくなり、Groovy++ にたどり着きました。Groovy++は、静的に型付けされ、コンパイルされた Groovy のバージョンです (Groovy は明らかに完全に動的です)。
Groovy++ (0.9.1 の最新バージョン?) と Scala (2.10 の最新バージョン) の違いを突き止めようとしました。Groovy++ フォーラムでの活動には、多くの情報を引き出すことができる最新バージョンに関する最近の活動はあまりありません。
では、Scala と Groovy++ の簡単な比較/対照はありますか? 静的にコンパイルされた機能を並べて比較したいので、Groovy 自体には (Groovy++ の設計の基礎であること以外には) 興味がありません。簡単な長所/短所 (つまり、トレードオフ) のリストは、基本的に、数十時間から数百時間の調査と実験を行うことなく、私が求めているものです。
この対比と比較のクエリに貢献できるものは何でもありますので、よろしくお願いします。