Jotkut huvin vuoksi, jotkut todistaakseen olemassaolonsa tai kumotakseen hypoteesin, jotkut harjoittaakseen aivojaan (matkustelevat Klein-pullon pinnalla tai neliulotteisessa avaruudessa), mutta sadat ihmiset ovat luoneet "esoteerisia" ohjelmointikieliä. Olen käynyt läpi noin 150 näistä kielistä, enkä ole koskaan enää entinen.

"Argh!", "Oof!", "2-ill", "Nhohnhehr", "Noit o" mnain gelb", "DZZZZ", "Ypsilax", "YABALL", vittu - nämä ovat loitsuja, runous on vain nimiä ... alla catom - koodiesimerkkejä katseenvangittavimmista ohjelmointikielistä.

Kanin reikä on syvä.

INTERCAL (Turing-täydellinen)



Don Woods ja Jim Lyon

Yksi vanhimmista esoteerisista ohjelmointikielistä. Tekijöiden mukaan sen nimi tarkoittaa "kääntäjäkieltä ilman lausuttavaa lyhennettä". Kielen loivat vuonna 1972 opiskelijat Don Woods ja James M. Lyon parodiaksi olemassa olevista ohjelmointikielistä ja henkisestä voimistelusta.

Hei maailma

Jokaiselle ohjelmakäskylle voidaan antaa todennäköisyys, jolla se suoritetaan ohjelman käynnistyessä. Lisäksi on komentoja, jotka estävät myöhempien tietyntyyppisten komentojen suorittamisen tai muuttujien muutokset.

Hei maailma!

// Stephen McGrealin "Hello World".
// Huomaa, että tässä lähdekoodissa esitetyt näkemykset eivät välttämättä ole samat kuin lähdekoodi

Gr34t l33tN3$$?
M3h…
it 41n"t s0 7RICKY.

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!!! ;s
w4r3Z c0ll3cT10n2 r 7eh l3Et3r!

Qu4k3 cL4nS r 7eh bE5t tH1ng 1n teh 3nTIr3 w0rlD!!!
g4m3s wh3r3 u g3t to 5h00t ppl r 70tAl1_y w1cK1d!!!
I"M teh fr4GM4STER AN I"L t0t41_1Ly pyyhi phr34k1ng fL00r ***j3d1 5tYLE*** 0uR h1dE:n kanssa!!! L0L0L0L!
t3lEphR4gG1nG l4m3rs wit my M8tes r34lLy k1kK$ A$$

L33t hAxX0r$ CrE4t3 u8er- k3wL 5tUff LIKE n34t pR0gR4mm1nG loivaGe$…
s0m3tIm3$ teh l4nGu4gES l00k vain l1k3 rE41_ 0neS 7o MAkE ppl Th1nk th3y"r3 ju$t n0rMal lEE7 5pEEk but th3y"re 5ecRetLy c0dE!!!
n080DY unDER5tAnD$ l33t PUHU 4p4rT fr0m j3d1!!!
50mE lapsi 0n A me$$4gEb04rD m1ghT 8E a r0xX0r1nG hAxX0r wH0 w4nT2 t0 bR34k 5tuFf, 0r mAyb3 ju5t sh0w 7eh way5 l33t ppl 4dl 0 an !!! 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 JOKA P0INt l00KiNg sC3pT1c4l c0s th4t, be1_1Ev3 iT 0r n0t, 1s mitä th1s 1s!!!

5uxX0r5!!!L0L0L0L0L!!!

ArnoldC

Terminator ohjelmointikieli.

Hei maailma!

Okei!

Joko orangutaanien kieli tai Occamin Williamin unelma.

Hei maailma!

Kokki

David Morgan-Marin kehittämä esoteerinen ohjelmointikieli, jossa ohjelmat ovat samanlaisia ​​kuin kulinaarisia reseptejä. Jokainen kielen ohjelma koostuu nimestä, luettelosta muuttujista ja niiden arvoista sekä luettelosta ohjeista. Muuttujia voidaan nimetä vain peruselintarvikkeiden nimillä. Pinoa, johon muuttujien arvot sijoitetaan, kutsutaan. sekoituskulhoon, ja muuttujien manipulointitoiminnot ovat sekoitus, sekoitus ja niin edelleen.

Hei maailma

Hei World Souffle.

Ainesosat.
72 g papuja
101 munaa
108 g laardia
111 kupillista öljyä
32 kesäkurpitsaa
119 ml vettä
114 g punaista lohta
100 g dijon-sinappia
33 perunaa

Menetelmä.
Laita perunat sekoituskulhoon.
Laita dijon-sinappi sekoituskulhoon.

Laita punainen lohi sekoituskulhoon.

Laita vesi sekoituskulhoon.
Laita kesäkurpitsat sekoituskulhoon.
Laita öljy sekoituskulhoon.
Laita laardi sekoituskulhoon.
Laita laardi sekoituskulhoon.
Laita munat sekoituskulhoon.
Laita pavut sekoituskulhoon.
Nestemäistä sekoituskulhon sisältö.
Kaada sekoituskulhon sisältö uunivuokaan.

Nyt kun ymmärrät ohjelmoinnin käsitteen, tarkastelemme lähdekoodia – sen pääkomponentteja ja niiden käyttöä.

Tämä artikkeli on osa aloittelijoille tarkoitettua kehitystyötä käsittelevää artikkelisarjaa.

Osa 2 – Lähdekoodi

Monet ohjelmointikielet sisältävät monia kirjastoja. Niitä kutsutaan yleensä SDK(ohjelmistokehityssarjat). Ladattu yhdessä kääntäjän kanssa teknologioiden, sovellusten ja projektien luomista varten. Siellä on myös puitteet, luotu helpottamaan projektin kehittämistä ja yhdistämään sen eri osia.

