Edu Doc

КАТЕГОРИЯ:


Астрономия- (809) Биология- (7483) Биотехнологии- (1457) Военное дело- (14632) Высокие технологии- (1363) География- (913) Геология- (1438) Государство- (451) Демография- (1065) Дом- (47672) Журналистика и СМИ- (912) Изобретательство- (14524) Иностранные языки- (4268) Информатика- (17799) Искусство- (1338) История- (13644) Компьютеры- (11121) Косметика- (55) Кулинария- (373) Культура- (8427) Лингвистика- (374) Литература- (1642) Маркетинг- (23702) Математика- (16968) Машиностроение- (1700) Медицина- (12668) Менеджмент- (24684) Механика- (15423) Науковедение- (506) Образование- (11852) Охрана труда- (3308) Педагогика- (5571) Полиграфия- (1312) Политика- (7869) Право- (5454) Приборостроение- (1369) Программирование- (2801) Производство- (97182) Промышленность- (8706) Психология- (18388) Религия- (3217) Связь- (10668) Сельское хозяйство- (299) Социология- (6455) Спорт- (42831) Строительство- (4793) Торговля- (5050) Транспорт- (2929) Туризм- (1568) Физика- (3942) Философия- (17015) Финансы- (26596) Химия- (22929) Экология- (12095) Экономика- (9961) Электроника- (8441) Электротехника- (4623) Энергетика- (12629) Юриспруденция- (1492) Ядерная техника- (1748) Arhitektura- (3434) Astronomiya- (809) Biologiya- (7483) Biotehnologii- (1457) Военни бизнесмен (14632) Висока technologies- (1363) Geografiya- (913) Geologiya- (1438) на държавата (451) Demografiya- ( 1065) Къща- (47672) журналистика и смирен (912) Izobretatelstvo- (14524) външен >(4268) Informatika- (17799) Iskusstvo- (1338) историята е (13644) Компютри- (11,121) Kosmetika- (55) Kulinariya- (373) културата е (8427) Lingvistika- (374) Literatura- (1642) маркетинг-(23702) математиците на (16968) Механична инженерно (1700) медицина-(12668) Management- (24684) Mehanika- (15423) Naukovedenie- (506) образователна (11852) truda- сигурност (3308) Pedagogika- (5571) Poligrafiya- (1312) Politika- (7869) Лево- (5454) Priborostroenie- (1369) Programmirovanie- (2801) производствено (97 182 ) индустрия- (8706) Psihologiya- (18388) Religiya- (3217) Svyaz (10668) Agriculture- (299) Sotsiologiya- (6455) на (42831) спортист строително (4793) Torgovlya- (5050) транспорт ( 2929) Turizm- (1568) физик (3942) Filosofiya- (17015) Finansy- (26596) химия (22929) Ekologiya- (12095) Ekonomika- (9961) Electronics- (8441) Elektrotehnika- (4623) Мощност инженерно ( 12629) Yurisprudentsiya- (1492) ядрена technics- (1748)

Функционални езици за програмиране




Lazy оценка

В традиционните езици за програмиране (например, C ++) извикване на функция води до изчисляване на всички аргументи. Този метод е извикване на функция се нарича повикване чрез стойност. Ако някой аргумент не се използва във функцията, резултатът от изчислението се губи, следователно, изчисленията са направени напразно. В известен смисъл, обратното на повикване чрез стойност е призив по необходимост. В този случай, аргументът се оценява само ако е необходимо да се изчисли резултата. Ако функционален език не поддържа мързелив оценка, тя се нарича строго. В действителност, в такива езици строго определен ред на оценка. Като пример за стриктното език може да доведе схема, Standard ML и Caml.

Езици, които използват мързелив оценка, наречени хлабави. Haskell - небрежното език, както и, например, вафлена кора и Миранда. Non-строги езици често са чисти.

Много често по-строги езици включват средства за подпомагане на някои полезни функции, присъщи на не-строг език, например безкрайни списъци. Доставката на Standard ML има специален модул за подкрепа мързелив оценка. Но Цел допълнение Caml поддържа допълнителен дума мързелив и дизайн за списъци със стойностите, изчислени в съответствие с изискванията.

