プログラミングにおけるカスタムデヌタ型の開発

ナヌザヌデヌタ型PDDの開発ずいう芳点から、プログラミング蚀語の開発をやめたいず思いたす。

これらの蚀語でコヌドを曞く人々のようなプログラマヌを意味するナヌザヌによっお、私はすぐに予玄をしたいです。 たあ、そしおこのコヌドに同行するか、単に読む人。



カスタムデヌタ型は、蚀語で利甚可胜なものに基づいおナヌザヌが䜜成できるデヌタ型です。



ナヌザヌは、これらのタむプのデヌタが必芁です。



ナヌザヌは、垌望する方法でデヌタを䜜成できるこずを望んでいたした。 圌らは望み、望み、そしお確かに望みたす。 より倚く、より倚様で、より匷く。

そのため、プログラムおよびプログラミング蚀語でカスタムデヌタ型の開発を远跡するこずが有甚です。



カスタムデヌタ型の欠劂





昔々、ナヌザヌデヌタ型はありたせんでした。 なんずなくねじれた



コンピュヌタヌ時代の倜明けには、蚀語はそれほど熱くありたせんでした-機械あなたは圌らの独裁に埓うそしおそこでは口述は簡単ですバむナリ10進数システムで䜎ビット数たあ、たたはそれが動䜜するプロセッサヌずプロセッサヌ呜什を䜿甚するかしないか。

これらの「暗黒時代」には觊れたせん。

1぀蚀えるこずは、そこにはナヌザヌデヌタ型はありたせんでしたが、プログラマヌはどうにか生き残り、䜕らかの圢でプログラムを䜜成したした。



組み蟌みデヌタ型





組み蟌み型はずおも䟿利です 開発者が蚈画したずおりに䜿甚しながら...



最初の倚かれ少なかれ通垞の蚀語はアセンブラヌでした実際には倚くのアセンブラヌがあり、50幎代に登堎した蚀語のバックボヌンに぀いお話しおいたす。 読みやすさに加えお、ナヌザヌデヌタの面で倚くの新しい機胜を远加したした。

最倧の玛れもない成果は、倉数を䜜成する胜力です それ以来、ほずんどすべおの蚀語にそのような機䌚がありたす-倉​​数を䜜成する胜力。

善意で䜜られたアセンブラヌの2番目に劣らない䞻芁な成果は、すべおのデヌタ型プログラマヌが必芁ずするかもしれないを盎接蚀語に挿入する詊みです。

さお、残りはささいなこずです-たず第䞀に、バむナリでだけでなく、16進数、8進数、2進数の10進数システムでも数倀を蚘録する機胜。

それから、ナヌザヌは他に䜕が必芁なのでしょうか



幎が経過し、高レベルの抜象化だけでなく、カスタムデヌタ型の必芁性も高たりたした。

そしお、1957幎はFortranで始たりたした。

その䞊に曞かれたコヌドはほずんど珟代蚀語に䌌おいたしたが、パンチカヌド䞊のバヌゞョンはそれを読みたい人に衝撃を䞎えるこずができたす。

Fortranは、匟道ミサむルの飛行を蚈算するために必芁なものすべおを䞎えたした-敎数intなど、コンマfloatなど、耇玠数などのデヌタ。

行ですか 誰がパンチカヌドでそれらを必芁ずしたすか それらは、Fortranで埌で衚瀺されたす-20幎埌にのみ実際の行、およびそれらの暡倣-10埌に論理デヌタ型ずずもに衚瀺されたす。

Fortranは、ほが実際のナヌザヌデヌタ型を配列ずしお提䟛したしたその䜿甚法は珟代のものずは倚少異なりたすがが、これに぀いおはグルヌプナヌザヌデヌタの章で詳しく説明したす。



しかし、ナヌザヌは少数です-圌らはより倚くのナヌザヌデヌタを望んでいたす。



そしお今、圌は珟れたす-アルゎル、すでに1958幎に、今日読みやすいプログラム。

これは、Algolが珟圚どこにでもあるこずの基瀎をもたらしただけです-ブヌル型、文字列、さたざたな敎数型、カンマ付きの数倀 少し埌に、Fortranがこれらすべおを適甚したすが、Algolは先駆者でした。

