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

Lugha ya programu

Nakala ya chanzo cha programu rahisi ya kompyuta iliyoandikwa katika lugha ya programu ya programu ya C , ambayo itazalisha ujumbe wa " Hello, dunia! " Wakati wa kuandaliwa na kukimbia.

Lugha ya programu ni lugha rasmi inayoelezea seti ya maagizo ambayo yanaweza kutumika kuzalisha aina mbalimbali za pato . Lugha za programu zinajumuisha maelekezo kwa kompyuta . Lugha za programu zinaweza kutumiwa kuunda mipango inayoweka taratibu maalum.

Mashine ya kwanza inayojulikana ambayo yaliyotangulia uvumbuzi wa kompyuta ya digital ilikuwa mchezaji wa flute moja kwa moja aliyeelezwa katika karne ya 9 na ndugu Musa huko Baghdad , wakati wa Golden Age ya Kiislam . [1] Kutoka mapema miaka ya 1800, "mipango" ilitumika kuelekeza tabia ya mashine kama vile Jacquard looms na pianos mchezaji . [2] Maelfu ya lugha tofauti za programu zimeundwa, hasa katika uwanja wa kompyuta, na bado mengi zaidi yanafanywa kila mwaka. Lugha nyingi za programu zinahitaji hesabu ili kuonyeshwa kwa fomu ya lazima (yaani, kama mlolongo wa shughuli za kufanya) wakati lugha zingine zinatumia aina nyingine za vipimo kama vile fomu ya kupigia (yaani matokeo yaliyotakiwa yameelezwa, si jinsi ya kufikia ).

Maelezo ya lugha ya programu ya kawaida hugawanywa katika vipengele viwili vya fomu ya syntax na semantics (maana). Lugha zingine zinaelezea na hati maalum (kwa mfano, lugha ya programu ya C imeelezewa na kiwango cha ISO ) wakati lugha nyingine (kama vile Perl ) zina utekelezaji mkubwa unaotambuliwa kama kumbukumbu . Lugha zingine zina zote mbili, pamoja na lugha ya msingi iliyoelezwa na kiwango na upanuzi zilizochukuliwa kutoka kwa utekelezaji mkubwa kuwa wa kawaida.

Yaliyomo

Ufafanuzi

Lugha ya programu ni notation kwa programu za kuandika, ambazo ni maelezo ya hesabu au algorithm . [3] Baadhi, lakini sio wote, waandishi huzuia neno "lugha ya programu" kwa lugha hizo ambazo zinaweza kuelezea taratibu zote zinazowezekana. [3] [4] Makala mara nyingi huchukuliwa kuwa muhimu kwa kile kinachofanya lugha ya programu ni pamoja na:

Kazi na lengo
Lugha ya programu ya kompyuta ni lugha inayotumiwa kuandika mipangilio ya kompyuta , ambayo inahusisha kompyuta inayofanya aina fulani ya hesabu [5] au algorithm na uwezekano wa kudhibiti vifaa vya nje kama vile waandishi , diski , robots , [6] na kadhalika. Kwa mfano, programu za PostScript mara nyingi huundwa na mpango mwingine wa kudhibiti printer au kuonyesha. Zaidi kwa ujumla, lugha ya programu inaweza kuelezea hesabu kwenye baadhi ya mashine, iwezekanavyo isiyo ya kawaida. Inakubaliwa kwa ujumla kuwa maelezo kamili ya lugha ya programu ni pamoja na ufafanuzi, uwezekano wa kutumiwa, wa mashine au processor kwa lugha hiyo. [7] Katika hali nyingi za vitendo, lugha ya programu inahusisha kompyuta; Kwa hiyo, lugha za programu huelezwa na kujifunza kwa njia hii. [8] Lugha za programu zinatofautiana na lugha za asili kwa kuwa lugha za asili zinatumiwa tu kwa ajili ya mahusiano kati ya watu, wakati lugha za programu zinawawezesha wanadamu kuwasiliana na maelekezo kwa mashine.
Abstractions
Lugha za programu huwa na vikwazo vya kufafanua na kudhibiti miundo ya data au kudhibiti mtiririko wa utekelezaji . Muhimu wa vitendo kwamba lugha ya programu inasaidia usawa wa kutosha unaonyeshwa kwa kanuni ya kufuata ; [9] kanuni hii wakati mwingine hutengenezwa kama mapendekezo kwa programu ya mpangilio ili kutumia matumizi sahihi ya vitu hivyo. [10]
Nguvu ya kueleza
Nadharia ya kuhesabu inatafsiri lugha kwa maandishi wanayoweza kuelezea. Lugha zote za Turing zinaweza kutekeleza seti sawa ya algorithms . ANSI / ISO SQL-92 na Charity ni mifano ya lugha ambazo si Turing kamili, lakini mara nyingi huitwa lugha za programu. [11] [12]

Lugha za kurejesha kama XML , HTML , au troff , ambayo hufafanua data zilizopangwa , si kawaida huchukuliwa lugha za programu. [13] [14] [15] Lugha za programu zinaweza, hata hivyo, kushiriki syntax na lugha za markup kama semantics ya computational inaelezwa. XSLT , kwa mfano, ni lugha ya Turing kamili ya XML. [16] [17] [18] Zaidi ya hayo, LaTeX , ambayo hutumika kwa nyaraka za muundo, pia ina sehemu ndogo ya Turing. [19] [20]

Wakati mwingine lugha ya kompyuta wakati mwingine hutumiwa kwa usawa na lugha ya programu. [21] Hata hivyo, matumizi ya maneno mawili hutofautiana kati ya waandishi, ikiwa ni pamoja na upeo halisi wa kila mmoja. Matumizi moja hueleza lugha za programu kama subset ya lugha za kompyuta. [22] Katika mstari huu, lugha zilizotumiwa katika kompyuta zinazo na lengo tofauti kuliko kueleza mipango ya kompyuta ni lugha za kompyuta zilizochaguliwa kwa ujumla. Kwa mfano, lugha za uhalisi wakati mwingine zinajulikana kama lugha za kompyuta ili kusisitiza kwamba hazikusudiwa kutumiwa kwa programu. [23]

Nyingine matumizi ya lugha ya programu kama ujenzi wa nadharia kwa ajili ya programu ya abstract mashine, na lugha ya kompyuta kama subset yake ambayo inaendesha kwenye kompyuta za kimwili, ambayo ina rasilimali za vifaa vya mwisho. [24] John C. Reynolds anasisitiza kwamba lugha rasmi ya vipimo ni lugha kama programu nyingi kama vile lugha zinazopangwa kutekelezwa. Anasema pia kuwa muundo wa maandishi na picha za pembejeo ambazo zinaathiri tabia ya kompyuta ni programu za programu, licha ya ukweli wao sio kawaida ya kukamilisha Turing, na inasema kwamba ujinga wa mawazo ya lugha ya programu ni sababu ya makosa mengi katika mafomu ya pembejeo. [25]

Historia

Maendeleo ya mapema

Kompyuta za mwanzo mara nyingi zilipangwa bila msaada wa lugha ya programu, kwa kuandika mipango katika lugha ya mashine kabisa. Programu, kwa fomu ya decimal au ya binary, zilifunuliwa kutoka kwa kadi zilizopigwa au mkanda wa magnetic au kuingizwa kwenye vipindi kwenye jopo la mbele la kompyuta. Lugha za mashine kabisa ziliitwa baadaye lugha za kwanza za kizazi (1GL).

Hatua inayofuata ilikuwa maendeleo ya lugha inayoitwa lugha ya pili ya kizazi (2GL) au lugha za kanisa , ambazo zilikuwa zimefungwa karibu na usanifu wa maagizo ya kompyuta maalum. Hizi ziliwahi kufanya programu iweze kusoma zaidi na kuondokana na programu hiyo ya mahesabu ya anwani yenye kupendeza na yenye makosa.

Lugha za kwanza za programu za juu , au lugha za kizazi cha tatu za kizazi (3GL), ziliandikwa katika miaka ya 1950. Lugha ya mapema ya kiwango cha juu ya programu iliyoundwa kwa ajili ya kompyuta ilikuwa Plankalkül , iliyoendelezwa kwa Z3 ya Ujerumani na Konrad Zuse kati ya 1943 na 1945. Hata hivyo, haikutekelezwa hadi 1998 na 2000. [26]

