portaldacalheta.pt
  • Põhiline
  • Planeerimine Ja Prognoosimine
  • Elustiil
  • Ux Disain
  • Finantsprotsessid
Tagumine Ots

Pärast kõiki neid aastaid toetab maailma ikkagi C-programmeerimine



Paljud tänapäeval eksisteerivad C-projektid alustati aastakümneid tagasi.

UNIX-i operatsioonisüsteemi arendamine algas 1969. aastal ja selle kood kirjutati C-s 1972. aastal ümber. C-keel loodi tegelikult UNIX-i tuumakoodi kokkupanekuks kõrgema taseme keelde, mis teeks samu ülesandeid vähem koodiridadega .



mis põhjustab mälulekke

Oracle'i andmebaaside arendamine algas 1977. aastal ja selle kood kirjutati kokkupanekust C-sse 1983. aastal. Sellest sai üks populaarsemaid andmebaase maailmas.



1985. aastal ilmus Windows 1.0. Kuigi Windowsi lähtekood pole avalikult kättesaadav, on seda väidetud selle tuum on enamasti kirjutatud tähega C , koos osade kokkupanekuga. Linuxi tuuma arendamine algas 1991. aastal ja see on kirjutatud ka kirjas C. Järgmisel aastal anti see välja GNU litsentsi alusel ja seda kasutati GNU operatsioonisüsteemi osana. GNU operatsioonisüsteem ise alustati C- ja Lisp-programmeerimiskeeltega, nii et paljud selle komponendid on kirjutatud C-ga.



Kuid C-programmeerimine ei piirdu projektidega, mis algasid aastakümneid tagasi, kui programmeerimiskeeli polnud veel nii palju kui täna. Paljud C-projektid on alustatud ka tänapäeval; selleks on mõned head põhjused.

Kuidas maailma juhib C?

Hoolimata kõrgema taseme keelte levimusest, jätkab C maailma võimendamist. Järgnevalt on toodud mõned süsteemid, mida kasutavad miljonid inimesed ja mis on programmeeritud C-keeles.



Microsoft Windows

Microsofti Windowsi tuum on välja töötatud enamasti C-s , mille osad on koostekeeles. Aastakümneid on maailma enimkasutatud operatsioonisüsteem koos umbes 90 protsenti turuosast , on töötanud C-is kirjutatud kernel.

Linux

Linux on kirjutatud ka enamasti C-ga, mõned osad on monteeritud. Ligikaudu 97 protsenti maailma 500 kõige võimsamast superarvutist käivitage Linuxi kernel . Seda kasutatakse ka paljudes personaalarvutites.



Mac

Mac-arvutite toiteallikaks on ka C, kuna OS X kernel on kirjutatud enamasti tähega C . Kõik Maci programmid ja draiverid, nagu Windowsi ja Linuxi arvutites, töötavad C-toega tuumaga.

Mobiilne

ios , Android ja Windowsi telefon tuumad on kirjutatud ka C-s. Need on lihtsalt olemasolevate Mac OS-i, Linuxi ja Windowsi tuumade mobiilsed kohandused. Nii et igapäevaselt kasutatavad nutitelefonid töötavad C-kernelil.



Operatsioonisüsteemi tuumad kirjutatud C-s

Andmebaasid

Maailma populaarseimad andmebaasid, sealhulgas Oracle'i andmebaas, MySQL, MS SQL Server ja PostgreSQL , on kodeeritud tähega C (esimesed kolm neist on nii C kui ka C ++).



Andmebaase kasutatakse igasugustes süsteemides: finants-, valitsuse-, meedia-, meelelahutus-, telekommunikatsiooni-, tervishoiu-, haridus-, jaekaubandus-, sotsiaalvõrgustikud, veeb jms.

Andmebaasid Powered by C



3D-filmid

3D-filmid luuakse rakendustega, mis on tavaliselt kirjutatud tähtedega C ja C ++. Need rakendused peavad olema väga tõhusad ja kiired, kuna need töötlevad tohutul hulgal andmeid ja teevad sekundis palju arvutusi. Mida tõhusamad nad on, seda vähem kulub kunstnikel ja animaatoritel filmivõtete genereerimiseks aega ning seda rohkem säästab ettevõte.