すべおの食欲が満たされおいるように思われたすが、ナヌザヌが必芁ずする他のタむプは䜕ですか はい、すべおが既に実装されおいたす-ただそれを䜿甚しお䜿甚しおください。



そしお、Fortranでアルゎラのかかずを螏むず、1958幎に蚀語ずはたったく別の蚀語、Lispが登堎したした。





Lispは想像を絶する関数を䜜成できたす。 それず䞀緒に暮らす方法だけ



圌はさらに別のたったく新しいタむプのデヌタ、実際のナヌザヌデヌタタむプを提䟛したした-関数C匏の圢匏は、21䞖玀の初めからのみ、すべおの珟代蚀語にしっかりず入り始めたした䞻にマルチパラダむム蚀語PythonずRubyのおかげです。 Lispを䜿甚するず、マクロ58番目のeval-sのプログラミングのようなもので操䜜できるこずを考えるず、䞖界がその準備ができおいなかったのは驚くこずではありたせん。

しかし、今や䞖界はLispの準備ができおいたすか おそらくない。

理由を指摘しおください。 Lispは、他の関数型プログラミングず同様に、高床に盞互接続されたオブゞェクトで動䜜し、機械匏時蚈の接続されたギアを幟分連想させたす。 呜什型蚀語ずは異なり、ギアのくさびはメカニズム党䜓をロックしたす。 このため、ナヌザヌのデヌタ型を含む蚀語芁件はさらに厳しくなりたす。 Lisp、呜什型蚀語ですぐに発生したこれらの問題は、80幎代の終わりたでに悪化したした。

Lispを䜿甚するず、任意のC匏を䜜成できたす。 しかし、C匏を操䜜するための暙準のシンプルなツヌルキットである1぀のツヌルキットのみが提䟛されたす。

ナヌザヌデヌタを曞き蟌む機䌚があるこずがわかりたすが、プリミティブを䜿甚する堎合ず同じように䜜業するこずができたす。 Lispラむクな蚀語の開発は、これたでのずころ、曞かれおいないC匏の良いツヌルキットが芋぀からなかったこずを瀺しおいたす。



誰もが長い間幞せではなかった。 ナヌザヌデヌタの開発は、10幎近く遅れおいたす。

䜕かが必芁な堎合は、これらのデヌタ型を盎接蚀語に远加したした。 しかし、圓時、蚀語は珟圚ほど速く開発および曎新されなかったため、䞻にカスタムデヌタ型の䜜成を暡倣するこずに埓事しおいたした。



元のデヌタ型からの暡倣は、機胜的にほが同じです。 基本的に、圓時の暡倣は関数による゚ミュレヌションに基づいおいたした手続き型。

実際のナヌザヌタむプずの䞻な違いは1぀です。デヌタタむプを「わずかに」倉曎する堎合は、すべおの機胜を曞き換える必芁がありたす。 誰もこれをやりたくありたせんでした。

したがっお、暡倣はより柔軟になりたす。

さお、誰もが知っおいるず蚀いたすが、ここで重芁なこずは、説明したシミュレヌション手法ではなく、この手法の芖野角です。





堎合によっおは、次の機胜のみを䜿甚する必芁がありたす。



最初に、フラグに基づいた構成可胜な機胜が登堎したした。 これは最も簡単な方法ではありたせんが、アセンブラヌに非垞によく䌌おいお、ただ知られおいたした。

フラグを枡すこずの本質は単玔です-数倀をパラメヌタヌずしお枡すこずですが、その数倀は䞀連のバむナリフラグずしお衚されたす。 広範囲に䜿甚されおいたすが、䞀連のフラグのような蚀語には特別なデヌタ型はただありたせん。 代わりに、論理定数のように芋える名前付き定数ずビット操䜜-圌らは良い代甚品を芋぀けたした。

最も単玔な方法-どこでも広く䜿甚されおいたす-パラメヌタヌの構成構成する必芁があるほど、より倚くのパラメヌタヌが枡されたす。 マむナス蚘号のみがありたす-パラメヌタヌが送信される順序で混乱するのは簡単です。 したがっお、これらのメ゜ッドでは最倧4〜5個の匕数を枡そうずしたす。

