問題タブ [robustness]

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 投票する
3 に答える
429 参照

haskell - エラーのない堅牢な Haskell

私は現在 Haskell を学んでいます。私がこの言語を選んだ動機の 1 つは、非常に高度な堅牢性を備えたソフトウェア、つまり、完全に定義され、数学的に決定論的で、クラッシュしたりエラーを生成したりしない関数を作成することでした。システムの述語 (「system out of memory」、「computer on fire」など) によって引き起こされる障害を意味するわけではありません。それらは興味深いものではなく、単にプロセス全体をクラッシュさせる可能性があります。また、無効な宣言 ( ) によって引き起こされるエラーのある動作も意味しませんpi = 4

代わりに、厳密な静的型付けを使用して (一部の関数で) それらの状態を表現不能およびコンパイル不能にすることによって削除したい、誤った状態によって引き起こされるエラーを参照します。私は心の中でこれらの関数を「純粋」と呼び、強力な型システムによってこれを達成できると考えました。ただし、Haskell はこのように「純粋」を定義しておらず、プログラムerrorがどのようなコンテキストでもクラッシュすることを許可していません。

例外をキャッチすることは非純粋ですが、例外をスローすることは純粋であるのはなぜですか?

これは完全に受け入れられ、まったく奇妙ではありません。残念なことに、Haskell は、 を使用した分岐につながる可能性のある関数定義を禁止する機能を提供していないようerrorです。

これが私がこれをがっかりさせる理由の不自然な例を次に示します。

readFruit純粋な関数が実際に機能し、未処理の状態が原因でprintFruit実際​​に失敗しないことに私が偏執的であるとしましょう。このコードは、絶対に重要なルーチンで果物の値をシリアル化および非シリアル化する必要がある宇宙飛行士でいっぱいのロケットを打ち上げるためのものであると想像できます。

最初の危険は当然、パターン マッチングでミスを犯したことです。これにより、処理できない恐ろしいエラー状態が発生するからです。ありがたいことに、Haskell はそれらを防ぐための組み込みの方法を提供して -Wallおり、インクルード-fwarn-incomplete-patternsと AHAを使用してプログラムをコンパイルするだけです。

Peach フルーツをシリアル化するのを忘れていたためshowFruit、エラーがスローされていました。これは簡単な修正です。追加するだけです。

プログラムは警告なしでコンパイルされるようになり、危険が回避されました! ロケットを発射しますが、突然プログラムが次のようにクラッシュします。

ロケットは運命にあり、次の障害のあるラインが原因で海に衝突します。

基本的fromJustに、それが発生するブランチを持っているので、絶対に「超」純粋でErrorなければならないので、それを使用しようとしてもプログラムをコンパイルしたくありませんでした。printFruitたとえば、行を次のように置き換えることで修正できます。

Haskell が厳密な型付けと不完全なパターン検出を実装することを決定したのは奇妙だと思います。これらはすべて、無効な状態が表現可能になるのを防ぐという壮大な追求の結果であり、プログラマーに分岐を検出する方法をプログラマーに与えないことで、フィニッシュ ラインのすぐ前に落ちerrorます。禁止されている。ある意味では、これにより Haskell は Java よりも堅牢性が低くなり、関数が発生できる例外を宣言する必要があります。

これを実装する最も簡単な方法はerror、何らかの形で関連付けられた宣言を介して、関数とその式で使用される関数をローカルで単純に未定義にすることです。ただし、これは可能ではないようです。

エラーと例外に関する wiki ページでは、コントラクトを介してこの目的のために「拡張静的チェック」と呼ばれる拡張機能について言及していますが、リンクが壊れているだけです。

基本的には、次のようになります。上記のプログラムをコンパイルしないようにするにはどうすればよいfromJustですか? すべてのアイデア、提案、解決策を歓迎します。

0 投票する
0 に答える
172 参照

multithreading - mmapなしでSQLiteを通常のロックモードとウォールジャーナルモードに保つことは可能ですか?

iOS開発でSQLiteを使用しています。

今、私はマルチスレッド読み書きのより良いパフォーマンスと、mmap なしの堅牢な WAL ジャーナル モードを必要としています。

私が知っているように、 mmap のない WAL ジャーナル モードには EXCLUSIVE locking mode が必要です。これにより、マルチスレッドの読み取りと書き込みが妨げられる可能性があります。

では、mmap なしで SQLite を通常のロック モードと wal ジャーナル モードに保つことは可能でしょうか? はいの場合、これを実装するための一般的なアイデアを教えてください。ソースコードを変更する必要があるか、それがどれほど難しいかは関係ありません。

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

vba - VBA 最適化の堅牢なコード

なのでVBA初心者です。私は Java フェティッシュなので、プログラミングは初めてではありませんが、VBA を使用するとオフィス ドキュメントを操作するのが簡単に思えました。とにかく、トピックについて:

私は現在、社内で自動化を行っています (この例では契約書を作成しています)。しかし、Java を使用して、私は常に堅牢なコードを作成することを学びました。VBA コードは現在機能していますが、ユーザーの「親しみやすさ」が必要なため、満足していません。私の質問は (気にしないでください)、私のコードをより堅牢にするために、正しい方向に向けて微調整してもらえますか?

コードは次のとおりです。



ご覧のとおり、コードは非常に基本的なものです。そして、それは機能しますが、配信するのは良くありません。