Joitakin valittuun kieleen sisältyviä tunnisteita ei voi käyttää käyttäjätunnisteina. Esimerkki on sana merkkijono Javassa. Tällaisia ​​tunnisteita yhdessä avainsanojen kanssa kutsutaan Varatut sanat. Ne ovat myös erityisiä.

Kaikki avainsanat on varattu. Lisäksi valitsemiesi sanojen tulee olla järkeviä niille, jotka näkevät ne ensimmäistä kertaa.

Perustietotyypit

Lähdekoodi on erityyppisten tietojen keskittymä: numeroita(3, 5,7, -100, 3,142) ja symboleja(M, A). Jotkut ohjelmointikielet jakavat numerot alatyyppeihin, kuten kokonaislukuja(kokonaislukuja).

Kokonaisluvut voivat olla ikoninen Ja allekirjoittamaton, iso ja pieni. Jälkimmäiset riippuvat itse asiassa tällaisille numeroille varatun muistin määrästä. On numeroita, joissa on desimaaliosia, joita yleensä kutsutaan kaksinkertainen Ja kellua, riippuen opiskelusta kielestä.

On myös loogisia tietotyyppejä boolean tuo asia totta tai väärä.

Monimutkaiset tietotyypit

Yllä olevat tyypit tunnetaan alkeis-, primaari- tai perustyypeinä. Näistä perustietotyypeistä voimme luoda monimutkaisempia tietotyyppejä.

Array( Array) on kompleksityypin yksinkertaisin muoto. Rivi ( merkkijono) on joukko merkkejä. Emme voi tulla ilman näitä tietoja ja käytämme niitä usein koodia kirjoitettaessa.

Hahmojen yhdistelmä on linja. Analogiaa käyttääksemme merkkijono tietokoneeseen tarkoittaa, että sana kuuluu ihmiselle. Sana "lämpömittari" koostuu 9 merkistä - kutsumme sitä yksinkertaisesti merkkijonoksi. Merkkijonojen käsittely on laaja aihe, joka jokaisen aloittelevan ohjelmoijan tulisi oppia.

Monimutkaiset tietotyypit tulevat useimpien käytettyjen ohjelmointikielien mukana. On muitakin, kuten luokkajärjestelmiä. Tämä ilmiö tunnetaan myös nimellä olio-ohjelmointi ( OOP).

Muuttujat

Muuttujat ovat yksinkertaisesti muistipaikkojen nimiä. Joskus sinun on tallennettava lähdekoodisi tiedot paikkaan, josta voit käyttää niitä. Tämä on yleensä kääntäjän/tulkin varaama muistipaikka. Meidän on nimettävä nämä muistisolut, jotta voimme muistaa ne myöhemmin. Harkitse alla olevaa Python-koodinpätkää:

pet_name = "Hippo" tulosta lemmikin_nimi

pet_name = "virtahepo"

tulosta lemmikin_nimi

lemmikin nimi– esimerkki muuttujasta ja siihen tallennettujen tietojen tyyppi lemmikin nimi, on merkkijono, joka tekee muuttujasta merkkijonon. Siellä on myös numeroita. Siten muuttujat luokitellaan tietotyypin mukaan.

Vakiot

Vakiot ovat arvoja, jotka eivät muutu ohjelman elinkaaren aikana. Useimmiten heidän nimensä käyttävät isoja kirjaimia. Jotkut kielet tukevat pysyvien arvojen luomista, toiset eivät.

Olla olemassa vahvasti kirjoitetut ohjelmointikielet, jossa jokaisen muuttujan on oltava tiettyä tyyppiä. Kun olet valinnut tyypin, et voi enää muuttaa sitä. Java on hyvä esimerkki tällaisesta kielestä.

Toiset eivät tarjoa näitä toimintoja. He ovat löyhästi kirjoitettu tai dynaamiset ohjelmointikielet. Esimerkki - Python.

Näin voit ilmoittaa vakioarvon JavaScriptissä:

JavaScript

const petName = "Hippo"

const petName = "Hippo"

Literaalit

Jokaisessa lähdekoodissa on tietotyyppejä, joita käytetään kaikkialla ja jotka muuttuvat vain, jos niitä muokataan. Tämä kirjaimellisia, jota ei pidä sekoittaa muuttujiin tai vakioihin. Mikään lähdekoodi ei tule toimeen ilman niitä. Literaalit voivat olla merkkijonoja, numeroita, desimaalilukuja tai mitä tahansa muuta tietotyyppiä.

Yllä olevassa katkelmassa sana "Hippo" on merkkijonokirjain. Se on aina "Hippo", kunnes muokkaat lähdekoodia. Kun opit koodaamaan, opit käsittelemään literaaleja tavalla, joka jättää suurimman osan koodista ennalleen.

Välimerkit/symbolit

Useimmissa kirjoitetuissa ohjelmissa löydät erilaisia ​​välimerkkejä valitsemastasi ohjelmointikielestä riippuen. Esimerkiksi Java käyttää enemmän välimerkkejä kuin Python.

Perusmerkkejä ovat pilkku ( , ), puolipiste ( ; ), kaksoispiste ( : ), aaltosulkeet ( {} ), tavalliset sulut ( () ), hakasulkeet (), lainausmerkit ( «» tai » ), pystypalkki ( | ), kauttaviiva ( \ ), piste ( . ), kysymysmerkki ( ? ), vaunut ( ^ ) ja prosenttiosuus ( % ).

Tervetuloa ohjelmoinnin maailmaan, jossa välimerkit ovat parhaita ystäviäsi. Huomaat pian, että koodissasi on aina paljon niitä.

Operaattorit

Todennäköisyys, että kirjoitat lähdekoodia jonkin toiminnon suorittamiseksi, on erittäin korkea. Kaikki käyttämämme ohjelmointikielet sisältävät paljon operaattoreita. Käytettyjen joukossa ovat lisäys ( + ), jako ( / ) kertolasku ( * ), vähennys ( ) ja suurempi kuin merkki ( > ).