Този раздел дава кратко описание на някои функционални програмни езици (много малко).

§ Lisp (Списък процесор). Той се счита за първи функционален език за програмиране. Типизиран. Той съдържа много задължителни качества, но като цяло тя насърчава функционално програмиране стил. В изчисления с използване на повикването по стойност. Налице е обектно-ориентиран диалект - Clos.

§ ISWIM (Ако видите какво имам предвид). Функционално език прототип. А Landin през 60-те години на XX век, за да се докаже това, което може да бъде функционален език за програмиране. Заедно с езика Landin разработена и специална виртуална машина за изпълнение на програми ISWIM'e. Тази виртуална машина се основава на повикване чрез стойност, наречена SECD-машина. На синтаксиса на езика се основава синтаксис ISWIM много функционални езици. На синтаксис ISWIM като ML синтаксис, особено Caml.

§ схема. Диалектът на Lisp, предназначени за научни изследвания в областта на компютърните науки. При разработването на схемата, акцент беше поставен върху елегантността и простотата на езика. Този език е много по-малък от общата Lisp.



§ ML (Meta > Семеен строги език за напреднали полиморфен тип система, като параметрите му модули. ML преподава в много западни университети (някои дори като първи език за програмиране).

§ стандарт ML. Един от първите напечатани функционални програмни езици. Тя съдържа някои задължителни свойства, като променлива референтната стойност и следователно не е чиста. В изчисления с използване на повикването по стойност. Много интересен реализация модулност. Мощен полиморфен вид система. Последно език стандарт - стандарт ML-97, за които съществува формално математическо определение на синтаксиса и семантиката на статичен и динамичен език.

§ Caml Light и Цел Caml. Като член на семейството на Standard ML ML. Цел Caml различен от Caml Light подкрепя основно класически обектно-ориентираното програмиране. Подобно Standard ML строг, но има някои вградена поддръжка мързелив оценка.

§ Миранда. Проектиран от Дейвид Търнър като стандарт функционален език, изчисляване на отсрочените. Той има строга система за полиморфен вид. Както ML преподава в редица университети. Той имаше голямо влияние върху развитието на Haskell.

§ Haskell. Един от най-често не-строги езици. Тя е с много развита система на писане. Малко по-лошо, отколкото развита система модул. Последно стандартен език - Haskell-98.

§ вафлена кора (добро за Equational Разсъждение) . Опростена диалект на Haskell. Създаден, за да научи функционално програмиране.

§ Clean. Специално проектирани за паралелно и разпределено програмиране. В синтаксис напомня на Haskell. Clean. Той използва мързелив оценка. C компилатор идва с набор от библиотеки (I / O библиотеки), ви позволява да програмирате на графичен потребителски интерфейс за Win32 или MacOS.

Припомнете си, че най-важната характеристика на функционалния подход е, че всяка програма разработена в функционална език за програмиране, може да се разглежда като функция чиито аргументи могат също да са функции.

Функционалният подход е създал цялото семейство на езици, основател на която, както вече бе отбелязано, е езикът на LISP програмиране. По-късно, през 70-те години, той е разработен от оригиналната езикова версия на ML, който по-късно развита, особено в ГСМ, и редица други езици. От тях, може би най-"младите" е създадена съвсем наскоро, през 90-те години, на езика Haskell.

Важно предимство на изпълнението на функционалните езици за програмиране е автоматизиран динамично разпределение компютърна памет за съхранение на данни. В този случай програмистът се отървава от необходимостта да контролира данните, и ако е необходимо, може да работи на функция "GC" - изчистване на паметта на данните, които вече няма нужда програмата.

Комплексни програми с функционален подход конструирана чрез обединяване на функции. Тази програма е функция на текста, някои от аргументите, които също могат да се разглеждат като функция. Така, повторно използване на код се редуцира до описано преди извикване на функция, структурата, за разлика от процедурата на наложително език математически прозрачен.

Тъй като функцията е естествен формализъм за функционални езици за програмиране, прилагане на различни аспекти на функциите, свързани с програмиране, това прави нещата по-лесни. Интуитивно, тя се превръща в прозрачен писане рекурсивни функции, т.е. функции, наричаща себе си като аргумент. Natural става рекурсивни обработка и прилагане структури от данни.

Чрез прилагането на механизма на сравнение с проба, такава като функционална програмни езици ML и Haskell добро използване на символичен обработка.

Естествено, функционални програмни езици не са без някои недостатъци.

Често заподозрените включват нелинейна структура на програмата и сравнително ниската ефективност на изпълнението. Въпреки това, първата липсата на по-скоро субективно, а вторият до успешно преодоляване на настоящата изпълнението, по-специално, редица неотдавнашни SML езикови компилатори, включително компилатор за околната среда на Microsoft .NET.

За професионална разработка на софтуер за функционални езици за програмиране, което трябва да разберем естеството на функцията дълбоко.

Имайте предвид, че терминът "функция" в математическа формализация и изпълнение на програмата се отнася до различни концепции.

По този начин, математическа функция F с домейн A и диапазон B е множеството от наредени двойки

(А, В) A × B,

така че ако

(А, В 1) и F (А, В 2) е,

на

б 1 = б 2.

От своя страна, е функция на език за програмиране, наречен дизайна на езика, описващ правила аргумент за преобразуване (т.нар действителния параметър) в резултата.

За да се формализира понятието "функция" е математическа теория, известна като смятане на ламбда. По-точно, тя трябва да се нарича смятане смятане на ламбда преобразуване.

При преобразуването означава превръщане на смятане на обекти (както в програмирането - функции и данни), от една форма в друга. Първоначалната задача по математика е желанието да се опростят формите на изразяване. В програмирането, това е проблемът не е толкова значително, въпреки че, както ще видим по-късно, използването на ламбда смятане като източник на формализация може да допринесе за опростяването на програмата, т.е. да доведе до оптимизиране на кода.

В допълнение, превръщането достигне ново нотация и по този начин позволява да представлява предметната област в по-компактен и по-подробна форма, или в математически термини, за промяна на нивото на абстракция по отношение на предметната област. Тази функция се използва широко като обектно-ориентиран език, структурна и модулно програмиране в йерархията на предмети, фрагменти от програми и структури от данни. Същият принцип се основава на взаимодействието между компонентите на приложенията в .NET. В този смисъл, преходът към новата нотация е един от най-важните елементи на цялостната програма, и това е ламбда смятане (за разлика от много други клонове на математиката) е адекватен начин за формализиране на преоценка.

Систематизира еволюцията на теории в основата на съвременния подход към смятане на ламбда.

Помислете за еволюцията на езиците за програмиране, разработване в рамките на функционалния подход.

В началото на функционален език за програмиране, който произхожда от езика Lisp класическа (Списък Processing), са били предназначени за преработка списък, т.е. характер информация. Основните видове са атомно елемент, както и списък на атомни елементи, но основният акцент е върху анализа на съдържанието на списъка.

Развитието на ранните програмни езици стане функционален език за програмиране със силни типизиране, типичен пример тук е ML Classic, и пряк потомък на ГСМ. В силно напечатани езици с всеки дизайн (или израз) трябва да бъде от тип.

В по-късните функционални програмни езици не е необходимо изрично възлагане тип и видовете първоначално неопределени изрази в ГСМ, може да бъде изход (преди началото на програмата), въз основа на вида на подобни изрази.

Следващата стъпка в развитието на функционални програмни езици е в подкрепа на полиморфни функции, т.е. функции с параметрични аргументи (аналогични на математическа функция с параметри). По-специално, полиморфизмът се поддържа на езика SML, Miranda и Haskell.

На сегашния етап на развитие на всеки функционален език за програмиране "ново поколение" със следните допълнителни функции: модел за съвпадение (схема, ГСМ, Миранда, Haskell), параметричен полиморфизъм (ГСМ) и така наречения "мързелив" (както е подходящо) изчисляване (Haskell, Miranda, ГСМ).

Семейството на функционални програмни езици са многобройни. Това се доказва не само значителен списък от езици като факта, че много езици са довели до цели области на програмиране. Припомнете си, че LISP е дало повод за цялото семейство на езици: Схема, InterLisp, ОБЩА Lisp и др.

Тя не беше изключение и SML език за програмиране, който е създаден под формата на езика ML R. Милнър (Robin Милнър) в Масачузетския технологичен институт (Масачузетския технологичен институт) и първоначално е предназначена за логични заключения, по-специално, да докаже, теореми. Език различава силно написали, че липсва параметричен полиморфизъм.

Развитието на "класически" ML стоманата само три съвременен език с почти идентични характеристики (параметричен полиморфизъм, модел за съвпадение, "мързеливи" изчисление). Тя SML език, разработен във Великобритания и САЩ, CaML, създаден от група френски учени институт INRIA, ГСМ / NJ - диалект SML на Ню Джърси, както и развитието на руско - mosml ( "Москва" диалект на ML).

Близост до оригиналния математическа формализация и функционална ориентация са причинени следните предимства на функционалния подход:

1. Лесен за тестване и проверка на програмен код, базиран на възможността за изграждане на строга математическа доказателство за правилността на програми;

2. хармонизация на представяне на програмата и данни (данни, могат да бъдат капсулирани в програмата като аргументите на функции, оценката или изчисляването на стойността на функцията може да се извърши, ако е необходимо);

3. Secure пишете: невалидни операции данни са изключени;

4. динамични машинописни: печатни грешки могат да бъдат открити по време на изпълнение (липсата на този имот в ранните функционални езици за програмиране може да доведе до препълване на паметта на компютъра);

5. независим софтуер изпълнение на представителството на машина на данни и система за архитектура програма (програмист фокусира върху детайлите на изпълнението, а не от спецификата на представителството данни на машината).

Имайте предвид, че прилагането на ползите, които функционални програмни езици, много зависи от избора на софтуер и хардуерна платформа.

В случай на избор като технологична платформа за софтуер .NET, почти независимо от изпълнението на хардуер, програмист или ръководител на софтуерни проекти допълнително получава следните предимства:

1. Функционална интеграция на различни езици за програмиране (максимално използване на предимствата на всеки език, по-специално, схемата предвижда съвпадение механизъм с пробата, и ГСМ - възможност за изчисляване, както е подходящо);

2. Интегриране на различни подходи за програмиране на базата на напречното език инфраструктура Common >

3. обща единна система за въвеждане на обща система тип, CTS (униформа и сигурно управление на типове данни в програмата);

4. многостепенен гъвкав код за сигурност (по-специално, на базата на механизма с механизъм).

Основните характеристики на функционални програмни езици, които ги отличават от двете императивните езици, както и логиката на програмните езици са referentially прозрачни и детерминизъм. В функционални езици има значителна разлика в такива параметри, като правилата за писане, за изчисление. В много езици, от порядъка на оценка, е строго дефинирани. Но понякога строги езици осигуряват средства за подпомагане на някои полезни елементи, присъщи хлабавите езици, например безкрайни списъци (специален модул за подкрепа мързелив оценка присъства в Standard мл). За разлика от това, не-строги езици позволяват в някои случаи да се извърши оценка енергично.

Така че, Miranda е мързелив семантика, но ви позволява да определите строги дизайнери, маркировка по определен начин аргументите на строителя.

Много съвременни функционални програмни езици са силно напечатани езици (силно типизиране). Силна пишете осигурява по-голяма сигурност. Много грешки могат да бъдат фиксирани по време на компилация, така че на етапа на отстраняване на грешки и програмиране на общото време се намалява. Силна пишете позволява на компилатора да генерира по-ефективен код и по този начин се ускори изпълнението на програмите. В същото време, има функционални езици са динамично напечатани. Тип на данните в езици, определени по време на изпълнението на програмата (Sec. 3). Понякога по-нататък "beztipovymi". Сред тях, предимствата включват факта, че програми, написани на тези езици, са по-чести. Недостатъкът може да се счита заданието много грешки в етап на програмата и свързаното с необходимостта функция тип-проверка и съответно намаляване на програми на Общността. Въведени езици допринасят за генерирането на повече "стабилна" код и "общо", написа над.

Друг критерий, по който да се извърши класификация на функционални програмни езици, може да бъде наличието на задължителните механизми. Това се нарича функционални програмни езици, липсва задължителните механизми, "чист" и ги има - "нечисти". При преглед на функционални програмни езици, следните програмни езици се наричат ​​"практичен" и "Академик". Чрез "практичен" език се отнася до езика, които имат търговско приложение (те разработила реално приложение или са търговски програмиране система). Академични програмни езици са популярни в изследователската общност в областта на компютърно обучение, но търговски приложения, написани на следните езици, почти няма. Те остават само инструмент за извършване на теоретични изследвания в областта на компютърните науки и се използва широко в образователния процес.

Списъкът на най-популярните функционални програмни езици е показано по-долу, като се използват следните критерии: обща информация; типизиране; вид на изчисление; чистота.

Общата Lisp. Lisp версия, която от 1970 г. може да се счита за стандартен език, благодарение на подкрепата на разузнаването лаборатория на Изкуствен в Масачузетския технологичен институт, beztipovy, енергични, с голям набор от задължителни включвания, които позволяват на заданието, унищожаването на структури. Практически. Достатъчно е да се каже, че Lisp е написана вектор редактиране на AutoCAD.

Схема. Диалектът на Lisp, предназначени за научни изследвания в областта на компютърните науки и изучаването на функционално програмиране. Поради липсата на задължителна включвания език е много по-малък от общата Lisp. Връщайки се назад към езика, разработена от J .. Маккарти през 1962 г., Академик, beztipovy, енергичен и чист.

Рефал. език семейство, разработен от VF Turchin. Най-възрастният член на семейството първо реализира през 1968 г. в Русия. Широко използвани днес в академичните среди. Той съдържа елементи на логика програмиране (модел за съвпадение). Затова рефал език, предложен в този урок като език за самообучение.

Miranda. Силно напечатани и поддържа типове потребители и данни за полиморфизми. Turner разработена на базата на по-ранните езици САЛС и KRC. Той има мързеливи семантика. Без задължителни включвания.

Haskell. Език развитие имаше в края на миналия век. Широко известен в академичните среди. В някои западни университети се използва като основен език за изучаване от учениците. Един от най-мощните функционални езици. Lazy език. Чисто функционално език. Напечатани. Haskell - отлично средство за учене и експериментиране със сложни функционални типове данни. Програми, написани на Haskell, имат значителен размер на обектен код и ниската скорост на изпълнение.

Clean. Диалектът на Haskell, адаптирани към нуждите на практическо програмиране. Както и на Haskell, чисто функционално мързелив език съдържа въведете класове. Но Clean включва и интересни функции, които нямат еквивалент в Haskell. Например, задължителните характеристики в чисти, се основават на уникални видове, идеята за който е заето от линейната логика (линейна логика). Clean съдържа механизми, които могат значително да подобрят ефективността на програмите. Сред тези механизми ясно потискане на мързелив оценка. Изпълнителна Clean е търговски продукт, но безплатната версия е достъпна за изследователски и образователни цели.

ML (Meta > Екип от програмисти, водена от Робърт Milierom в средата на 70-те години. Единбург (Edinburgh Logic за изчислима Функции). Идеята на езика е да се създаде механизъм за изграждане на формалните доказателства в логиката на системата за изчислимите функции. През 1983 г., на езика е ревизиран допълнена с понятия като модули. Той стана известен като Standard ML. ML - е силно въвели език с статичен тип проверка и изпълнение на приложният програми. Той придоби доста популярност в изследователската общност в областта на компютърно обучение.