240 likes | 617 Views
Programmēšanas valodas: vēsture, izstrādes principi. Programmēšanas valodas. 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)
E N D
Programmēšanas valodas: vēsture, izstrādes principi Programmēšanas valodas
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.
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ētSākas reāla programmēšanas valodu vēsture. 1949: Kodēšanas valodas: Short Code, Speedcoding, UNIVAC A-0, A-1, A-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-ELSE FORTRAN 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
Programmēšanas valodas: 1960-tie gadi Daudzas 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.
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.
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.
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.
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 būtiski 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: … … …
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.
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. … …
PV izstrādes principi: ievads Pamata 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.
PV izstrādes principi 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 …
PV izstrādes principi 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.
PV izstrādes principi vēsturiskā skatījumā (3) Mēģinājumi arī uzlabot programmu drošību, ieviešot matemātiskas definīcijas valodu konstrukcijām un piedāvājot valodā mehānismus, kas kompilatoram atļautu kompilācijas laikā “pierādīt” programmas pareizību. Diemžēl pierādījuma sistēmām ierobežota veiksme – galvenokārt tās sarežģītības dēļ, kas ar to saistīta. 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 15 gados.
PV izstrādes principi: efektivitāte Programmēšanas valodas “efektivitāte”: dažādi efektivitātes veidi, nozīmē pavisam dažādas lietas: A. Efektīvs izpildāmais kods (saukts arī par optimizējamību)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 un PASCAL tas ir iespējams, jo visi mainīgie jādeklarē pirms lietošanas, C++ šī prasība ir atcelta)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 šajā nozīmē kļūst sinonīms “izteiksmes spējai”.Efektīva kodēšana: vieglāk kodēt, ja mainīgos nav jādeklarē. Tomēr šādā situācijā cieš citas būtiskas prasības uz valodas dizainu. E. Vēl viens efektivitātes veids: programmēšanas valodas drošība (uzticamība). Ja valoda nav droša, tad var būt 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.
PV izstrādes principi: Regularitāte (1) 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ībai Piemēri (vispārīguma nav/vispārīgums ir): 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 C nav iespējams definēt iekļautas procedūras vai funkcijas (C toties pieļauj procedūras kā parametrus, kā mainīgos vai rezultējošas vērtības: pointeri uz funkcijām). PASCAL-ā nav mainīga garuma masīvu. C un ADA ir mainīga garuma masīvi. 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 pat definēt jaunus operatorus.
PV izstrādes principi: Regularitāte (2) 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: Valodas konstrukciju izskata koherence: 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.
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.
Tālāki PV izstrādes principi 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 lietojami 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.
Tālāki PV izstrādes principi (2) 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. 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ība Iespēja definēt un izmantot valodas apakškopas. Apakškopas: vieglāk izmantojamas, var būt iespējas veidot efektīvākas programmas. 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? Piešķir vērtību 1.1 mainīgajam DO99I.
Tālāki PV izstrādes principi (3) Precizitā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++ 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.
Prasības programmēšanas valodai: cits skatījums Lasīt, rakstīt, izpildīt, modificēt, analizēt, izmantot programmas 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]