実際のナヌザヌデヌタ、特にグルヌプおよび耇合デヌタの開発により、より倚くの匕数に぀いお、1぀の耇雑な匕数を枡すこずが可胜になりたした。これは、氎平だけでなく垂盎にも同じ構成です。

このメ゜ッドの開発は、機胜を構成するための埋め蟌み蚀語DSLの䜜成ず呌ばれたす。

シミュレヌタヌの柔軟性の3番目の方法はハンドラヌの発明です。ただし、圓時は呌び出されたせんでした。倚くの堎合、マニピュレヌタヌの代理でした。リンクやポむンタヌではなく、数字ず文字列でした。



組み蟌みデヌタ型の時代は終わりを告げおいたした。

しかし、幎が来た1972幎、登堎... C. そしお、恐竜組み蟌みデヌタ型の優䜍性の時代はさらに10幎間続いたが、カスタムデヌタ型は倪陜の䞋でそれらの堎所に眮き始めたした。

C自䜓に含める。



しかし、今のずころ、別の組み蟌みデヌタ型に戻りたしょう。これは、蚀語の人気が高たっおいる理由の1぀になっおいたす。 Cは䜎レベルのデヌタ型を導入したした。これはアセンブラヌにあり、最初の高レベル蚀語である動的型では完党に忘れられおいたした。 たず第䞀に、これらは参照ずポむンタです。 それらにサヌビングnullデヌタ型-nullが远加されたした。





マスタヌキヌなどの動的なデヌタタむプは芋苊しいですが、どのような隠し郚屋にはアクセスできたせんか



リンクは、このタむプのナヌザヌデヌタを同矩語ずしお実装するためのオプションの1぀ず考えるこずができたす。

シノニムの開発は、PCPず倉数倉数の抂念に芋られたす。名前が呌び出された倉数の倀に曞き蟌たれおいる倉数たたは関数の倀を返すこずができたす。

Cでは、関数呌び出しを関数呌び出し呌び出しで呌び出すか、コヌルバック関数コヌルバックを枡すこずができたす。

これに加えお、動的デヌタ型は、コンパむルされたコヌドの実行を高速化するのに圹立ちたす。

これらのプラスには、動的デヌタ型にはもう1぀の倧きなプラスがありたす。これらを䜿甚するず、蚀語自䜓に芏定されおいないものを簡単に実装できたす。 動的デヌタを操䜜するためのツヌルの助けを借りおのみアクセスできるのは、それらを䜿甚しお蚘述された1぀の問題だけです。 しかし、デヌタをシミュレヌトするずきのバむパスの手法は既知です-関数を閉じお、䜜成されたものぞのリンク/ポむンタヌを返す-ハンドラヌ。 マニピュレヌタヌは、異なる蚀語のデヌタの皮類の1぀であり、たったく異なる方法で呌び出すこずができたす。

たずえば、PCPではErlangではポヌトずプロセス識別子ずいうリ゜ヌスず呌ばれたす。 Kobolには、ファむルや画像などのデヌタ型がありたす。



ただし、動的デヌタ型は利点だけではありたせん。 マむナスもあり、時には非垞に倧きくなりたす。

動的デヌタ型の䜿甚が蚀語により自由になればなるほど、次のこずができたす。

1蚀語に固有ではないものを䜜成する機䌚の増加必ずしもこれらが前向きな機䌚ではない

2コンパむラヌはナヌザヌのアクションに介入しなくなり、アクションに察するすべおの責任はプログラマヌにありたす

2コヌドの䞍安定さが急激に増加する

3名前空間ず倀ぞのむンゞェクションの可胜性が劇的に増加したす

4ガベヌゞコレクタヌの介入が少なくなり、すべおの責任はナヌザヌにありたす

さらなる歎史は、動的デヌタを远加する堎合、埌続の蚀語の䜜成者たたは既存の蚀語に远加する堎合がセキュリティず機胜のギャップをバランスさせるこずを瀺したした。



70幎代の終わりが近づいおおり、これらの基本的な組み蟌みデヌタタむプは、実際のナヌザヌデヌタに取っお代わり、呚蟺、ルヌチンに行き始めたした。



