Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web development, networking and server security. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

Наваколлі бясконцасці

Тры прагнозах доктара Futamura

Увядзенне


Тры праекцыі Futamura з'яўляюцца паслядоўнасць прымянення праграмавання тэхніку, званую "частковага ацэнкі" або "спецыялізацыя", кожная з якіх больш за галюцынагенных, чым папярэдні. Але гэта не павінна быць праграмістаў, усё самае цікавае. Так што я збіраюся паспрабаваць растлумачыць тры праекцыі такім чынам, што не-праграмісты могуць зразумець, можа быць, занадта. Але будзь вы праграміст ці не, гэты від самоссылающиеся развагі могуць нанесці шкоду вашаму мозгу. Па крайняй меры, гэта балюча маёй. Але гэта добрая боль, не ці так?

Такім чынам, замест казаць аб камп'ютэрных праграмах, я буду казаць аб машынах механічнага разнастайнасць. Трохі як камп'ютэрныя праграмы, гэтыя машыны будуць мець нейкую шчыліну для ўводу матэрыял, і якой-слот, дзе выхад атрымаецца. Але ў адрозненне ад кампутарных праграм, я буду ў стане зрабіць іх фатаграфіі, каб паказаць, што я кажу. Я таксама выказаць здагадку, што гэтыя машыны маюць доступ да бясконцы запас сыравіны для вытворчых мэт, і я буду лічыць, што гэтыя машыны могуць паўтарыць матэрыял - таму што ў кампутары мы можам свабодна рабіць копіі дадзеных, пакуль не скончыцца памяць па крайняй меры.

Чаканка манет


Вельмі просты прыклад машына якая мае слот для ўводу прабелаў, і выхады Новаспечаныя манет:

Вось прысвечаны $ 1 вытворчасці машыны. Мы маглі б выказаць здагадку, што ўнутрана ён маркамі адпаведных дызайну на пустой і выплёўвае вынік.

Гэта было б больш цікавым, калі мы маглі б зрабіць машыну з другога ўваход слот, што дазволіла нам ўвесці апісанне медалі. Падаючы розныя ўваходы мы маглі мяты розныя манеты з адной машыны. Я збіраюся прыняць пагадненне, што, калі мы хочам ўвесці апісанне мы ўваходных карціну выніку мы хочам. Я буду маляваць у выглядзе прамавугольніка з прадметам ўнутры іх. Вось агульныя мэты машына вытворчасці фунта манет:

Тое ж самае можа зрабіць машына даляраў, злотых або ены. Вы можаце сабе гэта машына працуе, прымаючы апісанне і фрэзерныя манеты стылі з ЧПУ. Мы будзем называць такія машыны перакладчыка. Ён інтэрпрэтуе інструкцыі і вырабляе яго вынік.

Перакладчык мае вялікае перавага перад прысвечаны мяты даляра. Вы робіце зрабіць любы выгляд манеты. Але гэта будзе працаваць значна павольней. Прысвечаны Минтер можаце проста штамп манеты ў адзін прыём. Перакладчык не можа гэтага зрабіць, таму што кожны ўваход можа быць рознай. Ён павінен карыстацкіх млына кожнай манеты па асобнасці. Ці ёсць спосаб атрымаць перавагі абодвух тыпаў машын? Мы маглі б гэта зрабіць: узяць манету апісанне і замест таго, фрэзерныя манеты непасрэдна мы млын адмоўных рэльефы для абодвух бакоў манеты. Мы затым пабудаваць новы выдзелены чаканкі машына, якая выкарыстоўвае гэтыя негатывы, каб выкараніць манеты. Іншымі словамі, мы маглі зрабіць машыну, якая прымае ў якасці ўваходных манеты апісанне і выхады выдзеленай машыне, каб зрабіць гэты тып манеты. Гэты выгляд машыны машына называецца кампілятарам. Ён прымае набор інструкцый, але замест выканання іх адзін за адным, гэта робіць выдзеленую машыну для іх выканання. Вось адзін у дзеянні:


Дык вось два важных паняцці да гэтага часу:

Перакладчыкі: іх бяруць апісання ці інструкцыі, і выкарыстоўваць іх, каб зрабіць рэчы апісаныя.
Складальнікі: іх бяруць апісання ці інструкцыі, і выкарыстоўваць іх, каб зрабіць машыну намаганняў, каб зрабіць рэчы апісаныя. Працэс стварэння такой машыны з наборам інструкцый вядомы як кампіляцыя.

Прагнозы дапамогі доктара Futamura выразна сувязь паміж гэтымі рэчамі.

Спецыялізацыя


