Inafasiriwa moja kwa moja kutoka kwa Wikipedia ya Kiingereza na Tafsiri ya Google

Makumbusho

Compiler ni programu ya kompyuta ambayo inabadilisha msimbo wa kompyuta iliyoandikwa katika lugha moja ya programu ( lugha ya chanzo) katika lugha nyingine ya programu (lugha ya lengo). Compilers ni aina ya translator kuwa msaada vifaa digital, hasa kompyuta. Jina la compiler hutumiwa hasa kwa mipango ambayo hutafsiri msimbo wa chanzo kutoka kwa lugha ya kiwango cha juu ya programu hadi lugha ya chini (kwa mfano, lugha ya kanisa , code ya kitu , au code ya mashine ) ili kuunda mpango wa kutekeleza . [1]

Hata hivyo, kuna aina nyingi za washiriki. Ikiwa mpango ulioandaliwa unaweza kukimbia kwenye kompyuta ambayo CPU au mfumo wa uendeshaji ni tofauti na ile ambayo compiler inaendesha, compiler ni msalaba-compiler . Compiler ya bootstrap imeandikwa katika lugha iliyoandaliwa. Programu inayobadilika kutoka lugha ya kiwango cha chini hadi ngazi ya juu ni decompiler . Mpango unaobadilisha kati ya lugha za kiwango cha juu huitwa kawaida compiler-source-source au transpiler. Mwandikaji wa lugha mara nyingi ni programu ambayo inatafsiri aina ya maneno bila mabadiliko ya lugha. Nakala ya compiler-compiler inahusu zana zilizotumiwa kuunda washirika wanaofanya uchambuzi wa syntax.

Mkusanyiko huenda kufanya shughuli nyingi au zote zifuatazo: ufanisi wa awali , uchambuzi wa lexical , kutafakari , uchambuzi wa semantic ( tafsiri ya kutafsiriwa kwa syntax ), uongofu wa mipango ya kuingiza kwa uwakilishi wa kati , utambulisho wa kanuni na kizazi cha msimbo . Wafanyabiashara hutekeleza shughuli hizi kwa awamu zinazouza kubuni bora na mabadiliko sahihi ya pembejeo ya chanzo kwa lengo la pato. Vipimo vya programu vinaosababishwa na tabia isiyo sahihi ya compiler inaweza kuwa vigumu sana kufuatilia chini na kufanya kazi karibu; Kwa hiyo, waandaaji wa kompyuta wanawekeza juhudi kubwa ili kuhakikisha usahihi wa kuunganisha . [2]

Wafanyabiashara sio tu wafsiri ambao hutumiwa kubadilisha programu za chanzo. Mkalimani ni programu ya kompyuta ambayo inabadilisha na kisha executes shughuli unahitajika. Utaratibu wa kutafsiri huathiri muundo wa lugha za kompyuta ambazo husababisha upendeleo wa kukusanya au tafsiri. Katika mazoezi, mkalimani anaweza kutekelezwa kwa lugha zilizoandaliwa na washirika wanaweza kutekelezwa kwa lugha zilizotafsiriwa.

Yaliyomo

Historia

Mchoro wa uendeshaji wa lugha ya kawaida ya multi-target compiler

Dhana za kompyuta za kinadharia zilizotengenezwa na wanasayansi, hisabati, na wahandisi ziliunda msingi wa maendeleo ya kompyuta wakati wa Vita Kuu ya II. Lugha za binary za kwanza zilibadilika kwa sababu vifaa vya digital vinaelewa tu na zero na mwelekeo wa mzunguko katika usanifu wa mashine ya msingi. Katika miaka ya thelathini, lugha za kanisa zilitengenezwa ili kutoa mbali zaidi ya usanifu wa usanifu wa kompyuta. Uwezo mdogo wa kumbukumbu wa kompyuta za mapema ulipelekea changamoto kubwa za kiufundi wakati waunganisha wa kwanza walipangwa. Kwa hiyo, mchakato wa kukusanya unahitajika kugawanywa katika programu kadhaa ndogo. Programu za mwisho za mwisho zinazalisha bidhaa za uchambuzi zilizotumiwa na mipango ya mwisho ya kuzalisha nambari ya lengo. Kama teknolojia ya kompyuta ilizotolewa zaidi ya rasilimali za usanifu zinaweza kuunganisha bora na mchakato wa kukusanya.

Nia ya mwanadamu inaweza kutengeneza ufumbuzi bora kama lugha huenda kutoka kwenye mashine hadi ngazi ya juu. Hivyo maendeleo ya lugha za kiwango cha juu hufuata kwa kawaida kutokana na uwezo unaotolewa na kompyuta za kompyuta. Lugha za kiwango cha juu ni lugha rasmi ambazo zinaelezewa kwa undani na syntax na semantics ambazo zinaunda usanifu wa lugha ya juu. Mambo ya lugha hizi rasmi ni pamoja na:

  • Alfabeti , seti ya mwisho ya alama;
  • Kamba , mlolongo wa mwisho wa alama;
  • Lugha , saini yoyote ya masharti juu ya alfabeti.

Sentensi katika lugha inaweza kuelezewa na sheria zilizowekwa inayoitwa sarufi. [3]

Fomu ya Backus-Naur (BNF) inaeleza syntax ya "sentensi" za lugha na ilitumiwa kwa syntax ya Algol 60 na John Backus . [4] Maoni yanayotokana na dhana za sarufi ya mazingira bila Noam Chomsky , mwana wa lugha. [5] "BNF na upanuzi wake umekuwa zana za kawaida za kuelezea syntax ya uhalafishaji wa programu, na mara nyingi sehemu za waunganisha huzalishwa moja kwa moja kutoka maelezo ya BNF." [6]

Katika miaka ya 1940, Konrad Zuse aliunda lugha ya programu ya programu ya algorithm inayoitwa Plankalkül ("Plan Calculus"). Wakati hakuna utekelezaji halisi uliofanyika hadi miaka ya 1970, uliwasilisha dhana zilizoonekana baadaye katika APL iliyoundwa na Ken Iverson mwishoni mwa miaka ya 1950. [7] APL ni lugha ya masomo ya hisabati.

Muundo wa lugha ya kiwango cha juu wakati wa miaka inayojumuisha ya kompyuta ya kompyuta ilitoa vifaa vya programu muhimu kwa aina mbalimbali za programu:

  • FORTRAN (Mfumo Tafsiri) kwa ajili ya maombi ya uhandisi na sayansi inachukuliwa kuwa lugha ya kwanza ya kiwango cha juu. [8]
  • COBOL (lugha ya kawaida ya Biashara-inayotokana) ilitokana na A-0 na FLOW-MATIC ili kuwa lugha ya juu ya kiwango cha maombi ya biashara. [9]
  • LISP (Orodha ya Programu) kwa hesabu ya mfano. [10]

Teknolojia ya compiler ilibadilika kutoka kwa haja ya mabadiliko ya madhubuti ya mpango wa chanzo cha juu-juu katika mpango wa lengo la kiwango cha chini cha kompyuta ya kompyuta. The compiler inaweza kutazamwa kama mwisho wa mwisho ili kukabiliana na uchambuzi wa msimbo wa chanzo na mwisho wa nyuma ili kuunganisha uchambuzi kwenye msimbo wa lengo. Biashara kati ya mwisho wa mwisho na mwisho wa nyuma inaweza kuzalisha kanuni bora zaidi ya lengo. [11]

