Tag Archives: istorija

5 metai ir 1 diena

Media_httpemptydotcom_ctjwo

Toks tikslus šio tiklaraščio amžius. Buvau įsitikinęs, kad 5-asis gimtadienis yra birželio 17, bet vakarykštis Ramo sveikinimas atbudino iš blogo gimtadienio laukimo miego. Ačiū :-)Džiaugiuosi sulaukęs šios dienos. Tinklaraščio rašymas – gera proto mankšta ir iš esmės toje sferoje, kurioje aš mokausi ir dirbu, tai yra puiki priemonė pusiausvyrai tarp pasaulių palaikyti.Prisimenant pradžių pradžią, tinklaraštis buvo iššūkis sau pačiam technologiniu ir saviraiškos požiūriu. Pamenu, kaip kažkada svečiuodamasis pas brolį jo darbo kontoroje pamačiau link konsolės palinkusį tuo metu dar save vadinusį moxliuku Petrą Kudarą. Tyliai per petį nužiūrėjau adresą, kur jis tikrina kodą ir tai buvo pirmas mano skaitytas ir matytas tinklaraštis. Galima sakyti – įkvėpėjas :-) Bėgant laikui manojo blogo tematika keitėsi nuo griežtai kompiuterinių dalykėlių iki tiesiog nuomonės pateikimo. Šiandien turbūt tai yra šių polių pusiausvyra.Nors dažnas blogeris pirmuosius paauglystės/jaunystės bandymus kiša giliai į asmeninį archyvą, bet kažkodėl jaučiu norą turėti šį metraštį visą viešą. Galbūt dar po penkių metų šypsnį kels šiandienos įrašai, bet nuoširdus domėjimasis, rašymas, minčių neišgludinimas ir žiupsnis tikro optimizmo ir gal net naivumo yra toks laukiamas bruožas iš visų, kuriuos šiandienai prenumeruoju.Taigi… su penkmečiu!

Programavimo kalbų kartos

Media_httpemptydotcom_zlgzo

Tikiu, kad nemažai iš jūsų mokat ar bent jau esat matę vieną ar kitą programavimo kalbą. Tačiau kaip ir visų inžinerinių objektų istorijoje, iki dabartinės situacijos vedė ilgas ir nelengvas kelias. Programavimas pradėjo vystytis su pirmaisiais programuojamais pianinais, o programavimas šiandienos plačiąja prasme atsirado su pirmosiomis elektroninėmis skaičiavimo mašinomis. Šiandien programavimo kalbų evoliucija skirstoma į penkias kartas (generations), kurias dėl įdomumo ir bendro išprusimo norėčiau trumpai pristatyti.

1 karta (1GL)

Pirmosios kartos programavimo kalba yra niekas kitas kaip tiesioginis mašininis kodas, kurį procesorius vykdo tiesiogiai. Pagrindinis pliusas – tokios instrukcijos veikia nepaprastai greitai ir efektyviai, tačiau galit suvokti, kiek pastangų reikia sukurti rimtesnę užduotį kremtančią procedūrą. Dviejų skaičių sumavimo operacija atrodytų taip:

000000 00001 00010 00110 00000 100000

Reikia pridurti, kad ir su kokia programavimo kalba šiandien tenka susidurti, visų jų galutinis variantas prieš įvykdant kompiuteryje yra tokio formato – mašininis kodas.

2 karta (2GL)

Antrosios kartos kalbos pradėjo rastis praėjusio amžiaus 6-ajame dešimtmetyje. Tai vadinamos “žemo lygio” (low-level) programavimo kalbos, padėjusios lengviau suvokti programų darbą. Trumpai antroji karta tai – asembleriai. Nors asembleris ir paspartino darbą programuotojams, tačiau tai dar nebuvo įrankis, leidžiantis be didelių pastangų tobulinti programas ir taisyti klaidas. Teko ir man susidurti su asembleriu praėjusį semestrą universitete, bet daugeliui programuotojų toks kodas gali vis dar atrodyti akmens amžiaus kūrinys (pateikiamas “Hello world” fragmentas):

assume cs:cseg, ds:dseg, ss:ssegmov ax,dsegmov ds,ax  ;duomenu segmento iniciavimaslea dx, welcomemov ah, 09hint 21hmov ah,4chint 21h

Šiandien asembleris vis dar naudojamas situacijose, kur reikalingas išskirtinis greitis ir optimizavimas, pavyzdžiui, Linux kernelis parašytas su C (kuris vadinamas dar ir aukšto lygio asembleriu) ir dalis – asembleriu, taip pat žaidimuose, šifravimo, duomenų spaudimo ir panašiuose programavimo uždaviniuose.