Нам спатрэбіцца яшчэ адно важнае паняцце: specialiser. Няхай мы маем машыну, якая мае два ўваходу слотаў, і В. Але цяпер, што калі мы выкарыстоўваем машыны мы выяўляем, што змяняюцца роду рэчы мы ўкладваем у слот B, але заўсёды ў канчатковым выніку пакласці адно і тое ж у слот. Калі мы ведаем, што слот заўсёды атрымаеце той жа ўваход, то мы маглі б рацыяналізаваць машыну з дапамогай нашых ведаў аб уласцівасцях А. Гэта падобна на чаканку сітуацыі - калі мы ведаем, што мы заўсёды збіраемся зрабіць $ 1 манет, то мы можаце прысвяціць нашу машыну да гэтай мэты. На самай справе, калі мы ведаем, што мы заўсёды збіраемся ўводзіць адно і тое ж у слот мы нават не трэба слот больш. Мы маглі б проста палкай ўнутры машыны і кожны раз, калі карыстальнік уводзіць што-то ў слот B, машына бы то паўтарыць, а затым выкарыстоўваць яго так жа, як калі б ён быў ўваход.

Такім чынам, у дадзенай машыне з двума слотамі і B, і з улікам некаторых ўваходных падыходзіць для слота, мы маглі б рэдызайн яго як машыну толькі з B слот, які аўтаматычна, унутрана само-каналы выбралі пункт А. Але мы можам часта лепш, чым гэтая. Нам не трэба самастойна камбікармоў ў слот А. Мы маглі б рэдызайн шляху машына працуе на аснове здагадкі, што мы заўсёды атрымліваем той жа самы матэрыял збіраецца ў слот А. Напрыклад, у чаканцы напрыклад прысвяціць $ 1 Минтер быў больш спецыялізаваным, чым проста агульныя мэты Минтер, што інтэрпрэтаваць інструкцыі для $ 1 манету. Гэты працэс наладкі машыны для канкрэтнага ўкладу ў слот называецца спецыялізацыяй або частковая адзнака.

Цяпер уявіце сабе, у нас ёсць машыны для аўтаматычнай спецыялізуюцца канструкцыі для машын. Гэта можа мець два слота: адзін для ўводу апісання два аўтамата з прарэзамі і B, і адзін для ўводу матэрыял падыходзіць для слота А. Было б затым раздрукаваць апісанне падганяць машыну толькі слот В. можна назваць спецыялізацыяй машыны. Вось на працы:

Гэта пераўтварэнне апісанне двух ўваходных машыну ў апісанні адзін уваход машыны.

Першая праекцыя


Працэс спецыялізацыі падобная на тое, што я кажу пра з вылучанымі чаканкі машын. Замест таго каб проста мець падабенства мы можам цалкам фармалізаваць гэта. Звярніце ўвагу, што перакладчык вышэй займае два ўваходу. Так дызайн для перакладчыка можа быць выкарыстана ў першы ўваход specialiser. Цяпер мы кормім апісанне манет мы хочам ў слот В. specialiser whirrs далёка і ў канчатковым выніку выводзіць апісанне машыны, інтэрпрэтатар, які прысвечаны, каб зрабіць што адной канкрэтнай манеты. Вынік будзе апісваць машыну толькі з адным уваходам падыходзіць для нарыхтоўкі. Іншымі словамі, мы можам выкарыстоўваць specialiser як кампілятар. Гэта перш за прагнозах доктара Futamura's. Вось карціна працэсу ў сферы працы:

Што гэта сведчыць аб тым, што вам не трэба, каб зрабіць кампілятараў. Вы можаце зрабіць specialisers замест. На самай справе гэта вельмі практычная рэч, каб зрабіць у кампутарным свеце. Напрыклад Існуюць камерцыйныя прадукты (я не звязаных з гэтым прадуктам у любой форме), што можа спецыялізавацца код для працы на канкрэтнай архітэктуры, як CUDA. Гэта цалкам практычны, каб пераўтварыць перакладчыка кампілятар з такім інструментам. Пры напісанні specialiser, пастаўшчыкі такіх інструментаў дазваляе трэцім бакам распрацоўваць свае ўласныя кампілятары і так гэта больш карысна, чым проста пісаць прысвечаны кампілятара.

Другі праекцыі


Час для пачатку на прыступку вышэй. Першы ўваход у specialiser з'яўляецца апісанне двух ўваходных машыны. Але specialiser сама два ўваходных машыны. Вы думаеце, што я маю на ўвазе яшчэ? Мы маглі б рэчы апісанне specialiser ва ўласныя першы ўваход specialiser's! У першай праекцыі мы прадаставілі перакладчыка ў якасці ўкладу ў specialiser. Калі мы ведаем, што мы заўсёды захоча выкарыстоўваць той жа перакладчык, то мы маглі б рацыяналізаваць specialiser спецыяльна для працы з гэтым уваходам. Такім чынам, мы можам спецыялізавацца specialiser працаваць з нашым перакладчыкам наступным чынам:

