コンピュータサイエンスのクイックリファレンス

IT分野は成長を続けており、「ノベルティ」と「効果」を大々的に宣言するアプローチ、フレームワーク、およびテクノロジーの動物園で簡単に迷子になります。 しかし、ラッパーは通常、異なるコンテキストで新しく「発明」された古き良きアイデアを隠します。 その結果、配布されるのは最も単純で効果的なものではなく、最も宣伝されている実装です。 開発者には時間の不足が常にあるため、慎重に選択する時間はありません。マネージャーは、開発者を検索する際のリスクを軽減するために最も一般的なものを選択します。







私自身は、業界で使用されている用語や技術を、簡単な定義や説明的な例に減らすよう努めています。 私は非常に簡潔なガイドを提供しています。したがって、不完全であり、正確であることを意図していません。







タイプは、コンピューターが話すことができるものです。 習慣的な人間または正式な論理の意味で推論するために、つまり、最初の前提からいくつかの結論を構築するためのルールに従って。 良いニュースは、コンピューターがこれを自動的に行うことです。 さまざまなタイプシステムがあります:タイプミスマッチ、リソースリーク(錆の借り入れチェック)などの特定のタイプのエラーを排除するものもあります。 他のものは自動的に実装を生成します(Haskell Type Class、Scala&Rust Trait)。 タイプが人間によって容易に認識される場合、それらはドキュメントとして機能します。 強力なタイプのシステムは、弱いシステムよりも多くの作業を実行できます。 静的型処理は、実行時に動的ではなく、コンパイル時にこの作業を行います。







OOP のクラスは、内部にあるフィールドやメソッドについて説明できる型システムの1つです。 類似物:レコード、タプル、型積。







OOP 継承では、少なくとも4つのアイデアを組み合わせて、別々の方法で実装する必要があります。







  1. データの継承。ゲッター/セッターでラップされ、実装の継承を持つメソッドに変換された後は、ほとんど役に立たない。 透過的なラッピングの例は、Elm RecordsおよびHaskell Recordsです。
  2. 再利用のための実装の継承は、委任に置き換えることをお勧めします。
  3. インターフェイスの継承(アドホックポリモーフィズム)はメソッドをオーバーロードします。つまり、1つの名前で各タイプの異なる実装を取得できます。 類似物:Java Interface、Scala&Rust Trait、Haskell Type Class; データ型としての代数と、この型に対する一連の操作。
  4. 型の集約は、Java Enum、Scala Case Class、Elm&Haskell Algebraic Data Type、type-sumに似ています。


パターンマッチングは 、代数型の和または型積を分解します。つまり、コンストラクター操作の逆です。







OOP のオブジェクトはClosureです。ここで、自由変数はフィールドで、できればプライベートです。







OOPは歴史的に発展した人気のあるブランドですが、単一の中心的なコアのないユニークなアイデアのセットではありません。







多態性異なります。







タイプインターフェース -タイプ製品、主に機能で構成されます。







設計パターンは、プログラミング言語以外のアイデアの非公式な実装です。この言語は、必要なレベルの抽象化をサポートしていないためです。 別の高レベル言語では、その言語を使用してテンプレートを実装できます。







Visitorは、パターンマッチングを実装するデザインパターンです。







Builderは、部品を取り込んで製品を提供する高次機能を実装する設計パターンです。







依存性注入は、 依存関係を受け入れて製品を生成する高次関数を実装する設計パターンです。 依存関係は通常関数であるという事実に合わせて調整されたBuilderパターンと同型。







クライアントWeb開発は、歴史的に要求されたものですが、JavaScriptの排他的な位置に基づく独自のアイデアではありません。







MVCMVPMVVC-外部イベントを処理するための純粋な機能と抽象マシン







イベントループ (Node.js、Rust tokio)は、外部イベントを処理するための抽象的なマシンです。







プログラミングは、コード構成の工学科学です。







カテゴリ理論は、あらゆるものの構成に関する基本的な理論です。







同型とは、何かを別のものに変換または置換することであり、逆もまた同じです。つまり、同型のものの本質は1つです。







リファクタリングは、人間によって実行される同型です。







最適化は、コンピューターによって実行される同型です。







(純粋な)機能 -あるものから別のものへの変換は常に同じです。







ファンクターは1つの型を別の型(型の関数)に変換するため、純粋な関数の構成を最適化できます。 たとえば、リストファンクターは、 文字列型を文字列型のリストに変換し、 数値を数値型のリストに変換できます 。 文字列のリストの各要素に関数「 length 」を適用し、数字のリストを取得します。 数字のリストの各要素に1を追加し、新しい数字のリストを取得します。 また、リストを通過するいくつかのパスを1つの複合リストに置き換える(手動でリファクタリングするか、自動的に最適化する)ことができます。これにより、行の長さが検出され、すぐに1が追加されますが、最も重要なことには、中間リストが消えます。







モナドはあるタイプを別のタイプに変えるので、関数を副作用と組み合わせることができます。 たとえば、「 wait 」モナド( FuturePromice )には、長い操作の完了を待つという副作用があり、タイプ「 byte array 」をタイプ「 wait for byte array 」に変換し、タイプ「 confirm 」をタイプ「 confirm for confirm 」に変換します。 ファイル名を読み取り関数に渡し、ディスクからのバイト配列を待ちます。 次に、受信したバイト配列をネットワーク経由で送信機能に渡し、クライアントが受信を確認するのを待ちます。 そして、いくつかの期待を1つの化合物(コンビネータ(>> =)bindand_then )に置き換えることができます。これは、最初にディスクからのバイト配列を待機し、次にネットワーク経由でクライアントからの確認を待機しますが、最も重要なことは、明示的な中間待機が消えて、ランタイム環境が可能になることです他の便利なことをする時です。







二重性 -裏返しも機能します。 たとえば、type-sumはtype-productに二重であるため、リンゴまたはナシを受け入れる関数(type-sum)は、関数のペア(type-product)に置き換えることができます。1つはリンゴをどうするか、もう1つは-梨とは何ですか。







バリエーションによると、裏返しになったものは直接作用する(共分散)か、逆さまになる(共分散)と言われています。 たとえば、リンゴまたはナシの種類を食べる機能にはリンゴを与えることができますが、桃を窒息させるため、リンゴまたはナシまたはモモを入力することはできません。 雑食性の関数を作成するのはより難しく、より少なくなります。 より大きな引数-そのような引数を持つ関数はより少ない-これは「逆の方法で機能する」、つまり、関数は引数に関して反変です。 しかし、結果によると、関数は共変です。







小石でも計算できます。









量子計算はビットではなく、量子ビットで機能します。 たとえば、マーブル追加マシンのボールの代わりに、シュレディンガーキャッツを投げることができます。 たとえば、猫のペアは4つのオプションを提供します:生きている、最初の生きている、2番目の生きている、生存者なし。 その結果、マシンの1回の起動で、可能なすべての数値の合計が得られます。 唯一の問題は、車の底にあるシュレディンガー猫を家庭で役立つ普通の猫に変える方法です。







依存型 -値と同じ方法(パターンマッチングと計算)で型とコードの最適化を処理します。 依存型を使用すると、計算可能なテンプレートを使用して作業を転送したり、 数学自体をコンピューターに転送したりできます。 たとえば、タイプが「要素のセット」であることを指定できます。要素が64以下の場合、レジスタに収まるタイプu64を置き換えることができます。 または、コンパイラは、追加されたベクトルのサイズが同じであることを確認できます。







追加および修正が受け入れられます。








All Articles