Кіріспе

Компьютерлік ғылымдағы типтік жүйе. Компьютерлік ғылымдағы полиморфты типтік жүйелер.

Компьютерлік ғылымда типтік сынып – бұл ad hoc полиморфизмін қолдайтын типтік жүйе құралы. Бұл параметрлік полиморфты типтердегі типтік айнымалыларға шектеулер қосу арқылы іске асырылады. Мұндай шектеу әдетте T типтік сыныбы мен a типтік айнымалысын қамтиды және a тек қана T-мен байланысты жүктемелі операцияларды қолдайтын мүшелері бар типке инстанциялануы мүмкін дегенді білдіреді. Типтік сыныптар алғаш рет Филип Вадлер мен Стивен Блотт ұсынғаннан кейін Haskell бағдарламалау тілінде "eqtypes" кеңейтуі ретінде енгізілді және бастапқыда принципті түрде жүктемелі арифметикалық амалдар мен теңдік операторларын іске асыру жолы ретінде қарастырылды.

Көп параметрлі типтік кластар

Типтер кластары бірнеше типтік параметрлерді қабылдай алады, сондықтан типтер кластарын типтер арасындағы қатынастар ретінде қарастыруға болады. Мысалы, GHC стандартты кітапханасындағы IArray класы жалпы өзгертілмейтін массив интерфейсін көрсетеді. Бұл класста IArray a e типтік класс шектеуі, a – e типіндегі элементтерді қамтитын массив типі дегенді білдіреді. (Бұл полиморфизмге қатысты шектеу, мысалы, қораптан шығарылған массив типтерін іске асыру үшін қолданылады.) Мультиметодтар сияқты, көп параметрлі типтер кластары бірнеше аргументтердің типтеріне және қайтарылатын типтерге байланысты әдістің әртүрлі нұсқаларын шақыруды қолдайды. Көп параметрлі типтік кластар әр шақыру кезінде шақыруға тиіс әдісті іздеуді қажет етпейді; керісінше, шақыруға тиіс әдіс алдымен компиляцияланып, типтік класс инстанциясының сөздігіне сақталады, дәл бір параметрлі типтік кластардағыдай. Көп параметрлі типтер кластарын пайдаланатын Haskell коды портативті емес, себебі бұл мүмкіндік Haskell 98 стандартының құрамына кірмейді. GHC және Hugs сияқты танымал Haskell орындалымдары көп параметрлі кластарды қолдайды.

Функционалдық тәуелділіктер

Хаскеллде типтік кластар жетілдірілді, бұл бағдарламашыға типтік параметрлер арасындағы функционалдық тәуелділіктерді жариялауға мүмкіндік береді – бұл қатынастық деректер базасы теориясынан шабыттанған ұғым. Яғни, бағдарламашы типтік параметрлердің белгілі бір жиынтығының берілген мәні қалған типтік параметрлерді бірегей түрде анықтайтынын айта алады. Мысалы, s түріндегі күй параметрін алып жүретін kез келген m монад, Monad.State типтік класының шектеуін қанағаттандырады. Бұл шектеуде m > s функционалдық тәуелділік бар. Бұл, берілген Monad.State типтік класының m монад үшін, m арқылы қол жетімді күй түрі бірегей түрде анықталады дегенді білдіреді. Бұл компиляторға типті қорытуға, сондай-ақ бағдарламашыға типке бағытталған бағдарламалауға көмектеседі. Саймон Пейтон Джонс Хаскеллде функционалдық тәуелділіктерді енгізуге күрделілік себептерімен қарсылық білдірді.

Оператордың жүктемесін азайтудың басқа тәсілдері

Стандартты ML-де "теңдік типтерінің" механизмі шамамен Хаскелдің Eq типтік класына сәйкес келеді, бірақ барлық теңдік операторлары компилятормен автоматты түрде туындыланады. Бағдарламашының процеске қатысуы құрылымдағы типтік компоненттердің теңдік типтері екенін және полиморфты типтегі теңдік типтерімен байланысты типтік айнымалыларды көрсетумен шектеледі. SML және OCaml модульдері мен функторлары Хаскелдің типтік кластарына ұқсас рөл атқара алады, ерекшелігі – типтік инференстің маңыздылығы, ол типтік кластарды ad hoc полиморфизм үшін ыңғайлы етеді. OCaml-дің объектіге бағытталған бөлігі де типтік кластарға шамамен ұқсас тағы бір тәсіл болып табылады.