Operaattorit luokitellaan yleensä seuraavasti:

  1. Tehtäväoperaattorit. Joskus niitä tulkitaan on yhtä suuri, mikä hätänä. Tasa-arvoa käytetään kahden arvon vertailuun. Mutta määritysoperaattori antaa arvon esimerkiksi muuttujalle pet_name = 'Hippo'
  2. Aritmeettiset operaattorit. Koostuu operaattoreista, jotka suorittavat aritmeettisia tehtäviä, kuten yhteen- ja vähennyslaskua. Jotkut ohjelmointikielet tarjoavat aritmeettisia operaattoreita, kun toisilla niitä ei ehkä ole arsenaalissaan. Esimerkiksi moduuli/jäännös-operaattori ( % ) palauttaa loput divisioonan toiminnoista.
  3. Relaatiooperaattorit. Käytetään arvojen vertailuun. Niitä ovat suurempi kuin, pienempi kuin, yhtä suuri kuin, ei yhtä suuri kuin. Niiden esitys riippuu myös siitä, mitä ohjelmointikieltä opit. Joillekin PL:lle se ei ole sama - se on <> , muille - != tai !== .
  4. Loogiset operaattorit. Käytetään loogisten toimintojen suorittamiseen. Yleisesti käytetyt loogiset operaattorit ovat Ja, tai, Ei. Jotkut kielet edustavat näitä operaattoreita erikoismerkeinä. Esimerkiksi, && edustamaan loogista Ja, || - Sillä tai, Ja ! - Sillä Ei. Loogiset arvot on tapana arvioida Boolen arvoilla totta tai väärä.

Kommentit

Dokumentointi on tärkeä osa ohjelmointitoimia. Näin selität koodisi muille ohjelmoijille. Tämä tehdään käyttämällä kommentteja, jotka lisätään koodin eri osiin. Kommenttien avulla voit ohjata muita ohjelmoijia kirjallisen ohjelman läpi.

Kääntäjä jättää huomioimatta koodirivit, jotka ovat kommentteja.

Kommenttien ilmoittaminen on erilainen eri kielillä. Esimerkiksi, # käytetään kommenttien kirjoittamiseen Pythonissa.

Tässä on esimerkki kommentista Pythonissa:

# ohjelmafragmentti Fibonaccin laskemiseen N luvusta

Java

// rekursiivinen toteutus Factorial import java.util.Scanner; class RecursiveFactorial ( julkinen staattinen void main(String args) ( Skanneri input=new Scanner(System.in); System.out.print("Etsi tekijä: "); int num=input.nextInt(); System.out .println("Factoriaal "+num+" = "+fact(num)); ) staattinen pitkä fakta(int n) ( if(n)< 2) return 1; return n * fact(n-1); } }

Nykyään monet yritykset, kuten myös yksityishenkilöt, tuntevat tarvetta omalle verkkosivustolle, minkä vuoksi Internet-projektien kehittämisestä ja edistämisestä on niin paljon tietoa. Monet ihmiset ovat kiinnostuneita kysymyksestä - kuinka luoda oma verkkosivusto, ohjelmakoodi jolle se on kuin talon perustus? Yritetään ymmärtää tämä ongelma perehtymällä verkkokehityksen aiheeseen.

Verkkosivusto ei ole vain kokoelma tekstiä, linkkejä, kuvia ja värikkäitä bannereita, se on myös ohjelmakoodi, joka toimii käyttäjän tietokoneella tai palvelinpuolella. Ja jos nykyään melkein kuka tahansa voi luoda vaaditun muodon kuvia vaaditulla resoluutiolla ja laadulla käyttämällä valmiita kuvia Internetistä tai mistä tahansa suositusta graafisesta muokkausohjelmasta, luo sitten sivuston koodi ei-asiantuntijalle se on täynnä huomattavia vaikeuksia.

Sovellusten ja Internet-projektin laatu kokonaisuudessaan riippuu vahvasti sivustoa kehittävän ohjelmoijan taidosta, jonka ohjelmakoodissa saattaa olla virheitä, jotka vaikuttavat suuresti verkkosivujen latausnopeuteen ja moniin muihin koko sivuston toimintaan. sivusto, mukaan lukien turvallisuuteen liittyvät. Siksi koodin virheiden havaitseminen ja poistaminen on pakollinen osa mitä tahansa verkkosivustoa luotaessa. On parasta uskoa monimutkaisen yrityksen verkkosivuston kehittäminen asiantuntijoille (jos et ole sellainen), koska joitain virheitä on vaikea havaita, ja monet niistä voivat edelleen johtaa verkkosivujen hitaaseen latautumiseen ja virheelliseen näyttöön verkkoselaimissa. Internetin käyttäjien tietokoneet. Liian pitkä lataus voi aiheuttaa kävijöiden poistumisen sivustolta ja liikenteen laadun heikkenemistä, mikä heikentää kaupallisten Internet-projektien käytön tuottoa ja tehokkuutta.

HTML ja CSS ensin

Verkkodokumentin perusta on HTML-kuvauskielellä kirjoitettu koodi. Merkintäkieltä ei pidä sekoittaa ohjelmointikieleen, ja mikä todellinen ero on, on kirjoitettu yksityiskohtaisesti. Periaatteessa käyttämällä komentosarjaa, jota HTML tarjoaa sivuston kehittäjälle, voit asettaa kaikki staattisen verkkodokumentin tarvittavat parametrit - elementtien järjestelyn (lohkomerkinnät), otsikot, kappaleet, taulukot, kuvat jne. Ja CSS:n, erityisen HTML-lisäosan, avulla voit sijoittaa kaikki luetellut merkintäobjektit, muuttaa niiden tyyliä - väriä, kokoa, muotoa jne.

