Mõni lõbu pärast, mõni olemasolu tõestamiseks või hüpoteesi ümberlükkamiseks, mõni aju treenimiseks (reisides Kleini pudeli pinnal või neljamõõtmelises ruumis), kuid sajad inimesed on loonud "esoteerilisi" programmeerimiskeeli. Olen läbinud umbes 150 neist keelt ja ma ei ole enam kunagi endine.

“Argh!”, “Oof!”, “2-ill”, “Nhohnhehr”, “Noit o” mnain gelb”, “DZZZZ”, “Ypsilax”, “YABALL”, fuckfuck - need on loitsud, luule on ainult nimed ... all catom – koodinäited kõige pilkupüüdvamates programmeerimiskeeltes.

Küüliku auk on sügav.

INTERCAL (Turingi täielik)



Don Woods ja Jim Lyon

Üks vanimaid esoteerilisi programmeerimiskeeli. Loojate sõnul tähendab selle nimi "kompilaatori keelt ilma hääldatava akronüümita". Selle keele lõid 1972. aastal üliõpilased Don Woods ja James M. Lyon olemasolevate programmeerimiskeelte ja vaimse võimlemise paroodiana.

Tere, Maailm

Igale programmikäsule saab anda tõenäosuse, millega see programmi käivitamisel täidetakse. Lisaks on käsud, mis blokeerivad teatud tüüpi järgmiste käskude täitmise või muutujate muutmise.

Tere, Maailm!

// Stephen McGreali “Tere maailm”.
// Pange tähele, et selles lähtekoodis väljendatud seisukohad ei pruugi tingimata langeda kokku

Gr34t l33tN3$$?
M3h…
iT 41n"t s0 7RICY.

L33t sP33k on U8er keWl 4nD eA5y wehn u 7hink 1t tHr0uGh.
1f u w4nn4be UB3R-l33t u d3f1n1t3lY w4nt in 0n a b4d4sS h4xX0r1ng s1tE!!! ;p
w4r3Z c0ll3cT10n2 r 7eh l3Et3r!

Qu4k3 cL4nS r 7eh bE5t tH1ng 1n teh 3nTIr3 w0rlD!!!
g4m3s wh3r3 u g3t kuni 5h00t ppl r 70tAl1_y w1cK1d!!!
I"M teh fr4GM4ster AN I"L t0t41_1Ly WWIp phr34k1ng fL00r ***j3d1 5tYlE*** KOOS y0uR h1dEga!!! L0L0L0L!
t3lEphR4gG1nG l4m3rs wit my m8tes r34lLy k1kK$ A$$

L33t hAxX0r$ CrE4t3 u8er- k3wL 5tUff LIKE n34t pR0gR4mm1nG ihaldusGe$…
s0m3tIm3$ teh l4nGu4gES l00k just l1k3 rE41_ 0neS 7o makE ppl Th1nk th3y"r3 ju$t n0rMal lEE7 5pEEk but th3y"re 5ecRetLy c0dE!!!
n080DY unDer5tAnD$ l33t RÄÄGI 4p4rT fr0m j3d1!!!
50mE laps 0n A me$$4gEb04rD m1ghT 8E a r0xX0r1nG hAxX0r wH0 w4nT2 t0 bR34k 5tuFf, 0r mAyb3 ju5t sh0w 7eh way5 l33t ppl0ld !!! hE i5 teh u8ER!!!
1t m1ght 8E 5omE v1rus 0r a Pl4ySt4tI0n ch34t c0dE.
1t 3v3n MiTe jUs7 s4y “H3LL0 W0RLD!!!” u ju5t can"T gu3s5.
tH3r3"s n3v3r mistahes p0iNt l00KiNg sC3pT1c4l c0s th4t, be1_1Ev3 iT 0r n0t, 1s mis th1s 1s!!!

5uxX0r5!!!L0L0L0L0L!!!

ArnoldC

Terminaatori programmeerimiskeel.

Tere, Maailm!

Okei!

Kas orangutanide keel või Occami Williami unistus.

Tere, Maailm!

Peakokk

David Morgan-Mari välja töötatud esoteeriline programmeerimiskeel, milles programmid on sarnased kulinaarsete retseptidega. Iga programm selles keeles koosneb nimest, muutujate ja nende väärtuste loendist ning juhiste loendist. Muutujaid saab nimetada ainult põhitoiduainete nimetuste järgi. Kutsutakse pinu, millesse muutujate väärtused asetatakse. segamiskaussi ja muutujatega manipuleerimise toimingud on segamine, segamine ja nii edasi.

Tere, Maailm

Tere, maailma suflee.

Koostisained.
72 g ube
101 muna
108 g seapekki
111 tassi õli
32 suvikõrvitsat
119 ml vett
114 g punast lõhet
100 g dijoni sinepit
33 kartulit

meetod.
Pane kartulid segamisnõusse.
Pange dijoni sinep segamisnõusse.

Pane punane lõhe segamisnõusse.

Valage vesi segamisnõusse.
Pane suvikõrvits segamisnõusse.
Valage õli segamisnõusse.
Pane seapekk segamisnõusse.
Pane seapekk segamisnõusse.
Pane munad segamisnõusse.
Pane oad segamisnõusse.
Vedelda segamisnõu sisu.
Vala segamisnõu sisu ahjuvormi.