Baadhi ya hatua za awali katika maendeleo ya teknolojia ya compiler:

  • 1952 - Makumbusho ya Autocode yaliyoundwa na Alick Glennie kwa kompyuta ya Manchester Mark I katika Chuo Kikuu cha Manchester inachukuliwa na baadhi kuwa lugha ya kwanza ya programu iliyoandaliwa.
  • 1952 - Grace Hopper aliandika mtayarishaji wa lugha ya programu ya A-0 , ingawa mkusanyiko wa A-0 alifanya kazi zaidi kama mzigo au kiungo zaidi kuliko wazo la kisasa la compiler kamili.
  • 1954-1957 - Timu iliyoongozwa na John Backus katika IBM imeendeleza FORTRAN ambayo mara nyingi inachukuliwa kuwa lugha ya kwanza ya juu. Mnamo mwaka wa 1957, walikamilisha kampuni ya FORTRAN ambayo inajulikana kuwa imeanzisha mwandishi wa kwanza usiojulikana.
  • 1959 - Mkutano wa lugha ya lugha za data (CODASYL) ulianzishwa maendeleo ya COBOL . Mpangilio wa COBOL ulivuta kwenye A-0 na FLOW-MATIC. Mapema miaka ya 1960 COBOL iliandaliwa kwenye mbinu nyingi za usanifu.
  • 1958-1962 - John McCarthy katika MIT aliunda LISP . [12] Nguvu za usindikaji wa ishara zinazotolewa na sifa muhimu kwa ajili ya utafiti bandia ya akili. Mwaka wa 1962, kuachiliwa kwa LISP 1.5 ilibainisha zana zingine: mkalimani iliyoandikwa na Stephen Russell na Daniel J. Edwards, mkusanyiko na mkusanyiko aliyeandikwa na Tim Hart na Mike Levin. [13]

Mfumo wa uendeshaji wa awali na programu za mifumo ziliandikwa katika lugha ya kanisa. Katika miaka ya 60 na ya 70s, lugha za juu za programu za programu bado zilikuwa na utata kutokana na mapungufu ya rasilimali. Bado utafiti kadhaa na juhudi za sekta zilianza kuhamia kuelekea lugha za programu za kiwango cha juu, kwa mfano, BCPL , BLISS , B , na C.

BCPL (lugha ya msingi ya programu ya programu) iliyoundwa mwaka 1966 na Martin Richards katika Chuo Kikuu cha Cambridge ilianzishwa awali kama chombo cha kuandika compil. [14] Makundi kadhaa yameandaliwa, kitabu cha Richards hutoa ufahamu kwa lugha na kompyuta yake. [15] BCPL haikuwa lugha tu ya programu ya ushawishi ambayo bado inatumika katika utafiti [16] lakini pia ilitoa msingi wa kubuni B lugha za C na C.

BLISS (Lugha ya Msingi ya Utekelezaji wa Programu ya Mfumo) iliundwa kwa Digital Equipment Corporation (DEC) PDP-10 Minicomputer na Chuo Kikuu cha Utafiti wa Umoja wa Mtaa wa Carnegie Mellon (CMU) wa WA Wulf. Timu ya CMU iliendelea kukuza kampuni ya BLISS-11 mwaka mmoja baadaye mwaka 1970.

Multics (Taarifa nyingi na Huduma za Computing), mradi wa ugawaji wa muda, unahusisha MIT , Bell Labs , General Electric (baadaye Honeywell ) na iliongozwa na Fernando Corbató kutoka MIT. [17] Multics iliandikwa katika PL / I lugha iliyoandaliwa na Group IBM na IBM User. [18] Lengo la IBM lilikuwa kukidhi mahitaji ya programu, kisayansi, na mifumo. Kulikuwa na lugha zingine ambazo zingezingatiwa lakini PL / I ilitoa suluhisho kamili zaidi ingawa halijawahi kutekelezwa. [19] Kwa miaka michache ya kwanza ya mradi wa Mulitics, sehemu ndogo ya lugha inaweza kuundwa kwa lugha ya kanisa na kampuni ya kwanza ya PL / I (EPL) na Doug McIlory na Bob Morris kutoka Bell Labs. [20] EPL iliunga mkono mradi mpaka mkusanyiko wa boot-strapping kwa PL / I kamili inaweza kuendelezwa. [21]

Labs za Bell ziliondoka mradi wa Multics mwaka wa 1969: "Baada ya muda, tumaini lilibadilishwa na kuchanganyikiwa wakati jitihada za kikundi zilianza kushindwa kuzalisha mfumo wa kiuchumi." [22] Ushiriki ulioendelea utaendesha gharama za msaada wa mradi. Kwa hiyo watafiti waligeuka na juhudi nyingine za maendeleo. Lugha ya programu ya programu B iliyozingatia dhana za BCPL iliandikwa na Dennis Ritchie na Ken Thompson . Ritchie aliunda compiler ya kukamilisha boot kwa B na aliandika Unics (Uniplexed Information na Computing Service) mfumo wa uendeshaji wa PDP-7 katika B. Unics hatimaye ikawa imeandikwa Unix.

Maabara ya Bell yalianza maendeleo na upanuzi wa C kulingana na B na BCPL. Kundi la BCPL limepelekwa kwa Multics na Bell Labs na BCPL lilikuwa lugha iliyopendekezwa katika Labs Bell. [23] Mwanzoni, programu ya mwisho ya bomba la Bell Labs 'B ilitumika wakati compiler ya C ilipangwa. Mwaka wa 1971, PDP-11 mpya ilitoa rasilimali kufafanua upanuzi kwa B na kuandika upya kompyuta. Mnamo mwaka wa 1973, muundo wa lugha ya C ulikuwa kamili na Unix kernel kwa PDP-11 iliandikwa tena katika C. Steve Johnson alianza maendeleo ya Portable C Compiler (PCC) ili kusaidia kurejeshwa kwa waunganishaji wa C kwa mashine mpya. [24] [25]

Programu inayolengwa na kitu (OOP) ilitoa uwezekano wa kuvutia wa maendeleo na maombi. Dhana za OOP zinarudi nyuma lakini zilikuwa sehemu ya sayansi ya lugha ya LISP na Simula . [26] Katika Bell Labs, maendeleo ya C + + yalivutiwa na OOP. [27] C + + ilitumiwa kwanza mwaka 1980 kwa programu za mifumo. Programu ya awali ya kubuni ya mifumo ya lugha ya C ya mifumo ya lugha na Sura za Simula. Vifaa vya kuzingatia vitu viliongezwa mwaka wa 1983. [28] Mpango wa Cfront uliimarisha mwisho wa C + + kwa mtengenezaji wa lugha ya C84. Katika miaka iliyofuata kadhaa wajumbe wa C + + walitengenezwa kama umaarufu wa C + + ulikua.

Katika maeneo mengi ya maombi, wazo la kutumia lugha ya kiwango cha juu hupatikana haraka. Kwa sababu ya utendaji wa kupanua ulioungwa mkono na lugha mpya za programu na utata unaoongezeka wa usanifu wa kompyuta, washirika wamekuwa ngumu zaidi.

DARPA (Shirika la Uhandisi wa Utafiti wa Juu) lilisaidia mradi wa compiler na timu ya uchunguzi wa Wul wa CMU mwaka 1970. Uundaji wa Quality Compiler-Compiler PQCC utazalisha Uzalishaji wa Quality Quality (PQC) kutoka kwa ufafanuzi rasmi wa lugha ya chanzo na lengo. [29] PQCC ilijaribu kuongeza muda wa compiler-compiler zaidi ya maana ya jadi kama jenereta parser (kwa mfano, Yacc ) bila mafanikio mengi. PQCC inaweza kufafanuliwa zaidi kama jenereta ya compiler.