Sitten JavaScript

Vuorovaikutteiset ja animoidut elementit, kuten bannerit, tickerit, palautelomakkeet, toimivat verkkosivuilla palvelin- tai asiakasohjelmointikielillä kirjoitettujen komentosarjojen ja koodin vuoksi. JavaScript-ohjelmointikielellä kehitetyt skriptit ovat erittäin suosittuja. Tällaiset asiakaskomentosarjat eivät käytä työssään palvelimen ominaisuuksia ja ne suoritetaan käyttäjän tietokoneen puolella eli selaimessa. Tämä tekee JavaScript-sovelluksista yksinkertaisia ​​ja nopeita.

Ja lopuksi PHP

Kun on tarpeen kirjoittaa monimutkaisia ​​ja laajoja koodeja, esimerkiksi foorumeille tai vieraskirjoille, ohjelmoijat kääntyvät palvelinpuolen ohjelmointikielien puoleen ja erityisesti . PHP-koodit suoritetaan palvelinpuolella, joten niiden suorituskyky voi olla hieman hitaampaa riippuen etätietokoneen yhteyden nopeudesta ja sen kiireisyydestä. PHP- ja SQL-komentojen (relaatiotietokannan erityinen kyselykieli) avulla voit järjestää verkkosivuston vuorovaikutuksen tietokantojen kanssa ja luoda interaktiivisia Internet-projekteja - foorumeita, verkkokauppoja, ilmoitustauluja, erilaisia ​​hakemistoja jne.

Sivuston perustana on ohjelmakoodi muokkasi viimeksi: 3. maaliskuuta 2016, tekijä Admin

3. syyskuuta 2014 klo 16.07

Tarvitsetko todella lähdekoodia?

  • Mikrokontrolleri ohjelmointi
  • Käännös
Monessa tiedossa, monissa suruissa
Jos kysyt joltain laiteohjelmistokehittäjältä, haluavatko he saada pääsyn käyttämänsä reaaliaikaisen käyttöjärjestelmän lähdekoodiin, vastaus on lähes varmasti kyllä. Sama koskee kaikkia ostettuja ohjelmistoja. Onko tämä järkevä vastaus kaikkiin tapauksiin ja miksi lähdekoodi on joskus tarpeellinen ja joskus sen käyttö odotettua vähemmän hyödyllinen?

On olemassa useita keskeisiä kriteerejä, joita insinöörit käyttävät valitessaan reaaliaikaista käyttöjärjestelmää (RTOS). Monet niistä - kustannukset, toiminnallisuus, lisenssit, tuki - ovat epäilemättä erittäin tärkeitä (etenkin kustannukset - nämä ovat todellisuutemme). Toinen kriteeri - lähdekoodin saatavuus - ei kuitenkaan välttämättä ole yhtä tärkeä, mutta se luokitellaan aina vahvaksi tekijäksi.

Lähdekoodin saatavuus ei tarkoita, että se toimitetaan automaattisesti ilmaiseksi. Tämä lähestymistapa koskee vain avoimen lähdekoodin tuotteita; muissa tapauksissa valmistajat voivat veloittaa lähdekoodista tai asettaa sen saataville pyynnöstä.

Laitteiston kehitys. Tämä sisältää myös lähdekoodin, mikä pätee erityisesti VHDL- ja Verlog-kehitykseen. Miten täällä menee? Historiallisesti insinööri valitessaan integroidun piirin ja suunnitellessaan sen sovellusta turvautui spesifikaatioihin, jotka määrittelivät toiminnallisuuden, pinoutin, tehovaatimukset jne. Ja samaan aikaan kukaan ei odottanut näkevänsä täydellistä kaaviota IC:n sisäisestä rakenteesta, vaikka he näkivät usein lohkokaavion (pääasiassa havainnollistavana materiaalina, joka helpotti toimintaperiaatteiden ymmärtämistä) ja joskus jopa piirikaavio (analogisille IC:ille, kuten operaatiovahvistimille), vaikka ei nimellisarvoja.
Nykyään ASIC- tai FPGA-laiteohjelmistoa suunnitteleva insinööri käyttää todennäköisesti joitain valmiiksi rakennettuja IP-lohkoja - valmiiksi pakattuja lohkoja, jotka tarjoavat tiettyjä toimintoja. Valinta perustuu kuitenkin spesifikaatioihin, eikä ole ollenkaan selvää, että alkuperäinen HDL IP:lle tulee mukaan pakkaukseen. Tämä mustan laatikon lähestymistapa tunnetaan hyvin laitteistomaailmassa.

Turvallisuus. Kaikki tuotteeseen sisältyvä tekniikka tulee valita tulevaa teknistä tukea silmällä pitäen. Esimerkiksi IP-osoitetta valitessa tulee välttää yksittäisten tuotteiden käyttöä yhdeltä valmistajalta, mikä voi lieventää toimitushäiriöihin liittyviä ongelmia.
IP-osoitetta käytettäessä, olipa kyse laitteistosta tai toimitetusta ohjelmistosta, toimitushäiriöt eivät sinänsä ole todennäköisiä (paitsi kertakäyttölisenssien tapauksessa), mutta jatkuvan tuen on oltava läsnä. Siksi kysymys siitä, toimiiko toimittajasi tuotteesi koko elinkaaren ajan, on parasta kysyä ennen tietyn toteutuksen valitsemista.

Jos IP-osoitteen lähdekoodi on saatavilla, se mahdollistaa minkä tahansa (no, melkein minkä tahansa) ohjelmisto-ongelman ratkaisemisen, vaikka toimittaja ei enää pysty tarjoamaan tukea. Tästä syystä monet RTOS-ostajat jne. haluaisivat lähdekoodin hyllyllä, vaikka he eivät koskaan katsoisi sitä, varmuuden vuoksi.