Nüüd, kui olete programmeerimise kontseptsioonist aru saanud, vaatame lähtekoodi – selle põhikomponente ja nendega töötamist.

See artikkel on osa algajatele mõeldud arendust käsitlevast artiklite seeriast.

2. osa – Lähtekood

Paljud programmeerimiskeeled on varustatud paljude raamatukogudega. Tavaliselt kutsutakse neid SDK(tarkvaraarenduskomplektid). Laaditakse koos kompilaatoriga tehnoloogiate, rakenduste ja projektide edasiseks loomiseks. Samuti on olemas raamistikud, mis on loodud projekti arendamise hõlbustamiseks ja selle erinevate komponentide kombineerimiseks.

Mõnda valitud keelega kaasas olevat identifikaatorit ei saa kasutajaidentifikaatorina kasutada. Näiteks on sõna string Java keeles. Selliseid identifikaatoreid koos märksõnadega kutsutakse Reserveeritud sõnad. Need on ka erilised.

Kõik märksõnad on reserveeritud. Samuti peaksid teie valitud sõnad olema mõistlikud neile, kes neid esimest korda näevad.

Põhiandmetüübid

Lähtekood on erinevat tüüpi andmete kontsentratsioon: numbrid(3, 5,7, -100, 3,142) ja sümbolid(M, A). Mõned programmeerimiskeeled jagavad numbrid alamtüüpideks, näiteks täisarvud(täisarvud).

Täisarvud võivad olla ikooniline Ja allkirjastamata, suur ja väike. Viimased sõltuvad tegelikult selliste numbrite jaoks reserveeritud mälu mahust. Seal on kümnendkohaga numbreid, mida tavaliselt nimetatakse kahekordne Ja ujuk, olenevalt õpitavast keelest.

On ka loogilisi andmetüüpe tõeväärtus see asi tõsi või vale.

Keerulised andmetüübid

Ülaltoodud tüüpe tuntakse elementaarsete, esmaste või põhilistena. Nendest põhitüüpidest saame luua keerukamaid andmetüüpe.

Array( Massiiv) on komplekstüübi lihtsaim vorm. rida ( String) on märkide massiiv. Me ei saa ilma nende andmeteta hakkama ja kasutame neid sageli koodi kirjutamisel.

Tähemärkide kombinatsioon on rida. Kui kasutada analoogiat, siis arvuti string tähendab, et sõna kuulub inimesele. Sõna "termomeeter" koosneb 9 märgist – me nimetame seda lihtsalt märgistringiks. Stringide töötlemine on ulatuslik teema, mida iga pürgiv programmeerija peaks õppima.

Keerulised andmetüübid tulevad enamiku kasutatavate programmeerimiskeeltega. On ka teisi, näiteks klassisüsteemid. Seda nähtust tuntakse ka kui objektorienteeritud programmeerimist ( OOP).

Muutujad

Muutujad on lihtsalt mälukohtade nimed. Mõnikord peate salvestama lähtekoodi andmed kohta, kus saate neid kasutada. Tavaliselt on see kompilaatori/tõlk reserveeritud mälukoht. Peame andma neile mälurakkudele nimed, et saaksime neid hiljem meeles pidada. Kaaluge allolevat Pythoni koodilõiku:

pet_name = "Jõehobu" prindi lemmiklooma_nimi

pet_name = "Jõehobu"

prindi lemmiklooma_nimi

kodulooma nimi– muutuja näide ja salvestatud andmete tüüp kodulooma nimi, on string, mis muudab muutuja stringiks. On ka numbreid. Seega liigitatakse muutujad andmetüübi järgi.

Konstandid

Konstandid on väärtused, mis ei muutu programmi elutsükli jooksul. Enamasti kasutatakse nende nimedes suurtähti. Mõned keeled toetavad püsivate väärtuste loomist ja mõned mitte.

Olemas tugevasti trükitud programmeerimiskeeled, milles iga muutuja peab olema teatud tüüpi. Kui olete tüübi valinud, ei saa te seda enam muuta. Java on sellise keele hea näide.

Teised ei paku neid funktsioone. Nemad on lõdvalt trükitud või dünaamilised programmeerimiskeeled. Näide – Python.

JavaScriptis konstantse väärtuse deklareerimiseks toimige järgmiselt.

JavaScript

const petName = "Jõehobu"

const petName = "Jõehobu"

Literaalid

Igas lähtekoodis on andmetüüpe, mida kasutatakse kogu ulatuses ja mis muutuvad ainult siis, kui neid redigeeritakse. See sõnasõnalised, mida ei tohiks segi ajada muutujate ega konstantidega. Ükski lähtekood ei saa ilma nendeta hakkama. Literaalid võivad olla stringid, numbrid, kümnendkohad või mis tahes muud andmetüübid.

Ülaltoodud lõigus on sõna "Jõehobu" stringliteraal. Kuni lähtekoodi muutmiseni on see alati "Jõehobu". Kui olete õppinud kodeerima, saate teada, kuidas manipuleerida literaalidega viisil, mis jätab suurema osa koodist muutmata.

Kirjavahemärgid/sümbolid

Enamikus kirjutatud programmides leiate sõltuvalt valitud programmeerimiskeelest erinevaid kirjavahemärke. Näiteks Java kasutab rohkem kirjavahemärke kui Python.

