発電所ポートフォリオの全国的な発電スケジュールとエネルギー会社の取引ポジションとのバランスをとるアプリケーションを作成しました。クライアントとサーバーのコンポーネントはC#で作成されましたが、計算エンジンはF#で作成されました。
このアプリケーションの中心にある複雑さに対処するためにF#を使用すると、エンタープライズソフトウェア内の言語のスイートスポット、つまり大規模なデータセットのアルゴリズム的に複雑な分析が明らかに示されます。私の経験はとてもポジティブなものでした。特に:
測定単位私が働いている業界には、単位が散らばっています。私が実装した方程式(多くの場合、幾何学的な性質のもの)は、時間、電力、エネルギーの単位を扱いました。型システムに関数の入力と出力の単位の正確さを検証させることは、テストとコードの読み取り/理解の両方の点で、大幅な時間の節約になります。これにより、以前のシステムで発生しやすいエラーのクラス全体が根絶されます。
探索的プログラミングスクリプトファイルとREPL(F#Interactive)を使用することで、従来の編集/コンパイル/実行/テストループよりも実装にコミットする前に、ソリューションスペースをより効果的に探索できました。これは、プログラマーが問題と設計上の緊張を理解するための非常に自然な方法です。
単体テスト副作用のない関数と不変のデータ構造を使用して記述されたコードは、テストする喜びです。物事を台無しにする複雑な時間依存の相互作用や、モックされる依存関係の大きなセットはありません。
相互運用私はC#で計算エンジンへのインターフェイスを定義し、F#で計算を実装しました。計算エンジンは、相互運用性をまったく気にすることなく、それを使用する必要がある任意のC#モジュールに挿入できます。シームレス。C#プログラマは知る必要はありません。
コードの削減計算エンジンに入力されるデータの多くは、ベクトルと行列の形式でした。高次関数は、最小限の手間と最小限のコードでこれらを朝食に食べます。綺麗な。
バグの欠如関数型プログラミングは奇妙に感じることがあります。アルゴリズムに取り組んでコードを型チェッカーに渡そうと頑張っていますが、型チェッカーが満足すると、それが機能します。ほぼバイナリで、コンパイルされないか、正しいものです。奇妙なエッジケースエラーは最小限に抑えられ、再帰および高次関数により、エッジケースエラーを引き起こす多くの簿記コードが削除されます。
並列処理結果として得られる実装の機能的な純粋さは、データのベクトル処理における固有の並列処理を活用するための熟成をさせます。たぶん、これが.NET 4がリリースされたので次に進む場所です。