Ohjelmiston mukauttaminen Suurin ero sulautettujen järjestelmien ja pöytäkoneiden välillä on edellisen vaihtelevuus. Useimmat tietokoneet ovat samanlaisia ​​kuin monet muut, ja ainoa valinta on suoritusympäristön välillä: Windows, Mac tai Linux. Sulautetut järjestelmät puolestaan ​​ovat uskomattoman vaihtelevia - vaihtelevat prosessorit, muistikokoonpanot ja oheislaitteet. Tämän seurauksena IP-ohjelmistojen on oltava joustavia, jotta niitä voidaan käyttää useissa eri järjestelmissä. Vaikka monet tuotteet, kuten RTOS, toimitetaan binäärimuodossa – tyypillisesti kirjastona, joka on räätälöity tiettyyn arkkitehtuuriin – lähdekoodin toimitusvaatimukset voivat kannustaa toimittajia poistamalla tarpeen tallentaa ja tukea useita muunnelmia, koska IP-osoitteen tarjoaminen lähteenä ratkaisee monet näistä ongelmia. Käyttäjä voi rakentaa koodin tietylle prosessorille, mukauttaa sen laitteen muistikorttiin ja lisätä tarvittavat laitelaajennukset. Joissakin tapauksissa IP-lohko voidaan määrittää käyttämällä ehdollista käännöstä - tyypillisesti otsikkotiedostoa muokataan määrittämään kokoonpano.

Sertifiointi. Joissakin sovelluksissa, kuten sotilas-/ilmailu- ja lääketieteellisissä sovelluksissa, laiteohjelmiston on oltava sertifioitu turvallisuuden ja erilaisten standardien noudattamisen vuoksi. Tämä prosessi on monimutkainen ja kallis, ja siihen kuuluu yleensä jokaisen koodirivin tarkistaminen. Siksi ei yleensä ole mahdollista ostaa "esisertifioituja" ohjelmistoyksiköitä, koska koko sovellus tarkistetaan. Siten kriittinen sovelluskehittäjä etsii todennäköisesti IP-osoitetta, joka on saatavilla lähdekoodin mukana, jotta täydellinen varmennus voidaan suorittaa.

Mikä on lähdekoodi?
Kysymys saattaa tuntua oudolta, mutta ilman vastausta sen läsnäolon (tai poissaolon) puolista keskusteleminen muuttuu hieman oudoksi harjoitukseksi. Vastaus saattaa tuntua ilmeiseltä: ohjelman lähdekoodi on kokoelma korkean tason tai assembly-kielen ohjeita sisältäviä tiedostoja, jotka voidaan kääntää ja koota toimiviksi binäärikäskyiksi. Heti kysymys kuuluu - ovatko muunnosprosessiin tarvittavat ohjelmat ja niiden suoritusympäristö osa lähdekoodia (binäärimuodossa)? Tästä huolimatta tämä määritelmä täyttää ainakin 3 muotoa, joissa "lähdekoodi" voidaan toimittaa (puhutaanpa esimerkiksi C-kielestä) laadun heikkenemisen järjestyksessä:
1) Todella lähdekoodi, hyvä asettelu, selkeät muuttujien nimeämiskäytännöt ja hyvin kommentoitu (edellyttäen, että IP-kehittäjällä on sellainen, joka on täysin valinnainen).
2) Koodirivit, jotka käännetään onnistuneesti, MUTTA ilman kommentteja tai erityisen merkityksellisiä tunnisteiden nimiä.
3) Koodirivit eston jälkeen, mikä tekee koodista ihmisille lukukelvottoman, mutta kääntäjälle hyväksyttävän. Tämä tehdään korvaamalla tunnisteiden nimet merkityksettömillä ja poistamalla kaikki kommentit ja syntaktisesti tarpeettomat välilyönnit. On olemassa käänteinen prosessi, mutta sen tuloksia tuskin voidaan kutsua hyväksyttäviksi.
Ohjelmistotoimittajat käyttävät kaikkia näitä lomakkeita seuraaviin tarkoituksiin:
1) on se, mitä useimmat ostajat odottavat saavansa ja mitä monet valmistajat todella tarjoavat. Kuitenkin ostopäätöstä tehdessäsi, jos tarvitset lähdekoodia, on tärkeää varmistaa, että tämä on vaihtoehto; jos olet epävarma, kysy vain näytteitä.
2) käytetään yleensä silloin, kun myyjä haluaa toimittaa vaaditun vähimmäismäärän, joka voi olla (vain) tarpeeksi hyvä sertifiointiin.
3) käytetään suojaamaan IIP:n sisältöä uteliailta katseilta, mikä tarkoittaa, että ohjelmisto saa konfiguroitavuuden edun, mutta ei sen enempää.

Lähdekoodin haitat.
Suurin haitta lähdekoodin saatavuudesta: se on erittäin houkuttelevaa. Jokainen kehittäjä haluaa tehdä ohjelmistostaan ​​mahdollisimman hyvän (no, sellainen näkökulma on olemassa). Joten esimerkiksi jos RTOS API ei toimi täsmälleen optimaalisesti sovellukselle, lähdekoodin saatavuus tarjoaa mahdollisuuden muuttaa sitä.
Vaikka sovelluksen optimointi saattaa tuntua hienolta, pitkäaikaisessa tuessa on ongelma. Entä jos RTOS-toiminnassa on ongelma? Toimittaja ei tue muutettua tuotetta. Mitä tehdä, jos RTOS:sta julkaistaan ​​uusi versio? Sen sisällyttäminen uudelleensuunnitteluun voi viedä huomattavasti aikaa toistuviin muokkauksiin, varsinkin jos niiden kirjoittaja ei enää toimi sinulle (no, joko teit nämä muutokset 3 vuotta sitten ja tietysti, tai, kuten sanotaan, et tietenkään tehnyt vaivaudu kirjoittamaan asianmukaisia ​​asiakirjoja).