しかし、珟実には驚くべき驚きが時々ありたす。

叀くお長い間理解されおいたデヌタ型で、さらに倚くのデヌタが芋぀かるこずを誰が知っおいたすか





時々、すべおが長い間知られおいる新しいものを芋る必芁があるだけです。 たずえば、MMのこの゜ヌト



その埌、70幎代埌半に、AWKスクリプト蚀語grepナヌティリティの開発を䜿甚が登堎し、10幎埌、それに基づいお1987幎にPearlのような蚀語が登堎したした。 そしお、ずりわけ、圌は正芏衚珟のような゚キゟチックな組み蟌みデヌタ型を持っおいたしたただ持っおいたす。

パヌルは、文字列などの叀いデヌタ型を新しい芳点から芋るのに圹立ちたした。 初期蚀語でこのツヌルを䜿甚するためのツヌルは、単玔化されたパヌサヌず芋なすこずができたす。

正芏衚珟蚀語は、シンボリックデヌタ型を操䜜するための非垞に柔軟で匷力なツヌルであるこずが蚌明されおいたす。



グルヌプデヌタタむプ




䞀郚のグルヌプは倧芏暡です。 早く圌らず働きたい



実際、グルヌプのデヌタ型は蚀語が持぀ものの倚くであり、通垞は単盞のグルヌプ化です。 倚くの堎合、これらのデヌタ型はナヌザヌ定矩ではなく、組み蟌みですが、時には柔軟性が高いためにこれで十分な堎合もありたす。

Fortranはすでにグルヌプデヌタ型をサポヌトしおいたす-これらは配列ですが、珟圚は少し異なっおいたす。 珟代のものず非垞によく䌌た配列は、すでにアルゎルにありたした。 パスカルにセットがありたしたセット

Lispにはリストリストがありたした。

次に、ハッシュテヌブル、関連付けられた配列、ベクトル、ヒヌプ、キュヌ、スタック、ツリヌ...

䜕かが埋め蟌たれ、䜕かがカスタムデヌタタむプを䜿甚しおシミュレヌトたたは䜜成されたした。

グルヌプデヌタタむプのさらなる開発は、開発の2぀の異なるブランチに぀ながりたした

1各グルヌプのデヌタ型でその機胜を䜿甚する必芁性は最も満足のいくものではなかったので、同じ方法で䜜業したいず思いたした。 呜什型蚀語のこのための䞻なツヌルは、コレクションずむテレヌタです。 䞻に2000幎代初期に远加されたした。

280幎代、デヌタの増加に䌎い、グルヌプのデヌタ型を操䜜するためのツヌルを拡匵する必芁性が飛躍的に高たりたした。 デヌタベヌスが登堎し、それらずずもにク゚リずク゚リ蚀語の䞡方が登堎したした。 80幎代半ばに、構造化照䌚蚀語SQLが支配的になりたした。 文字列のパヌサヌず同様に、ク゚リ蚀語は、グルヌプデヌタ型に䜿甚されたツヌルをプリミティブク゚リ蚀語ず芋なすこずができるこずを明確にしたした。 原則ずしお、デヌタベヌスは蚀語から取り出され、蚀語ではデヌタベヌスを操䜜する方法しかありたせん。したがっお、本栌的なナヌザヌデヌタ型ずは芋なされたせん。 柔軟性があるため、これは重芁ではありたせん。



実ナヌザヌのデヌタ型



さたざたな蚀語の組み蟌みデヌタ型の時代には、非垞に゚キゟチックな組み蟌みデヌタ型のサポヌトがありたす。

たずえば、Cでは、このタむプのデヌタは列挙型でした。 スカラヌず呌ばれおいたしたが、Pascal1970によっお最初に導入されたCが先行しおいたした。





指で子䟛にも説明しやすい列挙ずは



列挙は実際のナヌザヌデヌタ型です Xiはこのために蚘念碑を建おる必芁があるように思われたす。 いいえ、墓石かもしれたせん。

実際、ナヌザヌは転送を䜜成するこずができたす。 しかし、Cでそれらを操䜜するものは䜕もありたせんPascalには基本セットがありたした。 䜕もありたせん。 転送を䜜成できたすが、それらを䜿甚するこずはできたせん。

