{"id":2450,"date":"2015-05-18T07:30:16","date_gmt":"2015-05-18T04:30:16","guid":{"rendered":"http:\/\/9v.lt\/blog\/?p=2450"},"modified":"2022-01-19T08:34:38","modified_gmt":"2022-01-19T06:34:38","slug":"programavimo-kalbu-istorja-ir-apie-jas","status":"publish","type":"post","link":"http:\/\/9v.lt\/blog\/programavimo-kalbu-istorja-ir-apie-jas\/","title":{"rendered":"Programavimo kalb\u0173 istorija ir apie jas"},"content":{"rendered":"<p>Eidamas per savo senus dokumentus ir flash&#8217;us radau 2011 metais ra\u0161yt\u0105 baigiam\u0105j\u012f darb\u0105 apie programavimo kalbas. Tuo metu gavau geriausi\u0105 \u012fvertinim\u0105, o kadangi pra\u0117jo tiek daug laiko tai pamaniau pasidalinsiu \u0161iuo straipsniu, gal bus kam \u012fdomu :D d\u0117l ka\u017ekoki\u0173 neatitikim\u0173 jau nebeatsakau, kadangi tai buvo labai seniai :)<br \/>\n<!--more--><\/p>\n<p style=\"font-size: 20px; padding-top: 20px; padding-bottom: 5px;\"><strong>1. Kas yra programavimas?<\/strong><\/p>\n<p>Programavimas arba algoritmavimas tai kompiuterini\u0173 program\u0173 k\u016brimo procesas, kuomet kodas yra u\u017era\u0161omas viena i\u0161 daugyb\u0117s, skirtingiems poreikiams ir tikslams naudojam\u0173 programavimo kalb\u0173.<br \/>\nKompiuterin\u0117 programa &#8211; tai ne kas kita kaip komand\u0173 rinkinys sud\u0117tas \u012f kr\u016bv\u0105, kuris s\u0105veikauja su sistema. Programavimas gali b\u016bti objektinis (OOP)<sup>[1]<\/sup> arba konsolinis (CLI)<sup>[2]<\/sup>, abiem atvejais dar gali b\u016bti kompiliuojamas<sup>[3]<\/sup> arba interpretuojamas<sup>[4]<\/sup>.<\/p>\n<p>Para\u0161ytas algoritmas, atitinkamai nuo programavimo kalbos tipo, b\u016bna sukompiliuojamas kompiliatoriumi<sup>[5]<\/sup> ir paver\u010diamas \u012f ma\u0161inin\u012f kod\u0105, kur\u012f supranta procesorius, arba interpretuojamas interpretatoriumi<sup>[6]<\/sup>, kur kodas b\u016bna kompiliuojamas realiu laiku atmintyje ir paruo\u0161iamas vykdymui.<br \/>\nObjektinis programavimas (OOP)<sup>[1]<\/sup> skiriasi nuo konsolinio (CLI)<sup>[2]<\/sup> tuo, kad naudojamos klas\u0117s, apra\u0161omas ir &#8220;pie\u0161iamas&#8221; GUI<sup>[7]<\/sup>, kad atrodyt\u0173 gra\u017eiau, patraukliau ir b\u016bt\u0173 lengviau valdoma, ta\u010diau programavimo kalbos pagrindas, sintaks\u0117 ir algoritmavimas i\u0161lieka tokie pat. Beveik visos dabartin\u0117s programavimo kalbos turi patogias OOP<sup>[1]<\/sup> programavimo galimybes.<br \/>\nKonsolinis programavimas (CLI)<sup>[2]<\/sup> skiriasi nedaug kuo nuo Objektinio programavimo (OOP)<sup>[1]<\/sup>. Jame klas\u0117s n\u0117ra b\u016btinyb\u0117, nebent pats apsira\u0161ytum, sukurtos programos neturi GUI<sup>[7]<\/sup>, tik konsolin\u012f lang\u0105.<\/p>\n<p style=\"font-size: 15px; padding-top: 20px; padding-bottom: 5px;\"><strong>1.1. Istorija<\/strong><\/p>\n<p>Pirmosios programavimo kalbos buvo labai primityvios, paprastos ir ribot\u0173 galimybi\u0173.<br \/>\nIki 1940 met\u0173 buvo naudojama Perfokortos<sup>[8]<\/sup>, kuriose i\u0161mu\u0161tos instrukcijos buvo skaitomos pirm\u0173j\u0173 ma\u0161in\u0173 kad atlikt\u0173 paprastus veiksmus. Pirmosios \u017dakardin\u0117s stakl\u0117s, i\u0161rastos 1801 metais, naudojo kaip tik tokias Perfokortas<sup>[8]<\/sup> i\u0161 kuri\u0173 buvo skaitoma informacija ir atitinkamai judinama mechanin\u0117 stakli\u0173 ranka kuri automati\u0161kai pie\u0161davo paveiksl\u0117lius. <\/p>\n<p>Per devyni\u0173 m\u0117nesi\u0173 period\u0105 1842-1843 metais, Ada Lovelace i\u0161vert\u0117 Italijos matematiko Luigi Menabrea memuarus apie Charles Babbage naujausi\u0105 i\u0161rast\u0105 ma\u0161in\u0105 &#8211; Analitin\u012f varikl\u012f. Su \u0161iuo straipsniu apie varikl\u012f ji prid\u0117jo ir kelet\u0105 pastab\u0173, kurios konkre\u010diai nurod\u0117 metod\u0105 apskai\u010diuoti Bernoulli<sup>[9]<\/sup> skai\u010diams su \u0161iuo varikliu. Istorik\u0173 tai buvo pripa\u017einta kaip pirmojo istorijoje kompiuterin\u0117 programa.<br \/>\nPer pirmus 20-tojo \u0161imtme\u010dio de\u0161imtme\u010dius, skaitmeniniai skai\u010diavimai buvo pagr\u012fsti de\u0161imtainiais skai\u010diais. Galiausiai buvo suprasta, kad logikai gal\u0117jo b\u016bti naudojami skai\u010diai, ne tiktai \u017eod\u017eiai. Pavyzd\u017eiui, Alonzo Church sugeb\u0117jo i\u0161reik\u0161ti Lambdos skai\u010diavim\u0105<sup>[10]<\/sup> formul\u0117mis. Tiuringo ma\u0161inos<sup>[11]<\/sup> nustat\u0117 pagrind\u0105 program\u0173 i\u0161saugojimui kaip duomenis &#8220;von Neumann&#8221; kompiuterio architekt\u016broje. Ta\u010diau, skirtingai nuo Lambdos skai\u010diavimo<sup>[10]<\/sup>, Tiuringo kodas nebuvo naudojamas kaip pagrindas auk\u0161tesnio lygmens kalboms.<\/p>\n<p>Kaip daugel\u012f pirm\u0173j\u0173 kalb\u0173 istorijoje, pirm\u0105j\u0105 \u0161iuolaikin\u0119 programavimo kalb\u0105 yra sunku identifikuoti. Nuo prad\u017eios, kompiuterin\u0117s \u012frangos apribojimai apibr\u0117\u017e\u0117 kalb\u0105 ir jos galimybes. Perfokortos<sup>[8]<\/sup> tur\u0117jo tik 80 stulpeli\u0173, ir kai kurie i\u0161 stulpeli\u0173 tur\u0117jo b\u016bti panaudotos r\u016b\u0161iavimo skai\u010diui kiekvienoje kortel\u0117je, tod\u0117l buvo galima i\u0161saugoti tik ma\u017e\u0105 dal\u012f komand\u0173.<br \/>\nFORTRAN programavimo kalba naudojo kai kuriuos reik\u0161minius \u017eod\u017eius, kurie buvo tokie pat kaip angl\u0173 kalbos \u017eod\u017eiai, tokie kaip, &#8220;IF&#8221;, &#8220;GOTO&#8221; (go to) ir &#8220;CONTINUE&#8221;. Magnetinio b\u016bgno naudojimas atmin\u010diai rei\u0161k\u0117, kad kompiuterio programos tur\u0117jo b\u016bti ra\u0161omos b\u016bgnui besisukant. D\u0117l \u0161ito programos buvo labiau priklausomos nuo kompiuterin\u0117s \u012frangos.<\/p>\n<p>Kai kuriems \u017emon\u0117ms, pirma \u0161iuolaikin\u0117 programavimo kalba priklauso nuo to, kiek pastang\u0173 ir skaitomumo yra reikalaujama \u012fd\u0117ti kol jam suteikiama &#8220;programavimo kalbos&#8221; vardas. \u017dakardin\u0117s stakl\u0117s ir Charles Babbage Analitinis Variklis, abu tur\u0117jo paprastas, labai ribotas kalbas tam, kad apra\u0161yt\u0173 veiksmus, kuriuos \u0161itos ma\u0161inos turi \u012fvykdyti.<br \/>\nKiek v\u0117liau, 1940-taisiais metais, buvo sukurtas pirmas elektrinis kompiuteris. Itin ribotas greitis ir atminties tr\u016bkumas privert\u0117 programuotojus asembleriu ra\u0161yti programas. Kaip paskui paai\u0161k\u0117jo, programuojant asembleryje<sup>[12]<\/sup> buvo reikalinga didel\u0117s pastangos norint suderinti t\u0105 ar an\u0105.<\/p>\n<p>1948-taisiais metais, Konrad Zuse i\u0161leido straipsn\u012f apie savo programavimo kalb\u0105 &#8220;Plankalk\u00fcl&#8221;, ta\u010diau kalba nebuvo \u012fgyvendinta jo gyvenimo trukm\u0117je ir jo original\u016bs \u012fna\u0161ai buvo izoliuoti nuo kit\u0173 \u012fvyki\u0173.<br \/>\n1950-taisiais metais, pirmos trys \u0161iuolaikin\u0117s programavimo kalbos, kurios yra naudojamos iki \u0161i\u0173 dien\u0173 buvo sukurtos:<\/p>\n<ul>\n<li>FORTRAN (1955), &#8220;<strong>FOR<\/strong>mula <strong>TRAN<\/strong>slator&#8221;, sukurta John Backus<\/li>\n<li>LISP (1958), &#8220;<strong>LIS<\/strong>t <strong>P<\/strong>rocessor&#8221;, sukurta John McCarthy<\/li>\n<li>COBOL, &#8220;<strong>CO<\/strong>mmon <strong>B<\/strong>usiness <strong>O<\/strong>riented <strong>L<\/strong>anguage&#8221;, sukurta &#8220;Short Range&#8221; komiteto, prie kurio aktyviai prisid\u0117jo Grace Hopper.<\/li>\n<\/ul>\n<p>Kitas \u012fvykis 1950-t\u0173j\u0173 pabaigoje buvo Amerikos ir Europos programuotoj\u0173 komiteto publikacija &#8211; &#8220;naujos kalbos algoritmams&#8221;. &#8220;ALGOL 60&#8221; raportas (&#8220;<strong>ALGO<\/strong>rithmic <strong>L<\/strong>anguage&#8221;) konsolidavo daug min\u010di\u0173, cirkuliuojan\u010di\u0173 tuo laiku, ir rod\u0117 dvi pagrindines kalbos naujoves:<\/p>\n<ul>\n<li>\u012fd\u0117ta blok\u0173 strukt\u016bra: kod\u0173 sekos ir kintamieji gal\u0117jo b\u016bti sugrupuoti \u012f blokus, tod\u0117l proced\u016bros nebuvo b\u016btinyb\u0117. <\/li>\n<li>lokali strukt\u016bra: blokas gal\u0117jo tur\u0117ti savus priva\u010dius kintamuosius, proced\u016bras ir funkcijas, nematomas visoms kitoms funkcijoms ir proced\u016broms tik kurioje jos apra\u0161ytos.<\/li>\n<\/ul>\n<p>Programavimo kalba &#8220;ALGOL 60&#8221; ypa\u010d buvo \u012ftakinga v\u0117lesn\u0117ms kalboms, i\u0161 kuri\u0173 kai kurios netrukus tapo populiaresn\u0117s. &#8220;Burroughs&#8221; didel\u0117s sistemos buvo suprojektuotos taip kad b\u016bt\u0173 galima u\u017eprogramuoti &#8220;ALGOL&#8221; at\u0161akomis.<br \/>\n&#8220;ALGOL&#8221; kalbos pagrindin\u0117s mintys buvo t\u0119siamos kuriant  nauj\u0105 \u0161ak\u0105 &#8220;ALGOL 68&#8221;:<\/p>\n<ul>\n<li>sintaks\u0117 ir semantika tapo labiau &#8220;sta\u010diakamp\u0117s&#8221;, su anonimine rutina, pasikartojan\u010dia spausdinimo sistema su auk\u0161tesnio u\u017esakymo funkcijomis.<\/li>\n<li>ne tiktai dalis be kontekst\u0173, bet ir pilna kalbos sintaks\u0117 ir semantika buvo apibr\u0117\u017etos formaliai, i\u0161rei\u0161kiant Van Wijngaarden gramatika<sup>[13]<\/sup> ir formalizmu, suprojektuotu specialiai \u0161iam tikslui.<\/li>\n<\/ul>\n<p>&#8220;ALGOL 68&#8221; daug ma\u017eai panaudot\u0173 kalbos ypatybi\u0173 ir jos sud\u0117tinga sintaks\u0117 padar\u0117  j\u0105 nem\u0117gstam\u0105 ir \u012fgijo nema\u017eai neigiamos reputacijos, kadangi buvo sud\u0117tinga. Niklaus Wirth i\u0161\u0117jo i\u0161 projekto komiteto, kad sukurt\u0173 paprastesn\u0119 &#8220;Pascal&#8221; kalb\u0105.<br \/>\nPeriodas nuo 1960-t\u0173j\u0173 antrosios pus\u0117s iki 1970-t\u0173j\u0173 antrosios pus\u0117s atne\u0161\u0117 pagrindin\u012f programavimo kalb\u0173 \u017eyd\u0117jim\u0105. Dauguma pagrindini\u0173 kalbos paradigm\u0173 dabar naudojime buvo sukurtos per \u0161\u012f period\u0105, kaip kad:<\/p>\n<ul>\n<li>&#8220;Simula&#8221;, sukurtas Nygaard ir Dahl 1960-t\u0173j\u0173 pabaigoje kaip &#8220;ALGOL 60&#8221; superkomplektas ir tai buvo pirmoji kalba, suprojektuota darbui su OOP<sup>[1]<\/sup>.<\/li>\n<li>&#8220;C&#8221;, ankstyva sistem\u0173 programavimo kalba, buvo i\u0161vystytas Dennis Ritchie ir Ken Thompson i\u0161 kompanijos &#8220;Bell Labs&#8221; tarp 1969 ir 1973 met\u0173.<\/li>\n<li>&#8220;Smalltalk&#8221;, 1970-t\u0173j\u0173 viduryje apr\u016bpino u\u017ebaigt\u0105 OOP<sup>[1]<\/sup> kalbos pagrindo projekt\u0105.<\/li>\n<li>&#8220;Prolog&#8221;, suprojektuotas 1972 metais Colmerauer, Roussel, ir Kowalski, buvo pirma logi\u0161ka programavimo kalba.<\/li>\n<li>&#8220;ML&#8221; pastat\u0117 polimorfin\u0119 tipo sistem\u0105 (sukurta Robin Milner, 1973 metais) ant LISP.<\/li>\n<\/ul>\n<p>Kiekviena i\u0161 \u0161it\u0173 kalb\u0173 suk\u016br\u0117 vis\u0105 \u0161eim\u0105 palikuoni\u0173, ir dabartin\u0117s kalbos turi bent vien\u0105 j\u0173 prot\u0117viuose.<br \/>\n1960-taisiais ir 1970-taisiais buvo kil\u0119 dideli debatai d\u0117l strukt\u016brinio programavimo, kur i\u0161 esm\u0117s buvo programuojama be GOTO komandos naudojimo. \u0160ie debatai buvo artimai susieti su kalbos projektu: kai kurios kalbos neap\u0117m\u0117 GOTO, kuris vert\u0117 strukt\u016brin\u012f programavim\u0105 ant programuotojo. Nors tuo laiku debatai \u0161\u0117lo su \u012fkar\u0161\u010diu, beveik visi programuotojai dabar sutinka, kad net kalbomis, kurios palaiko GOTO, jie u\u017eskaito kaip prast\u0105 programavimo stili\u0173, i\u0161imtis gali b\u016bti itin retais atvejais, kadangi kod\u0105 su GOTO yra sunku pri\u017ei\u016br\u0117ti, tvarkyti, taisyti klaidas bei nagrin\u0117ti.<\/p>\n<p>1980-tieji metai buvo reliatyvios konsolidacijos b\u016btinomis kalbomis metai. U\u017euot i\u0161rad\u0119 naujas at\u0161akas, visi \u0161itie jud\u0117jimai detaliau susitelk\u0117 ant jau esam\u0173 kalb\u0173, i\u0161rast\u0173 per pra\u0117jus\u012f de\u0161imtmet\u012f. C++ programavimo kalba susijung\u0117 \u012f OOP<sup>[1]<\/sup> ir sistem\u0173 programavim\u0105. Jungtini\u0173 Valstij\u0173 vyriausyb\u0117 standartizavo &#8220;ADA&#8221; sistem\u0173 programavimo kalb\u0105, numatyt\u0105 gynybos rangov\u0173 naudojimui. Japonijoje didel\u0117s sumos buvo i\u0161leistos tyrimams vadinamosioms penktos kartos programavimo kalboms, kurios \u012ftrauk\u0117 programines logikos konstrukcijas. Funkcin\u0117 kalb\u0173 bendruomen\u0117 pajud\u0117jo, kad standartizuot\u0173 ML ir LISP kalbas. &#8220;Miranda&#8221;, funkcin\u0117s kalbos su kreivu \u012fvertinimu, tyrin\u0117jimas prad\u0117jo griebtis per \u0161\u012f de\u0161imtmet\u012f.<\/p>\n<p>Viena svarbi nauja tendencija programavimo kalb\u0173 k\u016brime buvo padid\u0117j\u0119s d\u0117mesys didelio-m\u0105sto sistemoms. &#8220;Modula&#8221;, &#8220;Ada&#8221;, ir &#8220;ML&#8221; &#8211; visos i\u0161vystytos \u017einomos modulio sistemos 1980-taisiais. Modulio sistemos buvo da\u017enai atsidavusios bendro programavimo konstrukcijoms.<br \/>\nNors pagrindin\u0117s naujos paradigmos b\u016btinoms programavimo kalboms nepasirod\u0117, daug tyr\u0117j\u0173 i\u0161pl\u0117t\u0117 mintis apie ankstesnes kalbas ir pritaik\u0117 jas prie nauj\u0173 kontekst\u0173. Pavyzd\u017eiui, &#8220;Argus&#8221; ir &#8220;Emerald&#8221; sistem\u0173 kalbos buvo pritaikytos objektiniam programavimui<sup>[1]<\/sup>.<\/p>\n<p>&#8220;RISC&#8221; jud\u0117jimas<sup>[14]<\/sup> kompiuteri\u0173 architekt\u016broje teig\u0117, kad aparatin\u0117 \u012franga turi b\u016bti suprojektuota kompiliatoriams, o ne asemblerio programuotojams. Pad\u0117jus procesoriaus grei\u010dio pagerinimams, kurie \u012fgalino vis labiau ir labiau agresyvesn\u0119 kompiliacijos technik\u0105, &#8220;RISC&#8221; jud\u0117jimas<sup>[14]<\/sup> u\u017edeg\u0117 didesn\u012f susidom\u0117jim\u0105 kompiliacijos technologijai auk\u0161to lygio programavimo kalboms.<br \/>\n1990-taisiais nebuvo jokios naujov\u0117s b\u016btinomis kalbomis, bet buvo daug kombinacij\u0173 i\u0161 nauj\u0173 ir sen\u0173 kalb\u0173 bendrinimo. \u0160i era prad\u0117jo funkcini\u0173 kalb\u0173 paplitim\u0105. Didelis d\u0117mesys buvo skiriamas programuotojo produktyvumui. Pasirod\u0117 daug RAD<sup>[15]<\/sup> kalb\u0173, kurios paprastai b\u016bdavo kartu su IDE<sup>[16]<\/sup> ir buvo vyresni\u0173 kalb\u0173 palikuonis. Visos tokios kalbos buvo OOP<sup>[1]<\/sup> tipo. Jie ap\u0117m\u0117 Object Pascal (Delphi), Visual Basic (VB), ir Java.<\/p>\n<p>Java gavo ypa\u010d daug d\u0117mesio d\u0117l to, kad buvo radikalesn\u0117 ir novatori\u0161kesn\u0117 negu kitos RAD<sup>[15]<\/sup> kalbos. Ji tiesiogiai nesileido \u017eemyn nuo kit\u0173 kalb\u0173 ir rod\u0117 nauj\u0105 sintaks\u0119 ir liberalesn\u0119 ypatybi\u0173 inkorporacij\u0105. Daugelis mano, kad \u0161itos skriptinimo kalbos yra labiau produktyvios negu kad RAD<sup>[15]<\/sup> kalbos, bet da\u017enai tai b\u016bna d\u0117l pasirinkimo galimyb\u0117s, kurios daro ma\u017eas programas paprastesn\u0117mis, bet dideles programas &#8211; sud\u0117tingesn\u0117mis para\u0161yti ir palaikyti. Vis d\u0117lto, skriptinimo kalbos buvo \u017einomiausios kalbos panaudotos ry\u0161yje su internetu.<br \/>\n\u0160iais laikais kalb\u0173 yra sukurta vir\u0161 t\u016bkstan\u010dio ir kiekviena skirta vis kitokiam dalykui. <\/p>\n<p>Keletas \u017eymesni\u0173 istorijoje programavimo kalb\u0173, chronologine tvarka:<\/p>\n<p><em>Iki 1950-tuj\u0173 met\u0173:<\/em><\/p>\n<table>\n<tr>\n<th>Metai<\/th>\n<th>Pavadinimas, komentarai<\/th>\n<\/tr>\n<tr>\n<td>1943<\/td>\n<td>Plankalk\u00fcl (Konrad Zuse). Sukurtas ta\u010diau niekur nenaudotas ilg\u0105 laik\u0105.<\/td>\n<\/tr>\n<tr>\n<td>1943<\/td>\n<td>ENIAC programavimo sistema.<\/td>\n<\/tr>\n<tr>\n<td>1949 &#8211; 1954<\/td>\n<td>Serija specifini\u0173 ma\u0161inai mnemoni\u0161k\u0173 nurodym\u0173 rinkini\u0173, kaip ENIAC, prasid\u0117damas 1949 metais nuo C-10 BINAC (kuris v\u0117liau pl\u0117tojosi \u012f UNIVAC).<\/td>\n<\/tr>\n<\/table>\n<p><em>Iki 1970-tuj\u0173 met\u0173:<\/em><\/p>\n<table>\n<tr>\n<th>Metai<\/th>\n<th>Pavadinimas, komentarai<\/th>\n<\/tr>\n<tr>\n<td>1951<\/td>\n<td>Regional Assembly Language<\/td>\n<\/tr>\n<tr>\n<td>1952<\/td>\n<td>Autocode<\/td>\n<\/tr>\n<tr>\n<td>1954<\/td>\n<td>FORTRAN, IPL (LISP pradininkas)<\/td>\n<\/tr>\n<tr>\n<td>1955<\/td>\n<td>FLOW-MATIC (COBOL pradininkas)<\/td>\n<\/tr>\n<tr>\n<td>1957<\/td>\n<td>COMTRAN (COBOL pradininkas)<\/td>\n<\/tr>\n<tr>\n<td>1958<\/td>\n<td>LISP, ALGOL 58<\/td>\n<\/tr>\n<tr>\n<td>1959<\/td>\n<td>FACT (COBOL pradininkas), COBOL<\/td>\n<\/tr>\n<tr>\n<td>1962<\/td>\n<td>APL, Simula, SNOBOL<\/td>\n<\/tr>\n<tr>\n<td>1963<\/td>\n<td>CPL (C pradininkas)<\/td>\n<\/tr>\n<tr>\n<td>1964<\/td>\n<td>BASIC, PL\/I<\/td>\n<\/tr>\n<tr>\n<td>1967<\/td>\n<td>BCPL<\/td>\n<\/tr>\n<\/table>\n<p><em>Iki 1980-tuj\u0173 met\u0173:<\/em><\/p>\n<table>\n<tr>\n<th>Metai<\/th>\n<th>Pavadinimas, komentarai<\/th>\n<\/tr>\n<tr>\n<td>1968<\/td>\n<td>Logo<\/td>\n<\/tr>\n<tr>\n<td>1969<\/td>\n<td>B (C pradininkas)<\/td>\n<\/tr>\n<tr>\n<td>1970<\/td>\n<td>Pascal, Forth<\/td>\n<\/tr>\n<tr>\n<td>1972<\/td>\n<td>C, Smalltalk, Prolog<\/td>\n<\/tr>\n<tr>\n<td>1973<\/td>\n<td>ML<\/td>\n<\/tr>\n<tr>\n<td>1975<\/td>\n<td>Scheme<\/td>\n<\/tr>\n<tr>\n<td>1978<\/td>\n<td>SQL (pirma buvo kurta kaip u\u017eklausin\u0117 sistema, bet v\u0117liau buvo pakoreguota iki programavimo kalbos)<\/td>\n<\/tr>\n<\/table>\n<p><em>Iki 1990-tuj\u0173 met\u0173:<\/em><\/p>\n<table>\n<tr>\n<th>Metai<\/th>\n<th>Pavadinimas, komentarai<\/th>\n<\/tr>\n<tr>\n<td>1980<\/td>\n<td>C++ (C su klas\u0117mis, vardas pakeistas 1983 met\u0173 Liep\u0105)<\/td>\n<\/tr>\n<tr>\n<td>1983<\/td>\n<td>Objective-C, Ada<\/td>\n<\/tr>\n<tr>\n<td>1984<\/td>\n<td>Common Lisp<\/td>\n<\/tr>\n<tr>\n<td>1985<\/td>\n<td>Eiffel<\/td>\n<\/tr>\n<tr>\n<td>1986<\/td>\n<td>Erlang<\/td>\n<\/tr>\n<tr>\n<td>1987<\/td>\n<td>Perl<\/td>\n<\/tr>\n<tr>\n<td>1988<\/td>\n<td>Tcl<\/td>\n<\/tr>\n<tr>\n<td>1989<\/td>\n<td>FL (Backus)<\/td>\n<\/tr>\n<\/table>\n<p><em>Iki 2000-tuj\u0173 met\u0173:<\/em><\/p>\n<table>\n<tr>\n<th>Metai<\/th>\n<th>Pavadinimas, komentarai<\/th>\n<\/tr>\n<tr>\n<td>1990<\/td>\n<td>Haskell<\/td>\n<\/tr>\n<tr>\n<td>1991<\/td>\n<td>Python, Visual Basic<\/td>\n<\/tr>\n<tr>\n<td>1993<\/td>\n<td>Ruby, Lua<\/td>\n<\/tr>\n<tr>\n<td>1994<\/td>\n<td>CLOS (dalinai ANSI Common Lisp)<\/td>\n<\/tr>\n<tr>\n<td>1995<\/td>\n<td>Java, Delphi (Object Pascal), JavaScript, PHP<\/td>\n<\/tr>\n<tr>\n<td>1997<\/td>\n<td>Rebol<\/td>\n<\/tr>\n<tr>\n<td>1999<\/td>\n<td>D<\/td>\n<\/tr>\n<\/table>\n<p><em>Iki 2010-tuj\u0173 met\u0173:<\/em><\/p>\n<table>\n<tr>\n<th>Metai<\/th>\n<th>Pavadinimas, komentarai<\/th>\n<\/tr>\n<tr>\n<td>2001<\/td>\n<td>C#, Visual Basic .NET<\/td>\n<\/tr>\n<tr>\n<td>2002<\/td>\n<td>F#<\/td>\n<\/tr>\n<tr>\n<td>2003<\/td>\n<td>Scala, Factor<\/td>\n<\/tr>\n<tr>\n<td>2006<\/td>\n<td>Windows Power Shell<\/td>\n<\/tr>\n<tr>\n<td>2007<\/td>\n<td>Clojure, Groovy<\/td>\n<\/tr>\n<tr>\n<td>2009<\/td>\n<td>Go<\/td>\n<\/tr>\n<\/table>\n<p style=\"font-size: 20px; padding-top: 20px; padding-bottom: 5px;\"><strong>2. Netikros programavimo kalbos<\/strong><\/p>\n<p>\u0160iais laikais yra i\u0161rasta tiek programavimo kalb\u0173, jog atrodo kad sukurta yra kiekvienam technikos gabaliukui u\u017eprogramuoti. Ta\u010diau kaip beb\u016bt\u0173, egzistuoja ir tokios kalbos, sukurtos \u0161iaip sau. Jos neturi nei savo IDE<sup>[16]<\/sup>, nei kompiliatoriaus<sup>[5]<\/sup> ar interpretatoriaus<sup>[4]<\/sup> ir jos n\u0117ra u\u017eskaitomos kaip tikros programavimo kalbos, na galb\u016bt bent jau tarp rimt\u0173 programuotoj\u0173 kurie nesupranta juok\u0173. Tokios &#8220;netikros&#8221; kalbos da\u017eniausiai naudojamos norint pasijuokti ar \u0161iaip pasukioti galv\u0105 kaip but\u0173 galima para\u0161yti. \u012edomiausia tai kad j\u0173 yra ne viena ir ne dvi, o visa kr\u016bva ir kiekviena savaip ypatinga. Norint daugum\u0105 j\u0173 suprasti, reikia pa\u017einoti interneto kult\u016br\u0105.<\/p>\n<p style=\"font-size: 15px; padding-top: 20px; padding-bottom: 5px;\"><strong>2.1. Istorija<\/strong><\/p>\n<p>Ankstyviausias, ir pirmasis istorijoje netikros kalbos pavyzdys buvo INTERCAL, suprojektuotas Don Woods ir James M. Lyon, 1972 metais, su mintimi kad ji bus nepana\u0161i \u012f bet kokia kita programavimo kalb\u0105 kuri egzistavo tuo metu, su kuria autoriai nebuvo pa\u017e\u012fstami. INTERCAL kalba parodijavo nustatyt\u0173 programavimo kalb\u0173 elementus, toki\u0173 kalb\u0173 kaip FORTRAN, COBOL, ir asemblerio<sup>[12]<\/sup>.<\/p>\n<p>Ankstyvas INTERCAL naudojimas buvo suri\u0161tas su IBM System\/360 ir neatpa\u017eintu Atari kompiuteriu (turb\u016bt vienu i\u0161 pirm\u016bj\u0173 Atari 2600), ta\u010diau neprigijo. Daugel\u012f met\u0173 INTERCAL buvo tiktai popierin\u0117je INTERCAL vadovo kopijoje. Kalbos atgimimas 1990 metais kaip &#8220;C&#8221; kalbos papildinys ant Unix sistemos paskatino susidom\u0117jim\u0105 tokiomis, netikromis kalbomis.<\/p>\n<p>1992 metais, Wouter van Oortmerssen suk\u016br\u0117 &#8220;FALSE&#8221; &#8211; ma\u017ea programavimo kalba, kuri i\u0161 prigimties ketino padaryti kod\u0105 supainiot\u0105, pain\u0173, ir paprastai ne\u012fskaitom\u0105. Taip pat verta pa\u017eym\u0117ti, kad ji tur\u0117jo tiktai 1024 bait\u0173 kompiliatori\u0173<sup>[5]<\/sup>. Tai \u012fkv\u0117p\u0117 Urban M\u00fcller sukurti net ma\u017eesn\u0119 kalb\u0105, dabar garsi\u0105 ir itin pl\u0117tojam\u0105 &#8220;BrainFuck&#8221;, kurios sintaks\u0117 susideda tiktai i\u0161 a\u0161tuoni\u0173 simboli\u0173. Kartu su Chris Pressey &#8220;Befunge&#8221; kalba (pana\u0161iai kaip FALSE), BrainFuck yra dabar viena i\u0161 labiausiai paplitusi\u0173 netikr\u0173 programavimo kalb\u0173. Kokios kalbos kuriais metais atsirado &#8211; n\u0117ra ai\u0161ku, ta\u010diau kelios kalbos yra \u012fra\u0161ytos \u012f istorij\u0105. Pateikiu s\u0105ra\u0161\u0105 populiariausi\u0173 ir labiausiai \u017einom\u0173 kalb\u0173 chronologine tvarka:<\/p>\n<p><strong>1964 metai<\/strong>:<\/p>\n<ul>\n<li>Corrado B\u00f6hm i\u0161leido dokumentacij\u0105, apib\u016bdinan\u010di\u0105 P&#8221; kalb\u0105. Nors i\u0161 prad\u017ei\u0173 tuo metu ji nebuvo sukurta tokiam tikslui, ta\u010diau v\u0117liau buvo pasteb\u0117ta kad ji yra labai pana\u0161i \u012f &#8220;BrainFuck&#8221; sukurt\u0105 po 29-neri\u0173 met\u0173.<\/li>\n<\/ul>\n<p><strong>1972 metai:<\/strong><\/p>\n<ul>\n<li>Donald R. Woods ir James M. Lyon i\u0161leido INTERCAL, programavimo kalb\u0105 kuri netur\u0117jo nieko bendra su tuometin\u0117mis programavimo kalbomis. INTERCAL istorik\u0173 yra laikoma kaip pirmoji istorijoje netikra kalba.<\/li>\n<\/ul>\n<p><strong>1991 metai:<\/strong><\/p>\n<ul>\n<li>Ward Cunningham i\u0161rado Biota kalb\u0105 kuri buvo parduota internete.<\/li>\n<\/ul>\n<p><strong>1993 metai:<\/strong><\/p>\n<ul>\n<li>FALSE, kalba su 1024 bait\u0173 kompiliatoriumi<sup>[5]<\/sup>, buvo i\u0161rasta Wouter van Oortmerssen. V\u0117liau, Urban M\u00fcller i\u0161rado Brainfuck, nurungdamas FALSE su tiktai a\u0161tuoniomis instrukcijomis ir kompiliatoriumi kiek didesniu kaip 200 bait\u0173.<\/li>\n<li>Chris Pressey i\u0161rado &#8220;Befunge&#8221;. Sukurta \u0161iais metais buvo pavadinta Befunge-93, d\u0117l jo apribojimo 80&#215;25 kodiniam dyd\u017eiui.<\/li>\n<\/ul>\n<p><strong>1994 metai:<\/strong><\/p>\n<ul>\n<li>Chris Pressey pasi\u016blo SMETANA, kuriame programos kodas yra serija \u017eingsni\u0173 kaip, &#8220;Go to step n.&#8221; ir &#8220;Swap step a with step b.&#8221; B\u016bdama gana nenaudinga ir ma\u017eai galimybi\u0173 turinti kalba, SMETANA kalbai nebuvo skirta daug d\u0117mesio.<\/li>\n<li>&#8220;Kvikkalkul&#8221; kalba, tariamai i\u0161vystyta ir panaudota \u0161vedi\u0161ko Karinio j\u016br\u0173 laivyno 1950-taisiais, pasidar\u0117 \u017einoma visiems kai anoniminis vartotojas para\u0161\u0117 apie tai alt.folklore.computers forume.<\/li>\n<\/ul>\n<p><strong>1997 metai:<\/strong><\/p>\n<ul>\n<li>Befunge variantas &#8220;Befunge-97&#8221; sukurtas. \u0160is standartas pasirodo buvo nei\u0161baigta ir nebuvo pla\u010diai naudojama.<\/li>\n<li>Chris Pressey, Ben Olmstead, ir John Colagioia i\u0161randa &#8220;Wierd&#8221; kalb\u0105, pagr\u012fst\u0105 laidais, kurios atitiko instrukcijas. Buvo kil\u0119 diskusij\u0173 ar laidams yra leid\u017eiama kirstis.<\/li>\n<\/ul>\n<p><strong>1999 metai:<\/strong><\/p>\n<ul>\n<li>Sukurta &#8220;Unlambda&#8221;, pirmoji netikra, pilnai i\u0161baigta ir funkcionuojanti kalba.<\/li>\n<\/ul>\n<p><strong>2000 metai:<\/strong><\/p>\n<ul>\n<li>John Colagioia i\u0161randa Thue.<\/li>\n<li>Jeffry Johnston apra\u0161o &#8220;BitChanger&#8221;, pirm\u0105j\u0105 vieno bito BrainFuck versij\u0105 su tiktais keturiomis instrukcijomis.<\/li>\n<\/ul>\n<p><strong>2002 metai:<\/strong><\/p>\n<ul>\n<li>Nikita Ayzikovsky pasi\u016blo SmallFuck, supaprastint\u0105 Brainfuck versij\u0105 su apribota atmintimi ir be IO. Nors kalba n\u0117ra ypa\u010d galinga, ji gali b\u016bti sukompiliuota su SMETANA, kalba kuri\u0105 anks\u010diau laik\u0117 visi\u0161kai nenaudinga.<\/li>\n<\/ul>\n<p><strong>2003 metai:<\/strong><\/p>\n<ul>\n<li>Edwin Brady ir Chris Morris i\u0161randa &#8220;Whitespace&#8221;, kuri susilauk\u0117 daug d\u0117mesio kai buvo paskelbta Slashdot naujien\u0173 portalo pagrindiniam puslapyje.<\/li>\n<li>I\u0161rastas &#8220;Kipple&#8221;.<\/li>\n<li>Rugpj\u016bt\u012f, Francis Rogers i\u0161randa &#8220;PATH&#8221;, BrainFuck at\u0161ak\u0105.<\/li>\n<li>Rugs\u0117j\u012f, Daniel Brockman i\u0161leid\u017eia &#8220;SNUSP&#8221; &#8211; pagerint\u0105 PATH variant\u0105.<\/li>\n<\/ul>\n<p style=\"font-size: 15px; padding-top: 20px; padding-bottom: 5px;\"><strong>2.2. Pavyzd\u017eiai<\/strong><\/p>\n<p>Dabar egzistuoja vir\u0161 650 netikr\u0173 kalb\u0173 ir j\u0173 at\u0161ak\u0173. Vienos labiau paplitusios, kitos jau seniai u\u017ekastos interneto kapinyne. \u010cia pateiksiu kelet\u0105 populiariausi\u0173 kalb\u0173 ir j\u0173 sintaks\u0117s pavyzd\u017eius:<\/p>\n<table>\n<th>Kalbos pavadinimas<\/th>\n<th>Apra\u0161ymas<\/th>\n<th>&#8220;Hello World!&#8221; programa<\/th>\n<tr>\n<td>LOLCODE<\/td>\n<td>Kalba sukurta atvaizduoti &#8220;lolcat&#8221; interneto kult\u016bros at\u0161akai<\/td>\n<td>\n<pre>HAI\r\nCAN HAS STDIO?\r\nVISIBLE \"HAI WORLD!\"\r\nKTHXBYE\r\n<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>Befunge<\/td>\n<td>Labiausiai pastebima tai kad kodas ra\u0161omas atvirk\u0161\u010diai ir programos vykdym\u0105 galima prilyginti laikrod\u017eio jud\u0117jimo kryp\u010diai<\/td>\n<td>\n<pre>\"dlroW olleH\">:v\r\n                          ^,_@\r\n<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>BrainFuck<\/td>\n<td>Kalba sukurta b\u016bti ypatingai minimalistine, tod\u0117l kodas atrodo kaip u\u017ekoduotas ir ne\u012fskaitomas kiekvienam, kadangi visa kalba susideda i\u0161 a\u0161tuoni\u0173 simboli\u0173<\/td>\n<td>\n<pre>++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++\r\n..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.\r\n<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>INTERCAL<\/td>\n<td>Sintaks\u0117 pana\u0161i \u012f C kalbos, ta\u010diau skiriasi<\/td>\n<td>\n<pre>#include <stdio.h>\r\nint main()\r\n{ \r\n   puts(\"Hello, world!\");\r\n   return 0;\r\n}\r\n<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>Malbolge<\/td>\n<td>Sukurta kaip pati sud\u0117tingiausia kalba<\/td>\n<td>\n<pre>('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&#038;%$#\"\r\n `CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj\"Fhg${z@><\/pre>\n<\/td>\n<\/tr>\n<\/table>\n<p style=\"font-size: 20px; padding-top: 20px; padding-bottom: 5px;\"><strong>3. \u0160iuolaikinis programavimas<\/strong><\/p>\n<p>\u0160iuolaikinis programavimas yra daug sud\u0117tingesn\u0117 proced\u016bra negu kad buvo anks\u010diau. Ra\u0161ant kokybi\u0161kas programas, b\u016btina atsi\u017evelgti \u012f daugyb\u0119 faktori\u0173 &#8211; ar kodas tvarkingas, ar &#8220;nenuteka&#8221; kur nors atmintis, ar apra\u0161ytas komentarais tinkamai ir pana\u0161iai. Ra\u0161ant didel\u012f projekt\u0105 grup\u0117je, kai dirba du, trys ar daugiau \u017emoni\u0173, tokie dalykai kaip tvarkingas, \u012fskaitomas kodas, apra\u0161ytas komentarais yra b\u016btinyb\u0117, kitaip projektas gali u\u017esit\u0119sti ilgiau nei buvo planuota, arba programa nesigaus kaip nor\u0117ta.<\/p>\n<p style=\"font-size: 15px; padding-top: 20px; padding-bottom: 5px;\"><strong>3.1. Kokyb\u0117s reikalavimai<\/strong><\/p>\n<p>Kad ir kaip programuotum, galutinis variantas turi atitikti ir tenkinti tam tikrus standartus ir poreikius. \u010cia keletas dalyk\u0173 \u012f kuriuos yra b\u016btina atsi\u017evelgti:<\/p>\n<ul>\n<li><strong>Efektyvumas\/greitis<\/strong>: apibr\u0117\u017eia kiek programa &#8220;valgys&#8221; kompiuterio resurs\u0173 &#8211;  procesoriaus greitis\/laikas, laikinosios atminties dydis\/apdorojimo greitis, l\u0117ti \u012frenginiai, kaip kad kietieji diskai, interneto greitis ir t.t. &#8211; kuo ma\u017eiau, tuo geriau.<\/li>\n<li><strong>Patikimumas<\/strong>: nustato kaip da\u017enai programa l\u016b\u017ein\u0117s, strigin\u0117s. Kaip da\u017enai i\u0161vedin\u0117s teisingus rezultatus &#8211; tai remiasi ant algoritmavimo koncepcijos, programavimo ir dizaino klaid\u0173, tinkamo resurs\u0173 i\u0161naudojimo &#8211; atminties atlaisvinimas kai jos nereikia, buferio perpildymai ir logines klaidos &#8211; tokios kaip dalyba i\u0161 nulio.<\/li>\n<li><strong>Susidorojimas su klaidomis<\/strong>: tai apibr\u0117\u017eia kaip gerai programa tvarkysis su klaidomis, d\u0117l kuri\u0173 programuotojas n\u0117ra atsakingas &#8211; tokiomis kaip neteisingi, sugadinti ar neegzistuojantys duomenys, reikaling\u0173 resurs\u0173 nebuvimas, operacin\u0117s sistemos servis\u0173 klaidos su kuriomis s\u0105veikaus programa, internetas ir pana\u0161iai.<\/li>\n<li><strong>Panaudojimas<\/strong>: programos GUI<sup>[7]<\/sup> ergonomika, kaip gerai programa veiks pagal savo paskirt\u012f, o kartais ir ne pagal paskirt\u012f.<\/li>\n<li><strong>Universalumas<\/strong>: kaip programa tvarkysis ir veiks su skirtingais kompiuteriais, technine ir aparatine \u012franga, ant koki\u0173 sistem\u0173 ir kaip gerai ant j\u0173 veiks.<\/li>\n<\/ul>\n<p style=\"font-size: 15px; padding-top: 20px; padding-bottom: 5px;\"><strong>3.2. Pirminio kodo skaitomumas<\/strong><\/p>\n<p>Programavime skaitomumas rei\u0161kia pirminio kodo tvarkingum\u0105, komentavim\u0105, suprantamum\u0105. Kodas tur\u0117t\u0173 b\u016bti ai\u0161kiai sura\u0161ytas, kad kitas programuotojas, ne\u017einodamas k\u0105 pati programa daro, suprast\u0173 visk\u0105 lengvai ir paprastai pa\u017ei\u016br\u0117jus \u012f kod\u0105.<br \/>\n\u012eskaitomumas yra ypa\u010d svarbus programuotojams, d\u0117l to kad jie daug laiko praleid\u017eia \u017ei\u016br\u0117dami ir tvarkydami kod\u0105, savo ir kit\u0173. Sunkiai \u012fskaitomas ir netvarkingas kodas, kuris \u012fgavo ir savo termin\u0105 &#8211; Spaghetti Code (Spageti kodas), priveda iki programavimo klaid\u0173, ilgesnio, pasikartojan\u010dio kodo.<\/p>\n<p>Skaitomumas apima:<\/p>\n<ul>\n<li>Tarpus tarp \u017eod\u017ei\u0173, sakiniu ir eilu\u010di\u0173<\/li>\n<li>Komentarus<\/li>\n<li>Kodo suskirstymas \u012f dalis<\/li>\n<li>Atitinkamai pavadintus ir lengvai \u012fsimenamus vardus klas\u0117ms, kintamiesiems, proced\u016broms, funkcijoms, konstantoms ir t.t.<\/li>\n<\/ul>\n<p style=\"font-size: 15px; padding-top: 20px; padding-bottom: 5px;\"><strong>3.3. Programavimo kalbos pasirinkimas<\/strong><\/p>\n<p>Kaip min\u0117ta anks\u010diau, programavimo kalb\u0173 yra vir\u0161 t\u016bkstan\u010dio ir kiekviena skirta ka\u017ekam arba ji turi savo savybes kurios tinka vienur ir netinka kitur, taigi norint i\u0161sirinkti kalb\u0105 kuri yra perspektyvi neretai tenka pasukti galv\u0105. Tiesa &#8211; yra kalb\u0173 kurios skaitosi kaip universalios, tokios kaip C, Ruby, Python ir pan.<br \/>\nRenkantis kalb\u0105, neretai kyla klausimas, kuri kalba yra populiariausia. \u012e \u0161i klausim\u0105 yra sunku atsakyti, kadangi n\u0117ra patikimo metodo tai i\u0161matuoti. Kol kas populiariausias metodas tai i\u0161matuoti yra sekant darbo pasi\u016blymus, skai\u010diuojant parduotas programavimo knygas, skai\u010diuojant i\u0161leistus programavimo projektus. <\/p>\n<p style=\"font-size: 15px; padding-top: 20px; padding-bottom: 5px;\"><strong>3.4. Programavimo stilius<\/strong><\/p>\n<p>Pagal tai, kokiais principais remiantis kuriamos programos, skiriami du pagrindiniai programavimo stiliai:<\/p>\n<ul>\n<li><strong>Imperatyvusis programavimas<\/strong>: Pagrindinis principas: programa &#8211; tai komand\u0173, kurias reikia vykdyti, rinkinys. Komandos kei\u010dia programos b\u016bsen\u0105. Kadangi beveik visa aparatin\u0117 \u012franga dirba \u0161iuo principu, tai did\u017eioji dalis program\u0173 yra para\u0161yta b\u016btent \u0161iuo stiliumi. Skiriamos tokios \u0161io stiliaus at\u0161akos:<\/li>\n<ul style=\"list-style-type:circle\">\n<li><em>nuoseklusis programavimas<\/em>: Tai programavimas be joki\u0173 arba keliomis taisykl\u0117mis. Priimtinas nedidel\u0117se programose, jei intensyviai naudojamos &#8220;GOTO&#8221; komandos, gaunamas sunkiai valdomas, \u012fskaitomas ir pri\u017ei\u016brimas kodas, dar vadinamas &#8220;spaghetti kodu&#8221;.<br \/>\nPavyzdys: BASIC (pradin\u0117 versija), Asembleris<sup>[12]<\/sup> (jei nesilaikoma disciplinos), kitos pirmosios programavimo kalbos.<\/li>\n<li><em>strukt\u016brinis (proced\u016brinis) programavimas<\/em>: Toks programavimo stilius u\u017ededa apribojimus, kad visa programa turi b\u016bti suskaidyta \u012f kaip \u012fmanoma ma\u017eiau viena nuo kitos priklausomus modulius (gali b\u016bti keli\u0173 lygi\u0173: proced\u016bros\/funkcijos, modulio, bibliotekos). Kiekviena tokia dalis gali tur\u0117ti tik joje matomus kintamuosius.<br \/>\nPavyzdys: &#8220;ALGOL&#8221; ir i\u0161 jo i\u0161sivys\u010diusios at\u0161akos, Pascal, C.<\/li>\n<li><em>objektinis programavimas<\/em>: objekti\u0161kai kuriamos programos strukt\u016bra suskirstoma \u012f klases, kurios apra\u0161o duomenis ir su jais susijus\u012f funkcionalum\u0105.<\/li>\n<\/ul>\n<li><strong>Deklaratyvusis programavimas<\/strong>: Pagrindinis principas: programa apra\u0161o kokias s\u0105lygas sprendinys turi tenkinti, ta\u010diau neapibr\u0117\u017eia sprendinio ie\u0161kojimo algoritmo. \u0160\u012f algoritm\u0105 kiekviena realizacija gali tur\u0117ti savo. Skiriamos tokios deklaratyviojo programavimo stiliaus at\u0161akos:<\/li>\n<ul style=\"list-style-type:circle\">\n<li><em>Funkcinis programavimas<\/em>: Funkciniame programavime sprendinio s\u0105lygoms apra\u0161yti naudojamos funkcijos, neturin\u010dios vidini\u0173 b\u016bsen\u0173. D\u0117l \u0161ios savyb\u0117s jos negalinti tur\u0117ti \u0161alutini\u0173 poveiki\u0173.<br \/>\nPavyzdys: LISP.<\/li>\n<li><em>Loginis programavimas<\/em>: Loginiame programavime sprendinio s\u0105lygas apra\u0161o duomenys, su kuriais reikia dirbti ir taisykl\u0117s, kurios nurodo kaip tie duomenys yra vieni su kitais susij\u0119.<br \/>\nPavyzdys: Prolog, SQL.<\/li>\n<\/ul>\n<\/ul>\n<p style=\"font-size: 15px; padding-top: 20px; padding-bottom: 5px;\"><strong>3.5. Pirminio kodo taisymas<\/strong><\/p>\n<p>Kodo taisymas, dar \u017einomas kaip &#8220;Debugging&#8221;<sup>[17]<\/sup> yra labai svarbi u\u017eduotis programin\u0117s \u012frangos k\u016brimo procese, tod\u0117l kad klaidinga programa gali tur\u0117ti reik\u0161mingas pasekmes jos vartotojams. Kai kurios kalbos yra labiau linkusios \u012f kai kurias klaid\u0173 r\u016b\u0161is, tod\u0117l kad jos kompiliatoriai<sup>[5]<\/sup> ar interpretatoriai<sup>[4]<\/sup> neturi tokiu funkcij\u0173 kurios \u012fvykdyt\u0173 tokius didelius tikrinimus kaip kit\u0173 kalb\u0173. Stati\u0161kos analiz\u0117s \u012frankio (debugger)<sup>[18]<\/sup> naudojimas gali pad\u0117ti aptikti tam tikras galimas problemas. Tod\u0117l beveik kiekviena kalba turi po kelis kompiliatorius<sup>[5]<\/sup> arba interpretatorius<sup>[4]<\/sup>.<\/p>\n<p>Keletas pavyzd\u017ei\u0173:<\/p>\n<table>\n<th>Kalbos pavadinimas<\/th>\n<th>Kalbos tipas<\/th>\n<th>Kompiliatoriai \/ interpretatoriai<\/th>\n<tr>\n<td>Java<\/td>\n<td>Kompiliuojama<\/td>\n<td>javac, GCJ, ECJ<\/td>\n<\/tr>\n<tr>\n<td>C<\/td>\n<td>Kompiliuojama<\/td>\n<td>AMPC, GCC, Microsoft C, Turbo C<\/td>\n<\/tr>\n<tr>\n<td>C++<\/td>\n<td>Kompiliuojama<\/td>\n<td>C++ Builder, Borland C++, GCC, Visual C++<\/td>\n<\/tr>\n<tr>\n<td>BASIC<\/td>\n<td>Kompiliuojama<\/td>\n<td>bwbasic, FreeBASIC, glbcc, Gambas, GW Basic, hbasic, kbasic, scriptbasic, smallbasic, wxbasic, xbasic, x11basic, yabasic, Jabaco<\/td>\n<\/tr>\n<tr>\n<td>C#<\/td>\n<td>Kompiliuojama<\/td>\n<td>Microsoft Visual C# , Mono<\/td>\n<\/tr>\n<tr>\n<td>Pascal<\/td>\n<td>Kompiliuojama<\/td>\n<td>Free Pascal, Turbo Pascal<\/td>\n<\/tr>\n<tr>\n<td>Object Pascal<\/td>\n<td>Kompiliuojama<\/td>\n<td>Delphi, Free Pascal<\/td>\n<\/tr>\n<tr>\n<td>Perl<\/td>\n<td>Interpretuojama<\/td>\n<td>Perl<\/td>\n<\/tr>\n<tr>\n<td>PHP<\/td>\n<td>Interpretuojama<\/td>\n<td>PHP<\/td>\n<\/tr>\n<tr>\n<td>Python<\/td>\n<td>Interpretuojama<\/td>\n<td>IronPython, Python<\/td>\n<\/tr>\n<tr>\n<td>Ruby<\/td>\n<td>Interpretuojama<\/td>\n<td>IronRuby<\/td>\n<\/tr>\n<\/table>\n<p>Da\u017eniausiai visas klaid\u0173 \u0161alinimas b\u016bna atliekamas per tam skirt\u0105 IDE<sup>[16]<\/sup> kur galima matyti vis\u0105 kodo veikim\u0105 paleidus program\u0105 ir taip galima sekti jos vykdym\u0105 \u017eingsnis po \u017eingsnio stebint kintam\u0173j\u0173 reik\u0161mes, proced\u016br\u0173 veikim\u0105 ir pana\u0161iai. Programos klaid\u0173 \u0161alinim\u0105 galima atlikti ir neturint kodo programose kaip &#8220;OllyDbg&#8221;, Da\u017eniausiai toks metodas pritaikomas program\u0173 &#8220;nulau\u017ein\u0117jimuose&#8221; kur b\u016bna apeinama arba kitaip pa\u0161alinama programos veikimo dalis. Labiausiai \u017einomas pavyzdys yra \u017eaidimuose arba mokamose programose, kai piratiniuose leidiniuose neretai dadedamas ir &#8220;pagerintas&#8221; paleidimo failas i\u0161 kurio b\u016bna i\u0161imtos apsaugos.<\/p>\n<p style=\"font-size: 20px; padding-top: 20px; padding-bottom: 5px;\"><strong>4. Programavimo aplinka<\/strong><\/p>\n<p>Programavimo aplinka dabar su programavimu eina i\u0161vien. Buvo laikai kai ra\u0161yti algoritmus buvo i\u0161rastos ir sukurtos tam specialios klaviat\u016bros, kur vietoje raid\u017ei\u0173, ant mygtuk\u0173 buvo sura\u0161yta special\u016bs \u017eod\u017eiai ir taip buvo programuojama norint paspartinti darb\u0105. Dabar tas b\u016btu nei teori\u0161kai, nei prakti\u0161kai ne\u012fmanoma, vien d\u0117l to kad kalb\u0173 yra t\u016bkstan\u010diais ir tos kalbos turi tiek galimybi\u0173 bei funkcij\u0173 kad visk\u0105 sutalpinti yra sta\u010diai ne\u012fmanoma. Tam \u0161iais laikais yra kuriamos IDE<sup>[16]<\/sup>, kai kurios yra ir RAD<sup>[15]<\/sup>. <\/p>\n<p style=\"font-size: 15px; padding-top: 20px; padding-bottom: 5px;\"><strong>4.1. Integrated Development Environment (IDE)<\/strong><\/p>\n<p>Integrated Development Environment (IDE)<sup>[16]<\/sup>, dar ver\u010diama kaip &#8220;Integrated Design Environment&#8221; arba &#8220;Integrated Debugging Environment&#8221; tai specializuota programa program\u0173 k\u016br\u0117jams, kurios tikslas yra paspartinti programuotojo darb\u0105 ir kurioje yra kuriamos, ra\u0161omos, taisomos ir tobulinamos programos.<br \/>\nStandartinis IDE<sup>[16]<\/sup> paprastai susideda i\u0161:<\/p>\n<ul>\n<li>Pirminio kodo redaktoriaus<\/li>\n<li>Kompiliatoriaus ir\/arba interpretatoriaus<\/li>\n<li>Debugger (Statines analiz\u0117s \u012frankio)<\/li>\n<\/ul>\n<p>RAD<sup>[15]<\/sup> tipo IDE<sup>[16]<\/sup> dar turi ir automatizuot\u0105 kodo ra\u0161ym\u0105 kur kodas yra nusp\u0117jamas ir pasi\u016bloma kiti variantai. Dar jame yra ir automatizuot\u0173 GUI<sup>[7]<\/sup> k\u016brimo \u012franki\u0173, kurie leid\u017eia vizualiai kurti program\u0173 i\u0161vaizd\u0105.<br \/>\nKadangi tokios programos (IDE)<sup>[16]<\/sup> yra sud\u0117tingos, greitesnis ir labiau automatizuotas program\u0173 k\u016brimas pasirei\u0161kia po ka\u017ekiek laiko, kai b\u016bna susipa\u017e\u012fstama kaip ji veikia ir kas kur randasi.<\/p>\n<p>Keletas pavyzd\u017ei\u0173:<\/p>\n<table>\n<th>Kalba<\/th>\n<th>IDE pavadinimas<\/th>\n<th>Ar yra ant linux?<\/th>\n<tr>\n<td>Java<\/td>\n<td>NetBeans \/ JCreator  \/ Eclipse<\/td>\n<td>Taip \/ Ne \/ Taip<\/td>\n<\/tr>\n<tr>\n<td>C<\/td>\n<td>NetBeans \/ Code::Blocks \/<\/td>\n<td>Taip \/ Taip<\/td>\n<\/tr>\n<tr>\n<td>Perl<\/td>\n<td>Padre \/ E-P-I-C<\/td>\n<td>Taip \/ Taip<\/td>\n<\/tr>\n<tr>\n<td>Delphi \/ Pascal<\/td>\n<td>FPS \/ Embarcadero \/ Kylix \/ Lazarus<\/td>\n<td>Ne \/ Ne \/ Taip \/ Taip<\/td>\n<\/tr>\n<\/table>\n<p style=\"font-size: 13px; padding-top: 20px; padding-bottom: 5px;\"><strong>4.1.1. IDE istorija<\/strong><\/p>\n<p>IDE<sup>[16]<\/sup> poreikis atsirado kai atsirado galimyb\u0117 ra\u0161yti programas konsol\u0117je arba terminale. Ankstesni kompiuteriai tokios prabangos netur\u0117jo ir programos buvo ra\u0161omos ant popieriaus arba i\u0161mu\u0161amos ant Perfokort\u0173<sup>[8]<\/sup> prie\u0161 suvedant \u012f kompiliatori\u0173<sup>[5]<\/sup>. &#8220;Dartmouth BASIC&#8221; kalba buvo pirmoji istorijoje kuri leido kurti programas terminale arba konsol\u0117je. Tokia IDE<sup>[16]<\/sup> buvo per komandin\u0119 eilut\u0119 ir visi\u0161kai nebuvo pana\u0161i \u012f dabartines, ta\u010diau kaip beb\u016bt\u0173, ji tur\u0117jo integruot\u0105 kodo redagavim\u0105, fail\u0173 tvarkykl\u0119, kompiliatori\u0173<sup>[5]<\/sup> ir statin\u012f analiz\u0117s \u012frank\u012f<sup>[18]<\/sup>. Visa tai veik\u0117 kiek pana\u0161iai \u012f dabartines tokio tipo programas.<br \/>\n1975 metais kompanija &#8220;Softlab Munich&#8221; suk\u016br\u0117 &#8220;Maestro I&#8221; IDE<sup>[16]<\/sup> ir speciali\u0105 klaviat\u016br\u0105 jai, su kuria buvo greitesnis program\u0173 k\u016brimas. &#8220;Maestro I&#8221; buvo naudojama apie 22 t\u016bkst. programuotoj\u0173 per vis\u0105 pasaul\u012f tuo metu. Iki 1989 vien Vokietijoje buvo suskai\u010diuota apie 6 t\u016bkst. programuotoj\u0173 programuojan\u010di\u0173 su ja ir tai buvo labiausiai paplitusi IDE<sup>[16]<\/sup> per 1970 ir 1980 metus.<\/p>\n<p style=\"font-size: 15px; padding-top: 20px; padding-bottom: 5px;\"><strong>4.2. Kompiliatoriai<\/strong><\/p>\n<p>Kompiliatorius tai speciali programa, arba rinkinys program\u0173 kurios paver\u010dia para\u0161yt\u0105 program\u0105 tekstiniu formatu \u012f binarin\u012f format\u0105 &#8211; exe, dll, com ir kitok\u012f, kur\u012f supranta kompiuteris. Binarin\u012f format\u0105 galima \u012fsivaizduoti kaip nuli\u0173 ir vienet\u0173 sek\u0105.<\/p>\n<p>Vardas &#8220;kompiliatorius&#8221; yra da\u017eniausiai naudojamas programoms, kurios ver\u010dia programos tekst\u0105 i\u0161 auk\u0161to lygio programavimo kalbos \u012f \u017eemesn\u0119 lygmens kalb\u0105 (pavyzd\u017eiui asembler\u012f<sup>[12]<\/sup>). Jei sukompiliuota programa veikia ant kompiuterio, kurio procesorius ar operacin\u0117 sistema yra kitokie negu toks, ant kurio kompiliatorius veikia, tai kompiliatorius yra \u017einomas kaip multiplatforminis. Programa, kuri ver\u010dia i\u0161 \u017eemo lygio kalbos \u012f auk\u0161tesn\u012f lygmen\u012f, vadinama dekompiliatoriumi. Programa, kuri ver\u010dia tarp auk\u0161to lygio programavimo kalb\u0173 (i\u0161 vienos programavimo kalbos \u012f kit\u0105) yra vadinama kalbos keitikliu.<\/p>\n<p>Kompiliatorius paprastai vykdo daug operacij\u0173, kaip kad: leksin\u0117 analiz\u0117, i\u0161ankstinis apdorojimas, gramatinis nagrin\u0117jimas, semantikos analiz\u0117 (\u012f Sintaks\u0119 nukreiptas vertimas), kodo generacija, ir optimizacija.<br \/>\nProgramos klaidos, sukeltos klaidingo kompiliatoriaus elgesio, gali b\u016bti labai sud\u0117tingos aptikti ir pa\u0161alinti, tod\u0117l, kompiliatoriaus k\u016br\u0117jai \u012fdeda daug laiko, garantuodami j\u0173 programin\u0117s \u012frangos stabilum\u0105.<\/p>\n<p style=\"font-size: 13px; padding-top: 20px; padding-bottom: 5px;\"><strong>4.2.1. Kompiliatori\u0173 istorija<\/strong><\/p>\n<p>Programin\u0117 \u012franga ankstyviems kompiuteriams buvo ra\u0161oma asembleriu<sup>[12]<\/sup> daugel\u012f met\u0173. Auk\u0161tesnio lygmens programavimo kalbos nebuvo i\u0161rastos, kol atsirado galimyb\u0117 para\u0161ytas programas naudoti ant skirting\u0173 procesori\u0173, nera\u0161ant kiekvienam procesoriui atskirai kompiliatoriaus. Labai apribotas ankstyv\u0173 kompiuteri\u0173 atminties talpumas taip pat k\u0117l\u0117 daug technini\u0173 problem\u0173.<\/p>\n<p>1950-t\u0173j\u0173 antroje pus\u0117je, buvo sukurtos programavimo kalbos kurios buvo skirtos ra\u0161yti programas nepriklausomai nuo procesoriaus, tai rei\u0161k\u0117, kad programa ra\u0161yta ant vieno kompiuterio gal\u0117jo veikti ir ant kit\u0173. Paskui, keli bandomieji kompiliatoriai<sup>[5]<\/sup> buvo sukurti. Pirm\u0105j\u012f tok\u012f kompiliatori\u0173 suk\u016br\u0117 Grace Hopper, 1952-taisiais &#8220;A-0&#8221; programavimo kalbai. FORTRAN programavimo kalbos komanda, vadovaujama John Backus, IBM kompanijoje pristat\u0117 pirm\u0105j\u012f pilnai u\u017ebaigt\u0105 kompiliatori\u0173 \u0161iai kalbai, 1957-taisiais metais. COBOL taip pat buvo ankstyva kalba, kuri buvo sukompiliuota ant daugialyp\u0117s architekt\u016bros, 1960-taisiais metais.<\/p>\n<p>Daugelyje taikom\u0173j\u0173 sri\u010di\u0173, mintis pavartoti auk\u0161tesnio lygmens kalb\u0105 greitai i\u0161populiar\u0117jo. D\u0117l besiple\u010dian\u010dio funkcionalumo, kur\u012f palaik\u0117 naujesn\u0117s programavimo kalbos ir did\u0117jantys kompiuteri\u0173 architekt\u016bros sunkumai, kompiliatoriai tapo tik sud\u0117tingesni.<\/p>\n<p>Ankstyvi kompiliatoriai buvo para\u0161yti asembleriu<sup>[12]<\/sup>. Pirmas kompiliatorius gebantis sukompiliuoti sav\u0105 programos kod\u0105 auk\u0161to lygio programavimo kalboje buvo sukurtas Tim Hart ir Mike Levin i\u0161 MIT<sup>[19]<\/sup>, 1962-taisiais metais &#8220;LISP&#8221; kalbai. Nuo 1970-t\u0173j\u0173 tai tapo \u012fprasta praktika, kad kalba b\u016bt\u0173 kartu tu savo kompiliatoriumi<sup>[5]<\/sup>. Tokio kompiliatoriaus pri\u0117mimo kompiliatoriaus statyba yra pakopinio paleidimo problema &#8211; toks kompiliatorius kalbai turi b\u016bti sukurtas arba kompiliatoriaus para\u0161yto kitokia kalba, arba (kaip Hart ir Levin &#8220;LISP&#8221; kompiliatorius) sukurtas paleidus kompiliatori\u0173 interpretatoriuje<sup>[4]<\/sup>.<\/p>\n<p style=\"font-size: 15px; padding-top: 20px; padding-bottom: 5px;\"><strong>4.3. Interpretatoriai<\/strong><\/p>\n<p>Programavime, terminas &#8220;Interpretatorius&#8221; rei\u0161kia speciali\u0105 program\u0105 kuri tiesiogiai skaito programos kod\u0105 ir kompiliavim\u0105 bei komandas atlieka tiesiogiai atmintyje.<br \/>\nKai interpretavimas ir kompiliavimas yra dvi svarbiausios priemon\u0117s, prie kuri\u0173 programavimo kalbos yra sukurtos, jie n\u0117ra visi\u0161kai skirtingos kategorijos, viena i\u0161 prie\u017eas\u010di\u0173 yra tai, kad daugumos interpretavimo sistem\u0173 taip pat \u012fvykdo ka\u017ekok\u012f vertimo darb\u0105, taip pat kaip kompiliatoriai. Terminai &#8220;interpretuojama kalba&#8221; ir &#8220;kompiliuojama kalba&#8221; papras\u010diausiai rei\u0161kia, kad kanoninis tos kalbos veikimas yra vert\u0117jas ar kompiliatorius.<\/p>\n<p>Did\u017eiausias interpretatori\u0173 minusas yra tas, kad kai programa yra interpretuojama, ji tipi\u0161kai veikia l\u0117\u010diau, negu ji b\u016bt\u0173 sukompiliuota. Grei\u010di\u0173 skirtumas i\u0161 esm\u0117s gali b\u016bti ma\u017eytis arba didelis. Apskritai u\u017eima daugiau laiko valdyti program\u0105 su interpretatoriumi negu valdyti kompiliuot\u0105 kod\u0105, bet gali u\u017eimti ma\u017eiau laiko, kad interpretuot\u0173 tai negu visas laikas, reikalingas surinkti ir valdyti tai. Tai ypa\u010d svarbu bandantis kod\u0105, kai ciklas yra &#8220;redaguoti-interpretuoti-pa\u0161alinti&#8221; gali da\u017enai b\u016bti daug trumpesnis negu ciklas &#8220;redaguoti-kompiliuoti-pa\u0161alinti&#8221;.<\/p>\n<p>Kodo interpretavimas yra l\u0117tesnis negu kompiliavimas tod\u0117l, kad interpretatorius turi analizuoti kiekvien\u0105 \u017eingsn\u012f programoje kiekvien\u0105 kart\u0105 kai tai atliekama ir paskui \u012fvykdyti pageidaujam\u0105 veiksm\u0105, tuo tarpu surinktas kodas tik \u012fvykdo veiksm\u0105 viduje pastovaus konteksto, nustatyto kompiliacijos metu. \u0160i atlikimo metu analiz\u0117 yra \u017einoma kaip &#8220;interpretive overhead&#8221;. Prieiga prie kintam\u0173j\u0173 yra taip pat l\u0117tesn\u0117 tod\u0117l, kad \u017eem\u0117lapi\u0173 sudarymas \u012f laikymo vietas turi b\u016bti daromas pakartotinai kai vykdoma komanda.<\/p>\n<p>Bet kuriuo atveju, laiko skirtumas yra toks ma\u017eas kad \u017emogui jokio skirtumo prakti\u0161kai n\u0117ra, ar programa dirbs keliomis mili-sekund\u0117mis l\u0117\u010diau ar grei\u010diau.<br \/>\nTerminas &#8220;interpretatorius&#8221; da\u017enai reik\u0161davo \u012frang\u0105, kuri gal\u0117jo skaityti Perfokortas<sup>[8]<\/sup> ir spausdinti ekrane kas jose i\u0161mu\u0161ta lengvai skaitomoje formoje. IBM 550 skaitmeninis vert\u0117jas ir IBM 557 alfabetinis vert\u0117jas yra tipi\u0161ki pavyzd\u017eiai nuo 1930 ir 1954 met\u0173, atitinkamai.<\/p>\n<p style=\"font-size: 20px; padding-top: 20px; padding-bottom: 5px;\"><strong>5. Programavimas \u012fvairioms sistemoms<\/strong><\/p>\n<p>Tai dar vadinama multiplatforminiu programavimu, kai para\u0161yta programa gali veikti ant kitokiu sistem\u0173 nei kad buvo kurta. Multiplatformin\u0117 programin\u0117 \u012franga gali b\u016bti padalyta \u012f du tipus:<\/p>\n<ul>\n<li><strong>Kompiliuojama<\/strong>: kai ta pati programa yra sukompiliuojama kitoms platformoms. Taip gaunasi daugiau nei vienas failas.<\/li>\n<li><strong>Interpretuojama<\/strong>: kai ta pati programa gali veikti nepriklausomai nuo sistemos ir interpretatoriaus, kol tas interpretatorius bus tai kalbai.<\/li>\n<\/ul>\n<p style=\"font-size: 15px; padding-top: 20px; padding-bottom: 5px;\"><strong>5.1. Platformos<\/strong><\/p>\n<p>Platforma yra aparatin\u0117s ir programin\u0117s \u012frangos kombinacija. Ji gali b\u016bti apib\u016bdinta tiesiog kaip operacin\u0117 sistema ar kompiuteri\u0173 architekt\u016bra, arba abiej\u0173 kombinacija. Turb\u016bt labiausiai pa\u017e\u012fstama platforma yra &#8220;Microsoft Windows&#8221;, veikiantis ant x86 (32 bit\u0173) ir x64 (64 bit\u0173) architekt\u016bros. Kitos \u017einomos stacionari\u0173 ir ne\u0161iojam\u0173 kompiuteri\u0173 platformos apima &#8220;Linux\/Unix&#8221; ir visiems gerai \u017einom\u0105, Apple kompanijos &#8220;Mac OS X&#8221; sistem\u0105, kurios pa\u010dios i\u0161 sav\u0119s yra multiplatformin\u0117s. Yra daug prietais\u0173 toki\u0173 kaip mobilieji telefonai, kurie yra \u0161iais laikais kaip kompiuteriai, kuriuose veikia atitinkama operacin\u0117 sistema, kaip kad pavyzd\u017eiui HTC telefonuose dabar \u012fdiegiama yra nemokamas Google kompanijos produktas &#8220;Android&#8221; kuris yra sukurtas Linux pagrindu. Taikomoji programin\u0117 \u012franga gali b\u016bti para\u0161yta, kad priklausyt\u0173 nuo ypatybi\u0173 tam tikros platformos &#8211; ar tai aparatin\u0117s \u012frangos, ar operacin\u0117s sistemos. &#8220;Java&#8221; platforma yra virtuali platforma, kuri veikia ant daugelio operacini\u0173 sistem\u0173 ir aparatin\u0117s \u012frangos tip\u0173, ir yra bendra pozicija programinei \u012frangai kurti. Java kalbos, nors ji ir kompiliuojama, tas pats sukurtas failas gali veikti nepriklausomai nuo sistemos, kaip ir interpretuojamas skriptas. Tam yra naudojama &#8220;Java framework&#8221; programin\u0117 \u012franga, kuri sugeba paleisti Java programas.<\/p>\n<p>Programin\u0117 \u012franga, kuri\u0105 b\u016bt\u0173 galima pavadinti multiplatformine, turi sugeb\u0117ti funkcionuoti ant daugiau kaip vienos kompiuteri\u0173 architekt\u016bros ar operacin\u0117s sistemos. Tai gali b\u016bti daug darbo reikalaujan\u010dia u\u017eduotimi, duota, kad skirtingos operacin\u0117s sistemos turi skirtingas taikomojo programavimo s\u0105sajas, kitaip dar API<sup>[20]<\/sup> (pavyzd\u017eiui, Linux naudoja visi\u0161kai kitoki\u0105 programavimo s\u0105saj\u0105 negu Windows).<\/p>\n<p>Tik tod\u0117l, kad tam tikra operacin\u0117 sistema gali veikti ant skirtingos kompiuteri\u0173 architekt\u016bros, tai dar nerei\u0161kia, kad programin\u0117 \u012franga, para\u0161yta tai operacinei sistemai, automati\u0161kai veiks visoje architekt\u016broje, kuri\u0105 operacin\u0117 sistema palaiko. Vienas pavyzdys 2006 met\u0173 Rugpj\u016bt\u012f buvo i\u0161leistas OpenOffice.org &#8211; &#8220;Microsoft Office&#8221; alternatyva, kuri neveik\u0117 ant AMD64 ar Intel64 procesori\u0173. Tai buvo nuo to laiko pakeista, ir OpenOffice.org programin\u0117s \u012frangos rinkinys yra &#8220;daugiausia&#8221; perkeltas \u012f \u0161itas 64 bit\u0173 sistemas. Tai taip pat rei\u0161kia, kad tik tod\u0117l, kad programa yra para\u0161yta populiarioje programavimo kalboje tokioje kaip C ar C++, tai nerei\u0161kia, kad tai veiks ant vis\u0173 operacini\u0173 sistem\u0173, kurios palaiko t\u0105 programin\u0119 kalb\u0105 &#8211; ar net ant tos pa\u010dios operacin\u0117s sistemos ant skirtingos architekt\u016bros.<\/p>\n<p>Internetin\u0117s programos<sup>[21]<\/sup>, tos kurios talpinamos serveriuose kad b\u016bt\u0173 prieinamos kiekvienam, kaip kad forumai, yra tipi\u0161kai apib\u016bdinamos kaip multiplatformin\u0117s tod\u0117l, kad, idealiai, jos yra prieinamos i\u0161 bet kurios i\u0161 \u012fvairi\u0173 nar\u0161ykli\u0173 skirting\u0173 operacini\u0173 sistem\u0173 viduje. Tokios programos apskritai naudoja klientas-serveris architekt\u016br\u0105.<\/p>\n<p>\u017dinomi pa\u017eangi\u0173 internetini\u0173 program\u0173 pavyzd\u017eiai apima Gmail pa\u0161to serverio interfeis\u0105. Tokios pa\u017eangios programos kaip \u012fprasta priklauso nuo papildom\u0173 ypatybi\u0173, kurios randasi tiktai naujesn\u0117se populiari\u0173 tinklo nar\u0161ykli\u0173 versijose. \u0160itos priklausomyb\u0117s apima Ajax, JavaScript, &#8220;dinamin\u0119&#8221; HTML kalb\u0105, ir kitus turting\u0173 interneto program\u0173 komponentus. Vyresn\u0117s populiari\u0173 nar\u0161ykli\u0173 versijos yra linkusios stokoti palaikymo tam tikroms ypatyb\u0117ms.<br \/>\nTradici\u0161kai programavime taikomoji programin\u0117 \u012franga buvo paskirstyta  vartotojams kaip binariniai atvaizdai, kurie yra sud\u0117ti &#8220;exe&#8221; failuose, specifiniame dvejetain\u0117s rinkmenos tipe. Tokie failai tiktai palaiko operacin\u0119 sistem\u0105 ir kompiuteri\u0173 architekt\u016br\u0105, kuriai jie buvo sukurti.<\/p>\n<p style=\"font-size: 15px; padding-top: 20px; padding-bottom: 5px;\"><strong>5.2. Programavimas ant Windows<\/strong><\/p>\n<p>Nuo tada kai atsirado &#8220;Microsoft Windows&#8221; operacin\u0117 sistema, ji \u0117m\u0117 spar\u010diai pl\u0117stis ir labai greitai i\u0161populiar\u0117jo ir dabar visas pasaulis naudojasi \u0161ia sistema. Vien d\u0117l \u0161ios prie\u017easties programuoti Windows sistemoje ir pa\u010diai Windows sistemai tapo labai paprasta, nes yra prikurta gausyb\u0117 \u012franki\u0173 itin palengvinan\u010di\u0173 darb\u0105. Microsoft kompanija net pati yra suk\u016brusi savo programavimo kalb\u0105 kartu su jai skirtu IDE<sup>[16]<\/sup> ir kompiliatoriumi<sup>[5]<\/sup> &#8211; Visual Basic.<\/p>\n<p>Ta\u010diau Windows programos ne visada gali  veikti ant vis\u0173 Windows versij\u0173, kaip kad programa veikianti ant &#8220;Windows XP&#8221; sistemos gali neveikti ant &#8220;Windows Vista&#8221; ar &#8220;Windows 7&#8221;. Taip bent jau b\u016bdavo naujoms Windows versijoms vos tik pasirod\u017eius. Dabartiniai kompiliatoriai ir interpretatoriai jau yra optimizuoti kurti ir paleisti programas visose Windows versijose. Microsoft kompanija yra \u012fd\u0117jus ir papildom\u0105 funkcij\u0105 &#8211; &#8220;Run as&#8230;&#8221; kuri leid\u017eia paleid\u017eiant program\u0105 emuliuoti vienos ar kitos sistemos aplink\u0105, taip programa mano kad veikia toje sistemoje, nors i\u0161 tikr\u0173j\u0173 veikia visai kitoje. Tai yra ypa\u010d patogu kai norima yra pasileisti sen\u0105 program\u0105 kuri jau ilgas laikas neatnaujinama, ar nutrauktas projektas ar dar kas. Tokiu atveju galima program\u0105, tarkim ra\u0161yt\u0105 &#8220;Windows 98&#8221; sistemai paleisti ant &#8220;Windows XP&#8221;. Tiesa &#8211; tai ne visada gali pavykti, nes ta funkcija neveik\u0117 itin gerai ir i\u0161 ties\u0173 ji i\u0161vis neveik\u0117. Did\u017eioji dalis program\u0173 taip ir nepasileisdavo. Ai\u0161ku, n\u0117ra ko nor\u0117ti, tai yra tipi\u0161ka Microsoft kompanijai.<\/p>\n<p style=\"font-size: 15px; padding-top: 20px; padding-bottom: 5px;\"><strong>5.3. Programavimas ant Linux<\/strong><\/p>\n<p>Skirtingai nei su Windows sistema, programavimas ant Linux yra kiek sud\u0117tingesnis nes tada reikia atsi\u017evelgti \u012f daugyb\u0117 faktori\u0173 &#8211; kuriant programas kompiliuojam\u0105ja kalba ir kuriant jam grafin\u0119 s\u0105saj\u0105, reikia \u017einoti kam kuri. \u017dinoma yra kad Linux sistemai yra sukurta daugyb\u0117 lang\u0173 tvarkykli\u0173 toki\u0173 kaip GNOME, KDE, XFree86, XFCE, AwesomeWM ir t.t. kurios naudoja savo i\u0161vaizd\u0105 ir architekt\u016br\u0105 ir kurias galima keisti laisvai, tod\u0117l kuriant vienam, gali neveikti ant kito. Prie viso to prisideda ir skirtingos Linux distribucijos, kuri\u0173 yra t\u016bkstan\u010diais ir visos yra skirtingos architekt\u016bros. ir \u010dia tik ma\u017ea dalis sunkum\u0173.<\/p>\n<p>Ta\u010diau tai lie\u010dia tik kompiliuojamas programavimo kalbas. Su interpretuojamomis yra kiek kitaip. Kadangi interpretuojamas kodas yra, grubiai tariant, kompiliuojamas realiu laiku atmintyje, jis nepriklausomai nuo sistemos gali veikti visur, reikia tik tur\u0117ti atitinkam\u0105 interpretatori\u0173. D\u0117l savo prigimties b\u016bti atviru kodu, interpretatoriai Python, Perl, Ruby ir Java kalboms da\u017eniausiai b\u016bna jau \u012fra\u0161yti kartu su Linux sistema, tod\u0117l papildomai nieko daryti nereikia ir skriptai pasileis.<\/p>\n<p>Linux yra UNIX at\u0161aka, kuri \u012fgyvendina did\u017ei\u0105j\u0105 dal\u012f POSIX funkcionalumo. Suderinamumas tarp toki\u0173 Unix-pana\u0161i\u0173 operacini\u0173 sistem\u0173 (toki\u0173 kaip BSD, Solaris, ir Mac OS X) yra pateiktas per standartus tokius kaip POSIX ir sistemos bibliotekas tokias kaip glibc. GNU \u012frankiai, originaliai kurti Unix sistemoms buvo perkelti ant Windows, taip pat kaip GTK, Qt ir daugelio kit\u0173 bibliotek\u0173.<\/p>\n<p>Linux sistemai n\u0117ra jokio standarto d\u0117l GUI \u012franki\u0173 toki\u0173 kaip langai, mygtukai, etiket\u0117s, ir t.t. Kelios konkuruojan\u010dios bibliotekos yra i\u0161leistos, tokios kaip GTK, Qt, wxWidgets, Motif. Programos, para\u0161ytos \u0161itoms bibliotekoms veiks tik ant tos sistemos, kurioje yra \u0161ios bibliotekos. Jei j\u0173 n\u0117ra, tai galima papras\u010diausiai \u012fsira\u0161yti.<\/p>\n<p>Tarp \u012fvairaus Linux dalijimo n\u0117ra jokio pla\u010diai priimto ir bendro daugialypio standarto ir API<sup>[20]<\/sup>. Trimatei grafikai OpenGL yra priimtas kaip standartas, bet visa kita kaip audio, \u012fvesties prietaisai ir taip toliau gali naudoti daug visoki\u0173 bibliotek\u0173.<br \/>\nLinux aparatin\u0117s \u012frangos tvarkykl\u0117s yra daugiausia pateikiama kaip dalis branduolio<sup>[22]<\/sup>, kaip nemokama programin\u0117 \u012franga, i\u0161leista programos kodo formoje. Tvarkykl\u0119 laiko dalimi branduolio projekto, ir laikoma, kad \u0161it\u0173 tvarkykli\u0173 k\u016br\u0117jai yra Linux branduolio k\u016br\u0117j\u0173 bendruomen\u0117s dalis. Ta\u010diau, tvarkykl\u0117s k\u016br\u0117jai yra atsakingi u\u017e tai, kad pastoviai palaikyt\u0173 atnaujinimus, o tvarkykl\u0117s, kurios n\u0117ra aktyviai palaikomos yra pa\u0161alinama i\u0161 branduolio.<\/p>\n<p>Kelios komercin\u0117s IDE<sup>[16]<\/sup> ir kompiliatoriai<sup>[5]<\/sup>, tokie kaip PGI, Intel, ir Absoft Fortran kompiliatoriai. Multiplatformin\u0117s nemokamos IDE ir kompiliatoriai, i\u0161 kuri\u0173 da\u017eniausiai b\u016bna \u012ftrauktos \u012f Linux distribucij\u0105 yra: <\/p>\n<ul>\n<li>GNU kompiliatori\u0173 kolekcija<\/li>\n<li>Eclipse<\/li>\n<li>NetBeans<\/li>\n<li>Mono<\/li>\n<li>MonoDevelop<\/li>\n<li>Geany<\/li>\n<li>Anjuta<\/li>\n<li>KDevelop<\/li>\n<li>Free Pascal \/ Lazarus<\/li>\n<li>OpenLDev<\/li>\n<li>Code::Blocks<\/li>\n<\/ul>\n<p style=\"font-size: 20px; padding-top: 20px; padding-bottom: 5px;\"><strong>6. Termin\u0173 paai\u0161kinimai<\/strong><\/p>\n<ol>\n<li><em>Objektinis Programavimas, trumpiau OOP (angl. Object-Oriented Programming)<\/em> &#8211; programavimo paradigma, kompiuterini\u0173 program\u0173 architekt\u016broje naudojanti objektus ir j\u0173 s\u0105veikas. Beveik visos dabartin\u0117s programavimo kalbos turi patogias OOP programavimo galimybes. Kai kurios yra pilnai sukurtos \u0161iuo pagrindu, pavyzd\u017eiui, Java, Smalltalk, C++, Delphi ar C#.<\/li>\n<li><em>Konsolinis Programavimas, trumpiau CLI (angl. Command-Line Interface)<\/em> &#8211; programavimo paradigma, kompiuterini\u0173 program\u0173 architekt\u016broje ne naudojanti objektus ir j\u0173 s\u0105veikas. Visos dabartin\u0117s programavimo kalbos turi patogias CLI programavimo galimybes, pavyzd\u017eiui, Java, C, Pascal, PHP ar Python.<\/li>\n<li><em>Kompiliuojamoji kalba (angl. Compiled language)<\/em><br \/>\n &#8211; tokia kalba kuria u\u017era\u0161ytas kodas paver\u010diamas \u012f ma\u0161inin\u012f specialios programos &#8211; kompiliatoriaus, pavyzd\u017eiui, Java, C, Delphi, Pascal.<\/li>\n<li><em>Interpretuojamoji kalba (angl. Interpreted language)<\/em> &#8211; tokia kalba kuria u\u017era\u0161ytas kodas kompiliuojamas ir ver\u010diamas \u012f ma\u0161inin\u012f realiu laiku atmintyje. D\u0117l to skriptas gali veikti nepriklausomai nuo sistemos ar apskritai kompiuterio, pavyzd\u017eiui, Python, Ruby, Perl, PHP.<\/li>\n<li><em>Kompiliatorius (angl. Compiler)<\/em> &#8211; speciali programa kuri paver\u010dia u\u017era\u0161yt\u0105 tekst\u0105 \u012f ma\u0161inin\u012f kod\u0105, kur\u012f supranta procesorius, pavyzd\u017eiui, GCC, FreeBASIC, Borland Delphi, FreePascal.<\/li>\n<li><em>Interpretatorius (angl. Interpreter)<\/em> &#8211; speciali programa kuri tiesiogiai skaito programos kod\u0105 ir kompiliavim\u0105 bei komandas atlieka atmintyje, tod\u0117l kodas lieka nepaliestas, pavyzd\u017eiui, IronPython, IronRuby.<\/li>\n<li><em>Grafin\u0117 vartotojo s\u0105saja, trumpiau GUI (angl. Graphical User Interface)<\/em> &#8211; interaktyvumo tipas kuris leid\u017eia \u017emon\u0117ms kontroliuoti programas pasitelkiant j\u0173 Grafin\u0119 s\u0105saj\u0105, t.y. mygtukus, etiketes, s\u0105ra\u0161us ir pana\u0161iai.<\/li>\n<li><em>Perfokorta (angl. Punched Card)<\/em> &#8211; yra dalis kieto popieriaus (kartono), kuris turi savyje skaitmenin\u0119 informacij\u0105, kuriai atstovauja buvimas ar nebuvimas duobi\u0173 apibr\u0117\u017etose i\u0161 anksto pad\u0117tyse. Taip buvo saugoma kompiuterin\u0117 informacija.<\/li>\n<li><em>Bernulio skaitmenys (angl. Bernoulli numbers)<\/em> &#8211; yra seka racionalini\u0173 skai\u010di\u0173 su giliais ry\u0161iais tarp skai\u010di\u0173 teorij\u0173.<\/li>\n<li><em>Lambdos skai\u010diavimai (angl. Lambda Calculus)<\/em> &#8211; taip pat dar ra\u0161omas kaip \u03bb -skai\u010diavimas, yra oficiali sistema funkcijos apibr\u0117\u017eimui ir funkcijos parai\u0161kai.<\/li>\n<li><em>Tiuringo ma\u0161ina (angl. Turing machine)<\/em> &#8211; tai teori\u0161kas prietaisas, kuris valdo simbolius ant juostos kaset\u0117s pagal nustatytas taisykles.<\/li>\n<li><em>Asembleris (angl. Assembler)<\/em> &#8211; tai \u017eemo lygmens programavimo kalba kompiuteriams, mikroprocesoriams, mikrokontroleriams, ir kitiems programuojamiems prietaisams.<\/li>\n<li><em>Van Wijngaarden gramatika (angl. Van Wijngaarden grammar)<\/em> &#8211;  yra dviej\u0173 lygmen\u0173 gramatika, kuri apr\u016bpina technik\u0105, kad apibr\u0117\u017et\u0173 potencialiai begalines gramatikas be kontekst\u0173 baigtiniu taisykli\u0173 skai\u010diumi.<\/li>\n<li><em>RISC jud\u0117jimas (angl. RISC &#8211; Reduced instruction set computing)<\/em> &#8211; yra procesoriaus projekto strategija, pagr\u012fsta \u012f\u017evalgumu, kuris supaprastina instrukcijas ir gali apr\u016bpinti auk\u0161tesn\u012f atlikim\u0105, jei \u0161is paprastumas \u012fgalina daug greitesn\u0119 kiekvienos instrukcijos egzekucij\u0105.<\/li>\n<li><em>RAD kalbos (angl. Rapid Application Development)<\/em> &#8211; tai programin\u0117s \u012frangos i\u0161sivystymo metodologija, kuri naudoja minimal\u0173 planavim\u0105 ir greit\u0105 k\u016brim\u0105.<\/li>\n<li><em>IDE (angl. Integrated Development Environment)<\/em> &#8211; yra programin\u0117s \u012frangos parai\u0161ka, kuri apr\u016bpina visapusi\u0161kus patogumus programuotojams programin\u0117s \u012frangos k\u016brimui.<\/li>\n<li><em>Klaid\u0173 \u0161alinimas (angl. Debugging)<\/em> &#8211; yra metodinis procesas norint surasti ir pa\u0161alinti klaid\u0173 ar defekt\u0173, kompiuterio programoje ar dalyje elektronin\u0117s aparatin\u0117s \u012frangos skai\u010di\u0173, tokiu b\u016bdu priversdamas j\u012f elgtis kaip tik\u0117tasi. <\/li>\n<li><em>Statin\u0117s analiz\u0117s \u012frankis (angl. Debugger)<\/em> &#8211; yra speciali kompiuterin\u0117 programa, kuri yra naudojama tikrinti kitas programas ir \u0161alinti defektus bei klaidas.<\/li>\n<li><em>MIT (angl. Massachusetts Institute of Technology)<\/em> &#8211; yra privatus universitetas, esantis Kembrid\u017ee, Masa\u010diusetse. \u0160is universitetas turi penkias mokyklas ir vien\u0105 kolegij\u0105, tur\u0117damas savyje i\u0161 viso 32 akademinius skyrius, su stipria mokslinio ir technologinio tyrin\u0117jimo istorija.<\/li>\n<li><em>API (angl. Application Programming Interface)<\/em> &#8211; tai tam tikras taisykli\u0173 rinkinys, kurias programin\u0117s \u012frangos programos gali sekti, kad bendraut\u0173 viena su kita.<\/li>\n<li><em>Internetin\u0117s programos (angl. Web Applications)<\/em> &#8211; tai tokios programos kurtos specialiai naudoti su internetu, kaip kad SMF, phpBB, vB forumai.<\/li>\n<li><em>Sistemos branduolys (angl. Kernel)<\/em> &#8211; tai pagrindinis operacin\u0117s sistemos komponentas. Branduolio pareigos apima kompiuterio i\u0161tekli\u0173 paskirstym\u0105 (komunikacij\u0105 tarp aparatin\u0117s \u012frangos ir programin\u0117s \u012frangos komponent\u0173).<\/li>\n<\/ol>\n<p style=\"font-size: 20px; padding-top: 20px; padding-bottom: 5px;\"><strong>7. Literat\u016bra<\/strong><\/p>\n<ol>\n<li>D. Rutkauskien\u0117, V.R. Kovertait\u0117, R. Kutas: Windows 95 aplinka. Kaunas, Technologija, 1996.<\/li>\n<li>V. Dagien\u0117: Mokom\u0117s programuoti. Kaunas, &#8220;\u0160viesa&#8221;, 1989.<\/li>\n<li>J. Erickson: Hakingas: Program\u0173 kodo narstymo menas. &#8220;Smaltijos&#8221; leidykla, Kaunas, 2004.<\/li>\n<li>A,. Vid\u017ei\u016bnas: C++ ir C++ Builder pradmenys. &#8220;Smaltijos&#8221; leidykla, Kaunas, 2005.<\/li>\n<li>A,. Vid\u017ei\u016bnas: C++ ir C++ Builder pradmenys. &#8220;Smaltijos&#8221; leidykla, Kaunas, 2005.<\/li>\n<li>J. Erickson: Hakingas: Program\u0173 kodo narstymo menas. 2-asis pataisytas ir papildytas leidimas. &#8220;Smaltijos&#8221; leidykla, Kaunas, 2010.<\/li>\n<li>B. Starkus, M. Starkus: Linux pirmieji \u017eingsniai. &#8220;Smaltijos&#8221; leidykla, Kaunas, 2005.<\/li>\n<li>V. \u017dalkauskas: &#8220;Linux&#8221; \u017eodyn\u0117lis. &#8220;Smaltijos&#8221; leidykla, Kaunas, 2004.<\/li>\n<li>J. Blonskis, V. Buk\u0161naitis, V. Jusas, R. Marcinkevi\u010dius, D. Rubliauskas: Programavimas C++. Leidykla &#8220;Technologija&#8221;, Kaunas, 2008.<\/li>\n<li>V. \u0160akys: Informacini\u0173 technologji\u0173 vadovas, Kaunas, 2005.<\/li>\n<li>J. Meloni: PHP, MySQL and Apache. Leidykla &#8220;Sams&#8221;, JAV, 2002.<\/li>\n<li>S. Sinkevi\u010dius: PHP5 pradmenys. &#8220;Smaltijos&#8221; leidykla, Kaunas, 2008.<\/li>\n<li>M. Starkus, A. Kviklien\u0117: Kompiuteris &#8211; pirmieji \u017eingsniai. VII atnaujintas leidimas. &#8220;Smaltijos&#8221; leidykla, Kaunas, 2008.<\/li>\n<li>M. Starkus: Kaip dirbti kompiuteriu. III atnaujintas leidimas. &#8220;Smaltijos&#8221; leidykla, Kaunas, 2007.<\/li>\n<li>S. Kelby: Mac OS X Leopard, Leidykla &#8220;Datacom&#8221;, Kaunas, 2009.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Eidamas per savo senus dokumentus ir flash&#8217;us radau 2011 metais ra\u0161yt\u0105 baigiam\u0105j\u012f darb\u0105 apie programavimo<\/p>\n","protected":false},"author":2,"featured_media":1712,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,5],"tags":[461,106,460],"class_list":["post-2450","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ltu","category-my-tutos","tag-kalbos","tag-programavimas","tag-programavimo"],"_links":{"self":[{"href":"http:\/\/9v.lt\/blog\/wp-json\/wp\/v2\/posts\/2450","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/9v.lt\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/9v.lt\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/9v.lt\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/9v.lt\/blog\/wp-json\/wp\/v2\/comments?post=2450"}],"version-history":[{"count":0,"href":"http:\/\/9v.lt\/blog\/wp-json\/wp\/v2\/posts\/2450\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/9v.lt\/blog\/wp-json\/wp\/v2\/media\/1712"}],"wp:attachment":[{"href":"http:\/\/9v.lt\/blog\/wp-json\/wp\/v2\/media?parent=2450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/9v.lt\/blog\/wp-json\/wp\/v2\/categories?post=2450"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/9v.lt\/blog\/wp-json\/wp\/v2\/tags?post=2450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}