Manustatud süsteemid

Kujutage ette, et ärkate ühel päeval üles ja lähete poodi. Äratuskell, mis teid äratab, on tõenäoliselt programmeeritud C. Seejärel kasutate hommikusöögi valmistamiseks mikrolaineahju või kohvimasinat. Need on ka sisseehitatud süsteemid ja seetõttu on need tõenäoliselt programmeeritud C. Hommikusöögi ajal lülitate oma teleri või raadio sisse. Need on ka sisseehitatud süsteemid, mille toiteallikaks on C. Kui avate oma garaažiukse puldiga, kasutate ka manustatud süsteem, mis on tõenäoliselt programmeeritud C-s .

Siis istute oma autosse. Kui sellel on järgmised funktsioonid, mis on programmeeritud ka C-s:

  • automaat käigukast
  • rehvirõhu tuvastamise süsteemid
  • andurid (hapnik, temperatuur, õlitase jne)
  • mälu istmete ja peeglite seadistamiseks.
  • armatuurlaua kuva
  • mitteblokeeruvad pidurid
  • automaatne stabiilsuskontroll
  • autopiloot
  • kliimakontroll
  • lastekindlad lukud
  • võtmeta sisestus
  • soojendusega istmed
  • turvapadja juhtimine

Jõuate poodi, parkite auto ja lähete müügiautomaadi juurde sooda saamiseks. Mis keelt nad selle automaadi programmeerimiseks kasutasid? Tõenäoliselt C. Siis ostate poest midagi. Kassa on programmeeritud ka C. Ja kui maksate oma krediitkaardiga? Sa arvasid seda: krediitkaardilugeja on jällegi tõenäoliselt programmeeritud C-s.

häkitud krediitkaardinumbrid koos täielike üksikasjadega

Kõik need seadmed on sisseehitatud süsteemid. Need on nagu väikesed arvutid, mille sees on mikrokontroller / mikroprotsessor, mis töötab manustatud seadmetes programmi, mida nimetatakse ka püsivara. See programm peab tuvastama klahvivajutused ja vastavalt käituma ning kuvama kasutajale ka teavet. Näiteks peab äratuskell kasutajaga suhtlema, tuvastades, millist nuppu kasutaja vajutab ja mõnikord ka, kui kaua seda vajutatakse, ning vastavalt sellele programmeerima seadme, kuvades kasutajale kogu asjakohase teabe. Näiteks peab auto mitteblokeeruv pidurisüsteem olema võimeline tuvastama rehvide äkilist lukustumist ja tegutsema nii, et vabastatakse piduritele avalduv surve väikeseks ajaks, vabastades need ja takistades seeläbi kontrollimatut libisemist. Kõik need arvutused teeb programmeeritud manussüsteem.

Ehkki manustatud süsteemides kasutatav programmeerimiskeel võib kaubamärgiti erineda, on need keele paindlikkuse, tõhususe, jõudluse ja riistvarale läheduse tõttu programmeeritud kõige sagedamini C-keeles.

Manustatud süsteemid kirjutatakse sageli C-s

Miks kasutatakse endiselt C-programmeerimiskeelt?

Tänapäeval on palju programmeerimiskeeli, mis võimaldavad arendajatel olla erinevat tüüpi projektide jaoks produktiivsemad kui C-ga. On kõrgema taseme keeli, mis pakuvad palju suuremaid sisseehitatud teeke, mis lihtsustavad töötamist JSON-i, XML-i, kasutajaliidese, veebilehtede, klientide taotluste, andmebaasiühenduste, meediumiga manipuleerimise ja nii edasi.

Kuid hoolimata sellest on arvukalt põhjust arvata, et C-programmeerimine jääb kauaks aktiivseks.

Programmeerimiskeeltes ei sobi üks suurus kõigile. Siin on mõned põhjused, miks C on teatud rakenduste jaoks ületamatu ja peaaegu kohustuslik.

Teisaldatavus ja tõhusus