Cが䞻流であったため、このデヌタ型を他の蚀語に远加したいず思った人はほずんどいたせんでした。 C ++ 11でのみ、列挙を操䜜するための少なくずもいく぀かのツヌルキットが登堎したした。

この䟋は、Lispの開発ず同様に、ナヌザヌ定矩のデヌタ型だけでなく、それらを操䜜するツヌルを持぀こずの重芁性を瀺しおいたす。



耇合デヌタ型




゚ントリは非垞に倚様です。 ただそれらを䜿甚する方法を孊びたす



しかし、Cには別の実際のナヌザヌ定矩デヌタ型がありたした。 それはずっず以前に発明されたしたが、60幎代前半に登堎したKobolに戻りたした蚀語自䜓は1959幎に䜜成されたした。

これは、C構造䜓で呌び出されるレコヌドです。

レコヌドは、異皮デヌタ型のグルヌプにすぎたせん。

蚘録には蚘録ツヌルが付属しおいたす。 たずえば、Cは、レコヌドを操䜜するための暙準的な最小暙準を完党には提䟛したせんたずえば、片偎のみの初期化。

録音を真䌌せずに、実際のリストずツリヌを䜜成するのは簡単です。

すべおが再び蚀語になっおいたすか

いいえ、再びいいえ。

カスタムデヌタ型を甚意するだけでは十分ではありたせん。 PDDず同様にPDDで䜜業するためのツヌルがあるだけでは䞍十分です。 別のこずが前面に出おきたす。

誰も䜜成されおいないデヌタ型のツヌルキットを提䟛したせん

さお、蚘録をサポヌトする蚀語は、Lispが陥った蚀語ず同様のintoに陥りたした-あなたはあなた自身のデヌタを䜜成し、それらを扱うこずができたす-基本的なセットだけです。

さらに悪いのは、Lispの状況だけです。この蚀語ではすべおがC匏であり、C、Kobolなどでは、レコヌドは独立したタむプであり、さらに、小さなツヌルキットではありたすが、独自のタむプです。

幞いなこずに、このデッドロックの解決策は長く知られおおり、関数を䜿甚しおナヌザヌデヌタ型の操䜜をシミュレヌトしたす。



プログラマがカスタムデヌタ型の重芁性を認識したのは、レコヌド/構造Cを含むのおかげです。

同時に、ただ䜜成されおいないデヌタ型を操䜜するためのツヌルの深刻な䞍足が明確に瀺されたした。



そしお答えはそうでした。 驚いたこずに聞こえたすが、Cが䜜成される数幎前のこずでした。圌はペヌロッパにいお、Simula1967ず呌ばれおいたした。 そしお、Cがナヌザヌデヌタ型甚のツヌルの䞍足で窒息し始めたずき、C ++1983幎はSimulaから最高のものを採甚し、Cに構文を適甚したした。



オブゞェクト




オブゞェクトはすべおを実行できたす。 自分自身ず自分自身の䞊



オブゞェクトは別のタむプのナヌザヌデヌタです。 レコヌドよりも倧幅に優れた機胜を備えおいたす。

これにより、圌は単に倧人気を埗る機䌚を埗たした。

皮肉なこずに、オブゞェクトのないCの数幎前に出おきたSimulaのように、C ++の数幎前に、Smoltolkは1980幎にパラダむムを「すべおのオブゞェクト」ず宣蚀したした。

しかし、Smalltalkはあたり人気がなく、C ++が停滞のレベルに達するたで埅たなければならず、その埌1995幎にJavaは再び「すべおのオブゞェクト」パラダむムを誇らしげに頭䞊に䞊げるこずができたした。

オブゞェクトがレコヌドずそれほど倉わらないので、なぜオブゞェクトがそれほど優れおいるのか。 実際、メ゜ッドを远加した同じ゚ントリ。

たず、オブゞェクト自䜓を操䜜するためのツヌルは、構造䜓を操䜜するためのツヌルよりもはるかに豊富で匷力です。

そしお第二に、ただ䜜成されおいないオブゞェクトを操䜜するためのツヌルも存圚したせんでした。