Msimbo mfupi wa John Mauchly , uliopendekezwa mwaka wa 1949, ulikuwa mojawapo ya lugha za kwanza za kiwango cha juu ambazo zimeandaliwa kwa kompyuta ya kompyuta . [27] Tofauti na kanuni za mashine , kauli za Msimbo wa Kifupi ziliwakilisha maneno ya hisabati katika fomu inayoeleweka. Hata hivyo, mpango huo ulitakiwa kutafsiriwa kwenye msimbo wa mashine kila wakati ulipoendesha, na kufanya mchakato uwe mdogo sana kuliko kuendesha kanuni sawa ya mashine .

Katika Chuo Kikuu cha Manchester , Alick Glennie alianzisha Autocode mapema miaka ya 1950. Lugha ya programu , ilitumia kompiler ili kubadilisha lugha moja kwa moja kwenye msimbo wa mashine. Kanuni ya kwanza na compiler ilitengenezwa mwaka 1952 kwa Mark 1 kompyuta katika Chuo Kikuu cha Manchester na anahesabiwa kuwa wa kwanza imeandaliwa kiwango cha juu cha programu lugha. [28] [29]

Autocode ya pili ilitengenezwa kwa Mark 1 na RA Brooker mwaka 1954 na aliitwa "Mark 1 Autocode". Brooker pia alianzisha autocode kwa Mercury Mercury katika miaka ya 1950 kwa kushirikiana na Chuo Kikuu cha Manchester. Toleo la EDSAC 2 lilibadilishwa na DF Hartley wa Maabara ya Chuo Kikuu cha Cambridge Mathematical mwaka wa 1961. Inajulikana kama EDSAC 2 Autocode, ilikuwa ni maendeleo ya moja kwa moja kutoka kwa Mercury Autocode yaliyotokana na mazingira ya ndani na ilitambuliwa kwa ufanisi wa kanuni za kitu na lugha ya chanzo uchunguzi ambao ulikuwa unaendelea kwa muda. Thread ya kisasa lakini tofauti ya maendeleo, Autocode ya Atlas ilitengenezwa kwa ajili ya mashine ya Chuo Kikuu cha Manchester Atlas 1 .

Mnamo 1954, FORTRAN ilipatikana kwa IBM na John Backus . Ilikuwa mara ya kwanza sana kutumika kwa kiwango kikubwa cha lugha ya programu ya kusudi la kuwa na utekelezaji wa kazi, kinyume na kubuni tu kwenye karatasi. [30] [31] Bado ni lugha maarufu kwa kompyuta ya juu ya utendaji [32] na hutumiwa kwa programu ambazo zinalinganisha na zimeweka juu ya wajumbe wa juu zaidi wa dunia. [33]

Lugha nyingine ya mapema ya programu ilipangwa na Grace Hopper huko Marekani, inayoitwa FLOW-MATIC . Ilianzishwa kwa UNIVAC I huko Remington Rand wakati wa 1955 hadi 1959. Hopper iligundua kwamba wateja wa usindikaji wa data za biashara hawakuwa na wasiwasi na hesabu ya hesabu, na mwanzoni mwa 1955, yeye na timu yake waliandika vipimo vya lugha ya Kiingereza na kutekelezwa mfano. [34] Mchoro wa MATU-MATIC ulipatikana hadharani mapema mwaka wa 1958 na ulikuwa ukamilifu kabisa mwaka wa 1959. [35] Flow-Matic ilikuwa na ushawishi mkubwa katika kubuni ya COBOL , kwa kuwa tu na kwa wazazi wake wa moja kwa moja AIMACO walikuwa kwa matumizi halisi Muda. [36]

Refinement

Matumizi ya ongezeko la lugha za juu ilianzisha mahitaji kwa lugha za programu za kiwango cha chini au lugha za programu za programu . Lugha hizi, kwa viwango tofauti, hutoa vifaa kati ya lugha za mkutano na lugha za juu na zinaweza kutumiwa kutekeleza kazi ambazo zinahitaji upatikanaji wa vifaa vya vifaa vya moja kwa moja lakini bado hutoa miundo ya kudhibiti kiwango cha juu na ukaguzi wa makosa.

Kipindi cha miaka ya 1960 hadi mwishoni mwa miaka ya 1970 kilileta uendelezaji wa dhana kuu za lugha sasa zinazotumiwa:

  • APL ilianzisha programu za safu na programu iliyoathirika ya utendaji . [37]
  • ALGOL iliyosafishwa mipangilio ya utaratibu wa utaratibu na nidhamu ya vipimo vya lugha ; "Ripoti iliyorekebishwa kwenye lugha ya algorithmic ALGOL 60 " ilikuwa mfano wa jinsi maelezo ya baadaye ya lugha yalivyoandikwa.
  • Lisp , kutekelezwa mwaka wa 1958, ilikuwa ni lugha ya kwanza ya kazi ya programu ya kazi
  • Katika miaka ya 1960, Simula lilikuwa lugha ya kwanza iliyopangwa kuunga mkono mipangilio ya vitu ; katikati ya miaka ya 1970, Smalltalk ilifuatiwa na lugha ya kwanza "ya kimsingi" inayolengwa na kitu.
  • C ilianzishwa kati ya 1969 na 1973 kama lugha ya programu ya programu ya mfumo wa uendeshaji wa Unix na inabakia kuwa maarufu. [38]
  • Prolog , iliyoundwa mwaka wa 1972, ilikuwa lugha ya kwanza ya programu ya mantiki .
  • Mwaka 1978, ML kujengwa polymorphic Aina mfumo juu ya Lisp , pioneering tuli typed kazi ya programu lugha.

Kila lugha hizi zilizalisha watoto, na lugha nyingi za kisasa za programu zinahesabu angalau mmoja wao katika wazazi wao.

Miaka ya 1960 na miaka ya 1970 pia kuona mjadala mkubwa juu ya uhalali wa programu muundo , na kama lugha ya programu lazima iliyoundwa kwa msaada wa hiyo. [39] Edsger Dijkstra , katika barua maarufu 1968 iliyochapishwa katika Mawasiliano ya ACM , alisema kuwa taarifa za GOTO zinapaswa kuondokana na lugha zote za "ngazi ya juu" za programu. [40]

Uimarishaji na ukuaji

Uchaguzi wa vitabu vya vitabu vinavyofundisha programu, katika lugha zote zinazojulikana na zisizo wazi. Haya ni wachache tu ya maelfu ya lugha na vipindi vya programu ambazo zimeundwa katika historia.

Miaka ya 1980 ilikuwa miaka ya kuimarisha jamaa. Programu ya C + + iliyohusishwa na programu na mipangilio ya mifumo. Serikali ya Umoja wa Mataifa imeorodheshwa Ada , lugha ya programu ya programu inayotokana na Pascal na inayotumiwa kutumiwa na makandarasi wa ulinzi. Japani na mahali pengine, kiasi kikubwa kilikuwa kinatumia uchunguzi wa kinachojulikana kama "kizazi cha tano" ambacho kilijumuisha ujenzi wa mantiki. [41] Jumuiya ya lugha ya kazi ilihamia kusimamia ML na Lisp. Badala ya kuunda dhana mpya, harakati zote hizi zilifafanua juu ya mawazo yaliyotengenezwa katika miongo kadhaa iliyopita.

Mwelekeo mmoja muhimu katika kubuni lugha kwa ajili ya programu za mifumo mikubwa wakati wa miaka ya 1980 ilikuwa kuzingatia kuongezeka kwa matumizi ya modules au vitengo vingi vya shirika vya kanuni. Modula-2 , Ada, na ML mifumo ya moduli inayojulikana katika miaka ya 1980, ambazo mara nyingi zilichangiwa kwa ujenzi wa programu za generic . [42]

Ukuaji wa haraka wa mtandao katikati ya miaka ya 1990 uliunda fursa za lugha mpya. Perl , awali Chuo cha Unix scripting kwanza iliyotolewa mwaka 1987, ilikuwa kawaida katika tovuti ya nguvu. Java ilitumiwa kwa programu ya upande wa seva, na bytecode mashine za kawaida zikawa maarufu tena katika mazingira ya biashara na ahadi zao za " Andika mara moja, kukimbia popote " ( UCSD Pascal alikuwa maarufu kwa muda katika miaka ya 1980). Maendeleo haya hayakuwa riwaya ya kimsingi, bali walikuwa na marekebisho ya lugha nyingi zilizopo na vielelezo (ingawa syntax yao ilikuwa mara kwa mara kulingana na familia C ya lugha za programu).

Mageuzi ya lugha ya programu inaendelea, katika sekta zote na utafiti. Maelekezo ya sasa yanajumuisha uhakikisho wa usalama na uaminifu, aina mpya za usahihi ( mixins , wajumbe , vipengele ), na ushirikiano wa database kama vile Microsoft LINQ .