Põhimärkide hulka kuuluvad koma ( , ), semikoolon ( ; ), koolon ( : ), lokkis traksid ( {} ), tavalised sulud ( () ), nurksulud (), jutumärgid ( «» või » ), vertikaalne riba ( | ), kaldkriips ( \ ), punkt ( . ), küsimärk ( ? ), vankrid ( ^ ) ja protsent ( % ).

Tere tulemast programmeerimismaailma, kus kirjavahemärgid on teie parimad sõbrad. Peagi avastate, et teie koodis on neid alati palju.

Operaatorid

Tõenäosus, et kirjutate mõne toimingu tegemiseks lähtekoodi, on äärmiselt suur. Kõik meie kasutatavad programmeerimiskeeled sisaldavad palju operaatoreid. Nende hulgas kasutatakse lisamist ( + ), jaotus ( / ) korrutamine ( * ), lahutamine ( ) ja suurem kui märk ( > ).

Operaatorid liigitatakse tavaliselt järgmiselt:

  1. Määramise operaatorid. Mõnikord tõlgendatakse neid kui võrdub, Mis on valesti. Võrdsust kasutatakse kahe väärtuse võrdlemiseks. Kuid määramisoperaator määrab näiteks muutujale väärtuse pet_name = 'Jõehobu'
  2. Aritmeetilised operaatorid. Koosneb operaatoritest, mis täidavad aritmeetilisi ülesandeid, nagu liitmine ja lahutamine. Mõned programmeerimiskeeled pakuvad aritmeetilisi operaatoreid, kui teistel ei pruugi neid arsenalis olla. Näiteks mooduli/jäägi operaator ( % ) tagastab ülejäänud jagamistehte.
  3. Suhteoperaatorid. Kasutatakse väärtuste võrdlemiseks. Nende hulka kuuluvad suurem kui, väiksem kui, võrdne, mitte võrdne. Nende esitlus sõltub ka sellest, millist programmeerimiskeelt te õpite. Mõne PL jaoks pole see võrdne – on küll <> , teistele - != või !== .
  4. Loogilised operaatorid. Kasutatakse loogiliste toimingute tegemiseks. Tavaliselt kasutatavad loogilised operaatorid on Ja, või, Ei. Mõned keeled esindavad neid operaatoreid erimärkidena. Näiteks, && loogilist esindama Ja, || - Sest või, Ja ! - Sest Ei. Loogilisi väärtusi hinnatakse tavaks Boole'i ​​väärtuste abil tõsi või vale.

Kommentaarid

Programmeerimistegevuse oluliseks aspektiks on dokumenteerimine. Nii selgitate oma koodi teistele programmeerijatele. Seda tehakse kommentaaride abil, mis lisatakse koodi erinevatesse osadesse. Kommentaaride abil saate teisi programmeerijaid oma kirjutatud programmi kaudu juhendada.

Kompilaator ignoreerib koodi ridu, mis on kommentaarid.

Kommentaaride deklaratsioon on eri keelte puhul erinev. Näiteks, # kasutatakse Pythonis kommentaaride sisestamiseks.

Siin on näide Pythonis olevast kommentaarist:

# programmi fragment Fibonacci arvutamiseks N arvust

Java

// rekursiivne juurutamine Factorial import java.util.Scanner; class RecursiveFactoriaal ( public static void main(String args) ( Skänner input=new Scanner(System.in); System.out.print("Leia faktoriaal: "); int num=input.nextInt(); System.out .println("Factory of "+num+" = "+fact(num)); ) staatiline pikk fakt(int n) ( if(n)< 2) return 1; return n * fact(n-1); } }

Tänapäeval tunnevad paljud ettevõtted ja ka eraisikud vajadust oma veebisaidi järele, mistõttu on Interneti-projektide arendamise ja edendamise teemaline teave nii nõutud. Paljud inimesed on huvitatud küsimusest - kuidas ise luua veebisait, programmi kood mille jaoks see on nagu maja vundament? Proovime seda probleemi mõista, süvenedes veebiarenduse teemasse.

Veebileht ei ole ainult teksti, linkide, piltide ja värviliste bännerite kogum, see on ka programmikood, mis jookseb kasutaja arvutis või serveri poolel. Ja kui tänapäeval saab peaaegu igaüks Internetist või mõnest populaarsest graafilisest redaktorist valmiskujutisi kasutades luua vajaliku eraldusvõime ja kvaliteediga vajaliku formaadiga pilte, siis looge saidi kood mittespetsialisti jaoks on see täis märkimisväärseid raskusi.

Rakenduste ja internetiprojekti kui terviku kvaliteet sõltub tugevalt saiti arendava programmeerija oskustest, mille programmikoodis võib esineda vigu, mis mõjutavad suuresti veebilehtede laadimiskiirust ja paljusid muid kogu töötamise aspekte. saidid, sealhulgas turvalisusega seotud. Seetõttu on koodis vigade tuvastamine ja kõrvaldamine kohustuslik komponent iga veebilehe loomisel. Kompleksse ettevõtte veebisaidi arendamine on kõige parem usaldada spetsialistidele (kui te seda ei ole), sest mõnda viga on raske tuvastada ja paljud neist võivad veelgi kaasa tuua aeglase laadimise ja veebilehtede vale kuvamise ettevõtte brauserites. Interneti-kasutajate arvutid. Liiga pikk laadimine võib põhjustada külastajate väljavoolu saidilt ja liikluse kvaliteedi langust, mis vähendab kommerts-Interneti-projektide kasutamise kasumit ja tõhusust.

