Поддерживать
www.wikidata.ru-ru.nina.az
Soderzhimoe etoj stati nuzhdaetsya v chistke Tekst soderzhit mnogo malovazhnyh neenciklopedichnyh ili ustarevshih podrobnostej Pozhalujsta uluchshite statyu v sootvetstvii s pravilami napisaniya statej V etoj state mozhet byt slishkom mnogo ssylok na drugie stati i vozmozhno ih kolichestvo nuzhno sokratit Pozhalujsta oformite eyo soglasno pravilam rasstanovki i oformleniya vnutrennih ssylok i udalite povtoryayushiesya ssylki i vse ssylki ne otnosyashiesya k kontekstu Yazy k programmi rovaniya formalnyj yazyk prednaznachennyj dlya zapisi kompyuternyh programm Yazyk programmirovaniya opredelyaet nabor leksicheskih sintaksicheskih i semanticheskih pravil opredelyayushih vneshnij vid programmy i dejstviya kotorye vypolnit ispolnitel obychno EVM pod eyo upravleniem So vremeni sozdaniya pervyh programmiruemyh mashin chelovechestvo pridumalo bolee vosmi tysyach yazykov programmirovaniya vklyuchaya ezotericheskie Kazhdyj god ih chislo uvelichivaetsya Nekotorymi yazykami umeet polzovatsya tolko nebolshoe chislo ih sobstvennyh razrabotchikov drugie stanovyatsya izvestny millionam lyudej Professionalnye programmisty mogut vladet neskolkimi yazykami programmirovaniya Yazyk programmirovaniya prednaznachen dlya napisaniya kompyuternyh programm kotorye predstavlyayut soboj nabor pravil pozvolyayushih kompyuteru vypolnit tot ili inoj vychislitelnyj process organizovat upravlenie razlichnymi obektami i t p Yazyk programmirovaniya otlichaetsya ot estestvennyh yazykov tem chto prednaznachen dlya upravleniya EVM v to vremya kak estestvennye yazyki ispolzuyutsya prezhde vsego dlya obsheniya lyudej mezhdu soboj Bolshinstvo yazykov programmirovaniya ispolzuet specialnye konstrukcii dlya opredeleniya i manipulirovaniya strukturami dannyh i upravleniya processom vychislenij Kak pravilo yazyk programmirovaniya opredelyaetsya ne tolko cherez specifikacii standarta yazyka formalno opredelyayushie ego sintaksis i semantiku no i cherez voplosheniya realizacii standarta programmnye sredstva obespechivayushie translyaciyu ili interpretaciyu programm na etom yazyke takie programmnye sredstva razlichayutsya po proizvoditelyu marke i variantu versii vremeni vypuska polnote voplosheniya standarta dopolnitelnym vozmozhnostyam mogut imet opredelyonnye oshibki ili osobennosti voplosheniya vliyayushie na praktiku ispolzovaniya yazyka ili dazhe na ego standart IstoriyaOsnovnaya statya Istoriya yazykov programmirovaniya Rannie etapy razvitiya Mozhno skazat chto pervye yazyki programmirovaniya voznikali eshyo do poyavleniya sovremennyh elektronnyh vychislitelnyh mashin uzhe v XIX veke byli izobreteny ustrojstva kotorye mozhno s dolej uslovnosti nazvat programmiruemymi k primeru muzykalnaya shkatulka i pozdnee mehanicheskoe pianino posredstvom metallicheskogo cilindra i Zhakkardovyj tkackij stanok 1804 posredstvom kartonnyh kart Dlya upravleniya imi ispolzovalis nabory instrukcij kotorye v ramkah sovremennoj klassifikacii mozhno schitat prototipami predmetno orientirovannyh yazykov programmirovaniya istochnik ne ukazan 524 dnya Znachimym mozhno schitat yazyk na kotorom ledi Ada Avgusta grafinya Lavlejs v 1842 godu napisala programmu dlya vychisleniya chisel Bernulli dlya analiticheskoj mashiny Charlza Bebbidzha stavshej by v sluchae realizacii pervym kompyuterom v mire hotya i mehanicheskim s parovym dvigatelem V 1930 1940 godah A Chyorch A Tyuring A Markov razrabotali matematicheskie abstrakcii lyambda ischislenie mashinu Tyuringa normalnye algoritmy sootvetstvenno dlya formalizacii algoritmov V eto zhe vremya v 1940 e gody poyavilis elektricheskie cifrovye kompyutery i byl razrabotan yazyk kotoryj mozhno schitat pervym vysokourovnevym yazykom programmirovaniya dlya EVM Plankalkul sozdannyj nemeckim inzhenerom K Cuze v period s 1943 po 1945 gody Programmisty EVM nachala 1950 h godov v osobennosti takih kak UNIVAC i IBM 701 pri sozdanii programm polzovalis neposredstvenno mashinnym kodom zapis programmy na kotorom sostoyala iz edinic i nulej i kotoryj prinyato schitat yazykom programmirovaniya pervogo pokoleniya pri etom raznye mashiny raznyh proizvoditelej ispolzovali razlichnye kody chto trebovalo perepisyvat programmu pri perehode na druguyu EVM Pervym prakticheski realizovannym yazykom stal v 1949 godu tak nazyvaemyj Kratkij kod v kotorom operacii i peremennye kodirovalis dvuhsimvolnymi sochetaniyami On byl razrabotan v kompanii Eckert Mauchly Computer Corporation vypuskavshej UNIVAC i sozdannoj odnim iz sotrudnikov Tyuringa Dzhonom Mokli Mokli poruchil svoim sotrudnikam razrabotat translyator matematicheskih formul odnako dlya 1940 h godov eta cel byla slishkom ambiciozna Kratkij kod byl realizovan s pomoshyu interpretatora Vskore na smenu takomu metodu programmirovaniya prishlo primenenie yazykov vtorogo pokoleniya takzhe ogranichennyh specifikaciyami konkretnyh mashin no bolee prostyh dlya ispolzovaniya chelovekom za schyot ispolzovaniya mnemonik simvolnyh oboznachenij mashinnyh komand i vozmozhnosti sopostavleniya imyon adresam v mashinnoj pamyati Oni tradicionno izvestny pod naimenovaniem yazykov assemblera i avtokodov Odnako pri ispolzovanii assemblera stanovilsya neobhodimym process perevoda programmy na yazyk mashinnyh kodov pered eyo vypolneniem dlya chego byli razrabotany specialnye programmy takzhe poluchivshie nazvanie assemblerov Sohranyalis i problemy s perenosimostyu programmy s EVM odnoj arhitektury na druguyu i neobhodimost dlya programmista pri reshenii zadachi myslit terminami nizkogo urovnya yachejka adres komanda Pozdnee yazyki vtorogo pokoleniya byli usovershenstvovany v nih poyavilas podderzhka makrokomand S serediny 1950 h nachali poyavlyatsya yazyki tretego pokoleniya takie kak Fortran Lisp i Kobol Yazyki programmirovaniya etogo tipa bolee abstraktny ih eshyo nazyvayut yazykami vysokogo urovnya i universalny ne imeyut zhyostkoj zavisimosti ot konkretnoj sistemy komand i konfiguracii periferijnyh ustrojstv Programma na yazyke vysokogo urovnya mozhet ispolnyatsya po krajnej mere v teorii na praktike obychno imeetsya ryad specificheskih versij ili dialektov realizacii yazyka na lyuboj EVM na kotoroj dlya etogo yazyka imeetsya translyator instrument perevodyashij programmu na yazyk mashiny posle chego ona mozhet byt vypolnena processorom Obnovlyonnye versii perechislennyh yazykov do sih por imeyut hozhdenie v razrabotke programmnogo obespecheniya i kazhdyj iz nih okazal opredelyonnoe vliyanie na posleduyushee razvitie yazykov programmirovaniya Togda zhe v konce 1950 h godov poyavilsya Algol takzhe posluzhivshij osnovoj dlya ryada dalnejshih razrabotok v etoj sfere Neobhodimo zametit chto na format i primenenie rannih yazykov programmirovaniya v znachitelnoj stepeni vliyali interfejsnye ogranicheniya Sovershenstvovanie V period 1960 h 1970 h godov byli razrabotany osnovnye paradigmy yazykov programmirovaniya ispolzuemye v nastoyashee vremya hotya vo mnogih aspektah etot process predstavlyal soboj lish uluchshenie idej i koncepcij zalozhennyh eshyo v pervyh yazykah tretego pokoleniya Yazyk APL okazal vliyanie na funkcionalnoe programmirovanie i stal pervym yazykom podderzhivavshim obrabotku massivov Yazyk PL 1 NPL byl razrabotan v 1960 h godah kak obedinenie luchshih chert Fortrana i Kobola Yazyk Snobol razrabotannyj i sovershenstvuemyj v techenie 1960 h godov orientirovannyj na obrabotku tekstov vvyol v chislo bazovyh operacij yazykov programmirovaniya sopostavlenie s obrazcom Yazyk Simula poyavivshijsya primerno v eto zhe vremya vpervye vklyuchal podderzhku obektno orientirovannogo programmirovaniya V seredine 1970 h gruppa specialistov predstavila yazyk Smalltalk kotoryj byl uzhe vsecelo obektno orientirovannym V period s 1969 po 1973 gody velas razrabotka yazyka Si populyarnogo i po sej den i stavshego osnovoj dlya mnozhestva posleduyushih yazykov naprimer stol populyarnyh kak C i Java V 1972 godu byl sozdan Prolog naibolee izvestnyj hotya i ne pervyj i daleko ne edinstvennyj yazyk logicheskogo programmirovaniya V 1973 godu v yazyke ML byla realizovana rasshirennaya sistema polimorfnoj tipizacii polozhivshaya nachalo tipizirovannym yazykam funkcionalnogo programmirovaniya Kazhdyj iz etih yazykov porodil po semejstvu potomkov i bolshinstvo sovremennyh yazykov programmirovaniya v konechnom schyote osnovano na odnom iz nih Krome togo v 1960 1970 h godah aktivno velis spory o neobhodimosti podderzhki strukturnogo programmirovaniya v teh ili inyh yazykah V chastnosti gollandskij specialist E Dejkstra vystupal v pechati s predlozheniyami o polnom otkaze ot ispolzovaniya instrukcij GOTO vo vseh vysokourovnevyh yazykah Razvivalis takzhe priyomy napravlennye na sokrashenie obyoma programm i povyshenie produktivnosti raboty programmista i polzovatelya Obedinenie i razvitie V 1980 e gody nastupil period kotoryj mozhno uslovno nazvat vremenem konsolidacii Yazyk C obedinil v sebe cherty obektno orientirovannogo i sistemnogo programmirovaniya pravitelstvo SShA standartizirovalo yazyk Ada proizvodnyj ot Paskalya i prednaznachennyj dlya ispolzovaniya v bortovyh sistemah upravleniya voennymi obektami v Yaponii i drugih stranah mira osushestvlyalis znachitelnye investicii v izuchenie perspektiv tak nazyvaemyh yazykov pyatogo pokoleniya kotorye vklyuchali by v sebya konstrukcii logicheskogo programmirovaniya Soobshestvo funkcionalnyh yazykov prinyalo v kachestve standarta ML i Lisp V celom etot period harakterizovalsya skoree oporoj na zalozhennyj v predydushem desyatiletii fundament nezheli razrabotkoj novyh paradigm Vazhnoj tendenciej kotoraya nablyudalas v razrabotke yazykov programmirovaniya dlya krupnomasshtabnyh sistem bylo sosredotochenie na primenenii modulej obyomnyh edinic organizacii koda Hotya nekotorye yazyki takie kak PL 1 uzhe podderzhivali sootvetstvuyushuyu funkcionalnost modulnaya sistema nashla svoyo otrazhenie i primenenie takzhe i v yazykah Modula 2 Oberon Ada i ML Chasto modulnye sistemy obedinyalis s konstrukciyami obobshyonnogo programmirovaniya Vazhnym napravleniem rabot stanovyatsya vizualnye graficheskie yazyki programmirovaniya v kotoryh process napisaniya programmy kak teksta zamenyaetsya na process risovaniya konstruirovaniya programmy v vide diagrammy na ekrane EVM Vizualnye yazyki obespechivayut naglyadnost i luchshee vospriyatie logiki programmy chelovekom V 1990 h godah v svyazi s aktivnym razvitiem Interneta rasprostranenie poluchili yazyki pozvolyayushie sozdavat scenarii dlya veb stranic glavnym obrazom Perl razvivshijsya iz skriptovogo instrumenta dlya Unix sistem i Java Vozrastala takzhe i populyarnost tehnologij virtualizacii Eti izmeneniya odnako takzhe ne predstavlyali soboj fundamentalnyh novacij yavlyayas skoree sovershenstvovaniem uzhe sushestvovavshih paradigm i yazykov v poslednem sluchae glavnym obrazom semejstva Si V nastoyashee vremya razvitie yazykov programmirovaniya idyot v napravlenii povysheniya bezopasnosti i nadyozhnosti sozdaniya novyh form modulnoj organizacii koda i integracii s bazami dannyh Specifikaciya yazykovStandartizaciya Dlya mnogih shiroko rasprostranyonnyh yazykov programmirovaniya sozdany mezhdunarodnye standarty Specialnye organizacii provodyat regulyarnoe obnovlenie i publikaciyu specifikacij i formalnyh opredelenij sootvetstvuyushego yazyka V ramkah takih komitetov prodolzhaetsya razrabotka i modernizaciya yazykov programmirovaniya i reshayutsya voprosy o rasshirenii ili podderzhke uzhe sushestvuyushih i novyh yazykovyh konstrukcij Alfavit Sovremennye yazyki programmirovaniya shiroko ispolzuyut multiyazychnye simvoly Yunikoda Delphi 2006 C Java Rust dlya identifikatorov i hraneniya ishodnogo koda Istoricheski do nachala 2000 h godov v yazykah primenyalas 7 i bitnaya kodirovka ASCII prinyataya standartom v SShA Rannie yazyki voznikshie v epohu 6 bitnyh simvolov ispolzovali bolee ogranichennyj nabor Naprimer alfavit Fortrana vklyuchaet 49 simvolov vklyuchaya probel A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 Upravlyayushie simvoly ASCII ispolzuyutsya ogranichenno dopuskayutsya tolko vozvrat karetki CR perevod stroki LF i gorizontalnaya tabulyaciya HT inogda takzhe vertikalnaya tabulyaciya VT i perehod k sleduyushej stranice FF Zametnym isklyucheniem yavlyaetsya yazyk APL v kotorom ispolzuetsya ochen mnogo specialnyh simvolov Podrobnee sm Perenosimyj nabor simvolov Ispolzovanie simvolov za predelami 7 i bitnogo ASCII naprimer simvolov KOI8 R zavisit ot realizacii inogda oni razreshayutsya tolko v kommentariyah i simvolnyh strokovyh konstantah a inogda i v identifikatorah V SSSR i sovremennoj Rossii sushestvuyut yazyki gde vse klyuchevye slova pishutsya russkimi bukvami naprimer vstroennyj yazyk programmirovaniya 1S Predpriyatie i uchebnye yazyki programmirovaniya psevdokod shkolnyj algoritmicheskij yazyk sistemy KuMir i yazyk RAPIRA Rasshirenie nabora ispolzuemyh simvolov vne latinskogo alfavita osnovano na tom chto mnogie proekty po razrabotke programmnogo obespecheniya yavlyayutsya mezhdunarodnymi a tak zhe populyarizaciej graficheskih simvolov iz naborov emotikonov Grammatika Etot razdel ne zavershyon Vy pomozhete proektu ispraviv i dopolniv ego Kontekstno svobodnaya grammatika Kontekstno zavisimaya grammatika Regulyarnyj yazyk regulyarnye vyrazheniya Grammatika s frazovoj strukturoj LL n LALR 1 Yacc ANTLR Parsec AST angl angl angl Semantika Osnovnaya statya Semantika programmirovanie Sushestvuet neskolko podhodov k opredeleniyu semantiki yazykov programmirovaniya Osnovnyh tri i Pri opisanii semantiki v ramkah operacionnogo podhoda obychno ispolnenie konstrukcij yazyka programmirovaniya interpretiruetsya s pomoshyu nekotoroj voobrazhaemoj abstraktnoj EVM Aksiomaticheskaya semantika opisyvaet posledstviya vypolneniya konstrukcij yazyka s pomoshyu yazyka logiki i zadaniya pred i postuslovij Denotacionnaya semantika operiruet ponyatiyami tipichnymi dlya matematiki mnozhestva sootvetstviya a takzhe suzhdeniya utverzhdeniya i dr KlassifikaciyaNe sushestvuet obsheprinyatoj sistematichnoj taksonomii yazykov programmirovaniya Est mnozhestvo chert soglasno kotorym mozhno proizvodit klassifikaciyu yazykov prichyom odni iz nih odnoznachno provodyat razdely mezhdu yazykami na osnove tehnicheskih svojstv drugie osnovyvayutsya na dominiruyushih priznakah imeyut isklyucheniya i bolee uslovny a treti polnostyu subektivny i neredko soprovozhdayutsya zabluzhdeniyami no na praktike vesma rasprostraneny Konkretnyj yazyk programmirovaniya v podavlyayushem bolshinstve sluchaev imeet bolee odnogo yazyka predka Mnogie yazyki sozdayutsya kak sochetanie elementov razlichnyh yazykov V odnih sluchayah takoe sochetanie prohodit matematicheskij analiz na predmet neprotivorechivosti sm naprimer Opredelenie Standard ML v drugih yazyk formiruetsya ishodya iz prakticheskih potrebnostej dlya resheniya aktualnyh problem s celyu polucheniya kommercheskogo uspeha no pri etom bez soblyudeniya matematicheskoj strogosti i so vklyucheniem v yazyk vzaimoisklyuchayushih idej kak v sluchae C Yazyki nizkogo i vysokogo urovnya Formalno yazyk programmirovaniya ne imeet takogo kriteriya kak uroven Uslovno etot termin obychno oznachaet odno iz dvuh priblizhennost yazyka programmirovaniya k estestvennomu chelovecheskomu yazyku i obrazu mysli udalyonnost semantiki yazyka programmirovaniya ot mashinnogo koda celevoj arhitektury processora to est naimenshij masshtab preobrazovanij kotorye dolzhen preterpet kod programmy pered tem kak on smozhet ispolnyatsya Eta dvojstvennost poyavilas v 1950 e gody pri sozdanii yazykov Plankalkyul i Fortran Pri ih razrabotke stavilis pryamye namereniya obespechit bolee kratkuyu zapis chasto vstrechayushihsya konstrukcij naprimer arifmeticheskih vyrazhenij chem trebovali processory togo vremeni V etih yazykah vvodilsya novyj sloj abstrakcii i predpolagalis preobrazovaniya programm v mashinnyj yazyk poetomu ih nazvali yazykami vysokogo urovnya to est nadstrojkoj nadsloeniem nad yazykom mashiny Odnako vskore stalo yasno chto eti opredeleniya vovse ne obyazatelno idut bok o bok Tak istoriya znaet sluchai kogda yazyk tradicionno schitayushijsya vysokourovnevym realizovyvalsya apparatno sm Lisp mashina angl ili kogda yazyk yavlyayushijsya nizkourovnevym na odnoj platforme kompilirovalsya kak vysokourovnevyj na drugoj takim obrazom programmy na CISC assemblere VAX ispolzovalis na RISC mashinah DEC Alpha sm angl Tem ne menee do sih por rasprostraneno zabluzhdenie chto eti dve traktovki yavlyayutsya ne bolee chem dvumya storonami odnoj medali i pervoe budto by neizbezhno oznachaet vtoroe Po stepeni vysokourovnevosti yazyki prinyato delit na pyat pokolenij K angl otnosyat v pervuyu ochered mashinnye yazyki ili na obsheupotrebimom zhargone mashinnye kody to est yazyki realizovannye neposredstvenno na apparatnom urovne Poyavivshiesya vskore posle nih yazyki assemblera otnosyat ko angl V prostejshem sluchae oni realizuyut mnemoniku nad mashinnym yazykom dlya zapisi komand i ih parametrov v chastnosti adresov v pamyati no mnogie yazyki assemblera vklyuchayut i vesma razvityj makroyazyk krome togo dazhe v prostejshem sluchae obratnaya razrabotka mashinnogo koda ne pozvolyaet odnoznachno vosstanovit programmu na assemblere naprimer nevozmozhno vosstanovit imena peremennyh mogut byt neraspoznany nedokumentirovannye funkcii Tem ne menee oba pervyh pokoleniya obsheprinyato otnosit k yazykam nizkogo urovnya K 1970 m godam slozhnost programm vyrosla nastolko chto prevysila sposobnost programmistov upravlyatsya s nimi i eto privelo k ogromnym ubytkam i zastoyu v razvitii informacionnyh tehnologij Otvetom na etu problemu stalo poyavlenie massy yazykov vysokogo urovnya predlagayushih samye raznye sposoby upravleniya slozhnostyu podrobnee sm paradigma programmirovaniya i yazyki dlya programmirovaniya v melkom i krupnom masshtabe Programmy na yazykah vysokogo urovnya gorazdo legche modificiruyutsya i sovsem legko perenosyatsya s kompyutera na kompyuter Na praktike naibolshee rasprostranenie poluchili yazyki tretego pokoleniya kotorye lish pretenduyut na zvanie vysokourovnevyh no realno predostavlyayut lish te vysokourovnevye konstrukcii chto nahodyat odnoznachnoe sootvetstvie instrukciyam v mashine fon Nejmana Bolee vysokourovnevymi prinyato schitat yazyki chetvyortogo i pyatogo pokoleniya K angl otnosyat yazyki zaprosov yazyki opcij i parametrov generatory prilozhenij kombinirovannye pakety baz dannyh Naibolee znachimoj podgruppoj v chetvyortom pokolenii prinyato schitat funkcionalnye gt gt gt yazyki bolshaya chast iz kotoryh yavlyaetsya yazykami vysshego poryadka gt gt gt Inogda vydelyaetsya kategoriya yazykov angl no ona ne yavlyaetsya obsheprinyatoj chashe ispolzuetsya termin yazyk sverhvysokogo urovnya angl very high level language Eto yazyki realizaciya kotoryh vklyuchaet sushestvennuyu algoritmicheskuyu sostavlyayushuyu to est kogda interpretaciya nebolshogo ishodnogo koda trebuet vesma slozhnyh vychislenij poetomu poroj takzhe govoryat chto yazyki pyatogo pokoleniya eto fakticheski yazyki chetvyortogo pokoleniya dopolnennye bazoj znanij Chashe vsego tak nazyvayut logicheskie yazyki Yazyk Si yavlyaetsya veroyatno samym nizkourovnevym v tretem pokolenii On iznachalno pozicionirovalsya kak vysokourovnevyj assembler ili krossplatformennyj assembler ego takzhe chasto nazyvayut yazykom srednego urovnya ili dazhe yazykom pokoleniya 2 5 On pozvolyaet v znachitelnoj stepeni kontrolirovat sposob realizacii algoritma s uchyotom svojstv tipichnyh dlya vesma bolshogo chisla apparatnyh arhitektur no est platformy pod kotorye realizacii Si dazhe s v nestandartnom vide otsutstvuyut po prichine principialnoj nevozmozhnosti ili necelesoobraznosti ih sozdaniya Klassifikaciya potomka Si yazyka C vyzyvaet spory ego neredko nazyvayut vysokourovnevym nesmotrya na to chto tehnicheski ego semantika i sistema tipov malo otlichayutsya ot teh na kotoryh osnovan Si So vremenem poyavilis i drugie yazyki srednego urovnya naprimer LLVM C Oni preimushestvenno prednaznacheny ne dlya napisaniya koda chelovekom a dlya generacii promezhutochnogo koda iz bolee vysokourovnevyh yazykov s tem chtoby obespechit luchshee razdelenie kompilyatorov na frontend i bekend V bolshinstve sluchaev yazyki vysokogo urovnya porozhdayut mashinnyj kod bolshego razmera i ispolnyayutsya medlennee Odnako nekotorye yazyki vysokogo urovnya dlya algoritmicheski i strukturno slozhnyh programm mogut davat zametnoe preimushestvo v effektivnosti ustupaya nizkourovnevym lish na nebolshih i prostyh programmah podrobnee sm effektivnost yazykov Inache govorya potencialnaya effektivnost yazyka menyaetsya s povysheniem ego urovnya nelinejno i voobshe neodnoznachno Pri etom skorost razrabotki i trudoyomkost modifikacii ustojchivost i drugie pokazateli kachestva v slozhnyh sistemah okazyvayutsya gorazdo vazhnee predelno vozmozhnoj skorosti ispolneniya oni obespechivayut razlichie mezhdu programmoj chto rabotaet i toj chto net tak chto ekonomicheski bolee celesoobrazna evolyuciya apparatnogo obespecheniya ispolnenie bolshego chisla instrukcij v edinicu vremeni i metodov optimiziruyushej kompilyacii bolee togo poslednie desyatiletiya evolyuciya apparatnogo obespecheniya dvizhetsya v napravlenii podderzhki metodov optimiziruyushej kompilyacii dlya yazykov vysokogo urovnya K primeru avtomaticheskaya sborka musora prisutstvuyushaya v bolshinstve vysokourovnevyh yazykov programmirovaniya schitaetsya odnim iz vazhnejshih uluchshenij blagotvorno povliyavshih na skorost razrabotki Poetomu v nashi dni yazyki nizkogo urovnya ispolzuyutsya tolko v zadachah sistemnogo programmirovaniya Rasprostraneno oshibochnoe otozhdestvlenie sistemnogo programmirovaniya s nizkourovnevym osnovannoe na mnenii chto esli neobhodim tochnyj kontrol za resursami to yazyk sam ne dolzhen predpolagat masshtabnyh preobrazovanij inache vse usiliya programmista okazhutsya naprasnymi V dejstvitelnosti est primery oprovergayushie eto Tak yazyk BitC yavlyaetsya funkcionalnym gt gt gt yazykom vysshego poryadka gt gt gt to est predstavitelem chetvyortogo pokoleniya vysokourovnevym no celikom i polnostyu orientirovan imenno na sistemnoe programmirovanie i uverenno konkuriruet po skorosti s Si Yazyki tretego pokoleniya C i Limbo razrabatyvalis dlya ispolzovaniya odnovremenno kak v sistemnom programmirovanii s celyu povysheniya otkazoustojchivosti operacionnoj sistemy tak i v prikladnom eto obespechivaet edinstvo platformy chto sokrashaet poteri pri translyacii Bezopasnye i nebezopasnye yazyki Sovremennye kompyutery predstavlyayut slozhnye dannye realnogo mira v vide chisel v pamyati kompyutera Eto vvodit v disciplinu programmirovaniya risk chelovecheskogo faktora v tom chisle veroyatnost oshibok dostupa k pamyati Poetomu mnogie yazyki programmirovaniya soprovozhdayutsya sredstvom kontrolya smysla operacij nad dvoichnymi dannymi na osnove soprovozhdayushej ih logicheskoj informacii sistemoj tipov Odnako sushestvuyut i bestipovye yazyki naprimer Forth Bolshinstvo yazykov assemblera yavlyayutsya bestipovymi no sushestvuyut i angl nacelennye na obespechenie minimalnoj bezopasnosti nizkourovnevyh programm Sistemy tipov yazykov delyatsya na dinamicheskie potomki Lisp Smalltalk APL i staticheskie a poslednie v svoyu ochered delyatsya na nepolimorfnye potomki Algola i BCPL i polimorfnye potomki ML Krome togo oni delyatsya na yavnye angl explicit i neyavnye angl implicit drugimi slovami trebuyushie yavnoj deklaracii tipov dlya obektov v programme ili staticheski vyvodyashie ih samostoyatelno Sistemy tipov byvayut silnye i slabye Silnaya sistema tipov naznachaet tip dlya vsyakogo vyrazheniya raz i navsegda kogda by konkretno eto ni proishodilo v dinamike ili v statike a slabaya pozvolyaet vposledstvii perenaznachat tipy Silnaya tipizaciya poroj oshibochno otozhdestvlyaetsya so staticheskoj V obshem i celom yazyk nazyvaetsya bezopasnym esli programmy na nyom kotorye mogut byt prinyaty kompilyatorom kak pravilno postroennye v dinamike nikogda ne vyjdut za ramki dopustimogo povedeniya Eto ne znachit chto takie programmy ne soderzhat oshibok voobshe Termin horoshee povedenie programmy angl well behavior oznachaet chto dazhe esli programma soderzhit nekij bag v chastnosti logicheskuyu oshibku to ona tem ne menee ne sposobna narushit celostnost dannyh i obrushitsya angl crash Hotya terminy neformalny bezopasnost nekotoryh yazykov naprimer Standard ML matematicheski dokazuema Bezopasnost drugih naprimer Ada byla obespechena ad hoc obrazom bez obespecheniya konceptualnoj celostnosti chto mozhet obernutsya katastrofami esli polozhitsya na nih v otvetstvennyh zadachah sm konceptualnaya celostnost yazykov Neformalnaya terminologiya byla populyarizovana Robinom Milnerom odnim iz avtorov teorii formalnoj verifikacii i sobstvenno yazyka Standard ML Stepen kontrolya oshibok i reakciya yazyka na nih mogut razlichatsya Prostejshie sistemy tipov zapreshayut k primeru vychitat stroku iz celogo chisla Odnako celymi chislami mogut predstavlyatsya i millimetry i dyujmy no bylo by logicheskoj oshibkoj vychitat dyujmy iz millimetrov Razvitye sistemy tipov pozvolyayut a naibolee razvitye prinuzhdayut vnedryat v programmu takuyu logicheskuyu informaciyu Dlya EVM ona yavlyaetsya izbytochnoj i polnostyu udalyaetsya pri porozhdenii mashinnogo koda tem ili inym obrazom gt gt gt V chastnosti Standard ML ne dopuskaet nad dannymi nikakih operacij krome teh chto razresheny yavno i formalizovany odnako programmy na nyom vsyo zhe mogut zavershatsya porozhdeniem neobrabotannogo isklyucheniya naprimer pri popytke deleniya na nol Ego potomok MLPolyR garantiruet takzhe i otsutstvie neobrabotannyh isklyuchenij Takie yazyki nazyvayutsya tipobezopasnymi Java i C menee strogi i kontroliruyut lish utechki pamyati poetomu v ih kontekste chashe ispolzuyut bolee uzkij termin bezopasnost tipov v otnoshenii dostupa k pamyati angl memory type safety ili chashe prosto bezopasnost dostupa k pamyati Silno dinamicheski tipiziruemye yazyki otslezhivayut povedenie programm v dinamike chto vlechyot snizhenie bystrodejstviya i reagiruyut na oshibki porozhdeniem isklyucheniya Vse eti yazyki orientirovany na praktichnost predostavlyaya optimalnyj kompromiss mezhdu presecheniem seryoznyh sboev i vysokoj skorostyu razrabotki programm Sushestvuyut yazyki prednaznachennye dlya napisaniya programm kotorye verny po postroeniyu to est obespechivayut garantiyu togo chto ispolnimaya programma po strukture i povedeniyu budet tozhdestvenna eyo specifikacii sm angl zavisimyj tip Kak sledstvie programmy na takih yazykah chasto nazyvayut ispolnimymi specifikaciyami sm Sootvetstvie Karri Govarda Trudoyomkost razrabotki na takih yazykah vozrastaet na poryadki k tomu zhe oni trebuyut ochen vysokoj kvalifikacii razrabotchika poetomu ih primenyayut tolko v formalnoj verifikacii Primerami takih yazykov sluzhat Agda Coq Yazyki Si i ego potomok C yavlyayutsya nebezopasnymi V programmah na nih obshirno vstrechayutsya situacii oslableniya tipizacii privedenie tipov i pryamogo eyo narusheniya kalambur tipizacii tak chto oshibki dostupa k pamyati yavlyayutsya v nih statisticheskoj normoj no krah programmy nastupaet daleko ne srazu chto zatrudnyaet poisk mesta oshibki v kode Samye moshnye sistemy staticheskogo analiza dlya nih takie kak PVS Studio sposobny obnaruzhivat ne bolee 70 80 oshibok no ih ispolzovanie obhoditsya ochen dorogo kak v finansovom smysle tak i s tochki zreniya trudoyomkosti i naukoyomkosti Dostoverno zhe garantirovat bezotkaznost programm na etih yazykah nevozmozhno ne pribegaya k formalnoj verifikacii chto ne tolko eshyo dorozhe no i trebuet specialnyh znanij U Si est i bezopasnye potomki takie kak Cyclone Yazyk Forth ne pretenduet na zvanie bezopasnogo no tem ne menee na praktike sushestvovanie programm sposobnyh povredit dannye pochti isklyucheno tak kak soderzhashaya potencialno opasnuyu oshibku programma avarijno zavershaetsya na pervom zhe testovom zapuske prinuzhdaya k korrekcii ishodnogo koda V soobshestve Erlang prinyat podhod let it crash s angl daj ej obrushitsya takzhe nacelennyj na rannee vyyavlenie oshibok Kompiliruemye interpretiruemye i vstraivaemye yazyki Mozhno vydelit tri principialno raznyh sposoba realizacii yazykov programmirovaniya kompilyaciya interpretaciya i vstraivanie Rasprostraneno zabluzhdenie soglasno kotoromu sposob realizacii yavlyaetsya prisushim konkretnomu yazyku svojstvom V dejstvitelnosti eto delenie do opredelyonnoj stepeni uslovno V ryade sluchaev yazyk imeet formalnuyu semantiku orientirovannuyu na interpretaciyu no vse ili pochti vse ego dejstvitelnye realizacii yavlyayutsya kompilyatorami poroj vesma effektivno optimiziruyushimi primerami mogut sluzhit yazyki semejstva ML takie kak Standard ML Haskell Est yazyki razmyvayushie granicy mezhdu interpretaciej i kompilyaciej naprimer Forth Kompilyaciya oznachaet chto ishodnyj kod programmy snachala preobrazuetsya v celevoj mashinnyj kod specialnoj programmoj nazyvaemoj kompilyatorom v rezultate poluchaetsya ispolnimyj modul kotoryj uzhe mozhet byt zapushen na ispolnenie kak otdelnaya programma Interpretaciya zhe oznachaet chto ishodnyj kod vypolnyaetsya neposredstvenno komanda za komandoj inogda s minimalnoj podgotovkoj bukvalno posle razbora ishodnogo koda v AST tak chto programma prosto ne mozhet byt zapushena bez nalichiya interpretatora Vstraivanie yazyka mozhno filosofski rassmatrivat kak realizaciyu bez translyacii v tom smysle chto takoj yazyk yavlyaetsya sintaksicheskim i semanticheskim podmnozhestvom nekogo drugogo yazyka bez kotorogo on ne sushestvuet Govorya zhe bolee tochno vstraivaemye yazyki dobavlyayut k skazannomu eshyo chetyre sposoba realizacii Estestvennyj dlya yazyka sposob realizacii opredelyaetsya vremenem svyazyvaniya programmnyh elementov s ih harakteristikami V chastnosti v yazykah so staticheskoj tipizaciej peremennye i drugie obekty programmy svyazyvayutsya s tipom dannyh na etape kompilyacii a v sluchae tipizacii dinamicheskoj na etape vypolneniya kak pravilo v proizvolnoj tochke programmy Nekotorye svojstva elementov yazyka takie kak znachenie arifmeticheskih operatorov ili upravlyayushih klyuchevyh slov mogut byt svyazany uzhe na etape opredeleniya yazyka V drugih yazykah vozmozhno ih perenaznachenie sm angl Rannee svyazyvanie obychno oznachaet bo lshuyu effektivnost programmy v to vremya kak pozdnee bolshuyu gibkost cenoj kotorogo yavlyaetsya menshaya skorost i ili uslozhnenie sootvetstvuyushego etapa No dazhe iz kazalos by ochevidnyh sluchaev est isklyucheniya naprimer intensionalnyj polimorfizm otkladyvaet obrabotku staticheskoj tipizacii do etapa vypolneniya no ne zamedlyaya a povyshaya obshee bystrodejstvie po krajnej mere v teorii Dlya lyubogo tradicionno kompiliruemogo yazyka takogo kak Paskal mozhno napisat interpretator No mnogie interpretiruemye yazyki predostavlyayut nekotorye dopolnitelnye vozmozhnosti takie kak dinamicheskaya generaciya koda sm angl tak chto ih kompilyaciya dolzhna byt dinamicheskoj sm dinamicheskaya kompilyaciya Takim obrazom sostavnoj termin yazyk sposob ego realizacii v ryade sluchaev okazyvaetsya umesten Krome togo bolshinstvo sovremennyh chistyh interpretatorov ne ispolnyayut konstrukcii yazyka neposredstvenno a kompiliruyut ih v nekotoroe vysokourovnevoe promezhutochnoe predstavlenie naprimer s razymenovaniem peremennyh i raskrytiem makrokomand Bolshinstvo tradicionno interpretiruemyh ili kompiliruemyh yazykov mogut realizovyvatsya kak vstraivaemye hotya metayazykov kotorye byli by sposobny ohvatit drugie yazyki kak svoyo podmnozhestvo ne tak mnogo naibolee yarkim predstavitelem yavlyaetsya Lisp Kak pravilo skompilirovannye programmy vypolnyayutsya bystree i ne trebuyut dlya vypolneniya dopolnitelnyh programm tak kak uzhe perevedeny na mashinnyj yazyk Vmeste s tem pri kazhdom izmenenii teksta programmy trebuetsya eyo perekompilyaciya chto zamedlyaet process razrabotki Krome togo skompilirovannaya programma mozhet vypolnyatsya tolko na tom zhe tipe kompyuterov i kak pravilo pod toj zhe operacionnoj sistemoj na kotoruyu byl rasschitan kompilyator Chtoby sozdat ispolnyaemyj fajl dlya mashiny drugogo tipa trebuetsya novaya kompilyaciya Interpretiruemye yazyki pozvolyayut zapuskat programmy srazu zhe posle izmeneniya prichyom na raznyh tipah mashin i operacionnyh sistem bez dopolnitelnyh usilij a gomoikoni chnye i vovse dinamicheski peremeshat programmu mezhdu raznymi mashinami bez preryvaniya eyo raboty naibolee obshij sluchaj serializacii pozvolyaya razrabatyvat angl sm tzh sistemy vysokoj dostupnosti Portiruemost interpretiruemoj programmy opredelyaetsya tolko nalichiem realizacij interpretatorov pod te ili inye apparatnye platformy Cenoj vsego etogo stanovyatsya zametnye poteri bystrodejstviya krome togo esli programma soderzhit fatalnuyu oshibku to ob etom ne budet izvestno poka interpretator ne dojdyot do eyo mesta v kode v otlichie ot staticheski tipobezopasnyh yazykov gt gt gt Realizaciya nekotoryh yazykov naprimer Java i C zanimayut promezhutochnuyu stupen mezhdu kompilyaciej i interpretaciej A imenno programma kompiliruetsya ne v mashinnyj yazyk a v mashinno nezavisimyj kod nizkogo urovnya bajt kod Dalee bajt kod vypolnyaetsya virtualnoj mashinoj Dlya vypolneniya bajt koda obychno ispolzuetsya interpretaciya hotya otdelnye ego chasti dlya uskoreniya raboty programmy mogut byt translirovany v mashinnyj kod neposredstvenno vo vremya vypolneniya programmy po tehnologii kompilyacii na letu Just in time compilation JIT Dlya Java bajt kod ispolnyaetsya virtualnoj mashinoj Java Java Virtual Machine JVM dlya C Common Language Runtime Podobnyj podhod v nekotorom smysle pozvolyaet ispolzovat plyusy kak interpretatorov tak i kompilyatorov Yazyki pervogo i vysshego poryadka Nachalnye svedeniya Matematicheskaya logika klassificiruetsya po poryadku sm logika pervogo poryadka i logika vysshego poryadka Eta terminologiya estestvennym obrazom nasleduetsya informatikoj obrazuya semantiki sootvetstvenno pervogo i vysshego poryadka Yazyki pervogo poryadka naprimer potomki Algola takie kak Basic ili klassicheskij Pascal Virta pozvolyayut opredelyat tolko zavisimosti pervogo poryadka mezhdu velichinami Naprimer znachenie square x zavisit ot znacheniya x Takie zavisimosti nazyvayutsya funkciyami Yazyki vysshego poryadka pozvolyayut opredelyat zavisimosti mezhdu zavisimostyami Naprimer znachenie a href wiki Map D0 BF D1 80 D0 BE D0 B3 D1 80 D0 B0 D0 BC D0 BC D0 B8 D1 80 D0 BE D0 B2 D0 B0 D0 BD D0 B8 D0 B5 title Map programmirovanie map a f x zavisit ot znachenij f i x gde znachenie f samo vyrazhaet abstraktnuyu zavisimost drugimi slovami parametr f variruetsya nad mnozhestvom funkcij opredelyonnoj signatury Takie zavisimosti nazyvayutsya funkciyami vysshego poryadka Pri etom v bolshinstve sluchaev govoryat chto takoj yazyk rassmatrivaet zavisimosti funkcii kak obekty pervogo klassa inache govorya dopuskaet funkcii pervogo klassa nekotorye yazyki naprimer Si ne podderzhivayut pervoklassnye funkcii no predostavlyayut ogranichennye vozmozhnosti stroit funkcii vysshego poryadka Eti terminy vvyol angl v angl K yazykam vysshego poryadka otnosyatsya pochti vse funkcionalnye yazyki isklyucheniya ochen redki primerom funkcionalnogo yazyka pervogo poryadka dolgoe vremya yavlyalsya angl no v 2018 godu v nego byla dobavlena podderzhka pervoklassnyh funkcij S razvitiem sistem tipov razlichenie poryadkov rasprostranilos i na tipy sm konstruktor tipov Vyrazitelnost Yazyki pervogo poryadka pozvolyayut voploshat v vide koda algoritmy no ne arhitekturu programm Po mneniyu angl eto ogranichenie unasledovano yazykom Algol a ot nego drugimi yazykami iz klassicheskoj matematiki gde ispolzuyutsya tolko konstantnye operacii i funkcii odnoznachno raspoznavaemye vne konteksta i otsutstvuet sistematichnaya notaciya dlya proizvolnoj raboty s funkciyami v kachestve takoj notacii v 1930 h godah bylo postroeno lyambda ischislenie kotoroe pozzhe leglo v osnovu yazykov vysshego poryadka Shemy vzaimodejstviya komponentov procedur funkcij obektov processov i dr dlya programm na yazykah pervogo poryadka mogut sushestvovat lish na uslovnom urovne vne samih programm So vremenem byli obnaruzheny mnogokratno povtoryayushiesya odnotipnye shemy takogo roda v rezultate chego vokrug nih vystroilas samostoyatelnaya metodologiya shablony proektirovaniya Yazyki vysshego poryadka pozvolyayut voploshat takie shemy v vide ispolnimogo koda prigodnogo dlya mnogokratnogo ispolzovaniya funkcij prednaznachennyh dlya preobrazovaniya i kompozicii drugih funkcij sm naprimer konvertory i skanery v SML V rezultate resheniya kotorye na yazykah pervogo poryadka mogut byt predstavleny fragmentami programm poroj dovolno slozhnymi i gromozdkimi na yazykah vysshego poryadka mogut sokrashatsya do odnoj komandy ili voobshe ispolzovaniya elementa semantiki samogo yazyka ne imeyushego sintaksicheskogo vyrazheniya Naprimer shablon Komanda chasto primenyaemyj v yazykah pervogo poryadka ekvivalenten neposredstvenno samomu ponyatiyu funkcii pervogo klassa To zhe rasprostranyaetsya i na bolee vysokie sloi yazykov tipizaciyu sm polimorfizm v vysshih roda h i tipizaciyu tipizacii sm polimorfizm rodo v Podrobnee sm Shablony proektirovaniya Minusy Skazannoe preimushestvenno otnositsya k yazykam semantika kotoryh osnovana na lyambda ischislenii potomki Lisp ML Odnako nekotorye yazyki inoj prirody takzhe predostavlyayut vozmozhnost angl Primerami sluzhat stekovye yazyki Forth i opredelyonnaya raznovidnost obektno orientirovannyh yazykov Smalltalk CLOS sm angl Izuchenie Vvedya terminologiyu sushnostej pervogo i vtorogo klassa angl tut zhe akcentiroval vnimanie na tom chto iz lichnogo opyta i obsuzhdenij so mnozhestvom lyudej on ubedilsya chto neveroyatno tyazhelo perestat dumat o funkciyah kak ob obektah vtorogo klassa To est poryadok yazyka imeet yarko vyrazhennoe psihologicheskoe vliyanie sm gipoteza Sepira Uorfa Vladenie yazykami bolee vysokogo urovnya pomozhet programmistu dumat v terminah bolee vysokourovnevyh abstrakcij Nizkourovnevye zhe yazyki mogut navyazyvat obratnoe v svyazi s chem shiroko izvestno sleduyushee vyskazyvanie Prakticheski nevozmozhno obuchit horoshemu programmirovaniyu studentov imevshih opyt raboty s Bejsikom kak potencialnye programmisty oni mentalno iskoverkany bez nadezhdy na vosstanovlenie Originalnyj tekst angl It is practically impossible to teach good programming to students that have had a prior exposure to BASIC as potential programmers they are mentally mutilated beyond hope of regeneration Edsger Dejkstra Eto znachit chto samo po sebe ispolzovanie yazyka vysshego poryadka ne oznachaet avtomaticheski izmenenie arhitektury i povyshenie koefficienta povtornogo ispolzovaniya sm serebryanoj puli net opredelyayushim faktorom yavlyaetsya umenie konkretnogo razrabotchika primenyat sootvetstvuyushie idiomy Ponimanie vozmozhnostej i ogranichenij vysokourovnevyh konstrukcij bazovyh principov ih realizacii ne tolko dayut programmistu vozmozhnost naibolee effektivno ispolzovat izuchennyj im yazyk no i pozvolyat sozdavat i ispolzovat analogichnye mehanizmy v sluchae razrabotki na yazyke gde oni ne realizovany Razrabotchiku vladeyushemu bo lshim spektrom yazykov programmirovaniya budet proshe vybrat sredi nih instrument naibolee podhodyashij dlya resheniya stoyashej pered nim zadachi izuchit v sluchae neobhodimosti novyj yazyk ili realizovat predmetno orientirovannyj yazyk k kotorym k primeru mozhno otnesti interfejs komandnoj stroki dostatochno slozhnoj programmy Paradigma programmirovaniya Osnovnaya statya Paradigma programmirovaniya Yazyk mozhet tehnicheski dopuskat ili ne dopuskat a takzhe v toj ili inoj stepeni pooshryat ili ne pooshryat realizaciyu opredelyonnyh idiom i razrabotku v nekotoroj paradigme programmirovaniya esli takih paradigm neskolko yazyk nazyvayut multiparadigmennym Tehnicheski yazyki delyatsya naprimer na dopuskayushie pobochnye effekty i ne dopuskayushie ih Vo vtorom sluchae yazyk nazyvayut ssylochno prozrachnym i otnosyat k chisto funkcionalnoj paradigme Takzhe v kachestve paradigmy inogda rassmatrivayutsya opredelyonnye svojstva sistemy tipov i strategii vychisleniya yazyka naprimer dlya parametricheski polimorfnyh sistem tipov neredko govoryat o realizacii paradigmy obobshyonnogo programmirovaniya ili nalichie opredelyonnyh semanticheskih svojstv naprimer svojstvo gomoikoni chnosti otkryvayushee celyj spektr raznovidnostej metaprogrammirovaniya Sushestvuet massa yazykov nasledovannyh ot matematiki gt gt gt mnogie iz kotoryh formiruyut unikalnye paradigmy Yarkimi predstavitelyami yavlyayutsya Lisp vpervye voplotivshij lyambda ischislenie i polozhivshij takim obrazom nachalo funkcionalnoj paradigme Smalltalk vpervye voplotivshij obektno orientirovannuyu paradigmu poyavivshayasya za mnogo let do nego Simula podderzhivala ponyatie klassa no voploshala strukturnuyu paradigmu i stekovyj yazyk Forth voploshayushij konkatenativnuyu paradigmu Nizkourovnevye yazyki orientirovany na specifiku konkretnogo apparatnogo obespecheniya i obychno ne sootnosyatsya s kakoj libo paradigmoj krome imperativnoj sm dalee hotya konkretnyj razrabotchik na nih razumeetsya mozhet ideologicheski sledovat opredelyonnym tendenciyam Odnako nekotorye arhitektury mogut realizovyvat netipichnye vozmozhnosti sushestvenno vliyayushie na podhod k dekompozicii zadachi v nizkourovnevom programmirovanii naprimer parallelizm na urovne komand S tochki zreniya obshej filosofii programmirovaniya yazyki delyatsya na imperativnye i deklarativnye Imperativnye yazyki podrazumevayut programmirovanie posredstvom poshagovogo instruktirovaniya mashiny detalnogo ukazaniya uzhe pridumannogo programmistom sposoba realizacii tehnicheskogo zadaniya termin imperativ oznachaet prikaznoj poryadok Deklarativnye yazyki podrazumevayut programmirovanie posredstvom opisaniya trebuemogo rezultata v terminah predmetnoj oblasti i vozlozhenie raboty po polucheniyu sposoba realizacii polnostyu ili pochti polnostyu na avtomatiku kompilyator biblioteku makropodsistemu i dr s primeneniem metodov angl Na takih yazykah v bolshinstve sluchaev dostatochno prosto perekompilirovat programmu pod opredelennuyu arhitekturu i operacionnuyu sistemu a adaptacii ishodnogo koda ne trebuetsya termin deklarativ oznachaet opisanie Chem tochnee yazyk pozvolyaet kontrolirovat kak trebuemaya funkcionalnost budet ispolnyatsya na dannom processore s uchyotom osobennostej ego arhitektury tem legche obespechit dostoverno vysokoe bystrodejstvie i kompaktnost programm Oborotnoj storonoj medali yavlyaetsya snizhenie portiruemosti dlya perenosa programmy na druguyu apparatnuyu platformu eyo pridyotsya perekodirovat s nulya a zachastuyu i pereproektirovat stol silny mogut byt razlichiya mezhdu arhitekturami processorov hotya v ryade sluchaev i udayotsya obespechit horoshuyu portiruemost koda mezhdu bolshim chislom processornyh arhitektur Na deklarativnyh yazykah v bolshinstve sluchaev dostatochno prosto perekompilirovat programmu pod opredelennuyu arhitekturu i operacionnuyu sistemu a adaptacii ishodnogo koda ne trebuetsya Poroj dlya nih primenyaetsya kompilyaciya v yazyki bolee nizkogo urovnya v tom chisle v yazyki tretego pokoleniya v bolshinstve sluchaev eto Si no inogda v roli celevyh platform vystupayut Java JavaScript Ada i dr V sootvetstvii s etim neredko vydelyayutsya kak yazyki yazyki orientirovannye na mashinu i chto yazyki yazyki orientirovannye na cheloveka Rasprostraneno zabluzhdenie otnositelno togo gde nahoditsya verhnij porog stepeni vysokourovnevosti ili deklarativnosti glyadya na programmy na istinnyh chto yazykah opytnye programmisty na kak yazykah zachastuyu ne mogut poverit chto pered nimi dejstvitelno ispolnimyj kod Vsledstvie etogo odnoznachnoe otnesenie yazykov tretego pokoleniya k imperativnym kak yazykam zachastuyu vyzyvaet spory i popytki prodemonstrirovat na nih deklarativnye fragmenty koda V dejstvitelnosti kak vyshe otmecheno gt gt gt yazyki tretego pokoleniya predostavlyayut lish te vysokourovnevye konstrukcii chto nahodyat odnoznachnoe sootvetstvie instrukciyam v mashine fon Nejmana Sushestvuyut processornye arhitektury pod kotorymi ispolzovanie mnogih rasprostranyonnyh yazykov tretego pokoleniya zatrudneno ili nevozmozhno i v luchshem sluchae razrabatyvayutsya specializirovannye yazyki tretego pokoleniya kak naprimer Occam dlya transpyuterov ili shejdernye yazyki dlya graficheskih processorov Krome togo zachastuyu upuskaetsya iz vidu chto obektno orientirovannoe programmirovanie v bolshinstve sluchaev predstavlyaet soboj odnoznachno zadannuyu cepochku obmena obektov soobsheniyami s celyu izmeneniya ih sostoyaniya chto podpadaet pod opredelenie imperativ isklyuchenie mozhet sostavlyat agentnoe modelirovanie Chto yazyki mogut ispolzovatsya ne tolko dlya razrabotki prikladnyh programm pod ekzotichnye sistemy no dazhe dlya modelirovaniya vnutri yazyka modeli vypolneniya samih etih sistem sm naprimer Clash Kak i s drugimi vidami klassifikacii eto delenie yazykov ne yavlyaetsya strogim a predstavlyaet svoego roda gradaciyu K tomu zhe razvitye mehanizmy abstrakcii pozvolyayut povyshat stepen deklarativnosti yazyka s ishodno imperativnoj semantikoj podrobnee sm vstraivaemyj yazyk Mnogie deklarativnye yazyki takzhe predusmatrivayut imperativnye vozmozhnosti Bolee togo dlya mnozhestva zadach polnostyu avtomaticheskoe porozhdenie po nastoyashemu effektivnoj realizacii algoritmicheski nerazreshimo tak chto na praktike dazhe na chto yazykah neredko ispolzuyutsya opredelyonnye algoritmicheskie uhishreniya hotya i sushestvuyut metody polucheniya effektivnyh realizacij iz osnovannyh na opredelenii realizacij v lob takie kak izobretyonnaya v SSSR superkompilyaciya No v celom funkcionalnye i logicheskie yazyki prinyato otnosit k deklarativnym a procedurnye i obektno orientirovannye k imperativnym Uzhe pri ispolzovanii yazykov vtorogo pokoleniya nachala formirovatsya paradigma procedurnogo programmirovaniya trebuyushaya proizvodit dekompoziciyu krupnyh procedur v cepochku ierarhicheski svyazannyh bolee melkih S poyavleniem yazykov tretego pokoleniya sformirovalos sperva strukturnoe programmirovanie kak pryamoe razvitie procedurnogo a zatem i modulnoe Vse eti paradigmy realizovany vo vseh pokoleniyah yazykov nachinaya s tretego oni primenyayutsya i v imperativnyh i v deklarativnyh yazykah naprimer v funkcionalnyh yazykah strukturnoe programmirovanie realizuetsya posredstvom leksicheskoj oblasti vidimosti sm angl i zamykanie Sredi funkcionalnyh yazykov vydelyayutsya chisto funkcionalnye angl purely functional sootvetstvuyushie vyshe upomyanutoj tehnicheskoj kategorii ssylochno prozrachnyh ostalnye nazyvayutsya ne chisto funkcionalnymi angl impurely functional ili prosto yazykami vysshego poryadka gt gt gt Sredi yazykov logicheskogo programmirovaniya pomimo tradicionnogo vydelyaetsya neskolko osobyh form naprimer programmirovanie ogranicheniyami Sushestvuet osobyj sluchaj obektno orientirovannoj paradigmy angl sm takzhe Yazyki pervogo i vysshego poryadka Rasprostraneno mnenie chto vo mnogih procedurnyh yazykah vozmozhno idiomaticheskoe izobrazhenie OOP odnako eto neverno esli govorit ob OOP vysshego poryadka Eshyo po odnoj shkale mozhno vystroit yazyki po stepeni vozmozhnosti izbavitsya ot tochek sledovaniya dlya realizacii bestochechnogo stilya Po odnu storonu v etom sluchae okazhutsya naprimer Si i Paskal po druguyu Joy APL J K Bestochechnyj stil shiroko primenyaetsya v Haskell podderzhivaetsya v OCaml Yazyki dlya programmirovaniya v melkom i krupnom masshtabe Osnovnaya statya Programmirovanie v krupnom i melkom masshtabe angl Programmy mogut reshat zadachi angl odna programma stroit grafik dlya zadannoj funkcii a drugaya upravlyaet dokumentooborotom krupnogo predpriyatiya Razlichnye yazyki programmirovaniya rasschitany na raznyj ishodnyj masshtab zadachi i chto eshyo bolee vazhno po raznomu spravlyayutsya s rostom slozhnosti programmnyh sistem Klyuchevym kachestvom yazyka ot kotorogo zavisit kak menyaetsya trudoyomkost razrabotki po mere narashivaniya sistemy yavlyaetsya abstrakciya to est vozmozhnost otdelyat smysl povedenie komponenta sistemy ot sposoba ego realizacii Rost slozhnosti lyuboj programmnoj sistemy principialno ogranichen tem predelom do kotorogo eshyo mozhno sohranyat kontrol nad nej esli obyom informacii trebuemyj dlya osmysleniya komponenta etoj sistemy prevyshaet vmestimost mozga odnogo cheloveka to etot komponent ne budet do konca ponyat Stanet chrezvychajno tyazhelo dorabatyvat ego ili ispravlyat oshibki i ot kazhdoj korrektirovki mozhno zhdat vvedeniya novyh oshibok iz za etogo nepolnogo znaniya Originalnyj tekst angl There is a fundamental limit to complexity of any software system for it to be still manageable if it requires more than one brainfull of information to understand a component of the system then that component will not be understood fully It will be extremely difficult to make enhancements or fix bugs and each fix is likely to introduce further errors due to this incomplete knowledge Martin Ward Language Oriented Programming Takie pokazateli kachestva ishodnogo koda kak testiruemost i modificiruemost ochevidnym obrazom opredelyayutsya koefficientom povtornogo ispolzovaniya Eto mozhet oznachat kak primenenie raznyh funkcij k odnomu i tomu zhe komponentu tak i vozmozhnost primenyat odnu i tu zhe funkciyu k raznym komponentam Parametricheski polimorfnye osobenno vyvodyashie i dinamicheskie sistemy tipov sushestvenno povyshayut koefficient povtornogo ispolzovaniya naprimer funkciya vychislyayushaya dlinu massiva budet primenima k beskonechnomu mnozhestvu tipov massivov Esli zhe yazyk trebuet v signature funkcii ukazyvat konkretnyj sposob realizacii vhodnyh dannyh to etot koefficient rezko stradaet Naprimer Pascal kritikovalsya za neobhodimost vsegda ukazyvat konkretnyj razmer massiva a C za neobhodimost razlichat i gt pri obrashenii k komponentam angl Yazyki vysshego poryadka gt gt gt pozvolyayut vydelyat shemy vzaimodejstviya funkcij v mnogokratno vyzyvaemyj blok koda funkciyu vysshego poryadka a naibolshih znachenij povtornoe ispolzovanie dostigaet pri perehode k yazyku bolee vysokogo urovnya pri neobhodimosti specialno razrabatyvaemogo dlya dannoj zadachi v etom sluchae povtorno ispolzuetsya yazyk a ne odna funkciya a sama razrabotka yazyka mozhet vestis s intensivnym povtornym ispolzovaniem komponentov kompilyatora S razvitiem yazykov poyavilis osobye prisushie isklyuchitelno programmirovaniyu ne trebovavshiesya ranee v matematike kategorii komponentov i zavisimostej monady klassy tipov polimorfnye vetvleniya aspekty i dr Ih ispolzovanie pozvolyaet vyrazhat bo lshuyu funkcionalnost v tom zhe obyome koda tem samym perevodya angl v bolee melkij masshtab Drugie fundamentalnye problemy svyazannye so slozhnostyu krupnyh sistem lezhat vne samih programm eto vzaimodejstvie razrabatyvayushih eyo programmistov mezhdu soboj dokumentirovanie i t d Pomimo obespecheniya abstrakcii ne poslednyuyu rol v etom igraet konceptualnaya celostnost gt gt gt vybrannogo yazyka programmirovaniya Krome svojstv semantiki yazyka povtornoe ispolzovanie mozhet obespechivatsya posredstvom modulnoj struktury programmnoj sistemy ili kompleksa Bolee togo skol by gibkim ni byl yazyk rabota s ogromnymi obyomami kodov osobenno mnozhestvom lyudej trebuet ih dekompozicii na moduli tem ili inym obrazom Modulnaya struktura podrazumevaet ne prosto razbienie monolitnogo ishodnogo koda programmy na mnozhestvo tekstovyh fajlov a obespechenie abstrakcii v bolee krupnom masshtabe to est opredelenie interfejsa dlya vsyakogo logicheski zavershyonnogo fragmenta i sokrytie detalej ego realizacii V zavisimosti ot primenyonnyh v yazyke pravil opredeleniya oblasti vidimosti yazyk mozhet dopuskat ili ne dopuskat avtomaticheskoe opredelenie zavisimostej Esli soglasno pravilam vozmozhen konflikt imyon to avtoopredelenie zavisimostej nevozmozhno i togda v zagolovke modulya trebuetsya yavno perechislyat imena modulej komponenty kotoryh v nyom ispolzuyutsya Nekotorye yazyki naprimer Basic ili klassicheskij Pascal Virta orientirovany isklyuchitelno na razrabotku melkih strukturno prostyh programm Oni ne obespechivayut ni razvitoj sistemy modulej ni gibkosti konkretnyh fragmentov Yazyk Si sozdavalsya kak vysokourovnevyj assembler chto samo po sebe ne predpolagaet razrabotku sistem vyshe nekotorogo poroga slozhnosti poetomu podderzhka krupnomasshtabnogo programmirovaniya v nego zalozhena takzhe ne byla Nekotorye yazyki vysokogo i sverhvysokogo urovnya Erlang Smalltalk Prolog predostavlyayut v kachestve bazovyh primitivnyh elementov koncepcii kotorye v drugih yazykah predstavlyayutsya konstruktivno i algoritmicheski slozhnymi processy klassy bazy znanij analogichno raznoobraznym matematicheskim ischisleniyam sm takzhe konceptualnaya celostnost yazykov Poetomu takie yazyki neredko rassmatrivayutsya v roli predmetno specifichnyh na nih vyglyadyat prostymi nekotorye no daleko ne vse zadachi kotorye na drugih yazykah vyglyadyat slozhnymi Odnako rasshirenie funkcionalnosti v drugih aspektah na etih yazykah mozhet oborachivatsya zatrudneniyami Standard ML i ego rodstvenniki rasslaivayutsya na dva yazyka iz kotoryh odin yazyk yadro angl core language orientirovan na razrabotku prostyh programm a drugoj yazyk modulej angl module language sootvetstvenno na nelinejnuyu komponovku ih v slozhnye programmnye sistemy So vremenem byli postroeny varianty sliyaniya ih voedino 1ML Mnogie drugie yazyki takzhe vklyuchayut sistemy modulej no bolshinstvo iz nih yavlyayutsya yazykami modulej pervogo poryadka gt gt gt Yazyk modulej ML yavlyaetsya edinstvennym v svoyom rode yazykom modulej vysshego poryadka gt gt gt Yazyki Lisp i Forth pozvolyayut narashivat sistemy proizvolno i bezgranichno v tom chisle pozvolyaya sozdavat vstraivaemye predmetno specifichnye yazyki vnutri sebya kak svoyo sintaksicheskoe i semanticheskoe podmnozhestvo poetomu ih neredko nazyvayut metayazykami Naibolee populyarnym na segodnyashnij den podhodom k resheniyu problemy kompleksirovaniya yavlyaetsya obektno orientirovannoe programmirovanie hotya uspeshnost ego primeneniya na protyazhenii desyatiletij sushestvovaniya neodnokratno podvergalas skepsisu i do sih por otsutstvuyut dostovernye dannye o tom chto on prinosit vyigrysh po sravneniyu s drugimi podhodami po tem ili inym pokazatelyam kachestva Emu soputstvuyut a poroj konkuriruyut razlichnye tehnologii reglamentirovaniya zavisimostej mezhdu komponentami metaklassy kontrakty prototipy primesi tipazhi i dr Bolee moshnym podhodom istoricheski schitalos ispolzovanie razlichnyh form metaprogrammirovaniya to est avtomatizacii samogo processa razrabotki na razlichnyh urovnyah Principialno razlichaetsya metaprogrammirovanie vneshnee po otnosheniyu k yazyku i dostupnoe v samom yazyke Pri ispolzovanii yazykov pervogo poryadka gt gt gt slozhnost rastushih programmnyh sistem bystro perehodit porog sposobnostej cheloveka po vospriyatiyu i pererabotke informacii poetomu primenyayutsya vneshnie sredstva predvaritelnogo vizualnogo proektirovaniya pozvolyayushie obozrevat slozhnye shemy v uproshyonnom vide i v umenshennom masshtabe i zatem avtomaticheski porozhdat karkas koda sm CASE V soobshestvah razrabotchikov ispolzuyushih yazyki vysshego poryadka gt gt gt dominiruet pryamo protivopolozhnyj podhod presekat samu vozmozhnost vyhoda slozhnosti iz pod kontrolya za schyot razdeleniya informacionnyh modelej na nezavisimye sostavlyayushie i razrabotki sredstv avtomaticheskogo preobrazovaniya odnih modelej v drugie sm yazykovo orientirovannoe programmirovanie Konceptualnaya celostnost yazykov Frederik Bruks i Ch E R Hoar delayut akcent na neobhodimosti obespecheniya konceptualnoj celostnosti informacionnyh sistem voobshe i yazykov programmirovaniya v chastnosti chtoby v kazhdoj chasti sistemy ispolzovalis shodnye sintaksicheskie i semanticheskie formy i ne trebovalos osvaivat pomimo sobstvenno sostava sistemy takzhe i pravila eyo idiomaticheskogo ispolzovaniya Hoar predskazyval chto slozhnost Ady stanet prichinoj katastrof Alan Kej otdelyaet yazyki yavlyayushiesya stilem vo ploti angl crystalization of style ot prochih yazykov yavlyayushihsya skleivaniem vozmozhnostej angl agglutination of features Greg Nelson i angl vydelyayut v osobuyu kategoriyu yazyki nasledovannye ot matematiki angl mathematically derived languages Eti akcenty prizyvayut k ispolzovaniyu yazykov voploshayushih nekoe matematicheskoe ischislenie akkuratno adaptirovannoe dlya togo chtoby byt bolee praktichnym yazykom dlya razrabotki realnyh programm Takie yazyki otlichayutsya i hotya eto oznachaet neobhodimost vruchnuyu realizovyvat mnogie rasprostranyonnye idiomy dostupnye v bolee populyarnyh yazykah v kachestve primitivov yazyka vyrazitelnost takih yazykov v celom mozhet byt sushestvenno vyshe Lish nekotorye yazyki popadayut pod etu kategoriyu bolshinstvo zhe yazykov proektiruyutsya prioritetno ishodya iz vozmozhnosti effektivnoj translyacii v mashinu Tyuringa Mnogie yazyki opirayutsya na obshie teorii no pri razrabotke oni pochti nikogda ne proveryayutsya na bezopasnost sovmestnogo ispolzovaniya konkretnyh yazykovyh elementov yavlyayushihsya chastnymi prilozheniyami etih teorij chto neizbezhno privodit k nesovmestimosti mezhdu realizaciyami yazyka Eti problemy libo ignoriruyutsya libo nachinayut prepodnositsya kak estestvennoe yavlenie angl not a bug but a feature no v dejstvitelnosti ih prichinoj yavlyaetsya to chto yazyk ne byl podvergnut matematicheskomu analizu Primery matematicheski obosnovannyh yazykov i voploshaemyh imi matematicheskih modelej Agda angl Idris intuicionistskaya teoriya tipov Martin Lyofa APL i ego potomki J K originalnaya semantika ne imeyushaya nazvaniya voploshayushaya notaciyu Ajversona dlya ischisleniya massivov chasto vstrechaetsya termin array languages Coq ischislenie induktivnyh konstrukcij Erlang ischislenie processov pervonachalno v forme modeli aktorov pozzhe takzhe postroeno obosnovanie na p displaystyle pi ischislenii Forth angl i konkatenativnyj yazyk programmirovaniya Haskell teoriya kategorij vklyuchaya dekartovo zamknutuyu kategoriyu voploshayushuyu lyambda ischislenie kategoriyu monad dlya modelirovaniya pobochnyh effektov rasshirenie sistemy tipov Hindli Milnera sistemu rodo v i dr Joy kompoziciya funkcij i gomomorfizm inache govorya chistyj konkatenativnyj yazyk programmirovaniya i kak sledstvie chistyj funkcionalnyj Lisp lyambda ischislenie Chyorcha v tom chisle yazyk S vyrazhenij voploshayushij notaciyu par Chyorcha Scheme oblagorozhennyj dialekt Lispa silnee tipizirovannyj v bolshej stepeni gomoikonichnyj ogranichivayushijsya angl i soblyudayushij angl dopolnennyj notaciej prodolzhenij ML tipizirovannoe lyambda ischislenie to est lyambda ischislenie dopolnennoe sistemoj tipov Hindli Milnera Prolog ischislenie predikatov Mercury ischislenie predikatov dopolnennoe sistemoj tipov Hindli Milnera Smalltalk teoriya mnozhestv s soblyudeniem angl SQL ischislenie kortezhej variant relyacionnogo ischisleniya v svoyu ochered osnovannogo na ischislenii predikatov pervogo poryadka SGML i ego potomki HTML XML notaciya derevev vazhnyj sluchaj grafov Unlambda kombinatornaya logika Regulyarnye vyrazheniya Refal originalnaya semantika Turchina nosyashaya nazvanie Refal mashiny ili Refal avtomata sozdannaya na osnove normalnogo algoritma Markova voploshayushaya kompoziciyu teorii avtomatov sopostavleniya s obrazcom i perepisyvaniya termov Nalichie matematicheskogo obosnovaniya dlya yazyka mozhet garantirovat ili kak minimum obeshat s ochen vysokoj veroyatnostyu nekotorye ili vse iz sleduyushih polozhitelnyh svojstv Sushestvennoe povyshenie stabilnosti programm V odnih sluchayah za schyot postroeniya dokazatelstva nadyozhnosti dlya samogo yazyka sm tipobezopasnost sushestvennogo uprosheniya formalnoj verifikacii programm i dazhe polucheniya yazyka kotoryj sam yavlyaetsya sistemoj avtomaticheskogo dokazatelstva Coq Agda V drugih sluchayah za schyot rannego obnaruzheniya oshibok na pervyh zhe probnyh zapuskah programm Forth i regulyarnye vyrazheniya Obespechenie potencialno bolee vysokoj effektivnosti programm Dazhe esli semantika yazyka daleka ot arhitektury celevoj platformy kompilyacii k nemu mogut byt primenimy formalnye metodiki globalnogo analiza programm hotya trudoyomkost napisaniya dazhe trivialnogo translyatora mozhet okazatsya vyshe Naprimer dlya yazykov Scheme i Standard ML sushestvuyut razvitye polnoprogrammno optimiziruyushie kompilyatory i superkompilyatory rezultat raboty kotoryh mozhet uverenno konkurirovat po skorosti s yazykom nizkogo urovnya Si i dazhe operezhat poslednij hotya resursoyomkost raboty samih kompilyatorov okazyvaetsya znachitelno vyshe Odna iz samyh bystryh SUBD KDB napisana na yazyke K Yazyk Scala unasledovavshij matematiku ot ML obespechivaet na platforme JVM bolee vysokuyu skorost chem rodnoj dlya neyo yazyk Java istochnik ne ukazan 2700 dnej S drugoj storony Forth imeet reputaciyu odnogo iz samyh netrebovatelnyh k resursam yazykov menee trebovatelen chem Si i ispolzuetsya dlya razrabotki prilozhenij realnogo vremeni pod samye malomoshnye EVM krome togo translyator Forta yavlyaetsya odnim iz naimenee trudoyomkih v realizacii na assemblere Zaranee izvestnyj neogranichennyj ili naoborot chyotko ocherchennyj predel rosta slozhnosti programmnyh komponentov sistem i kompleksov kotorye mozhno vyrazit sredstvami etogo yazyka s sohraneniem pokazatelej kachestva Yazyki ne imeyushie matematicheskogo obosnovaniya a imenno takie naibolee chasto primenyayutsya v mejnstrime C Java C Delphi i dr na praktike ogranichivayut realizuemuyu funkcionalnost i ili snizhayut kachestvo po mere uslozhneniya sistemy tak kak im prisushi eksponencialnye krivye rosta slozhnosti kak otnositelno raboty odnogo otdelno vzyatogo cheloveka tak i otnositelno slozhnosti upravleniya proektom v celom Prognoziruemaya slozhnost sistemy privodit libo k poetapnoj dekompozicii proekta na mnozhestvo bolee melkih zadach kazhdaya iz kotoryh reshaetsya sootvetstvuyushim yazykom libo k yazykovo orientirovannomu programmirovaniyu dlya sluchaya kogda adresuemoj yazykom zadachej yavlyaetsya kak raz opisanie semantik i ili simvolnye vychisleniya Lisp ML Haskell Refal Regulyarnye vyrazheniya Yazyki s neogranichennym predelom rosta slozhnosti programm neredko otnosyat k metayazykam chto v neposredstvennom tolkovanii termina ne verno no praktike svodimo tak kak vsyakij mini yazyk vybrannyj dlya resheniya nekotoroj podzadachi v sostave obshej zadachi mozhet byt predstavlen v vide sintaksicheskogo i semanticheskogo podmnozhestva dannogo yazyka ne trebuya translyacii Udobstvo dlya cheloveka pri reshenii zadach na kotorye etot yazyk orientirovan po svoej prirode sm problemno orientirovannyj yazyk chto v nekotoroj stepeni takzhe sposobno kosvenno povliyat na povyshenie stabilnosti rezultiruyushih programm za schyot povysheniya veroyatnosti obnaruzheniya oshibok v ishodnom kode i snizheniya dublirovaniya koda Osobye kategorii yazykov Uchebnye Predmetno specifichnye Ezotericheskie VizualnyeFormalnye preobrazovaniya i optimizaciyaV F Turchin otmechaet chto dostoinstva vsyakogo formalizovannogo yazyka opredelyayutsya ne tolko tem skol on udoben dlya neposredstvennogo ispolzovaniya chelovekom no i tem v kakoj stepeni teksty na etom yazyke poddayutsya formalnym preobrazovaniyam Naprimer ssylochnaya prozrachnost oznachaet chto parametry funkcij ne obyazany vychislyatsya pered vyzovom vmesto etogo fakticheski peredannoe vyrazhenie mozhet byt celikom podstavleno na mesto peremennoj v funkcii i povedenie funkcii ot etogo ne izmenitsya Eto otkryvaet vozmozhnosti pochti proizvolnyh angl mogut ustranyatsya nenuzhnye promezhutochnye predstavleniya dannyh reducirovatsya slozhnye cepochki vychislenij podbiratsya optimalnoe kolichestvo parallelnyh processov vvoditsya memoizaciya i pr S drugoj storony eto oznachaet polnoe otsutstvie pobochnyh effektov a eto delaet realizaciyu nekotoryh algoritmov zavedomo menee effektivnoj chem pri ispolzovanii izmenyaemogo sostoyaniya Dlya nebolshih i prostyh programm yazyki vysokogo urovnya porozhdayut mashinnyj kod bolshego razmera i ispolnyayutsya medlennee Odnako dlya algoritmicheski i strukturno slozhnyh programm preimushestvo mozhet byt na storone nekotoryh yazykov vysokogo urovnya tak kak chelovek fizicheski ne sposoben vyrazhat slozhnye koncepcii s uchyotom ih effektivnogo ispolneniya na yazyke mashiny K primeru sushestvuet benchmark na kotorom MLton i angl uverenno operezhayut GCC Est massa chastnyh prichin po kotorym avtomaticheskaya optimizaciya v hode translyacii yazykov vysokogo urovnya dayot v principe bolee vysokuyu skorost ispolneniya chem soznatelnyj kontrol sposoba realizacii na yazykah nizkogo urovnya Naprimer imeyutsya dostovernye dannye o tom chto avtomaticheskoe upravlenie pamyatyu bolee effektivno chem ruchnoe uzhe tolko pri ispolzovanii dinamicheskogo metoda sm sborka musora a sushestvuet i potencialno bolee effektivnyj staticheskij metod sm upravlenie pamyatyu na osnove regionov Dalee dlya kazhdogo mikrokonteksta neobhodimo raspredelit registry s uchyotom minimizacii obrasheniya k pamyati a eto trebuet resheniya zadachi raskraski grafa Takogo roda osobennostej mashinnoj logiki ochen mnogo tak chto obshaya informacionnaya slozhnost vozrastaet eksponencialno pri kazhdom shage na uroven vniz a kompilyaciya yazyka vysokogo urovnya mozhet vklyuchat desyatki takih shagov Sushestvuet mnozhestvo strategij avtomaticheskoj optimizacii Nekotorye universalny drugie mogut byt primenimy lish k yazykam opredelyonnoj prirody a nekotorye zavisyat ot sposoba ispolzovaniya yazyka Primerom mozhet sluzhit optimizaciya hvostovyh vyzovov i eyo chastnyj sluchaj optimizaciya hvostovoj rekursii Hotya kompilyatory mnogih yazykov osushestvlyayut optimizaciyu hvostovoj rekursii pri opredelyonnyh usloviyah lish nekotorye yazyki sposobny semanticheski garantirovat optimizaciyu hvostovyh vyzovov v obshem sluchae Standart yazyka Scheme trebuet chtoby vsyakaya realizaciya garantirovala eyo Dlya mnogih funkcionalnyh yazykov ona v principe primenima no lish optimiziruyushie kompilyatory eyo vypolnyayut V yazykah vrode Si ili C ona mozhet proizvoditsya lish v opredelyonnyh sluchayah i lish pri ispolzovanii globalnogo analiza potoka upravleniya Yazyki vysshego poryadka v bolshinstve sluchaev vynuzhdeny ispolnyatsya medlennee chem yazyki pervogo poryadka Prichiny lezhat kak v samoj dekompozicii linejnogo koda na cepochku vlozhennyh vyzovov tak i v vytekayushih osobennostyah nizkourovnevogo predstavleniya funkcij sm zamykanie i dannyh obyornutoe angl boxed tegovoe Odnako sushestvuyut tehniki agressivnoj optimizacii programm pozvolyayushie reducirovat yazyki vysshego poryadka do yazykov pervogo poryadka sm defunkcionalizaciya MLton angl Populyarnost yazykovOsnovnaya statya Izmerenie populyarnosti yazykov angl Dopolnitelnye svedeniya Indeks TIOBE Trudno opredelit kakoj yazyk programmirovaniya naibolee populyaren tak kak znachenie slova populyarnost zavisit ot konteksta v anglijskom yazyke ispolzuetsya termin usage imeyushij eshyo bolee razmytoe znachenie Odin yazyk mozhet otnimat naibolshee kolichestvo cheloveko chasov na drugom napisano naibolshee chislo strok koda tretij zanimaet naibolshee processornoe vremya a chetvyortyj naibolee chasto sluzhit issledovatelskoj bazoj v akademicheskih krugah Nekotorye yazyki ochen populyarny dlya konkretnyh zadach Naprimer Kobol do sih por dominiruet v korporativnyh data centrah Fortran v nauchnyh i inzhenernyh prilozheniyah variacii yazyka Si v sistemnom programmirovanii a razlichnye potomki ML v formalnoj verifikacii istochnik ne ukazan 2730 dnej Drugie yazyki regulyarno ispolzuyutsya dlya sozdaniya samyh raznoobraznyh prilozhenij Sushestvuyut razlichnye metriki dlya izmereniya populyarnosti yazykov kazhdaya iz kotoryh razrabotana s pristrastiem k opredelyonnomu smyslu ponyatiya populyarnosti podschyot chisla vakansij upominayushih yazyk kolichestvo prodannyh knig uchebnikov ili spravochnikov ocenka kolichestva strok koda napisannyh na yazyke chto ne prinimaet v raschyot redko publikuemye sluchai ispolzovaniya yazykov podschyot upominanij yazyka v zaprosah poiskovikov Sleduet zametit chto vysokie ocenki po etim pokazatelyam ne tolko nikak ne svidetelstvuyut o vysokom tehnicheskom urovne yazyka i ili optimizacii rashodov pri ego ispolzovanii no i naprotiv poroj mogut govorit ob obratnom Naprimer yazyk Kobol vhodit v chislo liderov po kolichestvu napisannyh na nyom strok koda no prichinoj etomu yavlyaetsya krajne nizkij pokazatel modificiruemosti koda chto delaet etot kod ne povtorno ispolzuemym a legacy kodom Kak sledstvie podderzhka programm na Kobole v kratkovremennoj perspektive obhoditsya znachitelno dorozhe chem programm na bolshinstve sovremennyh yazykov no perepisyvanie ih s nulya potrebovalo by znachitelnyh edinovremennyh vlozhenij i mozhet sravnivatsya tolko s dolgovremennymi rashodami Tehnicheskoe nesovershenstvo Kobola obuslovleno tem chto ego razrabatyvali bez privlecheniya ekspertov v oblasti informatiki Sm takzheKompyuternyj yazyk Programmirovanie Hello world Standart oformleniya koda Teoriya yazyka programmirovaniyaPrimechaniyaISO IEC IEEE 24765 2010 Systems and software engineering Vocabulary ISO IEC 2382 1 1993 Information technology Vocabulary Part 1 Fundamental terms Sammar Qayyum Saqib Ali A Pragmatic Comparison of Four Different Programming Languages ScienceOpen Preprints 2021 06 21 doi 10 14293 S2199 1006 1 SOR PP5RV1O v1 10 iyunya 2023 goda et al 2000 Plankalkul The First High Level Programming Language and its Implementation Institut fur Informatik Freie Universitat Berlin Technical Report B 3 2000 full text ot 18 oktyabrya 2014 na Wayback Machine Computer Languages 1989 1 Nevidimyj konstruktor Sozdanie kodov ponyatnyh cheloveku s 16 Linda Null Julia Lobur The essentials of computer organization and architecture Edition 2 Jones amp Bartlett Publishers 2006 ISBN 0 7637 3769 0 p 435 O Reilly Media neopr PDF Data obrasheniya 5 oktyabrya 2006 Arhivirovano iz originala 28 fevralya 2008 goda Frank da Cruz IBM Punch Cards ot 13 maya 2011 na Wayback Machine Columbia University Computing History ot 23 maya 2011 na Wayback Machine Richard L Wexelblat History of Programming Languages Academic Press 1981 chapter XIV Pratt 1979 4 6 Sopostavlenie s obrazcom s 130 132 Pratt 1979 15 Snobol 4 s 483 516 Pratt Zelkovic 2002 8 4 2 Sopostavlenie s obrazcom s 369 372 Francois Labelle neopr SourceForge Data obrasheniya 21 iyunya 2006 Arhivirovano iz originala 17 iyunya 2006 goda Hayes Brian The Semicolon Wars angl angl magazine 2006 Vol 94 no 4 P 299 303 Tetsuro Fujise Takashi Chikayama Kazuaki Rokusawa Akihiko Nakase December 1994 KLIC A Portable Implementation of KL1 Proc of FGCS 94 ICOT Tokyo December 1994 http www icot or jp ARCHIVE HomePage E html ot 25 sentyabrya 2006 na Wayback Machine KLIC is a portable implementation of a concurrent logic programming language Jim Bender neopr ReadScheme org 15 marta 2004 Data obrasheniya 27 sentyabrya 2006 Arhivirovano iz originala 24 sentyabrya 2006 goda Stroustrup Bjarne Evolving a language in and for the real world C 1991 2006 neopr Data obrasheniya 16 yanvarya 2017 20 noyabrya 2007 goda T Pratt M Zelkovic Yazyki programmirovaniya Razrabotka i realizaciya 4 Sankt Peterburg Piter 2002 S 203 688 s 4000 ekz ISBN 5 318 00189 0 Straustrup B Dizajn i evolyuciya C Sankt Peterburg Piter 2006 S 74 76 448 s 2000 ekz ISBN 5 469 01217 4 Sejbel Kodery za rabotoj 2011 Glava 12 Ken Tompson s 414 Zuev E A Krotov A N Suhomlin V A Yazyk programmirovaniya Si etapy evolyucii i sovremennoe sostoyanie neopr 4 oktyabrya 1996 Data obrasheniya 16 yanvarya 2017 18 yanvarya 2017 goda Paulson ML for the Working Programmer 1996 s 213 Paulson ML for the Working Programmer 1996 s 1 Bruks 1995 Mernik 2012 s 2 12 Paulson ML for the Working Programmer 1996 s 9 Rick Byers Garbage Collection Algorithms neopr courses cs washington edu Project for CSEP 521 Winter 2007 Data obrasheniya 28 dekabrya 2016 29 avgusta 2017 goda Appel A Critique of Standard ML 1992 Harper Practical Foundations for Programming Languages 2012 Chapter 4 Statics s 35 Mitchel 2004 6 2 1 Type Safety s 132 133 Comparison of static code analyzers CppCat Cppcheck PVS Studio and Visual Studio neopr Data obrasheniya 25 oktyabrya 2016 26 oktyabrya 2016 goda Comparing PVS Studio with other code analyzers neopr Data obrasheniya 25 oktyabrya 2016 26 oktyabrya 2016 goda Pratt 1979 2 7 Svyazyvanie i vremya svyazyvaniya s 46 51 Reynolds Theories of programming languages 1998 12 4 Deriving a First Order Semantics Strachey Fundamental Concepts 1967 3 5 1 First and second class objects s 32 34 SICP Harper Practical Foundations for Programming Languages 2012 8 2 Higher Order Functions s 67 Pratt Zelkovic 2002 1 1 Zachem izuchat yazyki programmirovaniya s 17 18 Bruce A Tate Foreword Seven Languages in Seven Weeks A Pragmatic Guide to Learning Programming Languages Pragmatic Bookshelf 2010 S 14 16 ISBN 978 1934356593 Pratt Zelkovic 2002 1 1 Zachem izuchat yazyki programmirovaniya s 18 Hudak 1998 Paulson ML for the Working Programmer 1996 s 1 Clash ot 4 yanvarya 2024 na Wayback Machine vstraivaemyj DSL na Haskell prednaznachennyj dlya modelirovaniya processorov i generacii opisanij na Verilog VHDL Aho Ulman 1992 Joyner 1996 2 2 Communication abstraction and precision s 4 Ward 1994 Paulson ML for the Working Programmer 1996 s 63 64 Kernigan about Pascal 1981 Joyner 1996 3 17 and gt s 26 Paulson ML for the Working Programmer 1996 s 177 178 Bruks 1975 1995 Bruks 1975 1995 Dostizhenie konceptualnoj celostnosti s 30 C A R Hoare The Emperor s Old Clothes Communications of the ACM 1981 Alan Kej The Early History of Smalltalk Apple Computer ACM SIGPLAN Notices vol 28 3 March 1993 14 sentyabrya 2012 goda Greg Nelson Systems Programming with Modula 3 NJ Prentice Hall Englewood Cliffs 1991 288 s ISBN 978 0135904640 Commentary on SML 1991 Aims of the Commentary s vii Thomas Noll Chanchal Kumar Roy Modeling Erlang in the Pi Calculus ACM 1 59593 066 3 05 0009 2005 1 avgusta 2014 goda Design Principles Behind Smalltalk neopr Data obrasheniya 3 iyunya 2014 19 iyunya 2014 goda kx Calibrated performance neopr Data obrasheniya 3 iyunya 2014 21 iyunya 2014 goda Luca Cardelli Typeful programming IFIP State of the Art Reports Springer Verlag 1991 22 marta 2016 goda Ward 1994 There is a fundamental limit to complexity of any software system for it to be still manageable if it requires more than one brainfull of information to understand a component of the system then that component will not be understood fully It will be extremely difficult to make enhancements or fix bugs and each fix is likely to introduce further errors due to this incomplete knowledge Glass 2004 Czarnecki et al 2004 Turchin V F Ekvivalentnye preobrazovaniya programm na REFALe Trudy CNIPIASS 6 CNIPIASS 1974 B Zorn The Measured Cost of Conservative Garbage Collection Technical Report CU CS 573 92 University of Colorado at Boulder 1993 doi 10 1 1 14 1816 Ehud Lamm Richard L Conner Cobol your age is showing angl Computerworld magazine International Data Group 1984 14 May vol 18 no 20 P ID 7 ID 18 ISSN 0010 4841 Robert L Mitchell Cobol Not Dead Yet neopr Computerworld 4 oktyabrya 2006 Data obrasheniya 27 aprelya 2014 27 aprelya 2014 goda LiteraturaGavrikov M M Ivanchenko A N Grinchenkov D V Teoreticheskie osnovy razrabotki i realizacii yazykov programmirovaniya 2013 178 s ISBN 978 5 406 02430 0 Krinickij N A Mironov G A Frolov G D Programmirovanie GIFML 1963 384 s Bratchikov I L Sintaksis yazykov programmirovaniya Nauka 1975 230 s Lavrov S S Osnovnye ponyatiya i konstrukcii yazykov programmirovaniya Finansy i statistika 1982 80 s Christopher Strachey Fundamental Concepts in Programming Languages angl 1967 12 avgusta 2017 goda Povtorno opublikovano Christopher Strachey Fundamental Concepts in Programming Languages angl 2000 T 13 S 11 49 doi 10 1023 A 1010000313106 Harold Abelson Dzherald Dzhej Sassman Dzhuli Sassman Struktura i interpretaciya kompyuternyh programm SICP Frederik Bruks Mificheskij cheloveko mesyac ili Kak sozdayutsya programmnye sistemy Addison Wesley 1975 1995 ISBN ISBN 5 93286 005 7 1 e izd Terens Pratt Yazyki programmirovaniya razrabotka i realizaciya Programming Language Design and Implementation PLDI 1 e izdanie Mir 1979 Alfred Aho Ravi Seti Dzheffri Ulman Kompilyatory principy tehnologii i instrumenty Addison Wesley Publishing Company Izdatelskij dom Vilyams 1985 2001 2003 768 s ISBN 5 8459 0189 8 rus 0 201 10088 6 orig Time Life Books Yazyk kompyutera Computer Languages M Mir 1989 T 2 240 s Understanding Computers 100 000 ekz ISBN 5 03 001148 X angl Typeful programming angl IFIP State of the Art Reports Springer Verlag 1991 Vyp Formal Description of Programming Concepts S 431 507 Robin Milner angl Commentary on Standard ML MIT Press 1991 ISBN 0 262 63132 7 1 dekabrya 2014 goda Alfred Aho Dzheffri Ulman Foundations of Computer Science Computer Science Press 1992 Andrew W Appel A Critique of Standard ML Princeton University revised version of CS TR 364 92 1992 Martin Ward Language Oriented Programming Computer Science Department Science Labs 1994 Ian Joyner A Critique of C and Programming and Language Trends of the 1990s 3rd Edition kopirajt i spisok izdanij 1996 angl ML for the Working Programmer 2nd Cambridge Great Britain Cambridge University Press 1996 492 s ISBN 0 521 57050 6 tvyordyj pereplyot 0 521 56543 X myagkij pereplyot John C Reynolds Theories of programming languages Cambridge University Press 1998 ISBN 978 0 521 59414 1 hardback 978 0 521 10697 9 paperback Andrew W Appel Modern compiler implementation in ML in C in Java neopr Cambridge Great Britain Cambridge University Press 1998 538 s ISBN ML 0 521 58274 1 hardback 0 521 60764 7 paperback Paul Hudak Modular Domain Specific Languages and Tools IEEE Computer Society Press Department of Computer Science Yale University 1998 17 oktyabrya 2013 goda Robert U Sebesta Osnovnye koncepcii yazykov programmirovaniya Concepts of Programming Languages Per s angl 5 e izd M 2001 672 s 5000 ekz ISBN 5 8459 0192 8 rus ISBN 0 201 75295 6 angl Volfengagen V E Konstrukcii yazykov programmirovaniya Priyomy opisaniya M Centr YurInfoR 2001 276 s ISBN 5 89158 079 9 Parondzhanov V D Kak uluchshit rabotu uma Algoritmy bez programmistov eto ochen prosto M Delo 2001 360 s ISBN 5 7749 0211 0 Pierce Benjamin C Types and Programming Languages MIT Press 2002 ISBN 0 262 16209 1 Perevod na russkij yazyk Pirs B Tipy v yazykah programmirovaniya 2012 680 s ISBN 978 5 7913 0082 9 Terens Pratt Marvin Zelkovic Yazyki programmirovaniya razrabotka i realizaciya 4 e izdanie Piter 2002 Klassika Computer Science ISBN 978 5 318 00189 5 Martin Campbell Kelly From Airline Reservations to Sonic the Hedgehog A History of the Software Industry MIT Press 2003 372 s History of Computing ISBN 978 1422391761 Robert Glass Fakty i zabluzhdeniya professionalnogo programmirovaniya Simvol Plyus 2004 240 s ISBN 5 93286 092 8 978 5 93286 092 2 John C Mitchell Concepts in Programming Languages Cambridge University Press 2004 ISBN 0 511 04091 1 eBook in netLibrary 0 521 78098 5 hardback K Czarnecki J O Donnell J Striegnitz W Taha DSL implementation in metaocaml template haskell and C University of Waterloo University of Glasgow Research Centre Julich Rice University 2004 5 marta 2016 goda F Byankucci Sh Uorden Pionery programmirovaniya Dialogi s sozdatelyami naibolee populyarnyh yazykov programmirovaniya SPb 2010 608 s ISBN 978 5 93286 170 7 Piter Sejbel Kodery za rabotoj Razmyshleniya o remesle programmista Simvol Plyus SPb 2011 ISBN 978 5 93286 188 2 978 1 4302 1948 4 angl angl Practical Foundations for Programming Languages version 1 37 revised 01 11 2014 licensed under the Creative Commons Attribution Noncommercial No Derivative Works 3 0 United States License 2012 544 s ot 24 oktyabrya 2015 na Wayback Machine Marjan Mernik Formal and Practical Aspects of Domain Specific Languages IGI Global 2012 ISBN 978 1 4666 2092 6 SsylkiV rodstvennyh proektahKnigi v VikiuchebnikeMediafajly na Vikisklade nedostupnaya ssylka istoriya angl bolee 2500 yazykov s kratkim opisaniem Computer Languages History angl istoriya yazykov programmirovaniya s 1954 po maj 2004 soderzhit regulyarno obnovlyaemuyu diagrammu nedostupnaya ssylka istoriya angl primery programmirovaniya na 162 yazykah angl regulyarno obnovlyaemoe issledovanie populyarnosti yazykov programmirovaniya 10 yazykov programmirovaniya kotorye stoit izuchat 2006 g ot 9 noyabrya 2011 na Wayback Machine Programming Community Index angl regulyarno obnovlyaemyj rejting populyarnosti yazykov programmirovaniya nedostupnaya ssylka istoriya angl sravnenie yazykov programmirovaniya po effektivnosti Programming Languages that are Loved angl sravnenie yazykov programmirovaniya po lyubvi i nenavisti k nim Brajan Kernigan Why Pascal is Not My Favorite Programming Language 1981 Ehud Lamm Hidden complexities of tail call tail recursion optimization LtU Classic Archives angl Lambda the Ultimate 7 dekabrya 2003 Data obrasheniya 30 noyabrya 2016 V snoskah k state najdeny nerabotosposobnye viki ssylki Ispravte korotkie primechaniya ustanovlennye cherez shablon sfn ili ego analogi v sootvetstvii s instrukciej k shablonu ili dobavte nedostayushie publikacii v razdel istochnikov Spisok snosok Paulson ML for the Working Programmer 1996 Bruks 1995
Вершина