Pohdittuaan tilanteita, joissa lähdekoodi voi olla toivottavaa, hyödyllistä tai tarpeellista, johtopäätös on, että sitä ei vaadita ehdottomasti ja aina. Jos ostat IP-osoitteen suurelta, tunnetulta ja vakaalta palveluntarjoajalta, joka voi tarjota pitkäaikaista tukea, lähdekoodin hankkiminen ei ole olennaista ja se voidaan jopa luetella haitaksi.

Assembly-kieli (tai assembler-kieli) on tietokoneen tai muun ohjelmoitavan laitteiston matalan tason ohjelmointikieli, jossa kielen ja arkkitehtuurin konekoodikäskyjen välillä on korrelaatio. Jokainen konesuuntautunut kieli (ammattiterminologiassa "assembler") viittaa tiettyyn tietokonearkkitehtuuriin. Sitä vastoin useimmat korkean tason ohjelmointikielet ovat monialustaisia, mutta vaativat tulkintaa tai kokoamista.

Alustakohtaista koodia voidaan kutsua myös symboliseksi kieleksi tai käskysarjaksi, jonka tietokoneen keskusyksikkö suorittaa suoraan. Jokainen prosessorin suorittama ohjelma koostuu sarjasta käskyjä. Konekoodi on määritelmän mukaan ohjelmoijalle näkyvä ohjelmoinnin alin taso.

Käyttö

Monet operaatiot vaativat yhden tai useamman operandin, joka pystyy muodostamaan täydellisen käskyn, ja monet kokoajat voivat hyväksyä lukulausekkeita ja vakioita sekä rekistereitä ja tunnisteita operandeina. Tämä vapauttaa konekoodiohjelmoijan työlästä, toistuvista laskelmista. Arkkitehtuurista riippuen nämä elementit voidaan myös yhdistää tiettyjä ohjeita tai osoitemuotoja varten käyttämällä siirtymiä tai muuta dataa sekä kiinteitä osoitteita. Monet "rakentajat" tarjoavat lisämekanismeja ohjelman kehittämisen helpottamiseksi, rakennusprosessin ohjaamiseksi ja virheenkorjauksen tukemiseksi.

Historiallinen näkökulma

Ensimmäisen kokoonpanokielen kehitti vuonna 1947 Kathleen Booth ARC2:ta varten Birkbeck-prosessissa yhteistyössä John von Neumannin ja Herman Goldsteinin kanssa Institute for Advanced Studyssa. SOAP (Symbolic Optimal Assembly Program) oli Stan Pawleyn vuonna 1955 kehittämä konekieli 650:lle.

Historiallisesti monet ohjelmistoratkaisut on kirjoitettu vain assembly-kielellä. Käyttöjärjestelmät kirjoitettiin yksinomaan tällä kielellä Burroughs MCP:n (1961) käyttöönottoon asti, joka kirjoitettiin Executive Systems Problem Oriented Language (ESPOL) -kielellä. Monet kaupalliset sovellukset kirjoitettiin konesuuntautuneella kielellä, mukaan lukien suuri määrä IT-jättiläisten luomia IBM-mainframe-ohjelmistoja. COBOL ja FORTRAN syrjäyttivät lopulta suuren osan työstä, vaikka monet suuret organisaatiot säilyttivät kokoonpanokieliset sovellusinfrastruktuurit 1990-luvulle asti.

Useimmat varhaiset mikrotietokoneet olivat käsin koodattuja, mukaan lukien useimmat käyttöjärjestelmät ja suuret sovellukset. Tämä johtuu siitä, että näillä koneilla oli vakavia resurssirajoituksia, ne verottivat mukautettua muistia ja näyttöarkkitehtuuria ja tarjosivat rajoitettuja järjestelmäpalveluita, joissa oli virheitä. Ehkä tärkeämpää oli mikrotietokonekäyttöön soveltuvien ensiluokkaisten, korkeatasoisten kielikääntäjien puute, mikä vaikeutti konekoodin oppimista.

Sovellusalue

Assembly-kielet poistavat suuren osan ongelmallisista, tylsistä ja aikaa vievistä ensimmäisen sukupolven kokoonpanokieliohjelmoinnista, jota vaaditaan varhaisimmilta tietokoneilta. Tämä vapauttaa ohjelmoijat numeeristen koodien muistamisen ja osoitteiden laskemisen rutiinista. Alkuvaiheessa "valmistajia" käytettiin laajalti kaikentyyppisissä ohjelmoinneissa. Kuitenkin 1980-luvun lopulla. niiden käyttö on suurelta osin syrjäytynyt korkeamman tason kieleillä haettaessa lisää ohjelmoinnin tuottavuutta. Nykyään kokoonpanokieltä käytetään edelleen suorassa laitteiston manipuloinnissa, erikoistuneiden prosessoriohjeiden käyttöön tai kriittisten suorituskykyongelmien ratkaisemiseen. Tyypillisiä sovelluksia ovat laiteajurit, matalan tason sulautetut järjestelmät ja reaaliaikaiset parametrit.

Sovellusnäytteet

Yleisiä esimerkkejä suurista kokoonpanokieliohjelmista ovat IBM PC DOS -käyttöjärjestelmät, Turbo Pascal -kääntäjä ja varhaiset sovellukset, kuten Lotus 1-2-3 -taulukkolaskentaohjelma.

Konekohtainen kieli oli ensisijainen kehityskieli monille 1980- ja 1990-luvun suosituille kotitietokoneille (kuten MSX, Sinclair ZX Spectrum, Commodore 64, Commodore Amiga ja Atari ST). Tämä johtuu siitä, että tulkitut BASIC-valintaikkunat näissä järjestelmissä tarjosivat hitaita suoritusnopeuksia sekä rajoitetun kyvyn hyödyntää täysin käytettävissä olevaa laitteistoa. Joissakin järjestelmissä on jopa integroitu kehitysympäristö (IDE), jossa on erittäin kehittyneet virheenkorjaus- ja makrotyökalut. Jotkut Radio Shack TRS-80:lle ja sen seuraajille saatavilla olevista kääntäjistä pystyivät yhdistämään sisäänrakennetun kokoonpanolähteen korkean tason ohjelmiin. Käännöksen jälkeen inline-asentaja tuotti rivin binäärikoodin.