Esiteks HTML ja CSS

Veebidokumendi aluseks on HTML märgistuskeeles kirjutatud kood. Märgistuskeelt ei tohiks segi ajada programmeerimiskeelega ja mis tegelik erinevus on, on üksikasjalikult kirjas. Põhimõtteliselt saate HTML-i saidi arendajale pakutavate käskude komplekti kasutades määrata staatilise veebidokumendi kõik vajalikud parameetrid - elementide paigutuse (ploki märgistus), pealkirjad, lõigud, tabelid, pildid jne. Ja HTML-i spetsiaalse lisandmooduli CSS-i abil saate kõiki loetletud märgistusobjekte positsioneerida, muuta nende stiili - värvi, suurust, vormingut jne.

Siis JavaScript

Interaktiivsed ja animeeritud elemendid, näiteks bännerid, tickerid, tagasisidevormid, töötavad veebilehtedel tänu serveri- või kliendiprogrammeerimiskeeltes kirjutatud skriptide ja koodi olemasolule. JavaScripti programmeerimiskeelt kasutades arendatud skriptid on väga populaarsed. Sellised klientskriptid ei kasuta oma töös serveri võimalusi ja neid käivitatakse kasutaja arvuti poolel ehk brauseris. See muudab JavaScripti rakendused lihtsaks ja kiireks.

Ja lõpuks PHP

Kui on vaja kirjutada keerulisi ja mahukaid koode, näiteks foorumite või külalisteraamatute jaoks, pöörduvad programmeerijad abi saamiseks serveripoolsete programmeerimiskeelte ja eelkõige . PHP-koodid käivitatakse serveri poolel, seega võib nende jõudlus olla veidi aeglasem, olenevalt kaugarvutiga ühenduse kiirusest ja selle hõivatusest. PHP- ja SQL-käskude (relatsioonilise andmebaasi spetsiaalne päringukeel) abil saate korraldada veebisaidi interaktsiooni andmebaasidega ja luua interaktiivseid Interneti-projekte - foorumeid, veebipoode, teadetetahvleid, erinevaid katalooge jne.

Saidi aluseks on programmi kood viimati muutis: 3. märtsil 2016 Admin

3. september 2014 kell 16.07

Kas vajate tõesti lähtekoodi?

  • Mikrokontrolleri programmeerimine
  • Tõlge
Paljudes teadmistes, paljudes kurbustes
Kui küsite mõnelt püsivara arendajalt, kas ta soovib juurdepääsu kasutatava reaalajas operatsioonisüsteemi lähtekoodile, on vastus peaaegu kindlasti jah. Sama kehtib iga ostetud tarkvara kohta. Kas see on mõistlik vastus kõigil juhtudel ja miks on lähtekood mõnikord vajalik ja mõnikord oodatust vähem kasulik?

On mitmeid põhikriteeriume, mida insenerid reaalajas operatsioonisüsteemi (RTOS) valides kasutavad. Paljud neist – maksumus, funktsionaalsus, litsentsimine, tugi – on kahtlemata väga olulised (eriti kulud – see on meie tegelikkus). Teine kriteerium – lähtekoodi kättesaadavus – ei pruugi aga olla nii oluline, kuid seda hinnatakse alati tugevaks teguriks.

Lähtekoodi kättesaadavus ei tähenda, et see oleks automaatselt tasuta. See lähenemisviis kehtib ainult avatud lähtekoodiga toodete puhul; muudel juhtudel võivad tootjad lähtekoodi eest tasu võtta või selle nõudmisel kättesaadavaks teha.

Riistvara arendus. See hõlmab ka lähtekoodi, mis kehtib eriti VHDL-i ja Verlogi kasutavate arenduste puhul. Kuidas siin asjad käivad? Ajalooliselt tugines insener integraallülituse valimisel ja selle rakenduse kavandamisel spetsifikatsioonidele, mis määrasid kindlaks funktsionaalsuse, pistikupesa, võimsusnõuded jne. Ja samal ajal ei oodanud keegi näha IC sisemise struktuuri täielikku diagrammi, kuigi sageli võis näha plokkskeemi (peamiselt illustreeriva materjalina, mis hõlbustas tööpõhimõtete mõistmist) ja mõnikord isegi vooluringi skeem (analoog-IC-de, näiteks op-amprite jaoks), kuigi nimetusi pole.
Tänapäeval ASIC- või FPGA-püsivara projekteeriv insener kasutab tõenäoliselt mõnda eelehitatud IP-plokki – eelpakendatud plokki, mis pakub spetsiifilisi funktsioone. Valik tehakse siiski spetsifikatsioonide põhjal ja pole sugugi ilmne, et originaal HDL IP jaoks on pakendis kaasas. See musta kasti lähenemisviis on riistvaramaailmas hästi tuntud.

Ohutus. Kõik tootes sisalduvad tehnoloogiad tuleks valida tulevast tehnilist tuge silmas pidades. Näiteks IP-aadressi valimisel peaksite vältima ühe tootja ainulaadsete toodete kasutamist, mis võib leevendada tarnehäiretega seotud probleeme.
IP-aadressi kasutamisel, olgu selleks riistvara või tarnetarkvara, tarnetõrkeid kui selliseid ei esine tõenäoliselt (välja arvatud ühekordsete litsentside puhul), kuid pidev tugi peab olema olemas. Seetõttu tasub enne konkreetse teostuse valimist küsida, kas teie tarnija tegutseb kogu teie toote eluea jooksul.

