Programmēšanas valodas: vēsture un īpašības Programmēšanas valodas
Programmēšanas valodas  – ieskats vēsturē <ul><li>Programmēšanas valodas:  orientējoši vēsturiskie periodi: </li></ul><ul>...
Programmēšanas valodas:  Agrīnā vēsture <ul><li>~1830: Čarlza Bebidža (Charles Babbage)  analītiskā mašīna : programmas sa...
Pirmās augsta līmeņa PV (1950-tie gadi) <ul><li>1956: FORTRAN – “revolūcija” augsta līmeņa programmēšanas valodu attīstībā...
Programmēšanas valodas: 1960-tie gadi <ul><li>Daudzas valodas konkrētiem mērķiem </li></ul><ul><li>Universalitātes ideja :...
Programmēšanas valodas: 1970-tie gadi <ul><li>PASCAL  (1971): neliela, vienkārša, efektīva strukturēta valoda, balstīta uz...
Programmēšanas valodas: 1980-tie gadi (1) <ul><li>Valodas ar  abstrakto datu tipu  mehānismiem: ADA, MODULA-2. </li></ul><...
Programmēšanas valodas: 1980-tie gadi (2) <ul><li>1980.gadi – arī  funkcionālās programmēšanas  attīstība </li></ul><ul><l...
Programmēšanas valodas: 1990-tie gadi (1) <ul><li>Attīstības faktori: PC attīstība, Internet tīmekļa pieejamība (Mosaic pā...
Programmēšanas valodas: 1990-tie gadi (2) <ul><li>C++ un JAVA nav divas vienīgās programmēšanas valodas 1990-tajos gados. ...
Programmēšanas valodas: 21.gadsimts ... <ul><li>C#  - Microsoft alternatīva valodai JAVA, ISO standarts, pieejamas arī cit...
Programmēšanas valodas: nākotne? <ul><li>1960.gadu programmētāju sapnis –  “universāla” programmēšanas valoda visiem dzīve...
Tēma: programmēšanas valodu īpašības Vēsture un īpašības
Programmēšanas valodu īpašības: ievads <ul><li>Pamata prasības –  (1) iespēja (efektīvi) izpildīt  uz datora  un  (2) lasā...
PV īpašības vēsturiskā skatījumā (1) <ul><li>Programmēšanas valodu attīstības sākumā: galvenais kritērijs –  programmu izp...
PV īpašības vēsturiskā skatījumā (2) <ul><li>1960.-tie gadi: </li></ul><ul><li>1) Nepieciešamība piedāvāt  spēcīgākus abst...
PV īpašības vēsturiskā skatījumā (3) <ul><li>Mēģinājumi arī uzlabot programmu drošību: matemātiskas definīcijas valodu kon...
Programmēšanas valodu īpašības: Efektivitāte <ul><li>Programmēšanas valodas “efektivitāte”:  dažādi efektivitātes veidi, n...
Programmēšanas valodu īpašības: Regularitāte <ul><li>Regularitāte – cik labi dažādas valodas īpašības ir “integrētas”.  </...
Regularitāte: vispārīgums <ul><li>Vispārīgums:  Valoda ir vispārīga, ja tā izvairās no speciāliem gadījumiem konstrukciju ...
Regularitāte: ortogonalitāte un uniformitāte <ul><li>Ortogonalitāte: Valodas konstrukcijas nedrīkst uzvesties atšķirīgi da...
Neregularitātes iemesli <ul><li>Iemesli:  bieži vien vēsturiski un citu dizaina apsvērumu diktēti. </li></ul><ul><li>Semik...
Vienkāršība un izteiksmes spēja <ul><li>Vienkāršība:  PASCAL, C, u.c. </li></ul><ul><li>LISP, PROLOG – tikai dažas valodas...
PV īpašības <ul><li>Paplašināmība Iespēja lietotājam pievienot  jaunas īpašības  valodai Tipiska situācija:  neliels kodol...
PV īpašības <ul><li>Precizitāte </li></ul><ul><li>Vajadzīga  precīza valodas definīcija . Garants ne tikai programmu drošī...
Prasības programmēšanas valodai: cits skatījums <ul><li>Bieži nosauktas:  vienkārša, viennozīmīga, robusta, dabiska lietoš...
Upcoming SlideShare
Loading in …5
×