Utafiti wa PQCC katika mchakato wa kizazi cha kifaa ulitaka kujenga mfumo wa uandishi wa kompyuta wa moja kwa moja. Jitihada zilizogundua na iliyoundwa muundo wa awamu ya PQC. Mwandishi wa BLISS-11 alitoa muundo wa awali. [30] Awamu zilijumuisha uchambuzi (mwisho wa mwisho), tafsiri ya kati kwa mashine ya kawaida (mwisho wa kati), na kutafsiri kwa lengo (nyuma ya mwisho). TCOL ilianzishwa kwa ajili ya utafiti wa PQCC kushughulikia ujenzi wa lugha maalum katika uwakilishi wa kati. [31] Tofauti ya TCOL mkono lugha mbalimbali. Mradi wa PQCC ulifuatilia mbinu za ujenzi wa kompyuta za automatiska. Dhana ya kubuni imeonekana kuwa muhimu katika kuboresha waunganisha na wasanidi wa lugha ya Ada ya programu inayolengwa na kitu.

Hati ya Ada Stoneman imeunda mazingira ya msaada wa programu (APSE) pamoja na kernel (KAPSE) na ndogo (MAPSE). Ada mkalimani NYU / ED juhudi za maendeleo na usimamiaji wa taasisi na Shirika la Viwango vya Taifa la Marekani (ANSI) na Shirika la Viwango vya Kimataifa (ISO). Uanzishaji wa awali wa Ada wa Makumbusho na Huduma za Majeshi ya Marekani zilijumuisha washirika katika mazingira kamili ya kubuni kwenye mstari wa Hati ya Stoneman. Jeshi na Navy vilifanya kazi kwa Mradi wa Ada Language System (ALS) uliopangwa kwa usanifu wa DEC / VAX wakati Nguvu ya Air ilianza kwenye Ada Integrated Environment (AIE) inayolengwa kwa mfululizo wa IBM 370. Wakati miradi haikutoa matokeo yaliyohitajika, yalichangia jitihada kubwa zaidi ya maendeleo ya Ada. [32]

Jitihada nyingine za kuandaa Ada zilianza nchini Uingereza katika Chuo Kikuu cha York na Ujerumani katika Chuo Kikuu cha Karlsruhe. Nchini Marekani, Verdix (baadaye iliyopatikana kwa Rational) ilitoa mfumo wa Verdix Ada Development (VADS) kwa Jeshi. VADS imetoa seti ya zana za maendeleo ikiwa ni pamoja na compiler. Unix / VADS inaweza kuwa mwenyeji kwenye aina mbalimbali za majukwaa ya Unix kama vile DEC Ultrix na Solaris Sun 3/60 iliyopigwa kwa Motorola 68020 katika tathmini ya CECOM ya Jeshi, [33] Kulikuwa na mara nyingi waandishi wa Ada waliopatikana ambao walitumia vipimo vya uthibitishaji wa Ada. Programu ya GNU ya Freesoftware Foundation iliunda GNU Compiler Ukusanyaji (GCC) ambayo hutoa uwezo wa msingi wa kusaidia lugha nyingi na malengo. Toleo la Ada GNAT ni mojawapo ya washirika wa Ada wengi sana. GNAT ni bure lakini pia kuna msaada wa kibiashara, kwa mfano, AdaCore, ilianzishwa mwaka 1994 ili kutoa ufumbuzi wa programu za kibiashara kwa Ada. GNAT Pro inajumuisha GNAT ya GNU ya msingi ya GNAT na Suite ya chombo ili kutoa mazingira jumuishi ya maendeleo .

Lugha za kiwango cha juu ziliendelea kuendesha utafiti na maendeleo ya compiler. Maeneo ya kuzingatia yalijumuisha uboreshaji na kizazi cha kiotomatiki. Mwelekeo katika lugha za programu na mazingira ya maendeleo yameathiri teknolojia ya compiler. Washiriki zaidi walijumuisha katika usambazaji wa lugha (PERL, Java Development Kit) na kama sehemu ya IDE (VADS, Eclipse, Ada Pro). Ushirikiano na usingiano wa teknolojia zilikua. Kuja kwa huduma za wavuti kukuza ukuaji wa lugha za wavuti na lugha za scripting. Maandiko huelezea nyuma ya siku za mwanzo za Amri ya Line Line (CLI) ambako mtumiaji anaweza kuingia amri za kutekelezwa na mfumo. Dhana za Mtumiaji wa Shell zilizopangwa kwa lugha ili kuandika programu za shell. Mapambo ya Windows mapema yalitolewa rahisi programu ya programu ya kundi. Mabadiliko ya kawaida ya lugha hii yalikuwa ya kutafsiri. Ingawa haitumiwi sana, wasanidi wa Bash na Batch wameandikwa. Lugha za hivi karibuni za kisasa zilizofafanuliwa zimekuwa sehemu ya kitanda cha chombo cha watengenezaji. Lugha za kisasa za script ni pamoja na PHP, Python, Ruby na Lua. (Lua hutumiwa sana katika maendeleo ya mchezo.) Wote hawa wana mkalimani na msaidizi wa usanifu. [34]

"Wakati shamba la kuandaa ilianza mwishoni mwa miaka ya 50, lengo lake lilikuwa limetolewa na tafsiri ya programu za lugha za juu katika kanuni za mashine ... Eneo la compiler linazidi kuingiliana na taaluma nyingine ikiwa ni pamoja na usanifu wa kompyuta, lugha za programu, mbinu rasmi, uhandisi wa programu, na usalama wa kompyuta. " [35] "Utafiti wa Makumbusho: The Next Years Years" makala ilibainisha umuhimu wa lugha zinazoongozwa na kitu na Java. Kompyuta za usalama na sambamba zilichaguliwa kati ya malengo ya utafiti wa baadaye.

Ujenzi wa compiler

Mkusanyiko hutengeneza mabadiliko rasmi kutoka kwenye mpango wa chanzo cha juu hadi programu ya chini ya lengo. Design compiler inaweza kufafanua mwisho hadi mwisho suluhisho au kukabiliana na subset defined ambayo interfaces na zana nyingine kukusanya mfano preprocessors, assemblers, viungo. Mahitaji ya kubuni hujumuisha interfaces vilivyoelezwa kwa ndani ndani ya vipengele vya compiler na nje kati ya toolsets kusaidia.

Katika siku za mwanzo, mbinu iliyochukuliwa kwenye kubuni ya compiler iliathiriwa moja kwa moja na utata wa lugha ya kompyuta ili kusindika, uzoefu wa mtu anayejenga, na rasilimali zinazopatikana. Vikwazo vya rasilimali visababisha haja ya kupitisha msimbo wa chanzo mara moja.

Mwandishi kwa lugha rahisi sana iliyoandikwa na mtu mmoja inaweza kuwa kipande cha moja cha programu ya monolithic. Hata hivyo, kama lugha ya chanzo inakua katika utata kubuni inaweza kupasuliwa kuwa idadi ya vipindi tofauti. Sehemu tofauti hutoa maboresho ya kubuni ambayo yanaelekeza maendeleo katika kazi katika mchakato wa kukusanya.

Njia moja hadi kwa washiriki wengi wa kupitisha