Nukkejen konekoodi. Terminologia

Assembler-ohjelma luo opkoodeja kääntämällä operaatioiden ja osoitustilojen muistotekniikan ja syntaktisten sääntöjen yhdistelmiä numeerisiksi vastineiksi. Tämä esitys sisältää tyypillisesti toimintakoodin sekä muita ohjausbittejä ja dataa. Kokoonpanija arvioi myös vakiolausekkeita ja määrittelee symboliset nimet muistipaikoille ja muille objekteille.

Konekoodit voivat myös suorittaa joitakin yksinkertaisia ​​​​käskyjoukosta riippuvia optimointeja. Eräs erityinen esimerkki tästä ovat suositut x86 "rakentajat" eri toimittajilta. Useimmat voivat pyynnöstä suorittaa haarakomentokorvauksia kuinka monta kertaa tahansa. Pystyy myös yksinkertaiseen käskyjen uudelleenryhmittelyyn tai -lisäykseen, kuten jotkut RISC-arkkitehtuurien kokoajat, jotka voivat auttaa optimoimaan älykkään käskyjen ajoituksen, jotta CPU-liukuhihnasta saadaan kaikki irti.

Kuten varhaiset ohjelmointikielet, kuten Fortran, Algol, Cobol ja Lisp, kokoajia on ollut saatavilla 1950-luvulta lähtien, samoin kuin ensimmäiset sukupolvet tekstipohjaiset tietokonerajapinnat. Kääntäjät tulivat kuitenkin ensimmäiseksi, koska niitä on paljon helpompi kirjoittaa kuin korkean tason kielien kääntäjiä. Tämä johtuu siitä, että jokainen muistiinpano, samoin kuin käskyjen osoitemoodit ja operandit, käännetään kunkin käskyn numeerisiksi esityksiksi ilman paljon kontekstia tai analyysiä. On myös ollut useita kääntäjäluokkia ja puoliautomaattisia koodigeneraattoreita, joiden ominaisuudet ovat samanlaiset kuin kokoonpanoissa ja korkean tason kielissä, ja nopeuskoodi on ehkä yksi tunnetuimmista esimerkeistä.

Kulkujen määrä

On olemassa kahdenlaisia ​​kokoonpanokieliohjelmointia, joka perustuu lähteen läpikulkujen määrään (lukuyritysten lukumäärään) objektitiedoston luomiseksi.

Single-pass assemblerit käyvät läpi lähdekoodin kerran. Mikä tahansa symboli, jota käytetään ennen sen määrittämistä, vaatii virheen objektikoodin lopussa.
Multi-pass assemblerit luovat taulukoita, joissa on kaikki symbolit ja niiden merkitykset ensimmäisissä ajoissa, ja käyttävät sitten taulukkoa myöhemmissä ajoissa koodin luomiseen.

Alkuperäinen syy yksivaiheisten kokoajien käyttöön oli kokoonpanon nopeus – usein toinen kierros vaati takaisin kelaamisen ja ohjelmalähteen uudelleen lukemisen nauhalle. Myöhemmin tietokoneissa, joissa oli paljon enemmän muistia (etenkin levytallennusta varten), oli tilaa tehdä kaikki tarvittava käsittely ilman, että niitä tarvitsisi lukea uudelleen. Multi-pass assemblerin etuna on, että virheiden puuttuminen tarkoittaa, että linkitysprosessi (tai ohjelman lataus, jos assembler tuottaa suoraan suoritettavan koodin) on nopeampaa.

Mikä on binäärikoodi?

Assembly-kielellä kirjoitettu ohjelma koostuu sarjasta prosessorin muistokäskyjä ja metalausekkeita (tunnetaan direktiiveinä, pseudokäskyinä ja pseudooperaatioina), kommenteista ja tiedoista. Assembly-kielen ohjeet koostuvat tyypillisesti opcode-muistokirjoista. Sitä seuraa luettelo tiedoista, argumenteista tai parametreista. Assembler kääntää ne konekielisiksi käskyiksi, jotka ladataan muistiin ja suoritetaan.

Esimerkiksi alla oleva ohje käskee x86/IA-32-prosessorin siirtämään 8-bittisen arvon rekisteriin. Tämän käskyn binäärikoodi on 10110, jota seuraa 3-bittinen tunniste, joka käyttää rekisteriä. AL:n tunnus on 000, joten seuraava koodi lataa AL-rekisteriin tiedot 01100001.

Herää kysymys: mikä on binäärikoodi? Se on koodausjärjestelmä, joka käyttää binäärinumeroita "0" ja "1" edustamaan kirjainta, numeroa tai muuta symbolia tietokoneessa tai muussa elektronisessa laitteessa.

Esimerkki konekoodista: 10110000 01100001.

Tekniset ominaisuudet

Assembly-kielen muuntaminen konekoodiksi on kokoonpanokielen tehtävä. Käänteinen prosessi suoritetaan käyttämällä purkulaitetta. Toisin kuin korkean tason kielet, monien yksinkertaisten kokoonpanokäskyjen ja konekielisten ohjeiden välillä on yksi-yhteen vastaavuus. Joissakin tapauksissa kokoaja voi kuitenkin tarjota pseudokäskyjä (makroja). Ne ulottuvat useille konekielisille ohjeille tarjotakseen yleisesti tarvittavia toimintoja. Useimmat täyden pinon kokoajat tarjoavat myös rikkaan makrokielen, jota toimittajat ja ohjelmoijat käyttävät monimutkaisempien koodi- ja datasarjojen luomiseen.