pr val 2

2,695 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,695
On SlideShare
0
From Embeds
0
Number of Embeds
818
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

pr val 2

  1. 1. Programmēšanas valodas: vēsture un īpašības Programmēšanas valodas
  2. 2. Programmēšanas valodas – ieskats vēsturē <ul><li>Programmēšanas valodas: orientējoši vēsturiskie periodi: </li></ul><ul><li>Priekšvēsture (agrīnā vēsture) – pirms 1950.g: Ada Lavleisa ( ~ 1830), datoru veidošanās posms (no 1930.g) </li></ul><ul><li>Pirmās augsta līmeņa programmēšanas valodas ( 1950-tie gadi), FORTRAN, COBOL, ALGOL, LISP </li></ul><ul><li>1960-tie gadi: programmēšanas valodu “eksplozija” </li></ul><ul><li>1970-tie gadi: vienkāršība, abstrakcija, pētniecība </li></ul><ul><li>1980-tie gadi: Objektorientācijas ēras aizsākums, citi jauni virzieni </li></ul><ul><li>1990- tie gadi: “nedaudzas” jaunas plaša profila valodas, cīņa par ietekmi ; Internets , valodu bibliotēku attīstība </li></ul><ul><li>Tagadne un nākotne - ? </li></ul><ul><li>Iespējams tikai ieskats , jo programmēšanas valodu klāsts ārkārtīgi plašs un bagātīgs. </li></ul>
  3. 3. Programmēšanas valodas: Agrīnā vēsture <ul><li>~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 </li></ul><ul><li>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ņā </li></ul><ul><li>1936:  -rēķini (x,  x.M, M N, redukcija) – Tjūringa mašīnu analogs funkcionālā stilā </li></ul><ul><li>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. </li></ul><ul><li>1949: Kodēšanas valodas : Short Code, Speedcoding, UNIVAC A-0, A-1, A-2 </li></ul>
  4. 4. Pirmās augsta līmeņa PV (1950-tie gadi) <ul><li>1956: FORTRAN – “revolūcija” augsta līmeņa programmēšanas valodu attīstībā, orientēta uz konkrētu datoru IBM 704: </li></ul><ul><li>simboliski vārdi mainīgajiem ; (mainīgā vārda pirmais burts nosaka mainīgā tipu). </li></ul><ul><li>zarošanās operators : IF a-exp N1, N2, N3; </li></ul><ul><li>cikla operators DO N1, x=n1,n2 </li></ul><ul><li>FORTRAN II (1958) - neatkarīga kompilācija, novērstas kļūdas </li></ul><ul><li>FORTRAN tālāka attīstība: FORTRAN 77 - simbolu virknes, IF-THEN-ELSE FORTRAN 90 - f-jas masīviem, pointeri, dinamiskā atmiņa, rekursija, … </li></ul><ul><li>ALGOL 58: datu tipi , deklarācijas , gari mainīgo vārdi , := , iekļautie IF, FOR </li></ul><ul><li>ALGOL 60: begin-end ar lokālajiem mainīgajiem, rekursija , dinamiskie masīvi Teorētiska valoda, pamats ALGOL 68, BASIC, PL/I, C, PASCAL, ADA, C++ </li></ul><ul><li>1960: COBOL, Computerizing Business Records: ADD X Y GIVING Z </li></ul><ul><li>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 </li></ul>
  5. 5. Programmēšanas valodas: 1960-tie gadi <ul><li>Daudzas valodas konkrētiem mērķiem </li></ul><ul><li>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 </li></ul><ul><li>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. </li></ul><ul><li>SNOBOL – virkņu apstrādes valoda, spēcīgi šablonu atbilstības līdzekļi (SNOBOL4) </li></ul><ul><li>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. </li></ul><ul><li>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. </li></ul>
  6. 6. Programmēšanas valodas: 1970-tie gadi <ul><li>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ācija Dialekti: TurboPASCAL. 90-jos gados popularitāte samazinās </li></ul><ul><li>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. </li></ul><ul><li>PASCAL un C neievieš daudz jaunus programmēšanas valodu jēdzienus . To veiksme: vienkāršība, konsistence, ērtums lietošanā. </li></ul><ul><li>CLU : klasteru (“cluster”) mehānisms abstrakto datu tipu uzdošanai. </li></ul><ul><li>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. </li></ul>
  7. 7. Programmēšanas valodas: 1980-tie gadi (1) <ul><li>Valodas ar abstrakto datu tipu mehānismiem: ADA, MODULA-2. </li></ul><ul><li>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 </li></ul><ul><li>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. </li></ul><ul><li>Objekt-orientētā programmēšana: Smalltalk, C++. </li></ul><ul><li>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. </li></ul><ul><li>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ā. </li></ul><ul><li>Citas objektorientētas valodas: Objective C, Object Pascal, Modula-3, Oberon, Eiffel . </li></ul>
  8. 8. Programmēšanas valodas: 1980-tie gadi (2) <ul><li>1980.gadi – arī funkcionālās programmēšanas attīstība </li></ul><ul><li>SCHEME (valodas LISP variants), ML – parādījušās jau 1970.-to gadu beigās. </li></ul><ul><li>SCHEME popularitāti iegūst ar grāmatas publikāciju 1985.gadā. SCHEME – LISP variants, kas tuvāks  - rēķiniem. </li></ul><ul><li>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) </li></ul><ul><li>Cita funkcionāla valoda MIRANDA : 1985-86.g. </li></ul><ul><li>Loģiskā programmēšana : </li></ul><ul><li>Pakāpeniski parādās efektīvas valodas PROLOG implementācijas. </li></ul><ul><li>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. </li></ul><ul><li>Interesanti paplašinājumi: PROLOG IV, PARLOG . </li></ul>
  9. 9. Programmēšanas valodas: 1990-tie gadi (1) <ul><li>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. </li></ul><ul><li>C++: populārākā objektorientētā valoda 90.gadu sākumā. </li></ul><ul><li>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. </li></ul><ul><li>JAVA lietojumi – auguši ļoti strauji. Nākotne – paliek jautājumi: </li></ul><ul><li>JAVA aplikācijas, kas izpildāmas uz viena datora, ir lēnākas , nekā tās, kas veidotas ar C++ </li></ul><ul><li>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 </li></ul><ul><li>Tomēr: škiet, ka JAVA nākotne tīkla aplikācijās un izglītībā jau ir nodrošināta. </li></ul><ul><li>Citas valodas: … … … </li></ul>
  10. 10. Programmēšanas valodas: 1990-tie gadi (2) <ul><li>C++ un JAVA nav divas vienīgās programmēšanas valodas 1990-tajos gados. </li></ul><ul><li>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. </li></ul><ul><li>Vienkāršākas līdzīgas valodas GOFER un HUGS tiek plaši lietotas izglītībā un mazākām aplikācijām. </li></ul><ul><li>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. </li></ul><ul><li>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. </li></ul><ul><li>Skriptēšanas valodu attīstība : AWK, Perl, JavaScript, Rexx, Python, u.c. </li></ul>
  11. 11. Programmēšanas valodas: 21.gadsimts ... <ul><li>C# - Microsoft alternatīva valodai JAVA, ISO standarts, pieejamas arī citas implementācijas </li></ul><ul><li>Esošo valodu attīstība: jaunas bibliotēkas, jaunas iespējas: </li></ul><ul><li>Java 1.3, 1.4, 5.0, 6.0 </li></ul><ul><li>PHP - skripitēšanas valoda </li></ul><ul><li>Ruby - tīri OO skriptēšanas valoda </li></ul><ul><li>Python - uz programmētāju orientēta OO valoda </li></ul><ul><li>Tcl/Tk - multiparadigmu valoda (OO, funkcionāla, imperatīva), izmanto prototipēšanai, grafiskajiem interfeisiem, skriptiem </li></ul><ul><li>Eiffel - “tīri” OO valoda </li></ul><ul><li>O’Caml - funkcionālais CAML papildināts ar OO konstrukcijām, statiska tipu sistēma </li></ul><ul><li>Perl - skriptēšana, simbolu virkņu apstrāde </li></ul><ul><li>ADA - paralēlas sistēmas, drošība </li></ul><ul><li>Delphi </li></ul><ul><li>u.c. </li></ul><ul><li>(turpinājums sekos  ) </li></ul>
  12. 12. Programmēšanas valodas: nākotne? <ul><li>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. </li></ul><ul><li>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. </li></ul><ul><li>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. </li></ul><ul><li>Programmēšanas nepieciešamība mūsdienās: ļoti plaša, no asemblera valodas, līdz pat specifikāciju valodām. </li></ul><ul><li>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. </li></ul><ul><li>Tehnoloģijas attīstās, un programmēšanas valodām jāattīstās līdzi. … … </li></ul>
  13. 13. Tēma: programmēšanas valodu īpašības Vēsture un īpašības
  14. 14. Programmēšanas valodu īpašības: ievads <ul><li>Pamata prasības – (1) iespēja (efektīvi) izpildīt uz datora un (2) lasāmība cilvēkam </li></ul><ul><li>ir savā starpā konfliktējošas . </li></ul><ul><li>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. </li></ul><ul><li>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 koda ADA : ieguva ietekmi caur ASV Aizsardzības Departamentu JAVA : ieguva popularitāti Internet straujās izplatības iespaidā. </li></ul><ul><li>Dažādām PV: dažādas pašu valodu īpašības , kas nosaka (noteica) to popularitāti: FORTRAN: efektivitāte COBOL: programmu teksti angļu valodai līdzīgā valodā ALGOL: valoda ar bloku struktūru PASCAL: vienkārša valoda C++: lielāka abstrakcijas iespēja, saglabājot C efektivitāti un savietojamību ar C. </li></ul><ul><li>Svarīgi: sekot izvēlētajai “dizaina filozofijai”. </li></ul><ul><li>Programmēšanas valodas dizains – arī māksla , tāpat, kā jebkurš cits dizains. </li></ul>
  15. 15. PV īpašības vēsturiskā skatījumā (1) <ul><li>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). </li></ul><ul><li>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. </li></ul><ul><li>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 . </li></ul><ul><li>Nepieciešamība programmas arī lasīt cilvēkam – maz tika ņemta vērā. </li></ul><ul><li>COBOL, ALGOL 60 – jau plašāki kritēriji, nekā tikai efektivitāte. ALGOL 60 bloku struktūra – atvieglo programmu rakstīšanas uzdevumu . </li></ul><ul><li>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. </li></ul><ul><li>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). </li></ul><ul><li>1960-tie gadi: tālāka izpratne par prasībām uz programmēšanas valodām … </li></ul>
  16. 16. PV īpašības vēsturiskā skatījumā (2) <ul><li>1960.-tie gadi: </li></ul><ul><li>1) Nepieciešamība piedāvāt spēcīgākus abstrakcijas mehānismus </li></ul><ul><li>2) Nepieciešamība samazināt likumu un ierobežojumu apjomu , kas programmētājam jāiemācās. </li></ul><ul><li>Abi šie principi izriet no nepieciešamības atvieglot programmēšanas darbu . </li></ul><ul><li>SIMULA 67: klases mehānisms </li></ul><ul><li>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. </li></ul><ul><li>1970-tie un 1980-tie gadi: vienkāršības un abstrakcijas princips : PASCAL, C, EUCLID, CLU, MODULA-2, ADA. </li></ul>
  17. 17. PV īpašības vēsturiskā skatījumā (3) <ul><li>Mēģinājumi arī uzlabot programmu drošību: matemātiskas definīcijas valodu konstrukcijām mehānismi valodā, kas kompilatoram atļautu kompilācijas laikā “pierādīt” programmas pareizību . </li></ul><ul><li>Pierādījuma sistēmām ierobežota veiksme: galvenokārt sarežģītības dēļ . </li></ul><ul><li>Stingra tipu sistēma : šodien kļuvusi par standartu daudzās programmēšanas valodās. </li></ul><ul><li>Valodu matemātiskās precizitātes paaugstināšana : funkcionālās programmēšanas attīstība, valodas ML, HASKELL. </li></ul><ul><li>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. </li></ul><ul><li>OO valodas: “visveiksmīgākās” pēdējos 20 gados. </li></ul>
  18. 18. Programmēšanas valodu īpašības: Efektivitāte <ul><li>Programmēšanas valodas “efektivitāte”: dažādi efektivitātes veidi, nozīmē pavisam dažādas lietas: </li></ul><ul><li>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 </li></ul><ul><li>B. Translācijas efektivitāte Piemē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? </li></ul><ul><li>C. Vai valodai viegli uzrakstīt kompilatoru? Cik vienkārša ir pati valodas definīcija? </li></ul><ul><li>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. </li></ul><ul><li>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. </li></ul>
  19. 19. Programmēšanas valodu īpašības: Regularitāte <ul><li>Regularitāte – cik labi dažādas valodas īpašības ir “integrētas”. </li></ul><ul><li>Bieži regularitātes prasības grupē konkrētākās prasību kopās: </li></ul><ul><li>(1) vispārīgums, (2) ortogonalitāte, (3) uniformitāte. </li></ul><ul><li>Vispārīgums: Valoda ir vispārīga, ja tā izvairās no speciāliem gadījumiem konstrukciju pieejamībā </li></ul><ul><li>Ortogonalitāte: Valodas konstrukcijas nedrīkst uzvesties atšķirīgi dažādos kontekstos </li></ul><ul><li>Uniformitāte: Valodas konstrukciju izskata koherence: no līdzīga izskata konstrukcijām tiek sagaidīta līdzīga uzvedība. </li></ul>
  20. 20. Regularitāte: vispārīgums <ul><li>Vispārīgums: Valoda ir vispārīga, ja tā izvairās no speciāliem gadījumiem konstrukciju pieejamībā </li></ul><ul><li>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 </li></ul><ul><li>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. </li></ul><ul><li>C divas struktūras vai masīvus nevar salīdzināt, izmatojot vienādību ==. C++ šis ierobežojums ir novērsts. </li></ul><ul><li>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 . </li></ul><ul><li>Ir valodas (piemēram, Haskell), kurās lietotājs var definēt jaunus operatorus . </li></ul>
  21. 21. Regularitāte: ortogonalitāte un uniformitāte <ul><li>Ortogonalitāte: Valodas konstrukcijas nedrīkst uzvesties atšķirīgi dažādos kontekstos </li></ul><ul><li>Masīvus nevar salīdzināt ar vienādību (C) – to var uzskatīt arī par ortogonalitātes problēmu </li></ul><ul><li>PASCAL: funkcijas rezultāts var būt tikai skalārs tips </li></ul><ul><li>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 </li></ul><ul><li>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 </li></ul><ul><li>Uniformitāte: No līdzīga izskata konstrukcijām tiek sagaidīta līdzīga uzvedība. </li></ul><ul><li>C++ semikolam jābūt pēc klases definīcijas, bet semikols nedrīkst būt pēc funkcijas definīcijas. </li></ul><ul><li>Vērtību atgriešana funkcijās valodā PASCAL atgādina piešķiršanu: f := TRUE . </li></ul>
  22. 22. Neregularitātes iemesli <ul><li>Iemesli: bieži vien vēsturiski un citu dizaina apsvērumu diktēti. </li></ul><ul><li>Semikola problēma C++: vēlēšanās atšķirties no C tik maz, cik iespējams </li></ul><ul><li>Ierobežojumi uz funkcijām C un PASCAL: vienkāršības un implementācijas jautājums. </li></ul><ul><li>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). </li></ul><ul><li>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. </li></ul><ul><li>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. </li></ul>
  23. 23. Vienkāršība un izteiksmes spēja <ul><li>Vienkāršība: PASCAL, C, u.c. </li></ul><ul><li>LISP, PROLOG – tikai dažas valodas konstrukcijas, bet valodas nav vienkāršas </li></ul><ul><li>BASIC – šķietami vienkārša valoda, bet dažu konstrukciju trūkums (deklarācijas, bloki) padara to grūti lietojamu lielākos projektos </li></ul><ul><li>PASCAL: pārāk vienkāršs: nav labas simbolu virkņu apstrādes, atsevišķas kompilācijas, labu i/o mehānismu </li></ul><ul><li>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 </li></ul><ul><li>Izteiksmes spēja </li></ul><ul><li>Vieglums, ar kādu valodā var izteikt sarežģītus procesus un struktūras. </li></ul><ul><li>Izteiksmes spēja: konfliktē ar vienkāršību (LISP, PROLOG, u.c.) </li></ul><ul><li>Objekt-orientēta programmēšana: būtiski uzlabo programmētāja spēju rakstīt kodu, kas atbilst viņa dizainam. </li></ul><ul><li>Izteiksmes spēja labā nozīmē: uzlabo lasāmību. </li></ul><ul><li>Izteiksmes spēja var būt arī konfliktā ar lasāmību: while (*s++ = *t++) – programma, kas kopē vienu simbolu virkni uz otru. </li></ul>
  24. 24. PV īpašības <ul><li>Paplašināmība Iespēja lietotājam pievienot jaunas īpašības valodai Tipiska situācija: neliels kodols + iespēja lietotājam definēt paplašinājumus Daudzas valodas atļauj definēt jaunus datu tipus , jaunas bibliotēkas funkcijas Imperatīvās valodās (ADA, u.c.): atļauj definēt jaunus tipus un paplašināt uz tiem iebūvētos operatorus ML, HASKELL – iespēja lietotājam definēt arī pašam savus operatorus . </li></ul><ul><li>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 </li></ul><ul><li>Ierobežojamība Iespēja definēt un izmantot valodas apakškopas . Apakškopas: vieglāk izmantojamas, iespējas veidot efektīvākas programmas. </li></ul><ul><li>Saskaņotība ar vispārpieņemtām notācijām Svarī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? </li></ul><ul><li>Piešķir vērtību 1.1 mainīgajam DO99I. </li></ul>
  25. 25. PV īpašības <ul><li>Precizitāte </li></ul><ul><li>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 . </li></ul><ul><li>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# </li></ul><ul><li>Neatkarība no konkrēta datora </li></ul><ul><li>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. </li></ul><ul><li>ADA: katram skaitliskam tipam tiek programmā uzrādīta arī precizitāte. </li></ul><ul><li>Drošība </li></ul><ul><li>Veicina programmu izstrādes veidu, kurā kļūdas maz iespējamas , atļauj kļūdu identifikāciju iespējami agri . </li></ul><ul><li>Statiskās (pirms izpildes) tipu kontroles , mainīgo deklarācijas prasība. </li></ul><ul><li>Drošības princips konfliktē ar vienkāršību un izteiksmes spēju. Kā risināt? </li></ul><ul><li>Funkcionālās valodas, ML un HASKELL atļauj nedeklarēt mainīgos , bet spēj veikt statisku tipu pārbaudi . </li></ul>
  26. 26. Prasības programmēšanas valodai: cits skatījums <ul><li>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. </li></ul><ul><li>Abstrakcija (iespēja apvienot līdzīgas darbības vienā); </li></ul><ul><li>Automatizācija (vienmuļām darbībām, kurās viegli kļūdīties); </li></ul><ul><li>Strukturizācijas līmeņi ; </li></ul><ul><li>Informācijas paslēpšana ; </li></ul><ul><li>Iezīmes , kas atļauj informāciju pierakstīt dažādā secībā; </li></ul><ul><li>Ortogonalitāte (neatkarīgas funkcijas realizētas neatkarīgi); </li></ul><ul><li>Regularitāte (neliels daudzums likumu); </li></ul><ul><li>Drošība (ja programma neatbilst valodai, tas tiek konstatēts); </li></ul><ul><li>Konsistence (līdzīgas lietas attēlotas līdzīgā veidā); </li></ul><ul><li>Visu vai neko (iespēja realizēta pilnībā, vai tās nav vispār) [cf. R.Cezzar, 20-22] </li></ul>

×