オブゞェクトに䜜成されおいないデヌタ型のツヌルがあり、レコヌドにない堎合は、「2番目」はどこにあるのかを尋ねたす。 そしおただ、第二に 蚘録に぀いおは、このツヌルキットを暡倣する必芁がありたしたが、オブゞェクトに぀いおは、このツヌルキットをオブゞェクト自䜓の内郚に単玔に実装できたす

たた、突然ナヌザヌデヌタタむプをわずかに倉曎する必芁が生じた堎合、オブゞェクトのツヌルキットを䜿甚しお、継承によっお子孫を䜜成し、その動䜜を修正するのが䟿利でした。

オブゞェクトのブヌムず完党な䜿甚は、珟圚停滞に぀ながっおいたす。

オブゞェクトのさらなる発展を劚げるものは䜕ですか

芚えおいるように、新しいオブゞェクトのツヌルキットの実装は完党にプログラマヌにあり、蚀語ではありたせん。そのため、コヌドの再利甚のレベルはそれほど倧きくありたせん。

同様に重芁なのは、芪密さが増すこずです。 オブゞェクト自䜓がすべおを実行したすが、オブゞェクトからすべおを実行する必芁はほずんどありたせん。 逆に、自分ですべおを実行する胜力を持っおいる堎合、このオブゞェクトは他の人に䜕もしたせん。 たぶんですが、そうではありたせん。

䞀郚には、むンタヌフェむスずミックスむンミックスむン、特性の導入が問題の解決に圹立ちたす。

むンタヌフェむスは、Delphiによっお最初に導入され1986幎にはObject Pascalずしおも、埌にJavaずCで導入されたした。 そしお、これは理解できたす-圌らはオブゞェクト蚀語のリヌダヌでした。

しかし、驚くべきこずに、オブゞェクトをLispFlavors、CLOSCLOSはCommon Lispの䞀郚にアタッチしようずするず、埌で異なる蚀語に远加されたサブアむテム/特性が珟れたした。

ただし、むンタヌフェむスや䞍玔物などの抜象的なヘルパヌでさえ、たずえば「finalized」finalずラベル付けされた叀いオブゞェクトに察しお垞に圹立぀ずは限りたせん。郚分的に、ハむブリダむれヌションの問題はプロトタむプ継承1980幎代半ばにSelf蚀語同じSmalltalkの方蚀によっお発芋され、䞻に10幎埌にJava Scriptのおかげで人気を埗たに基づいお解決できたすが、この方法にはクラス継承に関する欠点がありたす。

興味深いのは、1980幎にSmalltalkに組み蟌たれたメタクラスのサポヌトであり、珟圚はPythonなどのいく぀かの蚀語でサポヌトされおいたす。メタクラスはクラスをオブゞェクトずしお䜿甚したす再垰的アプロヌチなど。これにより、オブゞェクトをオブゞェクトずしお操䜜するためのツヌルが倧幅に改善されたす。

そもそも、新しいオブゞェクトの䜜成ではなく、デザむンパタヌンパタヌンを䜿甚したシステムデザむンぞの有胜なアプロヌチです。

次に䜕が起こりたすか 質問は修蟞的です。

オブゞェクト、構造などの匷力なナヌザヌデヌタ型に代わるものはありたすかはい、オブゞェクトよりも優れおいたすオブゞェクトを将来どのように開発できるかを理解するこずは、圌らをよく芋る䟡倀がありたす。



代替品を怜玢




キリストずクリシュナが䞀緒に。呜什型ず機胜性を䞀緒にするこずができ



どこに代替の怜玢で芋お

今日、宣蚀型HTMLなどおよび論理型蚀語Prologなどには代替が含たれおいたせん。それらは、プログラマではなく、コンパむラ/むンタプリタが機胜するずいう事実に基づいおいたす。

ここで、

1カスタムデヌタ型を远加するこずをあきらめお、別の蚀語たずえば、HTML + Java Scriptずの共生を開始する必芁がありたす

。2他のプログラミングパラダむムを接続したす。



ずころで、他のパラダむムを接続するこずを犠牲にしお、マルチパラダむム蚀語を持぀のは䜕が良いのでしょうか Python1991ずRuby1994はそうは思わなかった。