Kuainisha wajumuisha na idadi ya passes ina historia yake katika mapungufu ya vifaa vya kompyuta. Kuandaa kunahusisha kufanya kazi nyingi na kompyuta za mapema hazikuwa na kumbukumbu ya kutosha ili na mpango mmoja ambao ulifanya kazi hii yote. Kwa hiyo washirika waligawanywa katika mipango madogo ambayo kila mmoja alifanya kupita juu ya chanzo (au baadhi ya uwakilishi wake) kufanya baadhi ya uchambuzi na tafsiri zinazohitajika.

Uwezo wa kuunganisha katika kupitisha moja kwa kawaida umeonekana kama manufaa kwa sababu inaeleza kazi ya kuandika compilers na moja-compilers ujumla kufanya maonyesho kwa kasi zaidi kuliko multi-kupita compilers . Kwa hiyo, kwa upande mwingine inaendeshwa na upungufu wa rasilimali za mifumo ya mapema, lugha nyingi za awali zimeundwa ili waweze kuandaliwa kwa kupitisha moja (kwa mfano, Pascal ).

Katika hali nyingine muundo wa kipengele cha lugha inaweza kuhitaji compiler kufanya zaidi ya moja kupita juu ya chanzo. Kwa mfano, fikiria tamko inayoonekana kwenye mstari wa 20 wa chanzo kinachoathiri tafsiri ya kauli inayotokea kwenye mstari wa 10. Katika kesi hii, pesa ya kwanza inahitaji kukusanya taarifa kuhusu maaja yanayotokea baada ya taarifa ambazo zinaathiri, na tafsiri halisi inatokea wakati wa safari inayofuata.

Hasara ya kukusanya kwa kupitisha moja ni kwamba haiwezekani kufanya optimizations wengi kisasa zinahitajika ili kuzalisha code high quality. Inaweza kuwa vigumu kuhesabu hasa jinsi wengi hupitia kukamilisha compiler inafanya. Kwa mfano, awamu tofauti za utendaji zinaweza kuchambua neno moja mara nyingi lakini tu kuchambua neno lingine mara moja.

Kupiga mkusanyiko kwenye mipango madogo ni mbinu inayotumiwa na watafiti wanaotaka kuzalisha wafuatayo sahihi. Kuonyesha usahihi wa seti ya mipango madogo mara nyingi inahitaji jitihada ndogo kuliko kuthibitisha usahihi wa programu kubwa, moja, sawa.

Tatu-hatua compiler muundo

Muundo wa usanifu

Bila kujali namba halisi ya awamu katika kubuni ya compiler, awamu zinaweza kupewa kwa moja ya hatua tatu. Hatua ni pamoja na mwisho wa mwisho, mwisho wa kati, na mwisho wa nyuma.

  • Mwisho wa mwisho unathibitisha syntax na semanti kulingana na lugha maalum ya chanzo. Kwa lugha za typed statically hufanya aina kuangalia kwa kukusanya habari aina. Ikiwa mpango wa pembejeo haujakamilika au una hitilafu ya aina, huzalisha makosa na maonyo, unaonyesha [ wasiwasi ] kwenye kificho cha chanzo. Vipengele vya mwisho wa mwisho ni pamoja na uchambuzi wa lexical, uchambuzi wa syntax, na uchambuzi wa semantic. Mwisho wa mwisho hubadilisha mpango wa pembejeo katika uwakilishi wa kati (IR) kwa usindikaji zaidi na mwisho wa kati. IR Hii ni kawaida uwakilishi wa ngazi ya chini ya programu kwa heshima na kanuni ya chanzo.
  • Mwisho wa kati unafanya uboreshaji kwenye IR ambayo ni huru ya usanifu wa CPU unaotengwa. Msimbo huu wa chanzo / uhuru wa kanuni za mashine ni nia ya kuwezesha optimizations generic kuwa pamoja kati ya matoleo ya compiler kusaidia lugha tofauti na wasindikaji lengo. Mifano ya uboreshaji wa mwisho katikati ni kuondolewa kwa uharibifu ( kufutwa kwa kificho kifo ) au kanuni isiyofikilika ( uchambuzi wa ufanisi ), ugunduzi na uenezi wa maadili ya mara kwa mara ( uenezi wa mara kwa mara ), uhamisho wa hesabu kwa mahali ambapo hutolewa mara kwa mara (kwa mfano, nje ya kitanzi) , au utaalamu wa hesabu kulingana na muktadha. Hatimaye huzalisha "optimized" IR ambayo hutumiwa na mwisho wa nyuma.
  • Mwisho wa nyuma unachukua IR bora kutoka mwisho wa kati. Inaweza kufanya uchambuzi zaidi, mabadiliko na optimizations ambazo ni maalum kwa usanifu wa CPU. Mwisho wa nyuma huzalisha msimbo wa mkutano wa kutegemea lengo, kufanya ugawaji wa kujiandikisha katika mchakato. Mwisho wa nyuma hufanya ratiba ya maelekezo , ambayo huwaagiza maelekezo ya kuweka vitengo vya utekelezaji sawa na kujaza kwa kujaza kuchelewa . Ijapokuwa taratibu nyingi za uboreshaji ni NP-ngumu , mbinu za heuristic zinaloundwa vizuri na kwa sasa zinatekelezwa katika washirika wa ubora wa uzalishaji. Kwa kawaida pato la mwisho wa nyuma ni msimbo wa mashine maalumu kwa mchakato fulani na mfumo wa uendeshaji.

Njia hii ya mbele / katikati / nyuma hufanya iwezekanavyo kuchanganya mwisho wa lugha kwa lugha tofauti na nyuma hukoma kwa CPU tofauti wakati unashiriki uboreshaji wa mwisho wa kati. [36] Mifano ya manufaa ya mbinu hii ni Ukusanyaji wa GNU Compiler , LLVM , [37] na kitanda cha Amsterdam Compiler , ambacho kina malengo mengi ya kusonga mbele , kupanuliwa kwa pamoja na mara nyingi nyuma.

Mwisho wa mwisho

Mchoro na mfano wa mchezaji kwa C. Kuanzia mfululizo wa wahusika " if(net>0.0)total+=net*(1.0+tax/100.0); ", Scanner hujumuisha mlolongo wa ishara , na anaweka kila mmoja wao, kwa mfano kama kitambulisho , neno lililohifadhiwa , nambari halisi , au operator . Mlolongo wa mwisho unabadilishwa na mtungaji katika mti wa syntax , ambayo hutendewa na awamu iliyobaki ya compiler. Scanner na msimamizi hushikilia sehemu za kawaida na zisizo na muktadha wa sarufi kwa C , kwa mtiririko huo.

Mwisho wa mwisho unachunguza nambari ya chanzo ili kujenga uwakilishi wa ndani wa programu, inayoitwa uwakilishi wa kati (IR). Pia inasimamia meza ya ishara , ramani ya muundo wa ramani kila alama katika msimbo wa chanzo habari zinazohusiana kama eneo, aina na wigo.

