pr val 2

26
Programmēšanas valodas: vēsture un īpašības Programmēšanas valodas

Upload: kaspars-rinkevics

Post on 12-Nov-2014

3.472 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: pr val 2

Programmēšanas valodas: vēsture un īpašības

Programmēšanas valodas

Page 2: pr val 2

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

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

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

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

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

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

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

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

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

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

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

Tēma: programmēšanas valodu īpašības

Vēsture un īpašības

Page 14: pr val 2

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

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

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

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

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

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

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

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

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

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

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

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

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]