問題タブ [automatic-generalization]
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.
optimization - F# の自動一般化とパフォーマンス
最近、予期しないコードの最適化に遭遇したので、観察した内容の解釈が正しいかどうかを確認したいと思いました。以下は、状況の非常に単純化された例です。
2 つのコード ブロックの唯一の違いは、2 番目のケースでは swap の引数を明示的に整数として宣言していることです。それでも、#time を指定して fsi で 2 つのスニペットを実行すると、次のようになります。
ケース 1 実数: 00:00:00.011、CPU: 00:00:00.000、GC gen0: 0、gen1: 0、gen2: 0
ケース 2 実数: 00:00:00.004、CPU: 00:00:00.015、GC gen0 : 0、gen1: 0、gen2: 0
つまり、2 番目のスニペットは最初のスニペットよりも 3 倍速く実行されます。ここでの絶対的なパフォーマンスの違いは明らかに問題ではありませんが、swap 関数を頻繁に使用すると、それが積み重なってしまいます。
私の推測では、パフォーマンス ヒットの理由は、最初のケースでは swap が汎用的で「等価性が必要」であり、int がそれをサポートしているかどうかをチェックするのに対し、2 番目のケースでは何もチェックする必要がないためです。これがこれが起こっている理由ですか、それとも何か他のものを見逃していますか? もっと一般的に言えば、自動汎化は諸刃の剣、つまり、パフォーマンスに予期しない影響を与える可能性のある優れた機能であると考えるべきでしょうか?
generics - F# のジェネリック関数
私はまだ、F# がどのように関数と型を一般化するか (または一般化しないか) について頭を悩ませようとしています。
ここで、 min はジェネリック型'a * 'a -> 'a (requires comparison)
を持ち、 add は具象型を持ちint * int -> int
、プログラムでの最初の使用から明らかに推測されます。どちらも同じように宣言され、使用されますが、一般化の違いはなぜでしょうか?
add の場合、関数をインラインで宣言することで問題を回避できることを理解しています。これにより、ジェネリック型定義が取得されます'a * 'b -> 'c (requires member (+))
。他の。
c++ - アプリケーションのユーザー インターフェイスの一般化
私は C 言語で組み込みデバイス用のアプリケーションを作成しています。これらのアプリケーションには、主に、登録を実行するためのデータのキャプチャとデータベースへの保存が含まれます。これには、フレーム、ボタン、チェック ボックス、ラジオ ボタン、ウィジェット リスト ボックス、テキスト ボックス、エントリ、コンボ ボックスなどの多くのウィジェットが含まれます。これらのウィジェットはすべて、X ライブラリを使用して作成されています。
私は、CSV ファイルを使用してアプリケーションを一般化し、ユーザーが作成したいすべてのウィジェットのリストを作成し、CSV ファイルに記載されている情報に基づいてそれらのウィジェットを作成しようとしました。
私が作成しているCSVファイルには、次のようなものが含まれています
- ウィジェット名
- ウィジェットの種類
- ウィジェットデータ入力タイプ/最大長/最小長 ..... ..... など
他の方法を提案してください。または、現在の方法自体をどのように改善できますか? また、CSV 自体で提供される情報によって DB を作成しています。それは「データ駆動型ユーザー インターフェイス」のアプローチだと言えます。いくつかの提案が必要です。良い案を教えてください。
プラットフォーム: Linux、GCC コンパイラ
python - 参照方法 | パイソン| 構文/ロジック
40G の音楽を整理するための Python コードを書きましたが、それは私のコンピューターでしか機能しません。そのため、コードを一般化して、どのコンピューターのどのディレクトリでも機能するようにしたいと考えました。
"~/Desktop/mp3-organizer/" が使用されている行を 'root_folder/%s' % song_info.tag.artist に変更したい。ここで、"root_folder" = 現在の作業ディレクトリ
しかし、それが機能しないことはわかっています。それを「言葉にする」方法がわからないだけです。
要約すると、目標は、スクリプトが配置されているディレクトリでコードが機能するようにすることです。自分のコンピューターの特定のディレクトリで機能するだけではありません。
どんな助けも高く評価されます
f# - 単純な関数で自動一般化を実装する方法
安全な除算を支援するために、次の演算子を作成しました。
問題は、整数でのみ機能することです。この関数を任意の数値プリミティブ (int、float、decimal など) で機能させたいと考えています。
私は自動一般化についていくつか読んだことがありますが、完全には浸透していません。また、それが正しい方向に向かっているかどうかもわかりません。
この演算子を一般化するにはどうすればよいですか?
ありがとう、
ジョー