Lugha za kizazi cha programu ya nne (4GL) ni lugha za programu za kompyuta ambazo zinalenga kutoa kiwango cha juu cha uingizaji wa maelezo ya vifaa vya ndani ya kompyuta kuliko 3GLs. Lugha ya kiini cha programu za kizazi (5GL) ni lugha za programu kulingana na kutatua matatizo kwa kutumia vikwazo vinavyopewa programu, badala ya kutumia algorithm iliyoandikwa na programu.

Mambo

Lugha zote za programu zina vitalu vya ujenzi wa mapema kwa maelezo ya data na taratibu au mabadiliko yaliyotumiwa kwao (kama kuongeza kwa namba mbili au uteuzi wa kipengee kutoka kwenye mkusanyiko). Vipaji hivi hufafanuliwa na sheria za kisasa na za semantiki zinazoelezea muundo na maana yake kwa mtiririko huo.

Syntax

Mti wa kanuni ya Python na kuingia kwenye soko
Kuonyesha kwa Syntax mara nyingi hutumiwa kusaidia wasimamizi katika kutambua vipengele vya msimbo wa chanzo. Lugha hapo juu ni Python .

Fomu ya uso wa lugha ya programu inajulikana kama syntax yake. Lugha nyingi za programu ni rekodi halisi; wanatumia mfululizo wa maandishi ikiwa ni pamoja na maneno, namba, na punctuation, kama vile lugha za asili zilizoandikwa. Kwa upande mwingine, kuna baadhi ya lugha ya programu ambayo ni zaidi graphical katika asili, kwa kutumia mahusiano Visual kati ya alama bayana mpango.

Kipindi cha lugha kinaelezea mchanganyiko unaowezekana wa ishara ambazo huunda programu ya kupatanisha. Nini maana ya mchanganyiko wa alama ni kushughulikiwa na semantics (ama rasmi au ngumu-coded katika utekelezaji wa kumbukumbu ). Kwa kuwa lugha nyingi ni textual, makala hii inazungumzia syntax textual.

Syntax ya lugha ya programu ya kawaida inaelezewa kwa kutumia mchanganyiko wa maneno ya kawaida (kwa muundo wa lexical ) na fomu ya Backus-Naur (kwa muundo wa grammatical ). Chini ni sarufi rahisi, kulingana na Lisp :

kujieleza :: = atomi | orodha
atomi :: = namba | ishara
nambari :: = [+ -]? ['0' - '9'] +
ishara :: = ['' '' '' '' '' '' '']. *
orodha :: = '(' kujieleza '') '

Sarufi hii inaeleza yafuatayo:

  • maelezo ni ama atomu au orodha ;
  • atomu ni namba au ishara ;
  • namba ni mlolongo usiovunjika wa tarakimu moja au zaidi ya tarakimu, hiari iliyowekwa kabla ya ishara au zaidi;
  • ishara ni barua iliyofuatiwa na sifuri au zaidi ya wahusika yoyote (bila uhuru); na
  • orodha ni kuendana jozi ya mabano, pamoja na maneno zero au zaidi ndani yake.

Zifuatazo ni mifano ya utaratibu wa ishara iliyoundwa vizuri katika sarufi hii: 12345 , () na (ab c232 (1)) .

Sio mipango yote sahihi ya kimapangilio iliyo sawa. Mipango mingi yenye usawa wa kisasa bado hutengenezwa vibaya, kwa sheria za lugha; na inaweza (kwa kutegemea ufafanuzi wa lugha na uwazi wa utekelezaji) husababisha kosa kwenye kutafsiri au kutekeleza. Katika hali nyingine, mipango hiyo inaweza kuonyesha tabia isiyojulikana . Hata wakati programu inaelezewa vizuri ndani ya lugha, inaweza kuwa na maana ambayo haikusudiwa na mtu aliyeandika.

Kutumia lugha ya asili kama mfano, huenda haitawezekana kugawa maana ya hukumu sahihi ya grammatically au hukumu inaweza kuwa ya uongo:

  • "Maoni yasiyo na rangi ya kijani yanalala kwa bidii ." ni grammatically vizuri sumu lakini haina ujumla kukubalika maana.
  • "John ni mwanafunzi wa ndoa." ni grammatically vizuri sumu lakini inaonyesha maana ambayo haiwezi kuwa kweli.

Kipande cha lugha cha pili cha C kina sahihi, lakini hufanya shughuli ambazo hazijatambulishwa (kazi *p >> 4 haina maana kwa thamani kuwa na aina tata na p->im haijafafanuliwa kwa sababu thamani ya p ni null pointer ):

tata * p = NULL ;
abs_p = sqrt tata ( * p >> 4 + p -> im );

Ikiwa utangazaji wa aina kwenye mstari wa kwanza uliondolewa, programu hiyo ingeweza kusababisha kosa kwenye usanidi, kwa vile "variable" ya kutofautiana haiwezi kuelezwa. Lakini programu bado ingekuwa sahihi kwa sababu utangazaji wa aina hutoa habari tu ya semantic.

Sarufi inahitajika kutaja lugha ya programu inaweza kuchaguliwa na nafasi yake katika uongozi wa Chomsky . Kipindi cha lugha nyingi za programu kinaweza kutajwa kwa kutumia sarufi ya Aina ya 2, yaani, ni grammasi isiyo na mazingira . [43] Lugha zingine, ikiwa ni pamoja na Perl na Lisp, zina vyenye ujenzi ambao huruhusu utekelezaji wakati wa awamu ya kupigana. Lugha zinazojenga ambazo huruhusu mpangilio kubadilisha tabia ya msimamizi hufanya tatizo la syntax tatizo lisilowezekana , na kwa ujumla hufafanua tofauti kati ya kupitisha na kutekeleza. [44] Tofauti na mfumo wa machungwa wa Lisp na BEG ya BEGIN inazuia, ambayo inaweza kuwa na mchanganyiko wa jumla, C macros ni nafasi za kamba tu na hazihitaji utekelezaji wa kanuni. [45]

Semantics

Neno la semanti linamaanisha maana ya lugha, kinyume na fomu yao ( syntax ).

Semantics imara

Semanti ya tuli hufafanua vikwazo kwenye muundo wa maandiko halali ambayo ni vigumu au haiwezekani kuelezea kwa fomu za kawaida za syntactic. [3] Kwa lugha zilizotengenezwa, semanti ya static inajumuisha sheria hizo za semantic zinazoweza kuchunguza wakati wa kukusanya. Mifano ni pamoja na kuchunguza kuwa kila kitambulisho kinatangazwa kabla ya kutumiwa (kwa lugha ambazo zinahitaji matangazo kama hayo) au kwamba maandiko kwenye mikono ya kauli ya kesi ni tofauti. [46] Wengi vikwazo muhimu ya aina hii, kama kuhakikisha kuwa vitambulisho vya zinazotumika katika mazingira sahihi (mfano si kuongeza integer kwa jina kazi), au kwamba subroutine wito na idadi sahihi na aina ya hoja, inaweza kutekelezwa na kufafanua wao kama sheria katika mantiki inayoitwa mfumo wa aina . Aina nyingine za uchambuzi wa tuli kama uchambuzi wa mtiririko wa data pia inaweza kuwa sehemu ya semanti ya tuli. Lugha za programu mpya zaidi kama Java na C # zina na uchambuzi wa maagizo maalum , fomu ya uchambuzi wa mtiririko wa data, kama sehemu ya semanti zao za tuli.

Semantics ya Dynamic

Data mara moja imedhamiriwa, mashine inapaswa kuagizwa kufanya shughuli kwenye data. Kwa mfano, semantics inaweza kufafanua mkakati ambao maneno yanatathminiwa kwa maadili, au namna ambayo miundo ya udhibiti inafanya maneno kwa hali. Semantics yenye nguvu (pia inajulikana kama semantics ya utekelezaji ) ya lugha inafafanua ni jinsi gani na wakati ujenzi wa lugha mbalimbali unapaswa kuzalisha tabia ya programu. Kuna njia nyingi za kufafanua semanti ya utekelezaji. Lugha ya kawaida hutumiwa kutaja semanti ya utekelezaji wa lugha ambazo hutumika kwa kawaida. Kiasi kikubwa cha utafiti wa kitaaluma kiliingia katika semantics rasmi ya lugha za programu , ambayo inaruhusu semantics ya utekelezaji ilielezewa kwa njia rasmi. Matokeo kutoka kwenye uwanja huu wa utafiti yameona programu ndogo ya kubuni programu ya programu na utekelezaji nje ya wasomi.