Kui IP lähtekood on saadaval, võimaldab see lahendada kõik (peaaegu kõik) tarkvaraprobleemid, isegi kui müüja ei saa enam tuge pakkuda. Sel põhjusel on paljud RTOS-i ostjad jne. tahaks, et lähtekood oleks igaks juhuks riiulil isegi siis, kui nad seda kunagi ei vaata.

Tarkvara kohandamine Peamine erinevus manussüsteemide ja lauaarvutite vahel on esimese varieeruvus. Enamik personaalarvuteid on sarnased paljude teistega ja ainus valik on täitmiskeskkonna vahel: Windows, Mac või Linux. Manussüsteemid on seevastu uskumatult muutlikud – erinevad protsessorid, mälukonfiguratsioonid ja välisseadmed. Sellest tulenevalt peab IP-tarkvara olema paindlik, et seda saaks juurutada mitmesugustes süsteemides. Kuigi paljusid tooteid, nagu RTOS, tarnitakse binaarses vormis – tavaliselt konkreetsele arhitektuurile kohandatud raamatukoguna –, võivad lähtekoodi edastamise nõuded tarnijaid ergutada, kaotades vajaduse salvestada ja toetada mitut variatsiooni, kuna IP allikana pakkumine lahendab paljud neist probleemidest. probleeme. Kasutaja saab luua koodi konkreetse protsessori jaoks, kohandada seda seadme mälukaardile ja lisada vajalikke seadmelaiendeid. Mõnel juhul saab IP-ploki konfigureerida tingimusliku kompileerimise abil – tavaliselt redigeeritakse konfiguratsiooni määratlemiseks päisefaili.

Sertifitseerimine. Teatud tüüpi rakenduste (nt sõjalised/lennundus- ja meditsiinilised) puhul peab püsivara olema ohutuse ja erinevate standarditega vastavuse tagamiseks sertifitseeritud. See protsess on keeruline ja kulukas ning hõlmab tavaliselt iga koodirea kontrollimist. Seetõttu ei ole tavaliselt võimalik osta "eelsertifitseeritud" tarkvaraüksusi, kuna kogu rakendus vaadatakse üle. Seega otsib missioonikriitilise rakenduse arendaja tõenäoliselt IP-aadressi, mis on saadaval koos lähtekoodiga, et saaks teostada täielikku kontrolli.

Mis on lähtekood?
Küsimus võib tunduda kummaline, kuid vastuseta muutub selle olemasolu (või puudumise) mis tahes aspektide arutamine mõnevõrra kummaliseks harjutuseks. Vastus võib tunduda ilmne: programmi lähtekood on failide kogum, mis sisaldab kõrgetasemelisi või montaažikeele juhiseid, mida saab kompileerida ja kokku panna toimivateks binaarkäskudeks. Kohe tekib küsimus - kas transformatsiooniprotsessiks vajalikud programmid ja nende jaoks täitmiskeskkond on osa lähtekoodist (binaarsel kujul)? Sellegipoolest vastab see määratlus vähemalt kolmele vormile, milles saab "lähtekoodi" esitada (näiteks räägime C-keelest) kvaliteedi halvenemise järjekorras:
1) Tõeliselt lähtekood, hea paigutusega, selgete muutujate nimetamise tavadega ja hästi kommenteeritud (eeldusel, et IP-arendajal on see olemas, mis on täiesti vabatahtlik).
2) Koodiread, mis kompileeritakse edukalt, KUID ilma kommentaaride või eriti tähenduslike tunnusnimedeta.
3) Koodiread pärast takistust, mis muudab koodi inimesele loetamatuks, kuid kompilaatorile vastuvõetavaks. Selleks asendatakse identifikaatorite nimed mõttetutega ning eemaldatakse kõik kommentaarid ja süntaktiliselt mittevajalikud tühikud. On olemas pöördprotsess, kuid selle tulemusi ei saa peaaegu vastuvõetavaks nimetada.
Kõiki neid vorme kasutavad tarkvarapakkujad järgmistel eesmärkidel:
1) on see, mida enamik ostjaid ootab ja mida paljud tootjad tegelikult pakuvad. Ostuotsuse tegemisel, kui vajate lähtekoodi, on aga oluline veenduda, et see on võimalik; kahtluse korral küsige lihtsalt näidiseid.
2) kasutatakse tavaliselt siis, kui müüja soovib tarnida minimaalselt nõutavat, mis võib olla (ainult) sertifitseerimiseks piisavalt hea.
3) kasutatakse IIP-i sisu kaitsmiseks uudishimulike pilkude eest, mis tähendab, et tarkvara saab konfigureeritavusest kasu, kuid ei midagi enamat.

Lähtekoodi puudused.
Lähtekoodi kättesaadavuse suurim puudus: see on väga ahvatlev. Iga arendaja tahab oma tarkvara võimalikult heaks teha (noh, selline vaatenurk on olemas). Seega, kui näiteks RTOS API ei tööta täpselt, et olla rakenduse jaoks optimaalne, annab lähtekoodi saadavus võimaluse seda muuta.
Kuigi rakenduse optimaalseks muutmine võib tunduda suurepärane asi, on probleem pikaajalise toega. Mis siis, kui RTOS-i funktsionaalsusega on probleeme? Tarnija ei toeta muudetud toodet. Mida teha, kui RTOS-i uus versioon ilmub? Selle ümberkujundamisse kaasamine võib nõuda palju aega korduvate muudatuste jaoks, eriti kui nende autor enam teie heaks ei tööta (noh, kas tegite need muudatused 3 aastat tagasi ja loomulikult või, nagu öeldakse, muidugi ei teinud te seda viitsinud kirjutada vastavaid dokumente).