Wakati mstari wa mbele unaweza kuwa kazi moja au mpango, kama ilivyo kwenye saruji isiyo na scanner , hutumiwa kwa kawaida na kuchambuliwa kama awamu kadhaa, ambayo inaweza kutekeleza kwa usawa au wakati huo huo. Njia hii inapendekezwa kutokana na usawa wake na kutengana kwa wasiwasi . Kawaida leo, foreend imevunjwa katika awamu tatu: uchambuzi wa lexical (pia unajulikana kama kuunganisha), uchambuzi wa syntax (pia unajulikana kama kutafsiri), na uchambuzi wa semantic . Kutafuta na kutenganisha hujumuisha uchambuzi wa syntactic (neno syntax na syntax ya maneno, kwa mtiririko huo), na kwa hali rahisi modules hizi (lexer na parser) zinaweza kuzalishwa moja kwa moja kutoka kwa sarufi ya lugha, ingawa katika hali ngumu zaidi zinahitaji marekebisho ya mwongozo. Sarufi ya kisarufi na maneno ya maneno ni kawaida ya grammaria isiyo na mazingira , ambayo inafanya urahisi uchambuzi, na uelewa wa muktadha hufanyika katika awamu ya uchambuzi wa semantic. Awamu ya uchambuzi wa semantic kwa ujumla ni ngumu zaidi na imeandikwa kwa mkono, lakini inaweza kuwa moja kwa moja au kikamilifu automatisering kutumia grammar sifa . Awamu hizi wenyewe zinaweza kupunguzwa zaidi: kuunganisha kama skanning na kutathmini, na kupitisha kama kujenga saruji syntax mti (CST, mtiririko mti) na kisha kuifanya kuwa synttax mti abstract (AST, syntax mti). Katika baadhi ya matukio ya awamu ya ziada hutumiwa, hasa ujenzi wa mstari na utayarishaji, lakini haya ni ya kawaida.

Sehemu kuu ya mwisho wa mwisho ni pamoja na yafuatayo:

  • Undaji wa mstari unabadilika mlolongo wa tabia ya uingizaji kwenye fomu ya kisheria tayari kwa mtumiaji. Lugha ambazo husababisha maneno yao au kuruhusu nafasi za uhalifu ndani ya vitambulisho zinahitaji awamu hii. Juu-chini , kujirudia-asili , meza inayotokana parsers kutumika katika miaka ya 1960 kwa kawaida kusoma chanzo herufi moja baada ya na wala kuhitaji tofauti tokenizing awamu. Autocode ya Atlas , na Imp (na baadhi ya utekelezaji wa ALGOL na Coral 66 ) ni mifano ya lugha zilizopigwa ambazo washirika wataweza kuwa na awamu ya Upyaji wa Line .
  • Preprocessing inasaidia jumla badala na masharti wa kuweka pamoja. Kwa kawaida awamu ya kuimarisha hutokea kabla ya uchambuzi wa syntactic au semantic; kwa mfano katika kesi ya C, mtangulizi wa awali anafanya ishara za lexical badala ya aina za maandishi. Hata hivyo, lugha zingine kama vile Msaada wa Msaada hubadilishwa kulingana na aina za syntactic.
  • Uchunguzi wa Lexical (unaojulikana kama kuunganisha au tokenization ) huvunja maandishi ya nambari ya chanzo katika mlolongo wa vipande vidogo vinavyoitwa ishara za lexical . [38] Awamu hii inaweza kugawanywa katika hatua mbili: skanning , ambayo makundi maandishi ya pembejeo katika vipande syntactic aitwaye lexemes na kuwapa jamii; na kutathmini , ambayo inabadilisha ufuatiliaji kuwa thamani ya kusindika. Ishara ni jozi yenye jina la ishara na thamani ya toleo la hiari. [39] Makundi ya token ya kawaida yanaweza kujumuisha vitambulisho, maneno muhimu, watenganishaji, waendeshaji, vielelezo na maoni, ingawa seti ya vidokezo vya token inatofautiana katika lugha tofauti za programu . Mchapishaji wa lexeme ni lugha ya kawaida , hivyo automaton hali ya mwisho iliyojengwa kutoka kwa kujieleza mara kwa mara inaweza kutumika kutambua. Programu inayofanya uchambuzi wa lexical inaitwa analyzer lexical . Huenda hii haiwezi kuwa hatua tofauti - inaweza kuunganishwa na hatua ya kuzingatia katika kutenganisha bila kutazama , ambapo kesi inayofanyika imefanywa kwa kiwango cha tabia, sio kiwango cha ishara.
  • Uchunguzi wa Syntax (pia unajulikana kama kupiga kura ) unahusisha kupitisha mlolongo wa ishara ili kutambua muundo wa syntactic wa programu. Awamu hii kawaida hujenga mti wa mti , ambao hubadilisha mlolongo wa mstari wa alama na muundo wa mti umejengwa kwa mujibu wa sheria za sarufi rasmi ambayo hufafanua syntax ya lugha. Mara nyingi mti huu huchambuliwa, umeongezeka, na kubadilishwa na awamu ya baadaye katika compiler. [40]
  • Uchunguzi wa Semantic unaongeza habari za semantic kwenye mti wa sungura na hujenga meza ya ishara . Awamu hii inafanya ukaguzi wa semantic kama vile kuangalia aina (kuangalia kwa makosa ya aina), au kitu kinachofunga (kuhusisha marejeo ya kutofautiana na kazi na ufafanuzi wao), au kazi maalum (zinahitaji vigezo vyote vya ndani kuanzishwa kabla ya matumizi), kukataa mipango isiyo sahihi au kutoa onyo. Uchambuzi semantic kawaida inahitaji kamili ya kuchanganua mti, ina maana kuwa awamu hii mantiki ifuatavyo kuchanganua awamu, na kimantiki unatangulia code kizazi awamu, ingawa mara nyingi ni inawezekana kukunja awamu nyingi katika kupita moja juu posta katika utekelezaji compiler.

Mwisho wa mwisho

Mwisho wa kati unafanya uboreshaji juu ya uwakilishi wa kati ili kuboresha utendaji na ubora wa kifaa kilichozalishwa. [41] Mwisho wa kati una vifupisho vilivyotokana na usanifu wa CPU.

Sehemu kuu ya mwisho wa kati ni pamoja na yafuatayo:

  • Uchambuzi : Hii ni kukusanya taarifa ya programu kutoka kwa uwakilishi wa kati inayotokana na pembejeo; uchambuzi wa mtiririko wa data hutumiwa kujenga minyororo ya matumizi , pamoja na uchambuzi wa utegemezi , uchambuzi wa alias , uchambuzi wa pointer , uchambuzi wa kutoroka , nk. Uchambuzi sahihi ni msingi wa usanifu wowote wa kompyuta. Graph ya mtiririko wa kudhibiti kila kazi iliyoandaliwa na grafu ya wito wa programu na pia hujengwa wakati wa awamu ya uchambuzi.
  • Uboreshaji : uwakilishi wa lugha ya kati hubadilishwa kuwa fomu sawa na kwa kasi (au ndogo). Uboreshaji maarufu ni upanuzi wa ndani , uharibifu wa kanuni za kifo , uenezi wa mara kwa mara , mabadiliko ya kitanzi na hata ugawanishaji wa moja kwa moja .

Uchunguzi wa compiler ni sharti ya ufanisi wa kompyuta yoyote, na wao hufanya kazi pamoja. Kwa mfano, uchambuzi wa utegemezi ni muhimu kwa mabadiliko ya kitanzi .

Upeo wa uchambuzi wa compiler na uboreshaji hutofautiana sana, kutoka kwa ndogo kama kizuizi cha msingi kwa ngazi ya utaratibu / kazi, au hata juu ya mpango wote ( ufanisi wa kiutendaji ). Kwa wazi, [ ufafanuzi unahitajika ] compiler inaweza uwezekano wa kufanya kazi bora kwa kutumia maoni pana. Lakini mtazamo mpana huo sio bure: uchambuzi mkubwa wa upeo na uboreshaji ni wa gharama kubwa sana katika suala la muda wa kukusanya na nafasi ya kumbukumbu; hii ni kweli hasa kwa uchambuzi wa vipindi na uboreshaji.