Weka mfumo wa

Mfumo wa aina unafafanua jinsi lugha ya programu inavyogundua maadili na maneno kwa aina , jinsi gani inaweza kuendesha aina hizo na jinsi wanavyoingiliana. Lengo la mfumo wa aina ni kuthibitisha na kwa kawaida kutekeleza kiwango fulani cha usahihi katika mipango iliyoandikwa katika lugha hiyo kwa kuchunguza shughuli zisizo sahihi. Mpangilio wowote wa aina unaosababishwa huhusisha biashara: wakati unakataa mipango mingi isiyo sahihi, inaweza pia kuzuia mipango sahihi, ingawa ni ya kawaida. Ili bypass upande wa chini hii, idadi ya lugha na mianya ya aina, kwa kawaida unchecked casts kwamba inaweza kutumika na programu kwa uwazi kuruhusu operesheni kawaida hairuhusiwi kati ya aina tofauti. Katika lugha nyingi za typed, mfumo wa aina hutumiwa tu kupiga mipango ya kuangalia , lakini lugha kadhaa, mara nyingi za kazi, aina za aina , kupunguza programu ya kuandika kwa haja ya kuandika maelezo ya aina. Design rasmi na utafiti wa mifumo ya aina inajulikana kama nadharia ya aina .

Inafanana na lugha zisizopigwa lugha

Lugha imewekwa kama maelezo ya kila operesheni hufafanua aina ya data ambayo operesheni inatumika, pamoja na maana ambayo haifai kwa aina nyingine. [47] Kwa mfano, data iliyotumiwa na "this text between the quotes" ni kamba , na katika lugha nyingi za programu zinazogawanya namba kwa kamba haina maana na itakataliwa na washirika. Operesheni ya batili inaweza kuonekana wakati programu imeandaliwa ("static" aina ya kuangalia) na itakataliwa na compiler yenye ujumbe wa kosa la kukusanya, au inaweza kugunduliwa wakati programu inaendeshwa ("nguvu" ya ukaguzi wa aina), na kusababisha katika ubaguzi wa wakati wa kukimbia. Lugha nyingi zinawezesha kazi inayoitwa msimamizi wa ubaguzi ili kuandikwa ili kushughulikia ubaguzi huu na, kwa mfano, daima kurudi "-1" kama matokeo.

Kisa maalum cha lugha zilizopangwa ni lugha moja ya aina . Hizi ni mara nyingi lugha za script au markup, kama vile REXX au SGML , na huwa na masharti ya kawaida ya kawaida ya data ambayo hutumiwa kwa data zote za mfano na za namba.

Kinyume chake, lugha isiyojumuishwa , kama lugha nyingi za kanisa , inaruhusu operesheni yoyote inayofanyika kwenye data yoyote, ambayo kwa ujumla huonekana kuwa ni mfululizo wa vipande vya urefu mrefu. [47] Lugha za kiwango cha juu ambazo hazijumuishwa ni pamoja na BCPL , Tcl , na aina fulani za Forth .

Kwa mazoezi, wakati lugha chache zinazingatiwa kutoka kwa mtazamo wa aina ya nadharia (kuthibitisha au kukataa shughuli zote ), lugha nyingi za kisasa hutoa shahada ya kuandika. [47] Lugha nyingi za uzalishaji hutoa njia za kupitisha au kuzibadilisha mfumo wa aina, usalama wa aina ya biashara kwa udhibiti bora juu ya utekelezaji wa programu (angalia akitoa ).

Tuli dhidi nguvu kuandika

Katika kuandika kwa static , maneno yote yana aina zao zilizowekwa kabla ya programu hiyo kutekelezwa, kwa kawaida wakati wa kukusanya. Kwa mfano, 1 na (2 + 2) ni maneno kamili; hawawezi kupitishwa kwenye kazi ambayo inatarajia kamba, au kuhifadhiwa katika variable inayoelezwa kushikilia tarehe. [47]

Tuli typed lugha inaweza kuwa ama waziwazi typed au aina-huonekana . Katika kesi ya kwanza, mtayarishaji lazima aandike kwa usahihi aina katika nafasi fulani za textual (kwa mfano, kwa kutangaza kwa kutofautiana). Katika kesi ya pili, compiler inachukua aina ya maneno na matangazo kulingana na muktadha. Lugha nyingi za kawaida zilizopangwa, kama vile C ++ , C # na Java , zinaonekana vyema. Ufafanuzi wa aina kamili umekuwa umehusishwa na lugha ndogo za kawaida, kama Haskell na ML . Hata hivyo, lugha nyingi zinazoonyesha wazi zinaunga mkono aina ya aina ya aina; kwa mfano, Java na C # zote aina za aina ndogo katika kesi fulani ndogo. [48] Zaidi ya hayo, baadhi ya lugha za programu zinaruhusu aina fulani ziwekewe kwa aina nyingine; kwa mfano, int inaweza kutumika ambapo mpango unatarajia kuelea.

Kuandika kwa nguvu , pia huitwa kuandika kwa muda mfupi , huamua aina ya usalama wa shughuli wakati wa kukimbia; kwa maneno mengine, aina zinahusishwa na maadili ya wakati wa kukimbia badala ya maneno ya maneno . [47] Kama ilivyo kwa lugha zisizotumiwa, lugha zisizohitajika zinahitaji programu ya kuandika maelezo ya aina ya wazi kwenye maneno. Miongoni mwa mambo mengine, hii inaweza kuruhusu variable moja kutaja maadili ya aina tofauti katika pointi tofauti katika utekelezaji wa mpango. Hata hivyo, hitilafu za aina hazipatikani kiotomatiki mpaka kipengee cha kificho kikamilifu, na uwezekano wa kufanya uharibifu uwe vigumu zaidi. Lisp , Smalltalk , Perl , Python , JavaScript , na Ruby ni mifano yote ya lugha zilizopangwa kwa nguvu.

Weka na undaji wa kuandika

Kuandika kwa kiasi kikubwa kunawezesha thamani ya aina moja kuchukuliwa kama nyingine, kwa mfano kutibu kamba kama nambari. [47] Hii inaweza mara kwa mara kuwa na manufaa, lakini inaweza pia kuruhusu aina fulani ya makosa ya programu kwenda bila kutambuliwa wakati wa kukusanya na hata wakati wa kukimbia .

Kuandika kwa nguvu kuzuia hapo juu. Jaribio la kufanya operesheni kwenye aina isiyofaa ya thamani inaleta hitilafu. [47] Lugha nyingi zilizoitwa typed mara nyingi huitwa aina salama au salama .

Ufafanuzi mbadala kwa "typed dhaifu" inahusu lugha, kama Perl na JavaScript , ambayo inaruhusu idadi kubwa ya mabadiliko ya aina ya wazi. Katika JavaScript, kwa mfano, usemi 2 * x kudokeza hubadilisha x kwa idadi, na uongofu huu inafanikiwa hata kama x ni null , undefined , Array , au mfululizo wa herufi. Mabadiliko kama hayo mara nyingi yanafaa, lakini wanaweza kushikilia makosa ya programu. Nguvu na imara sasa huchukuliwa kama dhana ya orthogonal, lakini matumizi katika vitabu hutofautiana. Wengine hutumia neno lililofungwa kwa nguvu sana, limewekwa tyti , au, hata zaidi zaidi, linamaanisha tu kuchapishwa tu. Kwa hivyo C imechukuliwa kwa nguvu zote na kuharibika, imetumwa kwa usahihi. [49] [50]

Inaweza kuonekana isiyo ya kawaida kwa programu fulani za kitaaluma ambazo C inaweza kuwa "dhaifu, zilizopigwa kwa statically". Hata hivyo, angalia kwamba matumizi ya pointer ya generic, pointer tupu , inaruhusiwa kupiga maelezo kwa hoja nyingine bila kuhitaji kufanya wazi wazi. Hii ni sawa sana na kwa namna fulani kutengeneza safu za bytes kwa aina yoyote ya datatype katika C bila kutumia kutupa wazi, kama (int) au (char) .

Standard maktaba na kukimbia wakati mfumo

Lugha nyingi za programu zina msingi wa maktaba ya msingi (wakati mwingine hujulikana kama 'maktaba ya kawaida', hasa ikiwa imejumuishwa kama sehemu ya kiwango cha lugha kilichochapishwa), ambacho kimetengenezwa kwa kawaida na utekelezaji wote wa lugha. Maktaba ya kawaida yanajumuisha ufafanuzi wa algorithms ya kawaida, miundo ya data, na taratibu za kuingia na pato.