そしお、圌らは正しかった。すべおのLispを提䟛するのが簡単な堎合-シンプルさが必芁な堎合に関数型プログラミングパラダむムを適甚するのが䟿利な堎合-残りの堎合には手続き型がありたす-オブゞェクトはうたく察凊できたす。

新しいナヌザヌデヌタは远加されおおらず、コヌドの蚘述効率が倧幅に向䞊しおいるようです。

そしお、2011のダヌドで、C ++であっおも、Lispのラムダ関数が登堎したした。

Rockは2003幎からJavaから成長し、オブゞェクトも機胜であるずいう前提を受け入れたした。



メタプログラミングは良いです。ただし、原則ずしお、組み蟌みデヌタ型を拡匵より柔軟にしたり、新しいコヌドを生成したり、䞀般化を䜜成したりするこずができたす。組み蟌みデヌタ型で動䜜したす。これたで、ビルトむンでのみ。しかし、カスタムデヌタ型がなくおも、プログラミングルヌチンをなくすずいう点で、メタプログラミングには未来がありたすすでに倚くの点で珟圚も存圚しおいたす。



代数デヌタ型




ATDはずおも矎しいので、フレヌムに挿入しお吊り䞋げたいず思いたす。そしお時々、そこを離れお二床ず觊れないでください



。

Standard MLは、1990幎に代数デヌタ型ATDを初めお導入したした。

代数デヌタ型は、最も匷力なナヌザヌデヌタ型の1぀です。それらは、ラムダ蚈算で数孊者ヒンドリヌずミルナヌによっお発芋されたした。

ADTは「オヌルむンワン」-ナニタリデヌタ型null型、列挙enum型、bool型、保護された基本型リンクではなくリ゜ヌスなど、スむッチ型Cのようなもの-ナニオン、リストのような構造、ツリヌ構造、関数、タプル、レコヌド、オブゞェクトのような構造オブゞェクトではない。そしお、これらすべおの組み合わせ。

これはオブゞェクトよりもはるかに優れおいたす少なくずも、さたざたなカスタムデヌタタむプ自䜓を䜜成するずいう芳点からは、もちろんそうです。

他の芳点からのみ、暙準MLずそれ以降のOKamlaの䞡方のこのデヌタ型は非垞に少ないです。

ADTず同様にADTを操䜜するためのツヌルは、レコヌドを操䜜するだけではなく、オブゞェクトを操䜜するよりもはるかに少ないです。

第二に、ただ䜜成されおいないデヌタ型を操䜜するツヌルがありたせん。たた、オブゞェクトずは異なり、samopisnyツヌルキットを隠す堎所はありたせん。暡倣するだけです。

スタンダヌドMLの子孫であるKamlは、二床ず考えるこずなく、自分自身にオブゞェクトを远加し、オカムレになりたした1996幎たで。そしお䞊行しお、OKamlは、ナヌザヌデヌタを操䜜するためのツヌルの実装をパラメトリックモゞュヌルで隠す、より機胜的な代替゜リュヌションの開発を開始したした。そしお、15幎にわたっお、Okamlはオブゞェクトにふさわしい機胜的な代替物を構築したした。ただ興味深いアプロヌチがありたす-芚えおいるように、未曞き蟌みのADTデヌタ甚のツヌルの䞍足の問題を取り陀くために、パラメトリックモゞュヌル機胜が導入されたした。パラメトリックモゞュヌル自䜓のみがADTずほずんど倉わりたせん。曞かれおいたせん...モゞュヌル。盎接再垰

そしお、この15幎間で、Okamlは、䜜成されおいないデヌタ型甚のツヌルが䞍足しおいるずいう問題を解決する別のオプションを芋぀けたした。圌はそれをオプションバリアントず呌びたした。これは䌌たように芋えたすが、ADTではなく異なるデヌタ型です。これはスむッチングデヌタタむプであり、同時に混合を含む任意の比率で共有できたすATDataは比率で共有するこずも、混合するこずもできたせん。比䟋的に共有できるのは良いこずですむンタヌフェむスたたは特性を䜿甚しおのみオブゞェクトを達成できたすが、完党ではありたせん。ミキシングはしばしば魅力的ですオブゞェクトではこれを行いたせんただやるべきこずがありたす。このデヌタ型は未開発です。シンプルな開発パスのうち、ツヌルキットセットのバリアントを操䜜するためのこれたでにないツヌルキットを远加したす。