Arvestades olukordi, kus lähtekood võib olla soovitav, kasulik või vajalik, on järeldus, et see pole absoluutselt ja alati vajalik. Kui ostate IP-d suurelt, tuntud ja stabiilselt pakkujalt, kes suudab pakkuda pikaajalist tuge, ei ole lähtekoodi omamine asjakohane ja see võib olla isegi puudus.

Assembly (või assembler) keel on arvuti või muu programmeeritava riistvara madala taseme programmeerimiskeel, milles keele ja arhitektuuri masinkoodi käskude vahel on seos. Iga masinale orienteeritud keel (professionaalses terminoloogias - "monteerija") viitab konkreetsele arvutiarhitektuurile. Seevastu enamik kõrgetasemelisi programmeerimiskeeli on platvormideülesed, kuid vajavad tõlgendamist või kompileerimist.

Platvormispetsiifilist koodi võib nimetada ka sümboolseks keeleks või juhiste kogumiks, mida täidab otse arvuti keskseade. Iga protsessori käivitatav programm koosneb käskude seeriast. Masinkood on definitsiooni järgi programmeerijale nähtav programmeerimise madalaim tase.

Kasutamine

Paljud toimingud nõuavad ühte või mitut operandi, mis suudavad koostada täieliku käsu, ja paljud koostajad saavad operandidena aktsepteerida arvuavaldisi ja konstante, samuti registreid ja silte. See vabastab masinkoodi programmeerija tüütutest korduvatest arvutustest. Sõltuvalt arhitektuurist võib neid elemente kombineerida ka konkreetsete juhiste või adresseerimisrežiimide jaoks, kasutades nihkeid või muid andmeid ning fikseeritud aadresse. Paljud "ehitajad" pakuvad lisamehhanisme, et hõlbustada programmide arendamist, juhtida ehitusprotsessi ja toetada silumist.

Ajalooline perspektiiv

Esimese montaažikeele töötas 1947. aastal välja Kathleen Booth ARC2 jaoks Birkbecki protsessis koostöös John von Neumanni ja Herman Goldsteiniga Instituudis Advanced Study. SOAP (Symbolic Optimal Assembly Program) oli Stan Pawley poolt 1955. aastal loodud 650 koostekeel.

Ajalooliselt on paljud tarkvaralahendused kirjutatud ainult assemblerkeeles. OS-e kirjutati ainult selles keeles kuni Burroughsi MCP (1961) kasutuselevõtuni, mis oli kirjutatud Executive Systems Problem Oriented Language (ESPOL) keeles. Paljud kommertsrakendused olid kirjutatud masinale orienteeritud keeles, sealhulgas suur hulk IT-hiiglaste loodud IBMi suurarvutitarkvara. COBOL ja FORTRAN tõrjusid lõpuks suure osa tööst välja, kuigi paljud suured organisatsioonid säilitasid montaažikeelse rakendusinfrastruktuuri 1990. aastatel.

Enamik varasemaid mikroarvuteid olid käsitsi kodeeritud, sealhulgas enamik operatsioonisüsteeme ja suuremahulisi rakendusi. Selle põhjuseks on asjaolu, et nendel masinatel olid suured ressursipiirangud, need maksustasid kohandatud mälu ja kuvaarhitektuuri ning pakkusid piiratud süsteemiteenuseid vigadega. Võib-olla olulisem oli esmaklassiliste ja kõrgetasemeliste mikroarvutite kasutamiseks sobivate keelekompilaatorite puudumine, mis muutis masinkoodi õppimise keeruliseks.

Kasutusala

Assamblee keeled kõrvaldavad suure osa probleemsetest, tüütutest ja aeganõudvatest esimese põlvkonna montaažikeele programmeerimisest, mida on vaja kõige varasemates arvutites. See vabastab programmeerijad numbrikoodide meeldejätmise ja aadresside arvutamise rutiinist. Algstaadiumis kasutati "valmistajaid" laialdaselt igat tüüpi programmeerimisel. Kuid 1980. aastate lõpuks. nende kasutamine on programmeerimise tootlikkuse suurendamise otsimisel suures osas välja tõrjutud kõrgema taseme keelega. Tänapäeval kasutatakse komplekteerimiskeelt endiselt otseseks riistvaraga manipuleerimiseks, juurdepääsuks spetsiaalsetele protsessori juhistele või kriitiliste jõudlusprobleemide lahendamiseks. Tüüpilised rakendused hõlmavad seadme draivereid, madala taseme manustatud süsteeme ja reaalajas parameetreid.

Rakenduse näidised

Levinud näited suurte montaažikeeleprogrammide kohta hõlmavad IBM PC DOS-i operatsioonisüsteeme, Turbo Pascali kompilaatorit ja varasemaid rakendusi, nagu Lotus 1-2-3 tabelarvutusprogramm.

