647
pakeitimai
Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!
| 3 eilutė: | 3 eilutė: | ||
Savo kilme C kalba siekia [[Algol]], tiktai supaprastintą, nes vietoje visokių "begin" ir "end" atsirado paprasčiausi riestiniai skliausteliai, kad visiems būtų paprasčiau ir greičiau rašyt. | Savo kilme C kalba siekia [[Algol]], tiktai supaprastintą, nes vietoje visokių "begin" ir "end" atsirado paprasčiausi riestiniai skliausteliai, kad visiems būtų paprasčiau ir greičiau rašyt. | ||
== C, kaip žemo lygio programavimo kalba == | |||
Išties gi C turi vieną įdomumą, kurį jau seniai sukapojo visokie standartizacijos komitetai, nes geriau jau to privalumo nereikia, nes dar priprogramuos tie programuotojai neaišku, ko. Taigi, jau to privalumo C kalba neturi. | Išties gi C turi vieną įdomumą, kurį jau seniai sukapojo visokie standartizacijos komitetai, nes geriau jau to privalumo nereikia, nes dar priprogramuos tie programuotojai neaišku, ko. Taigi, jau to privalumo C kalba neturi. | ||
| 14 eilutė: | 16 eilutė: | ||
Užtat kad tokių nesąmonių niekas nesuprasdavo, tai paskui atsirado krūva C pagerinimų - [[C Plus Plus]], [[C Sharp]], [[Objective C]] beigi kitų visokių. | Užtat kad tokių nesąmonių niekas nesuprasdavo, tai paskui atsirado krūva C pagerinimų - [[C Plus Plus]], [[C Sharp]], [[Objective C]] beigi kitų visokių. | ||
== C kalbos ideologija == | |||
Daugelis, kas pradeda programuoti C kalba, negali suprasti, kodėl toje kalboje tiek rodyklių ar kodėl tos rodyklės užrašomos taip komplikuotai, ar kodėl visokiems dalykams reikia naudoti malloc() ar kodėl ten dar kas nors kažkaip ne taip. | |||
Norint suvokti C kalbą, reikia suprasti tą situaciją, kuriai ta kalba buvo kuriama - tai buvo [[1972]] metai, naudojama buvo vos 24 klobaitus [[RAM]] turėjusi [[PDP-11]] mašina, kuriai buvo [[asembleris|asembleriu]] parašyta pirmoji [[UNIX]] sistema, o kalbą kūrė tuo metu jau labai patyrę programuotojai, turėję patirties ir kitų programavimo kalbų kūrime. Programuotojai turėjo tiek patirties, kad galėjo daryti gerus sprendimus, bet tie sprendimai buvo paremti jų to meto darbo sąlygomis. | |||
Pvz., jiems nebuvo jokių klausimų apie kokius nors saugumo reikalus, nes tuo metu tokios problemos nekildavo. Jiems taip pat nebuvo klausimų apie tai, kad kalbos mokysis kažkas, kas nesupranta, kas yra rodyklės ar įvairūs adresacijos būdai. Kitą vertus, tais laikais kai kurie optimizavimo konceptai dar buvo labai menkai žinomi - pvz., [[Niklaus Wirth]] dar tik atidirbinėjo [[Pascal]] su vieno praėjimo kompiliatoriaus idėja, kur buvo reikalaujama išankstinės kintamųjų deklaracijos, todėl C kalboje remtas principu "kuo paprasčiau". | |||
Kartu jiems be proto reikėjo taupyti [[operacinė atmintis|operacinę atminį]] - pvz., ankstesnėse kalbose, kurias pavyzdžiu ėmė Kernighan ir Ritchie, buvo netgi nuspręsta, kad [[Algol]] tipo struktūras su "Begin" ir "End" užrašinėti reikia skliaustais, nes skliaustai leidžia sutaupyti juntamą kiekį atminties. Toks drastiškas atminties taupymas reiškė, kad tokių duomenų tipų, kaip "string" čia tiesiog nebus ir viskas. | |||
Tai reiškė, kad kalba turi leisti visiškai tiesiogiai daryti tai, ką daro [[asembleris]], o kartu visgi duoti kažkokias abstrakcijos galimybes. | |||
Iš to ir kilo kai kurios C kalbos savybės - pvz., tai, kad kalba turi atskirą preprocesorių, kuris padaro pirminį programos apdirbimą, atlikdamas visus darbus, kurių gali nedaryti [[kompiliatorius]], o paskui kompiliatorius daro labai tiesioginę, "as is" transliaciją į asemblerį arba išvis į dvejetainį vykdomąjį kodą. Faktiškai viskas, kas tik yra C kalba parašytoje programoje, gali būti tiesiogiai verčiama į dvejetainį kodą ir viskas. | |||
Išties to ir reikėjo - jei programa turės dirbti tiesiogiai su aparatūra, kaip kad [[kernelis]] ar [[draiveriai]], tai bent kiek didesnę abstrakciją naudoti sunkiai įmanoma - reikia programuoti lygyje, kuris labai artimas [[asembleris|asembleriui]]. Tai ir reiškia, kad viskas eina arba paprastais kintamaisiais, arba [[rodyklės|rodyklėmis]]. Ir viską reikia valdyti pačiam, įskaitant ir laisvą operacinę atmintį, ir jei jos nevaldysi - ji momentaliai išsinaudos ir programa nuluš. | |||
Todėl ir atsiranda tokie atseit "keistumai", kad [[masyvai]] išties tėra [[rodyklės]] į atminties plotus, o struktūros - iš esmės vėlgi rodyklės su poslinkiais pagal jose esančių kintamųjų dydį. Ir nėra jokių patogumų, kokie yra kitose kalbose. | |||
Fundamentalus C kalbos principas yra toks: programavimas turi būti įmanomas, naudojant neįmanomai mažus resursus, tačiau programuotojas turi būti su realia kompetencija ir gerai suprasti, ką daro. | |||
C kalba neskirta [[lameriai|lameriams]] ar besimokantiems, nes ji reikalauja išankstinės programuotojo kompetencijos. Kelias iki C kalbos negali būti tiesus - šios kalbos neįmanoma suprasti, jei nemoki programuoti [[asembleris|asembleriu]]. Ir tik po to, kai asemblerį išmoksti visai gerai, su bent jau tiesiogine adresacija ir adresacija pagal bazę (masyvams), tik tada gali pereiti prie C. Nes jei to nesuprasi - tai tiesiog darysi nesąmones ir viskas. | |||
Itin bloga praktika kilo vėliau, kai tų idėjų nesupratęs, [[Bjarne Stroustrup]] sugalvojo sukurti [[C plus plus]] - kalb1, kuri pretenduojanti į aukšto lygio programavimo kalbas, bet neatskirianti programuotojo nuo žemo lygio įrankių. Gavosi kalba, kuria yra padaroma daugiau programavimo klaidų, nei visomis kitomis kalbomis kartu sudėjus, nes ja programuoja lopai, kurie nesuvokia ką daro, o kalba leidžia daryti tokius dalykus, kurių jie išvis nesuvokia ir neįtaria. Tą aukšto ir žemo lygio kalbų painiojimo klaidą paskui dar bandė kartoti pusgalviai iš ANSI komitetų, kurie paskui net norėjo iš C kalbos panaikinti rodykles. Bet tai jau kitos istorijos. | |||
Klasikinė C kalba leidžia daryti visokius dalykus, tačiau jos kūrėjai to niekad ir neslėpė, patys įvardindami, kad šita kalba yra iš esmės perkeliamas (multiplatforminis) asembleris su šiokiais tokiais papildomais patogumais. Šita kalba neskirta [[lameriai|lameriams]], ji skirta tiems, kas jau turi realią ir gilią asemblerio patirtį ir supranta, ką daro. | |||
pakeitimai