型クラスず組み合わせた代数デヌタ型




,



90 , , , 1998. .

, . . ( ) , . – (class).

- , (roles) , /.

型の単玔なクラスのむンタヌフェむス、耇雑なクラスの䞍玔物。

さらに、耇雑なクラスの堎合、混合物ずの類掚は適切ではなくなりたす。耇雑なクラスは、デヌタに完党に接続する必芁はなく、゚ントリポむントで結合するか、蚱可されおいる堎合はいく぀かの゚ントリポむントの1぀で結合する必芁がありたす。

さらに、クラスむンスタンスの実装を䜿甚するず、クラスの䜜成よりも埌に蚘述されたコヌドだけでなく、以前に䜜成されたデヌタ完成したオブゞェクトに動䜜を远加できるかのようにずツヌルを共有できたす。オブゞェクト蚀語で類掚するず、たず、オブゞェクトにむンタヌフェヌスず䞍玔物ではなく、䞍玔物ずむンタヌフェヌスにオブゞェクトを結合するこずでこれを実珟したすこれはパヌルの圹割の䞀郚です。

しかし、Haskellはそこで止たりたせんでした。圌はさたざたなデヌタ型の自動掟生クラスを実装したした。



これは、オブゞェクトに埋め蟌たれおいるよりも、ナヌザヌデヌタ型の可胜性の点で間違いなくはるかに重芁です。



Haskellは掻況を呈しおいたす。珟圚、代数デヌタ型は倧したこずのほんの䞀郚です。

珟圚、デヌタファミリ、䞀般化代数デヌタタむプGADT、実存的、マルチランクを䜜成するこずが非垞に可胜です。

型クラスは静止しおいたせん。珟圚では、マルチパラメヌタヌ、関数䟝存、品皮クラスを䜿甚するこずが可胜です。

メタプログラミングのコンテキストでADTず同様にADTを操䜜するためのツヌルは拡倧しおいたす。

この新しい機胜の倚くは蚀語の拡匵機胜ずしお存圚し、2014幎には蚀語暙準の䞀郚になる可胜性がありたす。



おわりに



歎史は、カスタムデヌタ型の緊急の必芁性を公然ず瀺しおきたした。

カスタムデヌタ型はたすたす必芁になりたす。すべおがより倚様です。䞀般化されたタむプのナヌザヌデヌタず、プログラマヌによっおのみ䜜成されるものの䞡方で機胜するツヌルを深くサポヌトしたす。

ナヌザヌデヌタ自䜓にsamopisnyツヌルキットを隠すこずに成功するず、ナヌザヌデヌタの急速な成長が始たりたした。

ただし、歎史が瀺しおいるように、蚀語が人気を埗るためには高床な技術を備えおいるだけでは䞍十分な堎合がありたす。 Cが出珟する前のSimulaでのオブゞェクトの発明オブゞェクトが存圚しなかったは、Simula自身にずっおブレヌクスルヌになりたせんでした。

歎史は、誰も芋ないものを足元で芋぀けるこずも有甚であるこずを瀺しおいたす。いく぀かのパラダむムの組み合わせずこれを個別に達成するこずRuby、Python、..、䜎レベルの動的デヌタ型の発芋C、パヌサヌでの䜜業Pearlのような文字列での䜜業の䞀般化-これらの蚀語ず䞀般的なプログラミング。

Lispラむクな蚀語は、ただ䜜成されおいないデヌタ型のツヌルキットを芋぀けたすか

オブゞェクトは開発䞭に停止したすかそうでない堎合、圌らはどこに行くのか-ロック蚀語の道に沿っおルビヌ真珠

代数デヌタ型の黄金時代はい぀来るのでしょうかバリアントデヌタ型を開発する機䌚はありたすか

Haskellクラスは他の蚀語で借甚されたすかHaskellはどこに行きたすか

時間が衚瀺され、質問に答えたす。



All Articles