C on peaaegu a kaasaskantav montaaž keel. See on masinale võimalikult lähedal, samas kui see on olemasolevate protsessoriarhitektuuride jaoks peaaegu universaalselt saadaval. Peaaegu iga olemasoleva arhitektuuri jaoks on vähemalt üks C kompilaator. Ja tänapäeval pole tänapäevaste kompilaatorite genereeritud kõrgelt optimeeritud binaarkaartide tõttu nende ülesande käsitsi kirjutatud koostega parandamine lihtne ülesanne.

Selline on selle kaasaskantavus ja tõhusus 'C-s rakendatakse sageli teiste programmeerimiskeelte kompilaatoreid, raamatukogusid ja tõlke' . Tõlgendatud keeltele meeldib Python , Rubiin ja PHP lasevad nende peamised rakendused kirjutada C-s. Seda kasutavad masinad suhtlemiseks isegi teiste keelte kompilaatorid. Näiteks C on Eiffeli ja Forthi aluseks olev vahepealne keel. See tähendab, et selle asemel, et genereerida iga toetatava arhitektuuri jaoks masinakood, loovad nende keelte kompilaatorid lihtsalt vahepealse C-koodi ja C-kompilaator tegeleb masinakoodi genereerimisega.

masinõppe õpetus algajatele

C-st on saanud ka a lingua franca arendajate vahel suhtlemiseks. Alex Allain, Dropboxi insenerijuht ja Cprogramming.com looja, paneb selle :

C on suurepärane keel, et väljendada programmeerimisel levinud ideid viisil, mis enamikule inimestele sobib. Pealegi on paljud C-s kasutatud põhimõtted - näiteks argc ja argv käsurea parameetrite, aga ka silmusekonstruktsioonide ja muutujate tüübid - kuvatakse paljudes teistes õpitud keeltes, nii et saate inimestega rääkida isegi siis, kui nad ei tunne C-d mõlemale ühisel viisil sinust.

Mäluga manipuleerimine

Meelevaldne juurdepääs mäluaadressidele ja osuti aritmeetika on oluline funktsioon, mis muudab C ideaalselt sobivaks süsteemi programmeerimine (opsüsteemid ja manussüsteemid).

Riistvara / tarkvara piiril kaardistavad arvutisüsteemid ja mikrokontrollerid oma välisseadmed ja I / O-tihvtid mäluaadressideks. Süsteemirakendused peavad maailmaga suhtlemiseks neid kohandatud mälukohti lugema ja nendesse kirjutama. Nii et C võime manipuleerida suvaliste mäluaadressidega on süsteemi programmeerimisel hädavajalik.

Mikrokontrolleri võiks näiteks ehitada nii, et mälu-aadressi 0x40008000 bait saadaks universaalne asünkroonne vastuvõtja / saatja (või UART, ühine riistvarakomponent välisseadmetega suhtlemiseks) seatakse aadressi 0x40008001 iga biti number 4 väärtuseks 1 ja et pärast selle biti seadistamist välisseade selle automaatselt tühistab.

See oleks C-funktsiooni kood, mis saadab baidi selle UART-i kaudu:

#define UART_BYTE *(char *)0x40008000 #define UART_SEND *(volatile char *)0x40008001 |= 0x08 void send_uart(char byte) { UART_BYTE = byte; // write byte to 0x40008000 address UART_SEND; // set bit number 4 of address 0x40008001 }

Funktsiooni esimest rida laiendatakse järgmisele:

*(char *)0x40008000 = byte;

See rida käsib kompilaatoril tõlgendada väärtust 0x40008000 kursorina char -le, siis selle kursori (vasakpoolseima * operaatoriga) kõrvalejätmisele (anna väärtus, millele osutas) ja lõpuks byte väärtus sellele viidatud kursorile. Teisisõnu: kirjutage muutuja väärtus byte mäluaadressile 0x40008000.

Järgmist rida laiendatakse järgmisele:

*(volatile char *)0x40008001 |= 0x08;