Masinapõhine keel oli paljude 1980. ja 1990. aastate populaarsete koduarvutite (nagu MSX, Sinclair ZX Spectrum, Commodore 64, Commodore Amiga ja Atari ST) peamine arenduskeel. Selle põhjuseks on asjaolu, et nende süsteemide tõlgendatud BASIC-dialoogid pakkusid aeglast täitmiskiirust ja piiratud võimalust saadaolevat riistvara täielikult ära kasutada. Mõnel süsteemil on isegi integreeritud arenduskeskkond (IDE) koos kõrgetasemeliste silumis- ja makrotööriistadega. Mõnedel Radio Shack TRS-80 ja selle järglaste jaoks saadaolevatel kompilaatoritel oli võimalus kombineerida sisseehitatud montaažiallikat kõrgetasemeliste programmidega. Pärast kompileerimist tootis tekstisisene koostaja sisemise kahendkoodi.

Mannekeenide masinkood. Terminoloogia

Assemblerprogramm loob opkoode, tõlkides operatsioonide ja adresseerimisrežiimide mnemoonika ja süntaktiliste reeglite kombinatsioonid nende numbrilisteks ekvivalentideks. See esitus sisaldab tavaliselt nii opkoodi kui ka muid juhtbitte ja andmeid. Assembler hindab ka konstantseid avaldisi ja määratleb mälukohtade ja muude objektide sümboolsed nimed.

Masinakoodid võivad teostada ka mõnda lihtsat tüüpi käsukomplektist sõltuvat optimeerimist. Üks konkreetne näide selle kohta oleks erinevate müüjate populaarsed x86 "ehitajad". Enamik neist saab nõudmisel sooritada harukäskude asendusi suvalise arvu käikudega. Võimaldab ka lihtsat käskude ümberrühmitamist või sisestamist, näiteks mõned RISC-arhitektuuride komplekteerijad, mis võivad aidata optimeerida intelligentset käskude ajastamist, et protsessori konveier kõige paremini ära kasutada.

Sarnaselt varasematele programmeerimiskeeltele, nagu Fortran, Algol, Cobol ja Lisp, on monteerijad olnud saadaval alates 1950. aastatest, nagu ka esimesed põlvkonnad tekstipõhised arvutiliidesed. Kompilaatorid olid aga esikohal, sest neid on palju lihtsam kirjutada kui kõrgetasemeliste keelte kompilaatoreid. Seda seetõttu, et iga mnemoonika, samuti käskude adresseerimisrežiimid ja operandid tõlgitakse iga konkreetse käsu numbrilisteks esitusteks ilma suurema konteksti või analüüsita. Samuti on olnud mitmeid tõlkijaklasse ja poolautomaatseid koodigeneraatoreid, mille omadused on sarnased nii komplektidele kui ka kõrgetasemelistele keeltele, kusjuures kiiruskood on võib-olla üks tuntumaid näiteid.

Läbimiste arv

Objektifaili loomiseks on kahte tüüpi montaažikeele programmeerimist, mis põhinevad allika läbimiste arvul (lugemiskatsete arvul).

Ühekäigulised monteerijad läbivad lähtekoodi üks kord. Iga sümbol, mida kasutatakse enne selle määratlemist, nõuab objekti koodi lõpus viga.
Mitmekäigulised komplekteerijad loovad esimestel käikudel tabelid kõigi sümbolite ja nende tähendustega ning kasutavad seejärel tabelit järgmistel käikudel koodi genereerimiseks.

Ühekäiguliste monteerijate kasutamise algpõhjus oli monteerimise kiirus – sageli nõudis teine ​​läbimine programmi allika lindile tagasikerimist ja uuesti lugemist. Hilisematel arvutitel, kus oli palju suuremat mälumahtu (eriti kettasalvestuseks), oli ruumi kogu vajaliku töötluse tegemiseks ilma uuesti lugemata. Multi-pass assembleri eeliseks on see, et vigade puudumine tähendab, et linkimisprotsess (või programmi laadimine, kui assembler toodab otse käivitatava koodi) on kiirem.

Mis on kahendkood?

Assembly keeles kirjutatud programm koosneb protsessori mnemooniliste käskude ja metalausete (tuntud kui direktiivid, pseudojuhised ja pseudooperatsioonid), kommentaaridest ja andmetest. Koostekeele juhised koosnevad tavaliselt opkoodi märguannetest. Sellele järgneb andmete, argumentide või parameetrite loend. Assembler tõlgib need masinkeelseteks käskudeks, mis laaditakse mällu ja käivitatakse.

Näiteks käsib allolev juhend x86/IA-32 protsessoril teisaldada 8-bitine väärtus registrisse. Selle käsu binaarkood on 10110, millele järgneb 3-bitine identifikaator, mis kasutab registrit. AL-i ID on 000, nii et järgmine kood laadib AL-i registri andmetega 01100001.

Tekib küsimus: mis on kahendkood? See on kodeerimissüsteem, mis kasutab kahendarvu "0" ja "1" tähe, numbri või muu sümboli tähistamiseks arvutis või muus elektroonilises seadmes.

Näidismasina kood: 10110000 01100001.

Tehnilised omadused

Koostekeele teisendamine masinkoodiks on montaažikeele ülesanne. Pöördprotsess toimub demonteerimisseadme abil. Erinevalt kõrgetasemelistest keeltest on paljude lihtsate koostelausete ja masinkeele juhiste vahel üks-ühele vastavus. Mõnel juhul võib koostaja siiski pakkuda pseudojuhiseid (makrosid). Need laienevad mitmele masinakeelele, et pakkuda sageli vajalikke funktsioone. Enamik täispinu komplekteerijaid pakub ka rikkalikku makrokeelt, mida müüjad ja programmeerijad kasutavad keerukamate koodi- ja andmejadade genereerimiseks.