Але што гэта за машыны, апісанне якога яна выйсце? Перакладчык атрымлівае ў якасці ўваходных апісанне таго, як дзейнічаць на некаторыя рэчы, як паварот нарыхтоўкі ў манеты. Па сутнасці, выхад машыны перакладчыка убудаваныя ў яе. Так ён прымае апісанні і выхадаў машыны для выканання гэтых інструкцый. Іншымі словамі гэта кампілятар. Калі specialiser з'яўляецца любая добрая, то кампілятар будзе таксама добра. Гэта не проста схаваць перакладчыка ў акно і карміць яго вашаму апісанню, гэта зробіць прысвечаны частак для забеспячэння кампілятар вырабляе хутка выдзеленай машыне. І гэта другі праекцыі доктар Futamura's.

Трэцяя праекцыя


Але мы можам ісці далей. Specialiser можа прыняць апісанне specialiser ў якасці свайго першага ўваходу. Гэта азначае, што мы можам спецыялізавацца яго адмыслова для гэтага ўваходу. А для гэтага, мы выкарыстоўваем specialiser. Іншымі словамі, мы можам карміць Descrption з specialiser ў абодва ўваходу specialiser! Тут мы ідзем:

Але тое, што машына X, што ён выводзіць? У другой праекцыі пяройдзем у перакладчыкам у якасці другога аргументу і вярнуцца кампілятара. Так трэцяя праекцыя дае нам выдзеленая машына для выканання гэтай задачы. Машына X прымае апісанне перакладчыка ў якасці ўваходных дадзеных і вынікаў апісанне кампілятара. Так машына х прысвечаны перакладчыка-канвэртар-кампілятар. І гэта трэцяя праекцыя доктара Futamura.

Калі ў нас ёсць specialiser мы ніколі не павінны зрабіць кампілятар зноў. Нам трэба толькі дызайн перакладчыкаў, што мы можам аўтаматычна пераўтварыць у кампілятарамі. У цэлым гэта лягчэй напісаць, чым перакладчыкаў кампілятараў і г.д. У прынцыпе, гэта палягчае жыццё праграмістам. Гэта таксама дазваляе нам compartmentalise будынак кампілятараў. Мы можам асобны перакладчык трохі ад біт, што мода канкрэтных частак для задачы. Specialiser робіць апошні, так як нашым патэнцыйным кампілятар пісьменнік можа засяродзіцца на першым. Але хто б мог падумаць, што пераход specialiser да сябе ў два разы дасць нам нешта настолькі карысным?

Рэзюмэ


Дык вось прагнозы:

  1. Кампіляцыя канкрэтных праграм па прысвечаны машын.
  2. Стварэнне выдзеленай машыне для кампіляцыі ад перакладчыка.
  3. Стварэнне машыны прысвечаны задачу пераўтварэння перакладчыкаў ў кампілятарамі.

Ёсць шмат варыяцый мы можам гуляць з. Я толькі што казаў пра апісання рэчаў сабой зразумела, шмат пра тое, што гэтыя апісання выглядаць. На практыцы Ёсць шмат розных "мовах" мы можам выкарыстоўваць, каб выказаць нашы апісання. Так варыяцыі на гэтыя прагнозы могуць генераваць апісання на розных мовах, магчыма, пераўтварэння паміж імі. Мы маглі б таксама ёсць шмат розных specialisers, якія самі з'яўляюцца аптымізаваныя для канкрэтных тыпаў спецыялізацыі. Futamura прагнозы даюць цікавыя спосабы аб'яднання гэтых. І Ёсць таксама варыяцыі для генерацыі прысвяціць машын для іншых задач, звязаных з кампіляцыяй - як разбор апісання мы маглі б карміць ў якасці ўваходных дадзеных.

Калі вы хочаце, каб прачытаць больш на гэтую тэму ёсць цэлая кніга онлайн з прыкладамі кода. Яны не проста рэчы, каб дызайн.

Я думаю, што спецыялізацыя забойца функцыя, якую я хацеў бы бачыць больш. Сучасныя кампілятары (і тут я кажу пра кампутары, а не машыны ў цэлым) жорстка чорныя скрыні для задачу кампіляцыі. Яны не вельмі добра дазваляе атрымаць там і налады спосабу кампіляцыі адбываецца - напрыклад, калі вы хочаце згенераваць код у адпаведнасці са стратэгіяй вы ведаеце. Спецыялізацыя з'яўляецца добрай альтэрнатывай проста нітамі API на кампілятар. Гэта дазволіць лёгка для тых, хто пісаць аптымізацыі і аптымізаваныя кампілятары для сваіх мовах і аб'яднаць такія кампілятары з перакладчыкамі для інтэрактыўнага замест форуму кампіляцыі.

Я даведаўся пра гэта матэрыяле, а таксама шмат іншых рэчаў у маім блогу, з выдатным заганны круг. Тэорыя цесна звязана з тэорыяй напісання Кўінз, які я выкарыстаў для майго трох мовах Куін.

І калі вы захоўваеце вашыя вушы да зямлі можна пачуць чуткі аб легендарным чацвёртым праекцыі...
Published (Last edited): 27-07-2011 , source: http://blog.sigfpe.com/2009/05/three-projections-of-doctor-futamura.html