Selles reas teostame aadressi 0x40008001 väärtuse bitipõhise VÕI ja väärtus 0x08 (00001000 binaarses vormis, s.t bittarvus 4 arv 1) ja salvestage tulemus tagasi aadressile 0x40008001. Teisisõnu: määrasime baidi biti 4, mis asub aadressil 0x40008001. Samuti deklareerime, et väärtus aadressil 0x40008001 on kõikuv . See ütleb kompilaatorile, et seda väärtust võidakse muuta väljaspool meie koodi, nii et kompilaator ei tee pärast sellele kirjutamist selle aadressi väärtuse kohta oletusi. (Sel juhul määrab UART riistvara selle biti kohe pärast seda, kui oleme selle tarkvara seadistanud.) See teave on oluline koostaja optimeerija jaoks. Kui me teeksime seda for sees Näiteks, kui pole täpsustatud, et väärtus on kõikuv, võib kompilaator eeldada, et see väärtus ei muutu pärast seadistamist, ja jätab pärast esimest tsüklit käsu täitmise.

Ressursside deterministlik kasutamine

Levinud keeleomadus, millele süsteemi programmeerimine ei saa toetuda, on prügivedu või isegi mõne sisseehitatud süsteemi jaoks lihtsalt dünaamiline eraldamine. Manustatud rakenduste aja- ja mäluressursid on väga piiratud. Neid kasutatakse sageli reaalajas süsteemid , kus ei saa endale lubada mitte-deterministlikku kõnet prügivedajale. Ja kui dünaamilist jaotust ei saa mälupuuduse tõttu kasutada, on väga oluline omada muid mäluhalduse mehhanisme, näiteks andmete paigutamine kohandatud aadressidele, nagu C-osutid võimaldavad. Keeled, mis sõltuvad suuresti dünaamilisest jaotamisest ja prügiveost, ei sobiks piiratud ressurssidega süsteemidele.

on llc an s või c korporatsioon

Koodi suurus

C-l on väga väike tööaeg. Ja selle koodi mälu on väiksem kui enamikus teistes keeltes.

Näiteks võrreldes C ++ -ga on C-genereeritud binaarkaart, mis läheb manustatud seadmesse, umbes pool sarnase C ++-koodi genereeritud binaararvust. Selle üks peamisi põhjusi on erandite toetamine.

Erandid on suurepärane tööriist, mille C ++ on lisanud C-le ja kui neid ei käivitata ega arukalt rakendatud, pole neil praktiliselt mingit täitmisaega (vaid koodi suuruse suurendamise hinnaga).

Vaatame näite C ++ keeles:

// Class A declaration. Methods defined somewhere else; class A { public: A(); // Constructor ~A(); // Destructor (called when the object goes out of scope or is deleted) void myMethod(); // Just a method }; // Class B declaration. Methods defined somewhere else; class B { public: B(); // Constructor ~B(); // Destructor void myMethod(); // Just a method }; // Class C declaration. Methods defined somewhere else; class C { public: C(); // Constructor ~C(); // Destructor void myMethod(); // Just a method }; void myFunction() { A a; // Constructor a.A() called. (Checkpoint 1) { B b; // Constructor b.B() called. (Checkpoint 2) b.myMethod(); // (Checkpoint 3) } // b.~B() destructor called. (Checkpoint 4) { C c; // Constructor c.C() called. (Checkpoint 5) c.myMethod(); // (Checkpoint 6) } // c.~C() destructor called. (Checkpoint 7) a.myMethod(); // (Checkpoint 8) } // a.~A() destructor called. (Checkpoint 9)

A, B Meetodid ja C klassid on määratletud kusagil mujal (näiteks teistes failides). Seetõttu ei saa koostaja neid analüüsida ega tea, kas nad teevad erandeid. Seega peab ta valmistuma käitlema erandeid, mis on visatud nende konstruktorite, destruktorite või muude meetodite väljakutsetelt. Hävitajad ei tohiks visata (väga halb tava), kuid kasutaja võib siiski visata või visata kaudselt, kutsudes mõnda funktsiooni või meetodit (otsesõnu või kaudselt), mis loob erandi.