Uchambuzi na uboreshaji wa kiutendaji ni kawaida kwa washirika wa kisasa wa kibiashara kutoka HP , IBM , SGI , Intel , Microsoft , na Sun Microsystems . GCC ya wazi imeshutumiwa kwa muda mrefu kwa kukosa upungufu wa nguvu za kiutendaji, lakini inabadilika kwa namna hii. Mwingine mkusanyiko wa chanzo wazi na miundombinu kamili ya uchambuzi na uboreshaji ni Open64 , ambayo hutumiwa na mashirika mengi kwa ajili ya utafiti na madhumuni ya biashara.

Kutokana na wakati wa ziada na nafasi zinazohitajika kwa uchambuzi wa compiler na uboreshaji, baadhi ya waunganishaji huwapiga kwa default. Watumiaji wanapaswa kutumia chaguo za kukusanya ili waeleze waziwazi compiler ambazo optimization inapaswa kuwezeshwa.

mwisho

Mwisho wa nyuma unawajibika kwa upangilio maalum wa usanifu wa CPU na kwa kizazi cha msimbo .

Sehemu kuu ya mwisho wa nyuma ni pamoja na yafuatayo:

  • Optimizations tegemezi ya mashine : optimizations ambayo inategemea maelezo ya usanifu CPU kuwa malengo ya compiler. [42] Mfano maarufu ni optimizations peephole , ambayo inandika tena short ya maelekezo assembler kwa maelekezo zaidi ufanisi.
  • Kizazi cha kizazi : lugha iliyobadilika ya lugha hutafsiriwa katika lugha ya pato, kwa kawaida lugha ya asili ya mashine ya mfumo. Hii inahusisha rasilimali na kuhifadhi maamuzi, kama vile kuamua ambayo vigezo na kifafa katika rejista na kumbukumbu na uteuzi na ratiba ya maelekezo sahihi mashine ya pamoja na kuhusishwa zao kushughulikia njia (tazama pia Sethi-Ullman algorithm ). Data ya uharibifu inaweza pia kuhitaji kuzalishwa ili kuwezesha kufuta .

Tengeneza usahihi

Kuandika usahihi ni tawi la uhandisi wa programu inayohusika na kujaribu kuonyesha kwamba compiler hutegemea kulingana na lugha yake. [43] [ chanzo kilichochapishwa mwenyewe? ] [ chanzo cha msingi ambacho si cha msingi kinahitajika ] Mbinu ni pamoja na kuendeleza compiler kwa kutumia mbinu rasmi na kutumia kupima kwa ukali (mara nyingi huitwa uhakiki wa compiler) kwenye kompyuta iliyopo.

Imeunganishwa dhidi ya lugha zilizofafanuliwa

Lugha za juu za programu za kawaida zinaonekana kwa aina ya kutafsiri katika akili: ama iliyoundwa kama lugha iliyopangwa au lugha iliyofafanuliwa . Hata hivyo, katika mazoezi hakuna jambo lolote kuhusu lugha ambayo inahitajika kuundwa au kutafsiriwa peke yake, ingawa inawezekana kubuni lugha ambazo hutegemea kutafsiri tena wakati wa kukimbia. Kwa kawaida jumuiya zinaonyesha utekelezaji maarufu wa lugha - kwa mfano, BASIC wakati mwingine huitwa lugha iliyofafanuliwa, na C imeunganishwa, licha ya kuwepo kwa washiriki wa BASIC na wafsiri wa C.

Ufafanuzi hauingii kikamilifu mkusanyiko. Inakuficha tu kutoka kwa mtumiaji na hufanya taratibu. Ijapokuwa mkalimani anaweza kutafsiriwa, mpango wa kutekelezwa moja kwa moja unahitajika mahali fulani chini ya stack (angalia lugha ya mashine ).

Zaidi ya hayo, washiriki wanaweza kuwa na wakalimani kwa sababu za uboreshaji. Kwa mfano, ambapo maneno yanaweza kutekelezwa wakati wa kuchanganya na matokeo yameingizwa katika mpango wa pato, basi inazuia kuwa inapangiliwa kila wakati programu inapoendesha, ambayo inaweza kuongeza kasi mpango wa mwisho. Mwenendo wa kisasa kuelekea mkusanyiko wa wakati na wakati na tafsiri ya bytecode mara nyingi huwafuru makundi ya jadi ya washiriki na wakalimani hata zaidi.

Maelezo maalum ya lugha hufafanua kwamba utekelezaji lazima uhusishe kituo cha usanidi; kwa mfano, Common Lisp . Hata hivyo, hakuna kitu kikuu katika ufafanuzi wa Common Lisp ambao huiacha kutoka kutafsiriwa. Lugha zingine zina vipengele ambazo ni rahisi sana kutekeleza kwa mkalimani, lakini fanya kuandika compiler vigumu zaidi; kwa mfano, APL , SNOBOL4 , na lugha nyingi za script zinawezesha mipango ya kujenga msimbo wa chanzo kiholela wakati wa kukimbia na shughuli za kamba mara kwa mara, na kisha kutekeleza msimbo huo kwa kuifanya kazi ya tathmini maalum. Ili kutekeleza vipengele hivi katika lugha iliyoandaliwa, programu lazima ziingizwe kwa maktaba ya wakati wa kukimbia ambayo yanajumuisha toleo la compiler yenyewe.

Aina

Uainishaji mmoja wa waunganisha ni kwa jukwaa ambayo kanuni zao zinazozalishwa hufanya. Hii inajulikana kama jukwaa la lengo.

Compiler ya asili au mwenyeji ni moja ambayo pato ni nia ya kukimbia moja kwa moja kwenye aina moja ya kompyuta na mfumo wa uendeshaji ambayo compiler yenyewe inaendelea. Pato la msalaba msalaba imeundwa kutembea kwenye jukwaa tofauti. Mara nyingi mkusanyiko wa msalaba unatumika wakati wa kuendeleza programu ya mifumo iliyoingia ambayo haikusudi kusaidia mazingira ya maendeleo ya programu.

Pato la compiler inayozalisha msimbo wa mashine halisi (VM) inaweza au hauwezi kutekelezwa kwenye jukwaa moja kama mtayarishaji aliyezalisha. Kwa sababu hii washirika wa kawaida hawapatikani kuwa wanaozaliwa au wanaovuka msalaba.

Lugha ya ngazi ya chini ambayo ni lengo la compiler inaweza yenyewe kuwa lugha ya juu ya programu ya programu . C, mara nyingi huonekana kama aina fulani ya mkusanyiko wa portable, pia inaweza kuwa lugha ya lengo la compiler. Mfano: Mbele , mtayarishaji wa awali wa C ++ alitumia C kama lugha inayolengwa. C C iliyoundwa na compiler vile kawaida si nia ya kusoma na kudumishwa na binadamu. Hivyo style ya indent na pretty C code ya kati ni muhimu. Vipengele vingine vya C vinaibadilisha kuwa lugha nzuri. Mfano: Msimbo wa C na maagizo #line yanaweza kuzalishwa ili kusaidia uharibifu wa chanzo cha asili.