Mstari kati ya lugha na maktaba yake ya msingi hutofautiana kutoka lugha hadi lugha. Katika hali nyingine, wabunifu wa lugha wanaweza kutibu maktaba kama kikundi tofauti kutoka kwa lugha. Hata hivyo, maktaba ya msingi ya lugha mara nyingi hutendewa kama sehemu ya lugha kwa watumiaji wake, na baadhi ya vipimo vya lugha hata zinahitaji kwamba maktaba hii iweze kupatikana katika utekelezaji wote. Hakika, lugha zingine zimeundwa ili maana ya baadhi ya ujenzi wa syntactic hauwezi kuelezewa hata bila kutaja maktaba ya msingi. Kwa mfano, katika Java , kamba halisi inaelezwa kama mfano wa darasa la java.lang.String ; sawa, katika Smalltalk , kujieleza kazi isiyojulikana ("block") BlockContext darasa la BlockContext la maktaba. Kinyume chake, Mpangilio una subsets nyingi za umoja ambazo zinatosha kujenga lugha nzima kama maktaba ya maktaba, na kwa hivyo wasanii wa lugha hawana wasiwasi kusema sehemu gani za lugha zinapaswa kutekelezwa kama lugha inavyojengwa, na ambayo inapaswa kutekelezwa kama sehemu ya maktaba.

Tengeneza na utekelezaji

Lugha za programu zinashirikisha mali na lugha za asili zinazohusiana na malengo yao kama magari ya mawasiliano, kuwa na fomu ya maonyesho tofauti na semantics yake, na kuonyesha familia za lugha za lugha zinazohusiana zimeunganisha moja kwa moja. [51] [52] Lakini kama kujenga bandia, pia hutofautiana katika njia za msingi kutoka kwa lugha zilizobadilika kupitia matumizi. Tofauti kubwa ni kwamba lugha ya programu inaweza kuelezwa kikamilifu na kujifunza kwa ukamilifu, kwa kuwa ina ufafanuzi sahihi na wa mwisho. [53] Kwa kulinganisha, lugha za asili zimebadilika maana zilizopatikana na watumiaji wao katika jamii tofauti. Wakati lugha zilizojengwa pia ni lugha za bandia iliyoundwa kutoka chini hadi kusudi fulani, hawana ufafanuzi sahihi na kamili wa semantic kwamba lugha ya programu ina.

Lugha nyingi za programu zimeundwa tangu mwanzoni, zimebadilika ili kukidhi mahitaji mapya, na zimeunganishwa na lugha zingine. Wengi hatimaye wameanguka kutumiwa. Ingawa tumekuwa na jaribio la kubuni lugha moja ya "programu" ya utaratibu ambayo hutumikia madhumuni yote, yote yameshindwa kukubaliwa kama kujaza jukumu hili. [54] Mahitaji ya lugha mbalimbali za programu hutoka kutokana na hali tofauti za lugha ambazo lugha hutumiwa:

  • Programu hutoka kwenye maandiko madogo yaliyoandikwa na watu binafsi kwa mifumo mikubwa iliyoandikwa na mamia ya waandaaji .
  • Wachunguzi huwa na ujuzi kutoka kwa novices ambao wanahitaji urahisi zaidi ya yote, kwa wataalam ambao wanaweza kuwa na urahisi na utata mkubwa.
  • Programu zinapaswa kusawazisha kasi, ukubwa, na unyenyekevu kwenye mifumo inayotoka kwa wasimamizi wadogo kwenda kwa wajumbe wa supercomputers .
  • Programu zinaweza kuandikwa mara moja na zisizobadilika kwa vizazi, au zinaweza kubadilika mara kwa mara.
  • Wachunguzi wanaweza kuwa tofauti na ladha zao: huenda wamezoea kujadili matatizo na kuwaelezea katika lugha fulani.

Njia moja ya kawaida katika maendeleo ya lugha za programu imekuwa kuongeza uwezo zaidi wa kutatua matatizo kwa kutumia ngazi ya juu ya uondoaji . Lugha za awali za programu zilifungwa kwa karibu sana na vifaa vya msingi vya kompyuta. Kwa kuwa lugha mpya za programu zimeandaliwa, vipengee vimeongezwa kuwa wajumbe wa waandishi wa habari wataeleze mawazo ambayo ni mbali mbali na tafsiri rahisi katika maelekezo ya msingi ya vifaa. Kwa sababu programu zisizofungwa zaidi na utata wa kompyuta, mipango yao inaweza kufanya kompyuta zaidi na juhudi kidogo kutoka kwa programu. Hii inawawezesha kuandika utendaji zaidi kwa kitengo cha wakati. [55]

Programu ya lugha ya asili imependekezwa kama njia ya kuondokana na haja ya lugha maalum ya programu. Hata hivyo, lengo hili linabakia mbali na faida zake ni wazi kwa mjadala. Edsger W. Dijkstra alichukua nafasi ya kuwa matumizi ya lugha rasmi ni muhimu ili kuzuia kuanzishwa kwa ujenzi wa maana, na kuondokana na programu za lugha ya asili kama "kipumbavu". [56] Alan Perlis alikuwa sawa na wazo hilo. [57] Mbinu Mseto zimechukuliwa katika Structured English na SQL .

Wabunifu wa lugha na watumiaji lazima wajenge vitu vingi vinavyosimamia na kuwezesha mazoezi ya programu. Muhimu zaidi wa mabaki haya ni ufafanuzi wa lugha na utekelezaji .

vipimo

Vipimo ya lugha ya programu ni artifact kwamba lugha watumiaji na implementors unaweza kutumia kukubaliana kwa kama kipande cha chanzo kanuni ni halali mpango katika lugha hiyo, na kama ndivyo nini tabia yake ilivyo.