3 karta (3GL)

Trečiajai kartai priskiriamos aukšto lygio (high-level) programavimo kalbos, kurių išeities kodą jau nėra sudėtinga perskaityti ir taisyti. Galima sakyti, kad šios kartos programavimo kalbų atsiradimas buvo tam tikras lūžis programų sistemų kūrimo procese. Jos jau palaikė struktūrinį programavimą, o vėlesnės trečios kartos programavimo kalbos ir jų versijos – jau ir objektinį programavimo modelį. Pirmosios trečios kartos kalbos pristatytos dar penktojo dešimtmečio pabaigoje – šeštojo dešimtmečio pradžioje: Fortran, ALGOL, COBOL. Šiandien geriausiai žinomos šios kartos kalbos yra C, Delphi, Java ir pan. Šios priemonės jau leido programai atitrūkti nuo procesoriaus tipo ir kartais nuo naudojamos aplinkos. Pavyzdžiui – paprasta Java programa:

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Reader { public static String readInputLine() {    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));      try {         return in.readLine();      } catch(IOException e) {         e.printStackTrace();         return "b";      }  }}

4 karta (4GL)

Ketvirtosios kartos kalbos pasižymi dvejomis savybėmis – orientuotos į konkretų tikslą/problemą/sritį ir jų išeities kodo struktūra ir sakiniai panašūs į įprastos žmonių kalbos struktūrą. Taip buvo siekiama sumažinti sugaištamą laiką ir kainą, norint įgyvendinti tam tikras programavimo užduotis. Šiandien jos dažniausiai naudojamos duomenų bazių programavime ir skriptuose. Ketvirtos kartos kalbos: DataFlex, SQL, MATLAB, OpenRoad ir panašios kalbos, akcentuotos į konkrečios srities užduotis. SQL pavyzdys:

SELECT name, surname FROM people WHERE age > 18

5 karta (5GL)

Penktosios kartos apibrėžimų internete galite rasti keletą. Vienas iš jų: tai tokios programavimo kalbos, kurios turi grafines pagalbines priemones, padedančias programuoti. Tačiau mano kuklia nuomone teisingesnis šis variantas: penktosios kartos kalbos paremtos idėja, kad problemą išspręs kompiuteris, kuriam tereikės nurodyti apribojimus, o algoritmą sukurs pati mašina. Ketvirtoji karta buvo orientuota į specifines programas, o penktoji karta į tai, kad kompiuteris užduotis spręstų už jus. Penktosios kartos kalbos šiuo metu daugiausia naudojamos dirbtinio intelekto tyrimuose. Dešimtajame dešimtmetyje tokios kalbos buvo laikomos ateities kalbomis, kurios pakeis visas iki šiol egzistavusias programų kūrimo priemones. 1982-1993 metais Japonija investavo į penktosios kartos sistemos tyrimą ir kūrimą, tikėdamasi, jog tai bus ypatingo našumo sistema su dirbtiniu intelektu. Deja, kuo didesnės programų sistemos buvo kuriamos, tuo akivaizdžiau buvo, jog automatinis efektyvaus algoritmo parinkimas yra labai sudėtinga užduotis ir to vis dar neįmanoma pilnai automatizuoti, t.y. vis dar yra reikalingas žmogaus programuotojo įsikišimas.Šiandien penktosios kartos idėjinės šlovės dienos jau praeityje ir šios kalbos yra naudojamos beveik vien akademiniuose tyrimuose ir darbuose. Geriausiai žinomos 5GL kalbos yra Prolog, OPS5, Mercury. Mercury “Hello world” pavyzdys:

:- module hello.:- interface.:- import_module io.:- pred main(io::di, io::uo) is det.:- implementation.main(!IO) :-io.write_string("Hello, World!n", !IO).

Tarp kitko, 5GL idėja paremtu komponentu galima vadinti plačiai paplitusią priemonę regexp (Regular Expression) – vietoje to, kad apibrėžinėtumėte paieškos algoritmą, nurodote tik taisykles, kuriomis remiantis bus įvykdyta paieškos tekste užklausa.

end.

Štai taip skirstomos programavimo kalbos. Vis dar akivaizdu, jog nėra tokio algoritmo, kuris pakeistų silpniausią, bet vis dar nepakeičiamą tarpinę tarp klaviatūros ir kėdės – žmogų.