pr val 2
DESCRIPTION
TRANSCRIPT
![Page 1: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/1.jpg)
Programmēšanas valodas: vēsture un īpašības
Programmēšanas valodas
![Page 2: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/2.jpg)
Programmēšanas valodas – ieskats vēsturē
Programmēšanas valodas: orientējoši vēsturiskie periodi:
- Priekšvēsture (agrīnā vēsture) – pirms 1950.g:
Ada Lavleisa (~1830), datoru veidošanās posms (no 1930.g)
- Pirmās augsta līmeņa programmēšanas valodas (1950-tie gadi),
FORTRAN, COBOL, ALGOL, LISP
- 1960-tie gadi: programmēšanas valodu “eksplozija”
- 1970-tie gadi: vienkāršība, abstrakcija, pētniecība
- 1980-tie gadi: Objektorientācijas ēras aizsākums, citi jauni
virzieni
- 1990-tie gadi: “nedaudzas” jaunas plaša profila valodas, cīņa par
ietekmi; Internets, valodu bibliotēku attīstība
- Tagadne un nākotne - ?
Iespējams tikai ieskats, jo programmēšanas valodu klāsts ārkārtīgi
plašs un bagātīgs.
![Page 3: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/3.jpg)
Programmēšanas valodas: Agrīnā vēsture
~1830: Čarlza Bebidža (Charles Babbage) analītiskā mašīna: programmas
sastāvēja no kartiņām, uz kurām kodēti dati un operācijas;
- Mašīna fiziski netika pabeigta, bet ir pārliecība, ka, ja tā būtu pabeigta,
tad tā būtu strādājusi.
- Ada Lavleisa (Lovelace) – rakstījusi programmas Analītiskajai mašīnai,
pasaulē pirmā programmētāja
1936: Tjūringa mašīnas (galīgs automāts, bezgalīga lenta);
- Čerča tēze: visi algoritmi realizējami ar TM,
- iespējams pierādīt teorēmas par algoritmu neiespējamību
- Universālā Tjūringa mašīna – ideja par programmas koda glabāšanu
datora (mašīnas) atmiņā
1936: -rēķini (x, x.M, M N, redukcija) – Tjūringa mašīnu analogs
funkcionālā stilā
1948: von Neumann mašīna, mašīnu kodi ar absolūto adresāciju, reāli
uzbūvēta mašīna, iespējams programmēt
Sākas reāla programmēšanas valodu vēsture.
1949: Kodēšanas valodas: Short Code, Speedcoding, UNIVAC A-0, A-1, A-2
![Page 4: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/4.jpg)
Pirmās augsta līmeņa PV (1950-tie gadi)
1956: FORTRAN – “revolūcija” augsta līmeņa programmēšanas valodu attīstībā, orientēta uz konkrētu datoru IBM 704:
- simboliski vārdi mainīgajiem; (mainīgā vārda pirmais burts nosaka mainīgā tipu).
- zarošanās operators: IF a-exp N1, N2, N3;
- cikla operators DO N1, x=n1,n2
- FORTRAN II (1958) - neatkarīga kompilācija, novērstas kļūdas
- FORTRAN tālāka attīstība:FORTRAN 77 - simbolu virknes, IF-THEN-ELSEFORTRAN 90 - f-jas masīviem, pointeri, dinamiskā atmiņa, rekursija,
…
ALGOL 58: datu tipi, deklarācijas, gari mainīgo vārdi, :=, iekļautie IF, FOR
ALGOL 60: begin-end ar lokālajiem mainīgajiem, rekursija, dinamiskie masīviTeorētiska valoda, pamats ALGOL 68, BASIC, PL/I, C, PASCAL, ADA, C++
1960: COBOL, Computerizing Business Records: ADD X Y GIVING Z
1960: LISP, AI aplikācijas, programma un dati - viss ir saraksts,[ iekavu izteiksme (A (B C) D (E (F G))) ]; vēlāk: SCHEME, COMMON LISP
![Page 5: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/5.jpg)
Programmēšanas valodas: 1960-tie gadiDaudzas valodas konkrētiem mērķiem
Universalitātes ideja: PL/I (1965): domāta jaunajiem IBM 360 sistēmas datoriem, iecere piedāvāt visu labāko no FORTRAN, COBOL, ALGOL, plus paralēlisma konstrukcijas un izņēmuma situāciju apstrādi, projekts neveiksmīgs: kompilatorus grūti uzrakstīt, tie lēni, valodu grūti lietot
ALGOL 68: valoda ar attīstītu un konceptuāli “pilnīgu” struktūru, tipu sistēmu, u.c. Diemžēl arī nelietojama: lietota jauna, citiem nesaprotama, terminoloģija, lai šīs valodas dizainu aprakstītu.
SNOBOL – virkņu apstrādes valoda, spēcīgi šablonu atbilstības līdzekļi (SNOBOL4)
SIMULA - 67: K.Nygaard, O.-J. Dahl, iekļauj ALGOL 60, bagātina to ar klases ideju (sapakoti dati + operācijas). Izstrādāta ar mērķi aprakstīt simulācijas uzdevumus. Pirmā objektorientētā programmēšanas valoda: 1967.g.
BASIC (1964): iesācējiem draudzīga. Radīta kā vienkārša valoda tā laika uzdevumu risināšanai, pēc tam adaptēta personālajos datoros, plaši izmantota izglītībā (skolās). BASIC – valodu saime: ANSI BASIC – minimālais BASIC. QuickBASIC (1989), Visual BASIC(1991), u.c.
![Page 6: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/6.jpg)
Programmēšanas valodas: 1970-tie gadi
PASCAL (1971): neliela, vienkārša, efektīva strukturēta valoda, balstīta uz ALGOL 60. value-result parametri, CASE, lietotāja datu tipi, RECORD. Nav: mainīga garuma masīvi kā parametri, atsevišķā kompilācijaDialekti: TurboPASCAL. 90-jos gados popularitāte samazinās
C (1972): “vidēji augsta” līmeņa valoda (augsta līmeņa vadības konstrukcijas plus pieeja datu reprezentācijai), viegli uztveramas konstrukcijas, UNIX sistēmas valoda. Atvieglota tipu kontrole. C popularitāti veicināja UNIX sistēmas lielā popularitāte.
PASCAL un C neievieš daudz jaunus programmēšanas valodu jēdzienus. To veiksme: vienkāršība, konsistence, ērtums lietošanā.
CLU: klasteru (“cluster”) mehānisms abstrakto datu tipu uzdošanai.
PROLOG: Loģiskā programmēšana. Rezolūciju metode 1965.g, interpretators ~1974, AI, dažas datu bāzu sistēmas, idejas ļoti interesantas, kopumā tomēr samērā ierobežoti lietojumi.
![Page 7: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/7.jpg)
Programmēšanas valodas: 1980-tie gadi (1)
Valodas ar abstrakto datu tipu mehānismiem: ADA, MODULA-2.
ADA: ASV Aizsardzības Departamenta pasūtījums (ADA-83, vēlāk ADA-95).- abstrakto datu tipu mehānisms (pakotnes)- paralēlas izpildes apraksta mehānisms (task-i)- ļoti rūpīgs dizains, bet ASV Aizsardzības Departamenta vēlme paturēt kontroli pār to, kā arī valodas apjoms un sarežģītība lieguši tai ļoti plašu izplatību
MODULA-2: balstīta uz PASCAL, ietver moduļu mehānismu. Vienkārša valoda, bet ierobežots ADT atbalsts, nav izņēmuma situāciju mehānismu – popularitāte samazinājusies.
Objekt-orientētā programmēšana: Smalltalk, C++.
Smalltalk: “tīra” objektorientēta valoda, veidota kopā ar pilnīgu datora lietotāja saskarni: specializēta uz noteiktām operāciju sistēmām.
C++: Veidota, lai nopietnam programmētājam programmēšanas darbs būtu “baudāmāks”, sākumā C paplašināšana ar klases ideju no Simula-67. Plaša valoda, grūti implementējama, grūti saprotama visā pilnībā. Daudz bibliotēku. ISO standarts 1998.gadā.
Citas objektorientētas valodas: Objective C, Object Pascal, Modula-3, Oberon, Eiffel.
![Page 8: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/8.jpg)
Programmēšanas valodas: 1980-tie gadi (2)
1980.gadi – arī funkcionālās programmēšanas attīstība
SCHEME (valodas LISP variants), ML – parādījušās jau 1970.-to gadu beigās.
SCHEME popularitāti iegūst ar grāmatas publikāciju 1985.gadā. SCHEME – LISP variants, kas tuvāks - rēķiniem.
ML – sintakse daudz tuvāka PASCAL valodai, nekā citām funkcionālām valodām; nopietna tipu sistēma, daudz spēcīgāka, nekā PASCAL (ne tikai tipu pārbaudes, bet arī tipu konstruēšanas sistēma)
Cita funkcionāla valoda MIRANDA: 1985-86.g.
Loģiskā programmēšana:
Pakāpeniski parādās efektīvas valodas PROLOG implementācijas.
1980.gadu vidū PROLOG tika izvēlēts kā galvenā valoda “piektās paaudzes” sistēmām Japānā. Pēc šī projekta beigām interese par valodu mazinājusies.
Interesanti paplašinājumi: PROLOG IV, PARLOG.
![Page 9: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/9.jpg)
Programmēšanas valodas: 1990-tie gadi (1)
Attīstības faktori: PC attīstība, Internet tīmekļa pieejamība (Mosaic pārlūkprogramma 1993.gadā). Milzīga tirgus atvēršanās.
C++: populārākā objektorientētā valoda 90.gadu sākumā.
1995.gads – valoda JAVA. Sun Microsystems veica plašu kampaņu valodas JAVA reklāmai. JAVA: relatīvi vienkārša, viegli pārnesama (portējama), plaša bibliotēku sistēma logu pārvaldībai, darbībai tīklā un paralēlai programmu izpildei.
JAVA lietojumi – auguši ļoti strauji. Nākotne – paliek jautājumi:
- JAVA aplikācijas, kas izpildāmas uz viena datora, ir lēnākas, nekā tās, kas veidotas ar C++
- SUN Microsystems pastāv uz savām īpašuma tiesībām uz JAVA, maz ticams, ka nākotnē varētu parādīties neatkarīgi ISO vai ANSI standarti
Tomēr: škiet, ka JAVA nākotne tīkla aplikācijās un izglītībā jau ir nodrošināta.
Citas valodas: … … …
![Page 10: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/10.jpg)
Programmēšanas valodas: 1990-tie gadi (2)
C++ un JAVA nav divas vienīgās programmēšanas valodas 1990-tajos gados.
HASKELL – tīri funkcionāla valoda, līdzīga ML un MIRANDA, ar jaunām
īpašībām (aizturētās izpildes paradigma, monādes kā I/O mehānisms, u.c.),
labu realizāciju un augošām bibliotēku iespējām.
Vienkāršākas līdzīgas valodas GOFER un HUGS tiek plaši lietotas izglītībā un
mazākām aplikācijām.
ADA 95 – ADA 83 papildinājums, iekļaujot papildus iespējas, t.sk. jaunas
iespējas objektorientētai programmēšanai un paralēlai programmu izpildei.
ADA 95 izstrādē ir ņemta vērā ADA 83 lietošanas pieredze, kā arī notikusī
OOP revolūcija.
Bibliotēku attīstība programmēšanas valodās. Vēsturiski: bibliotēkām
pakārtota nozīme (PASCAL – vispār nebija bibliotēku). Mūsdienās
nepieciešama plaša bibliotēku sistēma, kas neatkarīga no platformas, labi
integrēta valodā. JAVA panākumiem būtiska JAVA API (“Application
Program Interface”), kas būtībā ir bibliotēku sistēma. HASKELL, ADA95 –
labas bibliotēku sistēmas.
Skriptēšanas valodu attīstība: AWK, Perl, JavaScript, Rexx, Python, u.c.
![Page 11: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/11.jpg)
Programmēšanas valodas: 21.gadsimts ...
C# - Microsoft alternatīva valodai JAVA, ISO standarts, pieejamas arī citas implementācijas
Esošo valodu attīstība: jaunas bibliotēkas, jaunas iespējas:
Java 1.3, 1.4, 5.0, 6.0
PHP - skripitēšanas valoda
Ruby - tīri OO skriptēšanas valoda
Python - uz programmētāju orientēta OO valoda
Tcl/Tk - multiparadigmu valoda (OO, funkcionāla, imperatīva), izmanto prototipēšanai, grafiskajiem interfeisiem, skriptiem
Eiffel - “tīri” OO valoda
O’Caml - funkcionālais CAML papildināts ar OO konstrukcijām, statiska tipu sistēma
Perl - skriptēšana, simbolu virkņu apstrāde
ADA - paralēlas sistēmas, drošība
Delphi
u.c.
(turpinājums sekos )
![Page 12: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/12.jpg)
Programmēšanas valodas: nākotne?
1960.gadu programmētāju sapnis – “universāla” programmēšanas valoda visiem dzīves gadījumiem. Mēģinājums to uzbūvēt: PL/1, cieta neveiksmi.
Sapnis 1970./80. gados: izveidot specifikāciju valodu, aprakstīt tajā vēlamo rezultātu, lai sistēma pati atrod veidu, kā izveidot implementāciju un sasniegt risinājumu.
Programmēšanas automatizācijas (t.sk. automātiska koda ģenerēšanas) jomā ir sasniegumi, bet tie ir ļoti tāli no tā, lai programmēšanu padarītu nevajadzīgu.
Programmēšanas nepieciešamība mūsdienās: ļoti plaša, no asemblera valodas, līdz pat specifikāciju valodām.
Arī attīstoties datoriem, prasības uz programmām arvien pieaug, t.sk. vajadzīgs nodrošināt koda portēšanas un atkārtotas lietošanas iespējas, vajadzīgas sistēmas, kas uzlabo programmētāja darba produktivitāti.
Tehnoloģijas attīstās, un programmēšanas valodām jāattīstās līdzi. … …
![Page 13: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/13.jpg)
Tēma: programmēšanas valodu īpašības
Vēsture un īpašības
![Page 14: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/14.jpg)
Programmēšanas valodu īpašības: ievadsPamata prasības – (1) iespēja (efektīvi) izpildīt uz datora un
(2) lasāmība cilvēkam
ir savā starpā konfliktējošas.
Mūsdienu programmēšanas valodu izstrāde akcentē lasāmību cilvēkam, piemērotu (ērtu) abstrakciju sistēmu, veidus, kā pārvaldīt sarežģītību.
Laba vai ne tik laba valoda: to nosaka ne tikai valoda pati. Ļoti dažādi faktori:C : ieguva popularitāti UNIX sistēmas dēļCOBOL : tiek uzturēts tādēļ, ka tajā uzrakstīts daudz kodaADA : ieguva ietekmi caur ASV Aizsardzības DepartamentuJAVA : ieguva popularitāti Internet straujās izplatības iespaidā.
Dažādām PV: dažādas pašu valodu īpašības, kas nosaka (noteica) to popularitāti:FORTRAN: efektivitāteCOBOL: programmu teksti angļu valodai līdzīgā valodāALGOL: valoda ar bloku struktūruPASCAL: vienkārša valodaC++: lielāka abstrakcijas iespēja, saglabājot C efektivitāti un savietojamību ar C.
Svarīgi: sekot izvēlētajai “dizaina filozofijai”.
Programmēšanas valodas dizains – arī māksla, tāpat, kā jebkurš cits dizains.
![Page 15: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/15.jpg)
PV īpašības vēsturiskā skatījumā (1)Programmēšanas valodu attīstības sākumā: galvenais kritērijs – programmu
izpildes efektivitāte:(Datori bija ļoti lēni, tādēļ programmu ātrdarbība bija nepieciešamība; bez tam pastāvēja arī izplatīts uzskats, ka valodu translatori “nespēj” radīt efektīvu kodu).
FORTRAN – tieši šāds pirmais mērķis: izpildes efektivitāte. FORTRAN kodā – daudz līdzības ar mašīnas kodu, kuru nepieciešams ģenerēt.
Otrs mērķis (mērķis jebkurai augsta līmeņa programmēšanas valodai) – iespēja ērti (skaidri, precīzi, īsi) uzrakstīt programmas, sākumā bija pakārtots.
Nepieciešamība programmas arī lasīt cilvēkam – maz tika ņemta vērā.
COBOL, ALGOL 60 – jau plašāki kritēriji, nekā tikai efektivitāte. ALGOL 60 bloku struktūra – atvieglo programmu rakstīšanas uzdevumu.
Bez tam ALGOL 60 ņem vērā programmu lasāmību: saprotot, ka programmēšanas valoda ir arī līdzeklis komunikācijai starp cilvēkiem.
COBOL: mēģināja uzlabot lasāmību, veidojot programmas tekstu līdzīgu angļu valodas tekstam (šajā ziņā gan COBOL nevar uzskatīt 100% par veiksmi).
1960-tie gadi: tālāka izpratne par prasībām uz programmēšanas valodām …
![Page 16: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/16.jpg)
PV īpašības vēsturiskā skatījumā (2)
1960.-tie gadi:
1) Nepieciešamība piedāvāt spēcīgākus abstrakcijas mehānismus
2) Nepieciešamība samazināt likumu un ierobežojumu apjomu, kas
programmētājam jāiemācās.
Abi šie principi izriet no nepieciešamības atvieglot programmēšanas darbu.
SIMULA 67: klases mehānisms
ALGOL 68: konstrukciju “ortogonalitāte”: iespējami maz ierobežojumu, kas
rodas no dažādu valodas konstrukciju kompozīcijas (mazāk veiksmīga
valoda). Problēma: valodas “vispārīgums” pārāk sarežģīts, grūti
apgūstamas konstrukcijas.
1970-tie un 1980-tie gadi: vienkāršības un abstrakcijas princips: PASCAL, C,
EUCLID, CLU, MODULA-2, ADA.
![Page 17: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/17.jpg)
PV īpašības vēsturiskā skatījumā (3)
Mēģinājumi arī uzlabot programmu drošību:matemātiskas definīcijas valodu konstrukcijāmmehānismi valodā, kas kompilatoram atļautu kompilācijas laikā
“pierādīt” programmas pareizību.
Pierādījuma sistēmām ierobežota veiksme: galvenokārt sarežģītības dēļ.
Stingra tipu sistēma: šodien kļuvusi par standartu daudzās programmēšanas valodās.
Valodu matemātiskās precizitātes paaugstināšana: funkcionālās programmēšanas attīstība, valodas ML, HASKELL.
Objektorientētās valodas: izstrādes mērķis: (1) abstrakcijas mehānisms, kas atbilst praktiskiem programmēšanas uzdevumiem, (2) bibliotēku izmantošana valodu izteiksmes spējas paplašināšanai, (3) objektorientētās metodes koda elastības un atkārtotas izmantošanas nodrošināšanai.
OO valodas: “visveiksmīgākās” pēdējos 20 gados.
![Page 18: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/18.jpg)
Programmēšanas valodu īpašības: Efektivitāte
Programmēšanas valodas “efektivitāte”: dažādi efektivitātes veidi, nozīmē pavisam dažādas lietas:
A. Efektīvs izpildāmais kods Piemēri: mainīgie, kuru tipi nosakāmi pirms izpildes
C++ klases konstrukcija, neprasa vairāk resursus, kā C struct
B. Translācijas efektivitātePiemēram, vai valodai var uzrakstīt translatoru, kas tekstu caurskata tikai vienreiz?[ C, PASCAL – OK, C++ - nē]Vai valodā nav prasību, kuras ir kompilācijas laikā ļoti grūti pārbaudīt?
C. Vai valodai viegli uzrakstīt kompilatoru? Cik vienkārša ir pati valodas definīcija?
D. Cik efektīvs ir programmu izstrādes process šajā valodā. Efektivitāte = “izteiksmes spēja”.Efektīva kodēšana: vieglāk kodēt, ja mainīgos nav jādeklarē. Cieš citas būtiskas valodas īpašības.
E. Vēl efektivitāte: valodas drošība (uzticamība). Ja valoda nav droša, tad jātērē daudz līdzekļi, lai cīnītos ar kļūdām programmās. = Nav efektivitātes no programmbūves izmaksu viedokļa.
![Page 19: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/19.jpg)
Programmēšanas valodu īpašības: Regularitāte
Regularitāte – cik labi dažādas valodas īpašības ir “integrētas”.
Bieži regularitātes prasības grupē konkrētākās prasību kopās:
(1) vispārīgums, (2) ortogonalitāte, (3) uniformitāte.
Vispārīgums: Valoda ir vispārīga, ja tā izvairās no speciāliem gadījumiem konstrukciju pieejamībā
Ortogonalitāte:Valodas konstrukcijas nedrīkst uzvesties atšķirīgi dažādos kontekstos
Uniformitāte:Valodas konstrukciju izskata koherence: no līdzīga izskata konstrukcijām tiek sagaidīta līdzīga uzvedība.
![Page 20: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/20.jpg)
Regularitāte: vispārīgumsVispārīgums:
Valoda ir vispārīga, ja tā izvairās no speciāliem gadījumiem konstrukciju pieejamībā
PASCAL ir iekļautas funkcijas un procedūras, tās var tikt nodotas kā parametri citām procedūrām, bet PASCAL-ā nav procedūru tipa mainīgo
FORTRAN ir iespējas nodot mainīga garuma masīvus kā parametrus, bet nav iespējas definēt datu tipu, kas atbilst mainīga garuma masīvam.
C divas struktūras vai masīvus nevar salīdzināt, izmatojot vienādību ==. C++ šis ierobežojums ir novērsts.
Daudzām valodām nav iespēju paplašināt iebūvēto operatoru (piemēram == vai + ) darbību uz jauniem, lietotāja definētiem datu tipiem.
Ir valodas (piemēram, Haskell), kurās lietotājs var definēt jaunus operatorus.
![Page 21: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/21.jpg)
Regularitāte: ortogonalitāte un uniformitāte
Ortogonalitāte:Valodas konstrukcijas nedrīkst uzvesties atšķirīgi dažādos kontekstos
Masīvus nevar salīdzināt ar vienādību (C) – to var uzskatīt arī par ortogonalitātes problēmu
PASCAL: funkcijas rezultāts var būt tikai skalārs tips
C, C++: funkcijas rezultāts var būt ar jebkuru tipu, izņemot masīvu (masīvi valodās C, C++ ir īpašā statusā); ADA, funkcionālās valodas – šīs problēmas ir pamatā novērstas
Parametru nodošana valodā C: visi mainīgie tiek nodoti apakšprogrammām pēc vērtības, izņemot masīvus, kas tiek nodoti pēc adreses
Uniformitāte:No līdzīga izskata konstrukcijām tiek sagaidīta līdzīga uzvedība.
C++ semikolam jābūt pēc klases definīcijas, bet semikols nedrīkst būt pēc funkcijas definīcijas.
Vērtību atgriešana funkcijās valodā PASCAL atgādina piešķiršanu: f := TRUE.
![Page 22: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/22.jpg)
Neregularitātes iemesli
Iemesli: bieži vien vēsturiski un citu dizaina apsvērumu diktēti.
Semikola problēma C++: vēlēšanās atšķirties no C tik maz, cik
iespējams
Ierobežojumi uz funkcijām C un PASCAL: vienkāršības un
implementācijas jautājums.
Regularitāte kā mērķis pats par sevi, pāri visiem citiem mērķiem arī
var būt bīstams (piemērs: ALGOL 68: regularitāte perfekti
sasniegta, bet valoda nav lietojama).
Arī lasāmības un drošības prasības var tikt kompromitētas, ja uz
dažām valodas konstrukcijām netiek uzlikti ierobežojumi.
Piemērs: pointeri valodā C.
JAVA: pointeri netiek piedāvāti, bet līdz ar to programmu izpildes
vides kļuvusi komplicētāka, mainīgo vērtību maiņa var notikt
nepatīkamos veidos.
![Page 23: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/23.jpg)
Vienkāršība un izteiksmes spēja
Vienkāršība: PASCAL, C, u.c.
LISP, PROLOG – tikai dažas valodas konstrukcijas, bet valodas nav vienkāršas
BASIC – šķietami vienkārša valoda, bet dažu konstrukciju trūkums (deklarācijas, bloki) padara to grūti lietojamu lielākos projektos
PASCAL: pārāk vienkāršs: nav labas simbolu virkņu apstrādes, atsevišķas kompilācijas, labu i/o mehānismu
C: labāks, bet: vāja darbība ar simbolu virknēm, “neskaidra” tipu un operatoru sintakse, neparasta masīvu apstrāde, vāja tipu pārbaude
Izteiksmes spēja
Vieglums, ar kādu valodā var izteikt sarežģītus procesus un struktūras.
Izteiksmes spēja: konfliktē ar vienkāršību (LISP, PROLOG, u.c.)
Objekt-orientēta programmēšana: būtiski uzlabo programmētāja spēju rakstīt kodu, kas atbilst viņa dizainam.
Izteiksmes spēja labā nozīmē: uzlabo lasāmību.
Izteiksmes spēja var būt arī konfliktā ar lasāmību: while (*s++ = *t++) – programma, kas kopē vienu simbolu virkni uz otru.
![Page 24: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/24.jpg)
PV īpašībasPaplašināmība
Iespēja lietotājam pievienot jaunas īpašības valodaiTipiska situācija: neliels kodols + iespēja lietotājam definēt paplašinājumusDaudzas valodas atļauj definēt jaunus datu tipus, jaunas bibliotēkas funkcijasImperatīvās valodās (ADA, u.c.):
atļauj definēt jaunus tipus un paplašināt uz tiem iebūvētos operatorusML, HASKELL – iespēja lietotājam definēt arī pašam savus operatorus.
Vienkāršība bez paplašināmības (vismaz bibliotēku pievienošana, sadarbība ar citu valodu programmām): valoda mūsdienās nevar būt veiksmīga
IerobežojamībaIespēja definēt un izmantot valodas apakškopas. Apakškopas: vieglāk izmantojamas, iespējas veidot efektīvākas programmas.
Saskaņotība ar vispārpieņemtām notācijāmSvarīgi izmantot jēdzienus, kas ir de facto standarti. Piemērs: if-then-else terminoloģija. ALGOL 68: vārda “type” vietā lietoja “mode”FORTRAN: DO 99 I = 1.10 - ko dara šī programma?
Piešķir vērtību 1.1 mainīgajam DO99I.
![Page 25: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/25.jpg)
PV īpašībasPrecizitāte
Vajadzīga precīza valodas definīcija. Garants ne tikai programmu drošībai un uzticamībai, bet arī valodas translatoru drošībai un uzticamībai.
Valodas definīcija: valodas izstrādātāja veidota rokasgrāmata;vispāratzīts standarts (ISO, ANSI), pastāv valodām LISP, FORTRAN, ADA, PASCAL, COBOL, C, C++, C#
Neatkarība no konkrēta datora
Veidot iebūvētos datu tipus, kas nav atkarīgi no reprezentācijas uz konkrēta datora. Reāli fizikāli ierobežojumi pastāv. C standarta bibliotēkas limits.h un float.h satur lokalizētas no datora reprezentācijas atkarīgās definīcijas.
ADA: katram skaitliskam tipam tiek programmā uzrādīta arī precizitāte.
Drošība
Veicina programmu izstrādes veidu, kurā kļūdas maz iespējamas, atļauj kļūdu identifikāciju iespējami agri.
Statiskās (pirms izpildes) tipu kontroles, mainīgo deklarācijas prasība.
Drošības princips konfliktē ar vienkāršību un izteiksmes spēju. Kā risināt?
Funkcionālās valodas, ML un HASKELL atļauj nedeklarēt mainīgos, bet spēj veikt statisku tipu pārbaudi.
![Page 26: pr val 2](https://reader033.vdocuments.pub/reader033/viewer/2022052214/546442fbb4af9f3f3f8b48df/html5/thumbnails/26.jpg)
Prasības programmēšanas valodai: cits skatījums
Bieži nosauktas: vienkārša, viennozīmīga, robusta, dabiska lietošanā, laba izteiksmes spēja, precīzi definēta, piedāvā datu tipus, lietotāja datu struktūras, modulāra, paplašināma, labs ievads un izvads, pārnesamība, efektivitāte (izstrādē, izpildē), kompakta, viegli apgūstama, piemērota dažādām problēmām, dokumentēta, laba izstrādes vide, strukturēta, objekt-orientēta, speciālas bibliotēkas, u.c.
Abstrakcija (iespēja apvienot līdzīgas darbības vienā);
Automatizācija (vienmuļām darbībām, kurās viegli kļūdīties);
Strukturizācijas līmeņi;
Informācijas paslēpšana;
Iezīmes, kas atļauj informāciju pierakstīt dažādā secībā;
Ortogonalitāte (neatkarīgas funkcijas realizētas neatkarīgi);
Regularitāte (neliels daudzums likumu);
Drošība (ja programma neatbilst valodai, tas tiek konstatēts);
Konsistence (līdzīgas lietas attēlotas līdzīgā veidā);
Visu vai neko (iespēja realizēta pilnībā, vai tās nav vispār) [cf. R.Cezzar, 20-22]