Maagizo ya lugha ya programu yanaweza kuchukua aina kadhaa, ikiwa ni pamoja na yafuatayo:

  • Ufafanuzi wazi wa syntax, semantics ya static, na semantics ya utekelezaji wa lugha. Wakati syntax inavyoelezwa kwa kawaida kwa kutumia sarufi rasmi, ufafanuzi wa semantiki unaweza kuandikwa kwa lugha ya asili (kwa mfano, kama lugha ya C ), au semantics rasmi (kwa mfano, kama ilivyo katika kiwango cha Standard ML [58] na Scheme [59] .
  • Maelezo ya tabia ya msfsiri kwa lugha (kwa mfano, maelezo ya C ++ na Fortran ). Syntax na semantics ya lugha zinapaswa kufanywa kutokana na maelezo haya, ambayo yanaweza kuandikwa kwa asili au lugha rasmi.
  • Utekelezaji inarejelea au mfano , wakati mwingine zilizoandikwa kwa lugha kuwa maalum (kwa mfano, Prolog au ansi REXX [60] ). Syntax na semantics ya lugha ni wazi katika tabia ya utekelezaji wa kumbukumbu.

utekelezaji

Utekelezaji wa lugha ya programu hutoa njia ya kuandika mipango katika lugha hiyo na kuyatekeleza kwenye muundo mmoja au zaidi wa vifaa na programu. Kuna, kwa ujumla, mbinu mbili za utekelezaji wa lugha ya programu: ushirikiano na ufafanuzi . Kwa ujumla inawezekana kutekeleza lugha kwa kutumia mbinu ama.

Pato la compiler inaweza kutekelezwa kwa vifaa au programu inayoitwa mkalimani. Katika utekelezaji fulani ambao hutumia njia ya mkalimani hakuna mipaka tofauti kati ya kukusanya na kutafsiri. Kwa mfano, baadhi ya utekelezaji wa BASIC hukusanya na kisha kutekeleza chanzo mstari kwa wakati mmoja.

Programu zinazotekelezwa moja kwa moja kwenye vifaa hutumia maagizo kadhaa ya ukubwa kwa kasi zaidi kuliko yale yaliyofasiriwa kwenye programu. [ citation inahitajika ]

Njia moja ya kuboresha utendaji wa programu zilizofasiriwa ni kukusanya-wakati-tu . Hapa mashine ya virtual , kabla ya kutekelezwa, inatafsiri vitalu vya bytecode ambazo zitatumika kwa msimbo wa mashine, kwa utekelezaji wa moja kwa moja kwenye vifaa.

Lugha za kibinafsi

Ingawa lugha nyingi za programu zinazotumiwa kwa kawaida zimefunguliwa kikamilifu na utekelezaji, lugha nyingi za programu zipo tu kama lugha za programu za wamiliki na utekelezaji unaopatikana tu kutoka kwa muuzaji mmoja, anayeweza kudai kwamba lugha hiyo ya wamiliki ni mali yao ya akili. Lugha za upangaji wa lugha ni kawaida lugha maalum ya lugha au lugha za ndani za script kwa bidhaa moja; Lugha zingine za wamiliki hutumiwa ndani tu ndani ya muuzaji, wakati wengine hupatikana kwa watumiaji wa nje.

Lugha zingine za programu zipo kwenye mpaka kati ya wamiliki na wazi; kwa mfano, Shirika la Oracle linasema haki za wamiliki kwa baadhi ya vipengele vya lugha ya programu ya Java , [61] na lugha ya programu ya Microsoft # , ambayo ina utekelezaji wazi wa sehemu nyingi za mfumo, pia ina lugha ya kawaida ya Runtime (CLR) kama imefungwa mazingira.

Lugha nyingi za wamiliki hutumiwa sana, licha ya asili yao ya wamiliki; Mifano ni MATLAB na VBScript . Lugha zingine zinaweza kufanya mabadiliko kutoka kwa kufungwa kufunguliwe; kwa mfano, Erlang awali alikuwa lugha ya ndani ya programu ya Nokia.

Matumizi

Maelfu ya lugha tofauti za programu zimeundwa, hasa katika uwanja wa kompyuta. [62] Programu ni kawaida hujengwa na lugha 5 za programu au zaidi. [63]

Lugha za programu zinatofautiana na aina nyingi za kujieleza kwa binadamu kwa kuwa zinahitaji kiwango kikubwa cha usahihi na ukamilifu. Wakati wa kutumia lugha ya asili kuwasiliana na watu wengine, waandishi wa kibinadamu na wasemaji wanaweza kuwa na wasiwasi na kufanya makosa madogo, na bado wanatarajia kuwa na nia yao kueleweka. Hata hivyo, akizungumza kwa mfano, kompyuta "hufanya hasa yale wanayoambiwa kufanya", na hawezi "kuelewa" nambari gani mpangilio aliyependa kuandika. Mchanganyiko wa ufafanuzi wa lugha, programu, na pembejeo za programu lazima zifafanue kikamilifu tabia ya nje ambayo hutokea wakati programu inafanywa, ndani ya uwanja wa kudhibiti programu hiyo. Kwa upande mwingine, mawazo juu ya algorithm yanaweza kuwasilishwa kwa wanadamu bila usahihi unahitajika kutekelezwa kwa kutumia pseudocode , ambayo inachagua lugha ya asili na msimbo ulioandikwa katika lugha ya programu.

Lugha ya programu hutoa utaratibu wa utaratibu wa kufafanua vipande vya data, na shughuli au mabadiliko ambayo yanaweza kufanywa moja kwa moja kwenye data hiyo. Programu anatumia uchukuaji sasa katika lugha ya kuwakilisha maswala ya hesabu. Dhana hizi zinakilishwa kama mkusanyiko wa vipengele rahisi zaidi vinavyopatikana (inayoitwa primitives ). [64] Programu ni mchakato ambao wajumbe wanajumuisha wachache hawa kutunga programu mpya, au kubadilisha hali zilizopo kwa matumizi mapya au mazingira ya kubadilisha.

Programu za kompyuta zinaweza kutekelezwa katika mchakato wa kundi bila ushirikiano wa kibinadamu, au mtumiaji anaweza kupiga amri za aina katika kikao cha maingiliano cha mkalimani . Katika kesi hiyo "amri" ni mipango tu, ambao utekelezaji wake umefungiwa pamoja. Wakati lugha inaweza kuendesha amri zake kwa njia ya mkalimani (kama shell shell Unix au nyingine mstari wa amri interface ), bila kuandika, inaitwa lugha scripting . [65]

Kupima matumizi ya lugha

Ni vigumu kuamua lugha zenye programu zinazotumiwa sana, na njia gani za matumizi hutofautiana na mazingira. Lugha moja inaweza kuchukua idadi kubwa ya masaa ya programu, tofauti na mistari zaidi ya msimbo, na ya tatu inaweza kutumia muda zaidi wa CPU. Lugha zingine zinajulikana sana kwa aina fulani za maombi. Kwa mfano, COBOL bado ni imara katika kituo cha data cha ushirika, mara kwa mara kwenye vifungu vikubwa; [66] [67] Fortran katika maombi ya sayansi na uhandisi; Ada katika anga ya faragha, usafiri, kijeshi, wakati halisi na programu zilizoingia; na C katika programu zilizoingizwa na mifumo ya uendeshaji. Lugha zingine hutumiwa mara kwa mara kuandika aina nyingi za maombi.

Njia mbalimbali za kupima umaarufu wa lugha, kila kitu kinachopendeza tofauti na kile kinachohesabiwa, kimependekezwa:

  • kuhesabu idadi ya matangazo ya kazi ambayo hutaja lugha [68]
  • idadi ya vitabu vilivyouzwa vinavyofundisha au kuelezea lugha [69]
  • makadirio ya idadi ya mistari iliyopo iliyopo iliyoandikwa kwa lugha - ambayo inaweza kudharau lugha ambazo hazipatikani katika utafutaji wa umma [70]
  • mahesabu ya lugha (yaani, kwa jina la lugha) kupatikana kwa kutumia injini ya utafutaji wa wavuti.

Kuchanganya na kutoa taarifa kutoka kwa maeneo mbalimbali ya mtandao, langpop.com inadai kwamba mwaka 2013 lugha kumi za programu maarufu zaidi ni (kwa kupungua kwa utaratibu na umaarufu wa jumla): C , Java , PHP , JavaScript , C ++ , Python , Shell , Ruby , Lengo- C na C # . [71]

Teknolojia

Hakuna mpango wa ugawaji wa jumla wa lugha za programu. Lugha ya programu ya programu si kawaida kuwa na lugha moja ya wazazi. Lugha nyingi hutokea kwa kuchanganya vipengele vya lugha kadhaa zilizopita kabla ya mawazo mapya katika mzunguko wakati huo. Mawazo yanayotoka kwa lugha moja yatapungua katika familia zote za lugha zinazohusiana, na kisha kuruka kwa ghafla katika mapungufu ya familia ili kuonekana katika familia tofauti kabisa.

Kazi ni ngumu zaidi na ukweli kwamba lugha zinaweza kutengwa pamoja na pembe nyingi. Kwa mfano, Java ni lugha inayopendekezwa na kitu (kwa sababu inahimiza shirika linaloelekezwa na kitu) na lugha moja kwa moja (kwa sababu inajenga kujengwa kwa kuendesha thread nyingi kwa sambamba). Python ni lugha ya scripting oriented object.

Katika viharusi vingi, lugha za programu zinagawanyika katika vielelezo vya programu na uainishaji kwa uwanja unaotumiwa wa matumizi, na lugha za programu za jumla za kusudi zinajulikana kutoka kwa lugha maalum za programu . Kwa kawaida, lugha za programu zimeonekana kama kuelezea hesabu kwa mujibu wa sentensi muhimu, yaani amri za kutoa. Hizi kwa ujumla huitwa lugha za programu zinazofaa . Mpango mkubwa wa utafiti katika lugha ya programu imekuwa lengo la kutia ukungu tofauti kati ya mpango kama seti ya maelekezo na mpango kama Madai kuhusu jibu taka, ambayo ni kipengele kuu ya programu declarative . [72] Mifumo zaidi iliyosafishwa ni pamoja na mipangilio ya kiutaratibu , programu zinazoelekezwa na kitu , programu za kazi , na programu za mantiki ; Lugha zingine ni hybrids ya paradigms au multi-paradigmatic. Lugha ya kanisa sio dhana sana kama mfano wa moja kwa moja wa usanifu wa mashine ya msingi. Kwa kusudi, lugha za programu zinaweza kuzingatiwa kusudi la jumla, lugha za programu za programu , lugha za script, lugha maalum za kikoa, au lugha za kawaida / kusambazwa (au mchanganyiko wa haya). [73] Lugha zingine za kusudi zimeundwa kwa kiasi kikubwa na malengo ya elimu. [74]

Lugha ya programu inaweza pia kutengwa kwa sababu zisizohusiana na utaratibu wa programu. Kwa mfano, lugha nyingi za programu hutumia maneno muhimu ya Kiingereza , wakati wachache hawana . Lugha zingine zinaweza kuhesabiwa kuwa ni esoteric kwa makusudi au la.

Angalia pia

  • Kulinganisha lugha za programu (maagizo ya msingi)
  • Kulinganisha lugha za programu
  • Programu ya kompyuta
  • Sayansi ya kompyuta na Muhtasari wa sayansi ya kompyuta
  • Lugha ya programu ya elimu
  • Invariant msingi programu
  • Orodha ya lugha za programu
  • Orodha ya watafiti wa lugha ya programu
  • Lugha za programu za kutumika kwenye tovuti maarufu zaidi
  • Programu ya kuandika
  • Dialect (kompyuta)
  • Nadharia ya lugha ya programu
  • Pseudocode
  • Lugha ya kisayansi ya programu
  • Uhandisi wa Programu na Orodha ya mada ya uhandisi wa programu

Marejeleo

  1. ^ Koetsier, Teun (2001). On the prehistory of programmable machines; musical automata, looms, calculators . PERGAMON, Mechanisma and Machine Theory 36. pp. 589–603.
  2. ^ Ettinger, James (2004) Jacquard's Web , Oxford University Press
  3. ^ a b c Aaby, Anthony (2004). Introduction to Programming Languages .
  4. ^ In mathematical terms, this means the programming language is Turing-complete MacLennan, Bruce J. (1987). Principles of Programming Languages . Oxford University Press. p. 1. ISBN 0-19-511306-3 .
  5. ^ ACM SIGPLAN (2003). "Bylaws of the Special Interest Group on Programming Languages of the Association for Computing Machinery" . Retrieved 19 June 2006 . , The scope of SIGPLAN is the theory, design, implementation, description, and application of computer programming languages - languages that permit the specification of a variety of different computations, thereby providing the user with significant control (immediate or delayed) over the computer's operation.
  6. ^ Dean, Tom (2002). "Programming Robots" . Building Intelligent Robots . Brown University Department of Computer Science . Retrieved 23 September 2006 .
  7. ^ R. Narasimahan, Programming Languages and Computers: A Unified Metatheory, pp. 189--247 in Franz Alt, Morris Rubinoff (eds.) Advances in computers, Volume 8, Academic Press, 1994, ISBN 0-12-012108-5 , p.193 : "a complete specification of a programming language must, by definition, include a specification of a processor--idealized, if you will--for that language." [the source cites many references to support this statement]
  8. ^ Ben Ari, Mordechai (1996). Understanding Programming Languages . John Wiley and Sons. Programs and languages can be defined as purely formal mathematical objects. However, more people are interested in programs than in other mathematical objects such as groups, precisely because it is possible to use the program—the sequence of symbols—to control the execution of a computer. While we highly recommend the study of the theory of programming, this text will generally limit itself to the study of programs as they are executed on a computer.
  9. ^ David A. Schmidt, The structure of typed programming languages , MIT Press, 1994, ISBN 0-262-19349-3 , p. 32
  10. ^ Pierce, Benjamin (2002). Types and Programming Languages . MIT Press. p. 339. ISBN 0-262-16209-1 .
  11. ^ Digital Equipment Corporation. "Information Technology - Database Language SQL (Proposed revised text of DIS 9075)" . ISO/IEC 9075:1992, Database Language SQL . Retrieved 29 June 2006 .
  12. ^ The Charity Development Group (December 1996). "The CHARITY Home Page" . Retrieved 29 June 2006 . , Charity is a categorical programming language... , All Charity computations terminate.
  13. ^ XML in 10 points W3C , 1999, XML is not a programming language.
  14. ^ Powell, Thomas (2003). HTML & XHTML: the complete reference . McGraw-Hill. p. 25. ISBN 0-07-222942-X . HTML is not a programming language.
  15. ^ Dykes, Lucinda; Tittel, Ed (2005). XML For Dummies, 4th Edition . Wiley. p. 20. ISBN 0-7645-8845-1 . ...it's a markup language, not a programming language.
  16. ^ "What kind of language is XSLT?" . IBM.com . Retrieved 3 December 2010 .
  17. ^ "XSLT is a Programming Language" . Msdn.microsoft.com . Retrieved 3 December 2010 .
  18. ^ Scott, Michael (2006). Programming Language Pragmatics . Morgan Kaufmann . p. 802. ISBN 0-12-633951-1 . XSLT, though highly specialized to the transformation of XML, is a Turing-complete programming language.
  19. ^ Oetiker, Tobias; Partl, Hubert; Hyna, Irene; Schlegl, Elisabeth (June 20, 2016). "The Not So Short Introduction to LATEX 2ε" (Version 5.06) . tobi.oetiker.ch . pp. 1–157 . Retrieved April 16, 2017 .
  20. ^ Syropoulos, Apostolos; Antonis Tsolomitis; Nick Sofroniou (2003). Digital typography using LaTeX . Springer-Verlag. p. 213. ISBN 0-387-95217-9 . TeX is not only an excellent typesetting engine but also a real programming language.
  21. ^ Robert A. Edmunds, The Prentice-Hall standard glossary of computer terminology, Prentice-Hall, 1985, p. 91
  22. ^ Pascal Lando, Anne Lapujade, Gilles Kassel, and Frédéric Fürst, Towards a General Ontology of Computer Programs , ICSOFT 2007 , pp. 163-170
  23. ^ S.K. Bajpai, Introduction To Computers And C Programming , New Age International, 2007, ISBN 81-224-1379-X , p. 346
  24. ^ R. Narasimahan, Programming Languages and Computers: A Unified Metatheory, pp. 189--247 in Franz Alt, Morris Rubinoff (eds.) Advances in computers, Volume 8, Academic Press, 1994, ISBN 0-12-012108-5 , p.215: "[...] the model [...] for computer languages differs from that [...] for programming languages in only two respects. In a computer language, there are only finitely many names--or registers--which can assume only finitely many values--or states--and these states are not further distinguished in terms of any other attributes. [author's footnote:] This may sound like a truism but its implications are far reaching. For example, it would imply that any model for programming languages, by fixing certain of its parameters or features, should be reducible in a natural way to a model for computer languages."
  25. ^ John C. Reynolds, Some thoughts on teaching programming and programming languages , SIGPLAN Notices, Volume 43, Issue 11, November 2008, p.109
  26. ^ Rojas, Raúl , et al. (2000). "Plankalkül: The First High-Level Programming Language and its Implementation". Institut für Informatik, Freie Universität Berlin, Technical Report B-3/2000. (full text)
  27. ^ Sebesta, W.S Concepts of Programming languages. 2006;M6 14:18 pp.44. ISBN 0-321-33025-0
  28. ^ Knuth, Donald E.; Pardo, Luis Trabb. "Early development of programming languages". Encyclopedia of Computer Science and Technology . Marcel Dekker. 7 : 419–493.
  29. ^ Peter J. Bentley (2012). Digitized: The Science of Computers and how it Shapes Our World . Oxford University Press. p. 87. ISBN 9780199693795 .
  30. ^ "Fortran creator John Backus dies - Tech and gadgets- msnbc.com" . MSNBC. 2007-03-20 . Retrieved 2010-04-25 .
  31. ^ "CSC-302 99S : Class 02: A Brief History of Programming Languages" . Math.grin.edu . Retrieved 2010-04-25 .
  32. ^ Eugene Loh (18 June 2010). "The Ideal HPC Programming Language" . Queue . Association of Computing Machines. 8 (6).
  33. ^ "HPL - A Portable Implementation of the High-Performance Linpack Benchmark for Distributed-Memory Computers" . Retrieved 2015-02-21 .
  34. ^ Hopper (1978) p. 16.
  35. ^ Sammet (1969) p. 316
  36. ^ Sammet (1978) p. 204.
  37. ^ Richard L. Wexelblat: History of Programming Languages , Academic Press, 1981, chapter XIV.
  38. ^ François Labelle. "Programming Language Usage Graph" . SourceForge . Retrieved 21 June 2006 . . This comparison analyzes trends in number of projects hosted by a popular community programming repository. During most years of the comparison, C leads by a considerable margin; in 2006, Java overtakes C, but the combination of C/C++ still leads considerably.
  39. ^ Hayes, Brian (2006). "The Semicolon Wars". American Scientist . 94 (4): 299–303. doi : 10.1511/2006.60.299 .
  40. ^ Dijkstra, Edsger W. (March 1968). "Go To Statement Considered Harmful" (PDF) . Communications of the ACM . 11 (3): 147–148. doi : 10.1145/362929.362947 . Retrieved 2014-05-22 .
  41. ^ Tetsuro Fujise, Takashi Chikayama, Kazuaki Rokusawa, Akihiko Nakase (December 1994). "KLIC: A Portable Implementation of KL1" Proc. of FGCS '94, ICOT Tokyo, December 1994. http://www.icot.or.jp/ARCHIVE/HomePage-E.html KLIC is a portable implementation of a concurrent logic programming language KL1 .
  42. ^ Jim Bender (15 March 2004). "Mini-Bibliography on Modules for Functional Programming Languages" . ReadScheme.org . Retrieved 27 September 2006 .
  43. ^ Michael Sipser (1996). Introduction to the Theory of Computation . PWS Publishing. ISBN 0-534-94728-X . Section 2.2: Pushdown Automata, pp.101–114.
  44. ^ Jeffrey Kegler, " Perl and Undecidability ", The Perl Review . Papers 2 and 3 prove, using respectively Rice's theorem and direct reduction to the halting problem , that the parsing of Perl programs is in general undecidable.
  45. ^ Marty Hall, 1995, Lecture Notes: Macros , PostScript version
  46. ^ Michael Lee Scott, Programming language pragmatics , Edition 2, Morgan Kaufmann, 2006, ISBN 0-12-633951-1 , p. 18–19
  47. ^ a b c d e f g Andrew Cooke. "Introduction To Computer Languages" . Retrieved 13 July 2012 .
  48. ^ Specifically, instantiations of generic types are inferred for certain expression forms. Type inference in Generic Java—the research language that provided the basis for Java 1.5's bounded parametric polymorphism extensions—is discussed in two informal manuscripts from the Types mailing list: Generic Java type inference is unsound ( Alan Jeffrey , 17 December 2001) and Sound Generic Java type inference ( Martin Odersky , 15 January 2002). C#'s type system is similar to Java's, and uses a similar partial type inference scheme.
  49. ^ "Revised Report on the Algorithmic Language Scheme" . 20 February 1998 . Retrieved 9 June 2006 .
  50. ^ Luca Cardelli and Peter Wegner . "On Understanding Types, Data Abstraction, and Polymorphism" . Manuscript (1985) . Retrieved 9 June 2006 .
  51. ^ Steven R. Fischer, A history of language , Reaktion Books, 2003, ISBN 1-86189-080-X , p. 205
  52. ^ Éric Lévénez (2011). "Computer Languages History" .
  53. ^ Jing Huang. "Artificial Language vs. Natural Language" .
  54. ^ IBM in first publishing PL/I, for example, rather ambitiously titled its manual The universal programming language PL/I (IBM Library; 1966). The title reflected IBM's goals for unlimited subsetting capability: PL/I is designed in such a way that one can isolate subsets from it satisfying the requirements of particular applications. ( "PL/I" . Encyclopedia of Mathematics . Retrieved 29 June 2006 . ). Ada and UNCOL had similar early goals.
  55. ^ Frederick P. Brooks, Jr.: The Mythical Man-Month, Addison-Wesley, 1982, pp. 93-94
  56. ^ Dijkstra, Edsger W. On the foolishness of "natural language programming." EWD667.
  57. ^ Perlis, Alan (September 1982). "Epigrams on Programming" . SIGPLAN Notices Vol. 17, No. 9 . pp. 7–13.
  58. ^ Milner, R. ; M. Tofte ; R. Harper ; D. MacQueen (1997). The Definition of Standard ML (Revised) . MIT Press. ISBN 0-262-63181-4 .
  59. ^ Kelsey, Richard; William Clinger; Jonathan Rees (February 1998). "Section 7.2 Formal semantics" . Revised 5 Report on the Algorithmic Language Scheme . Retrieved 9 June 2006 .
  60. ^ ANSI — Programming Language Rexx, X3-274.1996
  61. ^ See: Oracle America, Inc. v. Google, Inc.
  62. ^ "HOPL: an interactive Roster of Programming Languages" . Australia: Murdoch University . Retrieved 1 June 2009 . This site lists 8512 languages.
  63. ^ Mayer, Philip; Bauer, Alexander (1 January 2015). "Proceedings of the 19th International Conference on Evaluation and Assessment in Software Engineering - EASE '15" . EASE '15. New York, NY, USA: ACM: 4:1–4:10. doi : 10.1145/2745802.2745805 . ISBN 978-1-4503-3350-4 . Retrieved 18 September 2015 . Results: We found (a) a mean number of 5 languages per project with a clearly dominant main general-purpose language and 5 often-used DSL types, (b) a significant influence of the size, number of commits, and the main language on the number of languages as well as no significant influence of age and number of contributors, and (c) three language ecosystems grouped around XML, Shell/Make, and HTML/CSS. Conclusions: Multi-language programming seems to be common in open-source projects and is a factor which must be dealt with in tooling and when assessing development and maintenance of such software systems. |chapter= ignored ( help )
  64. ^ Abelson, Sussman, and Sussman. "Structure and Interpretation of Computer Programs" . Retrieved 3 March 2009 .
  65. ^ Brown Vicki (1999). "Scripting Languages" . mactech.com . Retrieved November 17, 2014 .
  66. ^ Georgina Swan (2009-09-21). "COBOL turns 50" . computerworld.com.au . Retrieved 2013-10-19 .
  67. ^ Ed Airey (2012-05-03). "7 Myths of COBOL Debunked" . developer.com . Retrieved 2013-10-19 .
  68. ^ Nicholas Enticknap. "SSL/Computer Weekly IT salary survey: finance boom drives IT job growth" . Computerweekly.com . Retrieved 2013-06-14 .
  69. ^ "Counting programming languages by book sales" . Radar.oreilly.com. 2 August 2006 . Retrieved 3 December 2010 .
  70. ^ Bieman, J.M.; Murdock, V., Finding code on the World Wide Web: a preliminary investigation, Proceedings First IEEE International Workshop on Source Code Analysis and Manipulation, 2001
  71. ^ "Programming Language Popularity" . langpop.com. 2013-10-25 . Retrieved 2014-01-02 .
  72. ^ Carl A. Gunter, Semantics of Programming Languages: Structures and Techniques , MIT Press, 1992, ISBN 0-262-57095-5 , p. 1
  73. ^ "TUNES: Programming Languages" .
  74. ^ Wirth, Niklaus (1993). "Recollections about the development of Pascal" . Proc. 2nd ACM SIGPLAN conference on history of programming languages : 333–342. doi : 10.1145/154766.155378 . ISBN 0-89791-570-4 . Retrieved 30 June 2006 .

Kusoma zaidi

  • Abelson, Harold ; Sussman, Gerald Jay (1996). Structure and Interpretation of Computer Programs (2nd ed.). MIT Press.
  • Raphael Finkel : Advanced Programming Language Design , Addison Wesley 1995.
  • Daniel P. Friedman , Mitchell Wand , Christopher T. Haynes : Essentials of Programming Languages , The MIT Press 2001.
  • Maurizio Gabbrielli and Simone Martini: "Programming Languages: Principles and Paradigms", Springer, 2010.
  • David Gelernter , Suresh Jagannathan : Programming Linguistics , The MIT Press 1990.
  • Ellis Horowitz (ed.): Programming Languages, a Grand Tour (3rd ed.), 1987.
  • Ellis Horowitz: Fundamentals of Programming Languages , 1989.
  • Shriram Krishnamurthi : Programming Languages: Application and Interpretation , online publication .
  • Bruce J. MacLennan : Principles of Programming Languages: Design, Evaluation, and Implementation , Oxford University Press 1999.
  • John C. Mitchell : Concepts in Programming Languages , Cambridge University Press 2002.
  • Benjamin C. Pierce : Types and Programming Languages , The MIT Press 2002.
  • Terrence W. Pratt and Marvin V. Zelkowitz : Programming Languages: Design and Implementation (4th ed.), Prentice Hall 2000.
  • Peter H. Salus . Handbook of Programming Languages (4 vols.). Macmillan 1998.
  • Ravi Sethi : Programming Languages: Concepts and Constructs , 2nd ed., Addison-Wesley 1996.
  • Michael L. Scott : Programming Language Pragmatics , Morgan Kaufmann Publishers 2005.
  • Robert W. Sebesta : Concepts of Programming Languages , 9th ed., Addison Wesley 2009.
  • Franklyn Turbak and David Gifford with Mark Sheldon : Design Concepts in Programming Languages , The MIT Press 2009.
  • Peter Van Roy and Seif Haridi . Concepts, Techniques, and Models of Computer Programming , The MIT Press 2004.
  • David A. Watt . Programming Language Concepts and Paradigms . Prentice Hall 1990.
  • David A. Watt and Muffy Thomas . Programming Language Syntax and Semantics . Prentice Hall 1991.
  • David A. Watt. Programming Language Processors . Prentice Hall 1993.
  • David A. Watt. Programming Language Design Concepts . John Wiley & Sons 2004.