Functions明らかに何かの名前が常に同じ長さであるとは限らないため、定義された2つは単にユーザーの文字列をフォーマットしています。

Range私の意見では、それがプログラムを変更に非常に敏感にする理由なので、プロパティを削除したいと思います。

あらゆる提案を歓迎します。

注: 現時点では、契約には 3 つの異なる「対象者」が含まれる可能性があるため、このSelect Caseステートメントが存在します。大きくなったら全然ダメだけど、今のところは大丈夫。

0 投票する
0 に答える
918 参照

r - R の堅牢な最適化パッケージ

私は現在、混合整数線形計画問題に取り組んでおり、R でのロバスト最適化に関するソフトウェア パッケージが利用できるかどうか疑問に思っていました。

前もって感謝します。

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

java - Spring JPA webapp で信頼性を構築する

Web アプリケーションに信頼性を組み込むための解決策を見つけようとしています。ネットワーク接続/データベース接続が失われた場合、SQL をデータと共にダンプする計画です。現在の実装では、Rest コントローラー、サービス、DAO があります。DAO が をスローPersistenceExcetpionし、それが Controller レイヤーまで伝搬されます。

コード例:

これDBExceptionはランタイム例外です。

さて、実際の質問が来ます。チームメイトの 1 人が、たとえば次のようなカスタム例外を設定することを提案しました。InsertException, UpdateExceptionこれらの例外のいずれかが発生した場合、そのエンティティに対してどの操作が実行されたかがわかるため、適切な sql としてファイルに保存できます。

例えば。コードがEmployeeエンティティの保存に失敗したとしましょう。これにより がスローInsertExceptionされ、そのエンティティの insert sql ステートメントとしてファイルにエントリが作成されます。insert into employeee values ('firstname','lastname');

私にとって、接続が失われたときにSQLファイルの作成を実装するという考えは、上記の実装ほど単純ではないようです。

私が提唱した質問は次のとおりです。1) 複数のアクション (挿入、更新、削除の任意の組み合わせなど) がサービス メソッドで実行された場合、どのように処理しますか? 2) さまざまな例外についてはどうですか? PerisistenceExceptionつまり、接続の問題だけでなく、制約の失敗、エンティティが見つからないなどの理由が考えられます。

すべての異なる条件も考慮する上記のシナリオを実装する方法はありますか。

ありがとう。

更新: chrylis のコメントに基づきます。私はすでにこれを質問に追加しているはずです。これは、さまざまな小売店でローカルに実行されている Web アプリケーションです。また、アプリケーションにダウンタイムが発生することはあり得ないため、接続に問題が発生した場合でも、アプリは動作し続ける必要があります。ファイルは後で中央データベース サーバーと同期されます。

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

c++ - ファイルをコピーする C++ の最も堅牢な方法

さて、ディスク書き込みエラーが非常にまれであることはわかっています。私が扱っているデータは非常に重要です (SSID のような重要なものです)。したがって、絶対に最小限のメモリ量を使用して、最も堅牢な方法でファイルをコピーしたいと考えています。これまでのところ、これは私が得た限りです。大量のメモリを消費しますが、ソースが見つかりません。その仕組みは、確認結果が得られるまで何回も再チェックすることです (エラーの誤検知の数が大幅に増える可能性がありますが、実際のエラーの可能性は大幅に減少する可能性があります)。また、下部のスリープは、Windows タスク マネージャーを使用してプログラムの全体的なパフォーマンスを分析する時間を確保するためのものです。



では、私のコードが最善の方法で正しい軌道に乗っている場合、それを改善するために私のコードで何ができるのでしょうか? しかし、私のコードが最適な解決策と完全に一致していない場合、最適な解決策は何ですか? この質問は基本的に、非常に非常に重要なデータをコピーするアプリケーションのまれなディスク書き込みエラーの検出に関するものであることに注意してください。

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

python - Python で書かれたサーバーの堅牢な無限ループ

イベントを処理するサーバーを作成し、イベントの処理中にキャッチされない例外がサーバーを終了してはなりません。

サーバーは、スレッド化されていない単一の Python プロセスです。

これらのエラータイプで終了したい:

  • キーボード割り込み
  • メモリエラー
  • ...

組み込みの例外のリストは長い: https://docs.python.org/2/library/exceptions.html

以前に何度か行われたと思うので、この例外処理を再発明したくありません。

どうやって進める?

  1. ホワイトリストを用意する: OK であり、次のイベントを処理することが正しい選択である例外のリスト
  2. ブラックリストを持つ: サーバーを終了することが正しい選択であることを示す例外のリスト。

ヒント: この質問は、UNIX デーモンをバックグラウンドで実行することに関するものではありません。それはダブルフォークではなく、stdin/stdout のリダイレクトでもありません :-)

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

exception - 例外が存在する場合にサードパーティのコードを確実に呼び出す方法は?

例外を使用してエラーを通知する言語では、サードパーティのコードを呼び出して、失敗した場合は代わりにフォールバック コードを実行したいと考えています。例えば:

私の経験では、サードパーティのコードによってスローされる可能性のあるすべての例外を知ることは非常にまれです。したがって、これらの例外をcatch条項に記載することはできません。一方で、catchすべての可能性のある例外を避けるように、私はよくアドバイスされます。

catchこの場合、条文はどのように書けばよいでしょうか。