Igal arvutiarhitektuuril on oma masinakeel. Arvutid erinevad toetatavate toimingute arvu ja tüüpide, registrite suuruse ja arvu ning salvestatud andmete esitusviisi poolest. Kuigi enamik üldotstarbelisi personaalarvuteid on võimelised täitma suures osas samu funktsioone, on nende toimimisviis erinev. Vastavad montaažikeeled peegeldavad neid erinevusi.

Ühe juhiste komplekti jaoks võib olla mitu mnemoonika või montaažikeele süntaksi komplekti, mis tavaliselt luuakse erinevates programmides. Sellistel juhtudel on kõige populaarsem tavaliselt see, mille tootja pakub ja mida kasutatakse nende dokumentatsioonis.

Disaini keel

Kollektsionääride autorite väidete klassifitseerimises ja kasutatavas nomenklatuuris on palju erinevusi. Eelkõige kirjeldavad mõned pseudooperatsioonina kõike muud peale masina või laiendatud mnemoonika. Koostamise põhisõnavara koosneb käsukomplektist – kolmest põhitüübist käskudest, mida kasutatakse tarkvaratoimingute määratlemiseks:

  • opkood-mnemoonika;
  • andmete määratlused;
  • kollektsionääride käskkirjad.

Opcode-mnemoonika ja laiendatud mnemoonika

Assembly keeles kirjutatud juhised on erinevalt kõrgetasemelistest keeltest elementaarsed. Tavaliselt on märgukiri (suvalised sümbolid) ühe käivitatava koodikäsu sümboolne märge. Iga käsk koosneb tavaliselt opkoodist pluss nullist või enamast operandist. Enamik käske viitab ühele või kahele väärtusele.

Laiendatud mnemoonikat kasutatakse sageli juhiste spetsiaalseks kasutamiseks - eesmärkidel, mis juhendi nimest ei ilmne. Näiteks pole paljudel protsessoritel selgesõnalist NOP-käsku, kuid neil on sisseehitatud algoritmid, mida selleks kasutatakse.

Paljud ehitajad toetavad algelisi sisseehitatud makrosid, mis võivad genereerida kaks või enam masinakäsku.

Andmedirektiivid

Andmete ja muutujate salvestamiseks kasutatavate elementide määratlemiseks kasutatakse juhiseid. Need määravad andmetüübi, pikkuse ja joonduse. Need juhised võivad samuti määrata, kas teave on saadaval välistele programmidele (kogutakse eraldi) või ainult programmile, milles andmejaotis on määratletud. Mõned komplekteerijad määratlevad neid pseudooperaatoritena.

Koostage direktiivid

Koostamisjuhised, mida nimetatakse ka pseudokoodideks või pseudooperatsioonideks, on monteerijale antud juhised, mis suunavad teda tegema muid toiminguid peale koostejuhiste. Direktiivid mõjutavad assembleri tööd ja võivad mõjutada objekti koodi, sümbolitabelit, loendifaili ja sisemiste assembleri parameetrite väärtusi. Mõnikord on termin pseudokood reserveeritud objektikoodi genereerivate direktiivide jaoks.

Pseudoop-nimed algavad sageli punktiga, et eristada neid masina juhistest. Teine levinud pseudooperatsioonide kasutusala on salvestusalade reserveerimine käitusaja andmete jaoks ja võib-olla nende sisu initsialiseerimine teadaolevate väärtustega.

Isedokumenteeriv kood

Sümboolsed koostajad võimaldavad programmeerijatel seostada suvalisi nimesid (sildid või sümbolid) mälukohtade ja erinevate konstantidega. Sageli antakse igale konstandile ja muutujale oma nimi, nii et juhised võivad viidata nendele asukohtadele nime järgi, edendades seeläbi isedokumenteerivat koodi. Käivitatavas koodis on mis tahes alamprogrammi nimi seotud selle sisenemispunktiga, nii et kõik alamprogrammi kutsed võivad kasutada selle nime. GOTO sildid määratakse alamprogrammides. Paljud kollektsionäärid toetavad kohalikke sümboleid, mis eristuvad tavasümbolitest leksikaalselt.

Assemblerid, nagu NASM, pakuvad paindlikku sümbolihaldust, võimaldades programmeerijatel hallata erinevaid nimeruume, arvutada automaatselt andmestruktuuride nihkeid ja määrata silte, mis viitavad sõnasõnalistele väärtustele või koostaja tehtud lihtsate arvutuste tulemusele. Kiirklahve saab kasutada ka konstantide ja muutujate lähtestamiseks ümberpaigutatavate aadresside abil.

Assamblee keeled, nagu enamik teisigi, võimaldavad teil lisada programmi lähtekoodile kommentaare, mida koostamise käigus eiratakse. Kohtuekspertiisi annotatsioon on komplekteerimiskeele programmides oluline, kuna masina binaarkäskude jada määratlust ja eesmärki on raske kindlaks teha. Kompilaatorite või lahtimonteerijate toodetud "toores" (kommenteerimata) montaažikeelt on üsna raske lugeda, kui on vaja muudatusi teha.