Jokaisella tietokonearkkitehtuurilla on oma konekieli. Tietokoneet eroavat toisistaan ​​tukemiensa toimintojen lukumäärän ja tyyppien, rekisterien koon ja lukumäärän sekä tallennetun tiedon esitysmuodon suhteen. Vaikka useimmat yleiskäyttöiset tietokoneet pystyvät suorittamaan suurelta osin samoja toimintoja, niiden toimintatapa vaihtelee. Vastaavat kokoonpanokielet heijastavat näitä eroja.

Yhdelle käskyjoukolle voi olla useita muistomerkkijoukkoja tai kokoonpanokielen syntaksia, jotka yleensä luodaan eri ohjelmissa. Näissä tapauksissa suosituin on yleensä valmistajan toimittama ja asiakirjoissaan käytetty.

Suunnittelukieli

Keräilijät luokittelevat lausunnot ja käyttämänsä nimikkeistö ovat hyvin erilaisia. Erityisesti jotkut kuvaavat pseudooperaationa kaikkea muuta kuin konetta tai laajennettua muistiotekniikkaa. Kokoonpanon perussanasto koostuu käskyjoukosta – kolmesta peruskäskytyypistä, joita käytetään ohjelmistotoimintojen määrittelemiseen:

  • opcode-muistomerkki;
  • tietojen määritelmät;
  • keräilijäohjeita.

Opcode-mnemoniikka ja laajennettu muistotekniikka

Assembly-kielellä kirjoitetut ohjeet ovat alkeellisia, toisin kuin korkean tason kielet. Tyypillisesti muistomerkki (mielivaltaiset symbolit) on symbolinen merkintä yhdelle suoritettavalle koodikäskylle. Jokainen käsky koostuu tyypillisesti operaatiokoodista sekä nollasta tai useammasta operandista. Useimmat komennot viittaavat yhteen tai kahteen arvoon.

Laajennettua muistikirjaa käytetään usein ohjeiden erikoiskäyttöön - tarkoituksiin, jotka eivät käy ilmi käsikirjan nimestä. Esimerkiksi monilla prosessoreilla ei ole nimenomaista NOP-käskyä, mutta niissä on sisäänrakennetut algoritmit, joita käytetään tähän tarkoitukseen.

Monet rakentajat tukevat alkeellisia sisäänrakennettuja makroja, jotka voivat luoda kaksi tai useampia konekäskyjä.

Tietodirektiivit

Tietojen ja muuttujien tallentamiseen tarvittavien elementtien määrittämiseen käytetään ohjeita. Ne määrittelevät tietotyypin, pituuden ja kohdistuksen. Nämä ohjeet voivat myös määrittää, ovatko tiedot ulkoisten ohjelmien saatavilla (erikseen kerättynä) vai vain sille ohjelmalle, jossa tietoosio on määritetty. Jotkut kokoajat määrittelevät ne pseudooperaattoreiksi.

Rakenna direktiivejä

Kokoonpanodirektiivit, joita kutsutaan myös pseudokoodeiksi tai pseudo-opsiksi, ovat kokoonpanon asentajalle annettuja ohjeita, jotka ohjaavat sen suorittamaan muita toimintoja kuin kokoonpanoohjeita. Ohjeet vaikuttavat assemblerin toimintaan ja voivat vaikuttaa objektikoodiin, symbolitaulukkoon, luettelotiedostoon ja kokoajan sisäisiin parametriarvoihin. Joskus termi pseudokoodi on varattu direktiiveille, jotka luovat objektikoodia.

Pseudo-op-nimet alkavat usein pisteellä erottamaan ne konekäskyistä. Toinen yleinen pseudooperaatioiden käyttötapa on varata tallennusalueita ajonaikaiselle datalle ja ehkä alustaa niiden sisältö tunnettuihin arvoihin.

Itsedokumentoiva koodi

Symbolisten kokoajien avulla ohjelmoijat voivat liittää mielivaltaisia ​​nimiä (tunnisteita tai symboleja) muistipaikkoihin ja erilaisiin vakioihin. Usein jokaiselle vakiolle ja muuttujalle annetaan oma nimi, joten ohjeet voivat viitata näihin paikkoihin nimellä, mikä edistää itsedokumentoivaa koodia. Suoritettavassa koodissa minkä tahansa aliohjelman nimi liitetään sen aloituspisteeseen, joten kaikki aliohjelman kutsut voivat käyttää sen nimeä. GOTO-tunnisteet määritetään aliohjelmien sisällä. Monet keräilijät tukevat paikallisia symboleja, jotka eroavat sanallisesti tavallisista symboleista.

Kokoonpanijat, kuten NASM, tarjoavat joustavan symbolien hallinnan, jonka avulla ohjelmoijat voivat hallita erilaisia ​​nimiavaruuksia, laskea automaattisesti datarakenteiden siirtymiä ja määrittää tarroja, jotka viittaavat kirjaimellisiin arvoihin tai kokoajan suorittamien yksinkertaisten laskelmien tuloksiin. Pikanäppäimiä voidaan käyttää myös vakioiden ja muuttujien alustamiseen uudelleensijoitettavien osoitteiden avulla.

Assembly-kielet, kuten useimmat muut, antavat sinun lisätä kommentteja ohjelman lähdekoodiin, jotka ohitetaan kokoonpanoprosessin aikana. Oikeuslääketieteelliset merkinnät ovat tärkeitä konekieliohjelmissa, koska koneen binäärikäskysarjan määritelmää ja tarkoitusta on vaikea määrittää. Kääntäjien tai purkajien tuottama "raaka" (kommentoimaton) kokoonpanokieli on melko vaikea lukea, kun muutoksia on tehtävä.