Wakati aina ya kawaida ya kompyuta ya kompyuta ya kompyuta, kuna aina nyingine nyingi:

  • Makumbusho ya chanzo-chanzo ni aina ya compiler ambayo inachukua lugha ya kiwango cha juu kama pembejeo na matokeo ya lugha ya juu. Kwa mfano, kampuni ya kuunganisha moja kwa moja hutumia programu ya lugha ya kiwango cha juu kama pembejeo na kisha kubadilisha nambari na kuielezea kwa vifunguko vya kificho sawa (kwa mfano OpenMP ) au ujenzi wa lugha (kwa mfano taarifa za Fortran za DOALL ).
  • Wasanidi wa Bytecode ambao hukusanya lugha ya mkutano wa mashine ya kinadharia, kama vile utekelezaji wa Prolog
    • Prolog hii pia inajulikana kama Warren Abstract Machine (au WAM).
    • Washirika wa Bytecode wa Java , Python pia ni mifano ya jamii hii.
  • Muda wa wakati wa kuunganisha (JIT compiler) ni sehemu ya mwisho ya mlolongo wa makundi mbalimbali ambayo baadhi ya hatua za kukusanya zimeteuliwa ili kukimbia wakati. Mifano zinatekelezwa katika mifumo ya kawaida ya lugha ya Kati (CIL) ya Smalltalk , Java na Microsoft .NET .
    • Maombi ni ya kwanza yameandaliwa kwa kutumia compiler ya bytecode na mikononi mwa uwakilishi wa kati wa kujitegemea. Hii bytecode ni kisha kuundwa kwa kutumia JIT compiler kwa code ya asili mashine wakati tu utekelezaji wa mpango inahitajika. [44] [ chanzo cha msingi ambacho hakihitajika ]
  • vifaa vya kukusanya vifaa (pia vinajulikana kama zana za syntheses) ni wajumuisha ambao matokeo yao ni maelezo ya usanidi wa vifaa badala ya mlolongo wa maelekezo.
    • Pato la vifaa hivi vya kompyuta vilivyolengwa kwenye ngazi ya chini sana, kwa mfano , safu ya lango iliyopangwa (FPGA) au mzunguko maalum wa programu maalum (ASIC). [45] [ chanzo cha msingi ambacho hakikihitajika ] Wanajumuisha vile husema kuwa waunganishaji wa vifaa, kwa sababu kanuni ya chanzo wao hukusanya kwa ufanisi udhibiti wa mwisho wa vifaa na jinsi inavyofanya. Pato la mkusanyiko ni tu kuunganishwa kwa meza za transistors au za kutazama .
    • Mfano wa vifaa vya vifaa vya vifaa vya XST, Xilinx Synthesis Tool kutumika kwa ajili ya kusanidi FPGAs. [46] [ sio chanzo cha msingi kinachohitajika ] Vifaa vingine vinavyopatikana kutoka Altera, [47] [ chanzo cha msingi ambacho hazihitajika ] Sambamba, Synopsys na wauzaji wengine wa vifaa. [ citation inahitajika ]
  • Lugha ya Mkutano ni aina ya lugha ya kiwango cha chini na mpango unaojumuisha ni mkusanyiko , na mpango unaojulikana unaojulikana kama disassembler .
  • Programu inayobadilika kutoka lugha ya kiwango cha chini hadi ngazi ya juu ni decompiler . [ citation inahitajika ]
  • Programu inayobadilishana kati ya lugha za kiwango cha juu huitwa kawaida translator lugha, compiler source-to-source , kubadilisha lugha, au rewriter wa lugha. [ mwongozo unahitajika ] muda wa mwisho hutumiwa kwa tafsiri ambazo hazihusishi mabadiliko ya lugha. [ citation inahitajika ]
  • Mpango unaobadilisha kuwa muundo wa kificho wa kitu ambacho haujatumiwa kwenye mashine ya kukusanya inaitwa msafara wa msalaba na hutumiwa kawaida kuandaa msimbo wa programu zilizoingia. [ Onesha uthibitisho ] [ ufafanuzi zinahitajika ]
  • Programu ambayo huandika tena msimbo wa kitu ndani ya aina moja ya msimbo wa kitu wakati unatumia ufanisi na mabadiliko ni recompiler ya binary .

Wanajumuisha katika elimu

Ujenzi wa compiler na usanifu wa kompyuta hufundishwa katika vyuo vikuu na shule kama sehemu ya mtaala wa sayansi ya kompyuta . [48] [ chanzo cha msingi ambacho hazihitajika ] Kozi hizo huongeza zaidi na utekelezaji wa compiler kwa lugha ya programu ya elimu . Mfano ulioonyeshwa vizuri ni mtunzi wa PL / 0 wa Niklaus Wirth , ambao Wirth alitumia kufundisha ujenzi wa compiler katika miaka ya 1970. [ inahitajika ] Licha ya unyenyekevu wake, compiler ya PL / 0 ilianzisha dhana kadhaa za ushawishi kwenye shamba, ikiwa ni pamoja na matumizi ya:

  1. sawa na karatasi ya 1971 na Wirth, [ inahitajika ] maendeleo ya programu na kuboresha hatua kwa hatua; [ ufafanuzi unahitajika ] [ Gari ]
  2. mzunguko wa asili wa kawaida ; [ ufafanuzi unahitajika ] [ Gari ]
  3. fomu ya Backus-Naur iliyopanuliwa (EBNF) kutaja syntax ya lugha; [ ufafanuzi unahitajika ] [ Gari ]
  4. jenereta ya kifaa huzalisha P-code ya kuambukizwa; [ ufafanuzi unahitajika ] [ Gari ] na
  5. michoro ya kaburi katika maelezo rasmi ya tatizo la bootstrapping . [ ufafanuzi unahitajika ] [ Gari ]

Mikutano na mashirika

Lugha za kiwango cha juu zinapokua kukomaa kwa muda na husababisha haja ya kusimamishwa. Taasisi ya Taifa ya Viwango vya Taifa (ANSI) na Shirika la Kimataifa la Kudhibiti (ISO) kusimamia viwango vya lugha mbalimbali za programu kama FORTRAN, COBOL, C, C ++ na kadhalika.

Vyuo vikuu kwa kushirikiana na sekta na serikali hutoa utafiti na maendeleo kwa lugha za programu na vifaa vinavyohusiana na lugha: wasanidi programu, mazingira ya maendeleo ya pamoja, suti rasmi za kuthibitisha.

Mashirika ya kitaalamu yanawakilisha kutoka kwa utafiti, elimu, sekta, na serikali. Hizi ni pamoja na Taasisi ya Wahandisi wa Umeme na Umeme (IEEE) na Chama cha Mitambo ya Computing (ACM).


Mikutano kadhaa katika uwanja wa lugha za programu zinawasilisha maendeleo katika ujenzi wa compiler kama moja ya mada yao kuu.

ACM SIGPLAN inasaidia mkutano kadhaa, ikiwa ni pamoja na:

  • Mpangilio wa Lugha na Utekelezaji wa Lugha (PLDI)
  • Kanuni za Lugha za Programu (POPL)
  • Programming-Oriented Programming, Systems, Lugha, na Maombi (OOPSLA)
  • Mkutano wa Kimataifa wa Mpangilio wa Kazi (ICFP)

Mkutano wa Pamoja wa Ulaya juu ya Nadharia na Mazoezi ya Programu ( ETAPS ) inasaidia Mkutano wa Kimataifa wa Ujenzi wa Makumbusho, na majarida kutoka kwa sekta zote za kitaaluma na viwanda. [49]

Mkutano wa Asia juu ya Lugha na Programu za Programu (APLAS) imeandaliwa na Chama cha Asia cha Foundation of Software (AAFS).