Kui mõni kõnedest myFunction viska erand virna lahti kerimine mehhanism peab suutma kutsuda kõik juba ehitatud objektide hävitajad. Ühes korstna kerimismehhanismi rakenduses kasutatakse saatja aadress selle funktsiooni viimase kõne, et kontrollida erandi käivitanud kõne 'kontrollpunkti numbrit' (see on lihtne selgitus). Seda tehakse kasutades automaatselt genereeritud abifunktsiooni (mingi otsingu tabel), mida kasutatakse virnade lahti kerimiseks juhul, kui selle funktsiooni kehast visatakse erand, mis sarnaneb järgmisega:

// Possible autogenerated function void autogeneratedStackUnwindingFor_myFunction(int checkpoint) { switch (checkpoint) { // case 1 and 9: do nothing; case 3: b.~B(); goto destroyA; // jumps to location of destroyA label case 6: c.~C(); // also goes to destroyA as that is the next line destroyA: // label case 2: case 4: case 5: case 7: case 8: a.~A(); } }

Kui erand visatakse kontrollpunktidest 1 ja 9, ei vaja ükski objekt hävitamist. Kontrollpunkti 3 puhul b ja a tuleb hävitada. Kontrollpunkti 6 puhul c ja a tuleb hävitada. Igal juhul tuleb hävitamiskorraldust austada. Kontrollpunktide 2, 4, 5, 7 ja 8 puhul ainult objekt a tuleb hävitada.

See lisafunktsioon lisab koodile suuruse. See on osa ruumi üldkuludest, mille C ++ C-le lisab. Paljud sisseehitatud rakendused ei saa seda lisaruumi endale lubada. Seetõttu on manustatud süsteemide C ++ kompilaatoritel erandite keelamiseks sageli lipp. Erandite keelamine C ++ -s ei ole tasuta, kuna Standardne mallide kogu tugineb vigade teavitamisel suuresti eranditele. Selle muudetud skeemi kasutamine ilma eranditeta nõuab rohkem koolitust C ++ arendajad võimalike probleemide tuvastamiseks või vigade leidmiseks.

kuidas API-d kujundada

Ja me räägime C ++ -st, keelest, mille põhimõte on: 'Te ei maksa selle eest, mida te ei kasuta.' See binaarse suuruse kasv süveneb teiste keelte puhul, mis lisavad lisakulusid muude funktsioonidega, mis on väga kasulikud, kuid manustatud süsteemid seda endale lubada ei saa. Kuigi C ei võimalda teil neid lisafunktsioone kasutada, võimaldab see koodide jalajälge palju kompaktsemalt kui teisi keeli.

Põhjused õppida C

C keelt ei ole raske õppida, nii et kõik selle õppimise eelised tulevad üsna odavad. Vaatame mõnda neist eelistest.

Lingua franca

Nagu juba mainitud, on C a lingua franca arendajatele. Paljud uute algoritmide rakendused raamatutes või Internetis on autorite poolt kõigepealt (või ainult) C-vormingus kättesaadavaks tehtud. See annab rakenduse jaoks maksimaalse võimaliku teisaldatavuse. Olen näinud programmeerijaid, kes näevad Internetis vaeva C-algoritmi teistesse programmeerimiskeeltesse kirjutamiseks, kuna ta ei teadnud C-i väga põhimõisteid.

Pange tähele, et C on vana ja laialt levinud keel, nii et veebist leiate igasuguseid algoritme, mis on kirjutatud C-ga. Seetõttu on selle keele tundmisest tõenäoliselt kasu.

Masinast aru (mõtle C-s)

Kui arutame kolleegidega teatud koodiosade käitumist või teiste keelte teatud funktsioone, siis jõuame lõpuks 'C-ga rääkima'. Kas see osa edastab objektile 'kursori' või kopeerib kogu objekti? Kas siin võib aset leida mõni 'cast'? Ja nii edasi.

Harva arutame (või mõtleme) kõrgetasemelise koodi osa käitumise analüüsimisel komplektijuhiste kohta, mida osa koodi täidab. Selle asemel, kui arutame, mida masin teeb, räägime (või mõtleme) C-s üsna selgelt.

Veelgi enam, kui te ei saa lõpetada ja mõelda nii, nagu teete, võite lõpuks programmeerida mingisuguse ebausu selle kohta, kuidas (maagiliselt) asju tehakse.

Mõtle nagu masin C-ga

Töö paljude huvitavate C-projektidega