Angalia pia

  • Tafsiri ya Kikemikali
  • Upungufu wa chini
  • Tengeneza na uende mzigo
  • Tengeneza shamba
  • Orodha ya washiriki
  • Orodha ya machapisho muhimu katika sayansi ya kompyuta § Compilers
  • Metacompilation

Vidokezo

  1. ^ PC Mag Staff (28 February 2017). "Encyclopedia: Definition of Compiler" . PCMag.com . Retrieved 28 February 2017 .
  2. ^ Sun, Chengnian; Le, Vu; Zhang, Qirun; Su, Zhendong (2016). "Toward Understanding Compiler Bugs in GCC and LLVM" . ACM .
  3. ^ lecture notes Compilers: Principles, Techniques, and Tools Jing-Shin Chang Department of Computer Science & Information Engineering National Chi-Nan University
  4. ^ Naur, P. et al. Report on ALGOL 60. Communications of the ACM 3 (May 1960), 299-314.
  5. ^ Syntactic Structures ISBN 3-11-017279-8
  6. ^ Science of Programming, Appendix 1, ISBN 1461259835
  7. ^ A Programming Language K. E. Iverson ISBN 0-471430-14-5
  8. ^ John Backus. "The history of FORTRAN I, II and III" (PDF). Softwarepreservation.org
  9. ^ Porter Adams, Vicki (5 October 1981). "Captain Grace M. Hopper: the Mother of COBOL". InfoWorld. 3 (20): 33. ISSN 0199-6649.
  10. ^ McCarthy, J.; Brayton, R.; Edwards, D.; Fox, P.; Hodes, L.; Luckham, D.; Maling, K.; Park, D.; Russell, S. (March 1960). "LISP I Programmers Manual" (PDF). Boston, Massachusetts: Artificial Intelligence Group, M.I.T. Computation Center and Research Laboratory.
  11. ^ Compilers Principles, Techniques, & Tools 2nd edition by Aho, Lam, Sethi, Ullman ISBN 0-321-48681-1
  12. ^ "Recursive Functions of Symbolic Expressions and Their Computation by Machine", Communications of the ACM, April 1960
  13. ^ Lisp 1.5 Programmers Manual, The MIT Press
  14. ^ "BCPL: A tool for compiler writing and system programming" M. Richards, University Mathematical Laboratory Cambridge, England 1969
  15. ^ BCPL: The Language and Its Compiler, M Richards, Cambridge University Press (first published 31 December 1981)
  16. ^ The BCPL Cintsys and Cintpos User Guide, M. Richards, 2017
  17. ^ Corabato/Vyssotsky "Introduction and Overview of the MULTICS System" FJCC 1965
  18. ^ Report II of the SHARE Advanced Language Development Committee, 25 June 1964
  19. ^ Multicians.org "The Choice of PL/I" article, Editor /tom Van Vleck
  20. ^ "PL/I As a Tool for System Programming", F.J. Corbato, Datamation May 6, 1969 issue
  21. ^ "The Multics PL/1 Compiler", R. A. Freiburghouse, GE, Fall Joint Computer Conference 1969
  22. ^ Datamation column, 1969
  23. ^ Dennis M. Ritchie, "The Development of the C Language", ACM Second History of Programming Languages Conference, April, 1993
  24. ^ S.C. Johnson, "a Portable C Compiler: Theory and Practice", 5th ACM POPL Symposium, January 1978
  25. ^ A. Snyder, A Portable Compiler for the Language C, MIT, 1974.
  26. ^ K. Nygarard, University of Oslo, Norway, "Basic Concepts in Object Oriented Programming", SIGPLAN Notices V21, 1986
  27. ^ B. Stroustrup: "What is Object-Oriented Programming?" Proceedings 14th ASU Conference, 1986.
  28. ^ Bjarne Stroustrup, "An Overview of the C++ Programming Language", Handbook of Object Technology (Editor: Saba Zamir, ISBN 0-8493-3135-8 )
  29. ^ Leverett, Cattell, Hobbs, Newcomer, Reiner, Schatz, Wulf: "An Overview of the Production Quality Compiler-Compiler Project", CMU-CS-89-105, 1979
  30. ^ W. Wulf, K. Nori, "Delayed binding in PQCC generated compilers", CMU Research Showcase Report, CMU-CS-82-138, 1982
  31. ^ Joseph M. Newcomer, David Alex Lamb, Bruce W. Leverett, Michael Tighe, William A. Wulf - Carnegie-Mellon University and David Levine, Andrew H. Reinerit - Intermetrics: "TCOL Ada: Revised Report on An Intermediate Representation for the DOD Standard Programming Language", 1979
  32. ^ William A. Whitaker, "Ada - the project: the DoD High Order Working Group", ACM SIGPLAN Notices (Volume 28, No. 3, March 1991)
  33. ^ CECOM Center for Software Engineering Advanced Software Technology, "Final Report - Evaluation of the ACEC Benchmark Suite for Real-Time Applications", AD-A231 968, 1990
  34. ^ P.Biggar, E. de Vries, D. Gregg, "A Practical Solution for Scripting Language Compilers", submission to Science of Computer Programming, 2009
  35. ^ M.Hall, D. Padua, K. Pingali, "Compiler Research: The Next 50 Years", ACM Communications 2009 Vol 54 #2
  36. ^ Cooper and Torczon 2012, p. 8
  37. ^ Lattner, Chris (2017). "LLVM". In Brown, Amy & Wilson, Greg. The Architecture of Open Source Applications . Retrieved 28 February 2017 .
  38. ^ Aho, Lam, Sethi, Ullman 2007, p. 5-6, 109-189
  39. ^ Aho, Lam, Sethi, Ullman 2007, p. 111
  40. ^ Aho, Lam, Sethi, Ullman 2007, p. 8, 191-300
  41. ^ Aho, Lam, Sethi, Ullman 2007, p. 10, 583-703
  42. ^ Cooper and Toczon (2012), p. 540
  43. ^ Chlipala, Adam. "Syntactic Proofs of Compositional Compiler Correctness" (manuscript draft, publication date unknown) . Retrieved 28 February 2017 – via Adam.Chlipala.net. [ self-published source? ] [ non-primary source needed ]
  44. ^ Aycock, John (2003). "A Brief History of Just-in-Time" . ACM Comput. Surv . 35 (2; June): 93–113. doi : 10.1145/857076.857077 . Retrieved 28 February 2017 . (Subscription required ( help )) . [ non-primary source needed ]
  45. ^ Swartz, Jordan S.; Betz, Vaugh; Rose, Jonathan. "A Fast Routability-Driven Router for FPGAs" (manuscript draft, publication date unknown) . Toronto, CA: Univ. of Toronto, Dept. of Electrical and Computer Engineering . Retrieved 28 February 2017 . [ non-primary source needed ]
  46. ^ Xilinx Staff (2009). "XST Synthesis Overview" . Xilinx, Inc . Retrieved 28 February 2017 . [ non-primary source needed ]
  47. ^ Altera Staff (2017). "Spectra-Q™ Engine" . Altera.com . Retrieved 28 February 2017 . [ non-primary source needed ]
  48. ^ Chakraborty, P.; Saxena, P. C.; Katti, C. P.; Pahwa, G.; Taneja, S. (2011). "A New Practicum in Compiler Construction" . Computer Applications in Engineering Education . 22 (3; 25 July) . Retrieved 28 February 2017 . (Subscription required ( help )) . [ non-primary source needed ]
  49. ^ ETAPS Staff (28 February 2017). "Conferences" . ETAPS.org . Retrieved 28 February 2017 .

Marejeleo

Viungo vya nje