Palju huvitavaid projekte alates suurtest andmebaasiserveritest või operatsioonisüsteemi tuumadest kuni väikeste manustatud rakendusteni, mida saate kodus isegi oma isikliku rahulolu ja lõbu huvides teha, tehakse C. ei tea vana ja väikest, kuid tugevat ja aegade jooksul tõestatud programmeerimiskeelt nagu C.

Töötage lahedate projektidega koos C-ga

Järeldus

Illuminaadid ei juhi maailma. C programmeerijad teevad. Piiksuma

Tundub, et C-programmeerimiskeelel pole aegumiskuupäeva. See on riistvaralähedus, suurepärane kaasaskantavus ja ressursside deterministlik kasutamine muudab selle ideaalseks madalama taseme arendamiseks näiteks operatsioonisüsteemi tuumade ja manustatud tarkvara jaoks. Selle mitmekülgsuse, tõhususe ja hea jõudluse tõttu on see suurepärane valik suure keerukusega andmetöötlustarkvara jaoks, näiteks andmebaasid või 3D-animatsioon. Asjaolu, et paljud programmeerimiskeeled on tänapäeval ettenähtud otstarbeks paremad kui C, ei tähenda, et nad C-d kõigis piirkondades ületaksid. C on endiselt ületamatu, kui esmatähtis on jõudlus.

Maailm töötab C-toitega seadmetega. Kasutame neid seadmeid iga päev olenemata sellest, kas taipame või mitte. C on tarkvara paljudes valdkondades minevik, olevik ja nii palju kui näeme.

Seotud: C- ja C ++ -keelte õppimine: ülim nimekiri

Samm-sammuline juhend kohandatud illustratsioonide kujundamiseks ilma joonistusoskuseta

Tööriistad Ja Õpetused

Samm-sammuline juhend kohandatud illustratsioonide kujundamiseks ilma joonistusoskuseta
Qmake'i oluline juhend

Qmake'i oluline juhend

Tehnoloogia

Lemmik Postitused
Serveripoolsete renderdatud Vue.js-rakenduste loomine Nuxt.js-i abil
Serveripoolsete renderdatud Vue.js-rakenduste loomine Nuxt.js-i abil
HTTP-päringute testimine: arendaja ellujäämisriist
HTTP-päringute testimine: arendaja ellujäämisriist
Bridgewateri Ray Dalio: Big Data, masinõppe ja Fintechi vaikne pioneer
Bridgewateri Ray Dalio: Big Data, masinõppe ja Fintechi vaikne pioneer
Magento 2 õpetus: kuidas moodustada terviklikku moodulit
Magento 2 õpetus: kuidas moodustada terviklikku moodulit
Välja tasemel rööbaste vahemälu valideerimine: DSL-i lahendus
Välja tasemel rööbaste vahemälu valideerimine: DSL-i lahendus
 
Sisuka UX-i disaini kunst
Juhend kasutajate tõhusaks kasutuselevõtuks parimate tavade kohta
Juhend kasutajate tõhusaks kasutuselevõtuks parimate tavade kohta
Disainilitsents pole lahendus
Disainilitsents pole lahendus
Liitreaalsuse vs. Virtuaalne reaalsus vs. Segareaalsus: sissejuhatav juhend
Liitreaalsuse vs. Virtuaalne reaalsus vs. Segareaalsus: sissejuhatav juhend
Mis on PMO? Juhend projektijuhtimise kontorisse
Mis on PMO? Juhend projektijuhtimise kontorisse
Lemmik Postitused
  • Customer Intelligence ehk ________ pakub turundusspetsialistidele valgustavat teavet.
  • ahmimine vs nurrumine vs veebipakk
  • lift vs uber ärimudel
  • kuidas saada aws-i sertifikaat
  • kuidas programmeerimiskeelt kirjutada
  • piltide suuruse muutmine tundlikus mobiilikujunduses
  • asp.net põhiveebi api õpetus
Kategooriad
  • Planeerimine Ja Prognoosimine
  • Elustiil
  • Ux Disain
  • Finantsprotsessid
  • © 2022 | Kõik Õigused Kaitstud

    portaldacalheta.pt