Кіріспе

Бағдарламалау тілін анықтайтын құжаттама Компьютерлік бағдарламалауда бағдарламалау тілін анықтау (немесе стандарт немесе анықтама) - бұл бағдарламалау тілін анықтайтын құжаттамалық артефакт, сондықтан пайдаланушылар мен іске асырушылар сол тілдегі бағдарламалардың мағынасы туралы келісе алады. Спецификациялар әдетте егжей-тегжейлі және ресми болып табылады, және негізінен оларды іске асырушылар қолданады, пайдаланушылар түсініксіз жағдайда оларға сілтеме жасайды; мысалы, C ++ спецификациясына пайдаланушылар күрделілігіне байланысты жиі сілтеме жасайды. Қатынас құжаттамасына пайдаланушыларға арналған бағдарламалау тілінің сілтемесі және спецификацияның неге дәл осылай жазылғанын түсіндіретін бағдарламалау тілінің негіздемесі кіреді; олар әдетте спецификациядан гөрі бейресми.

Стандарттау

Барлық негізгі бағдарламалау тілдерінің спецификациясы жоқ, ал тілдер онжылдықтар бойы спецификациясыз өмір сүре алады және танымал бола алады. Тілде бір немесе бірнеше іске асырылуы болуы мүмкін, олардың мінез-құлқы нақты стандарт ретінде әрекет етеді, бұл мінез-құлқы спецификацияда құжатталмаған. Perl (Perl 5 арқылы) - спецификациясы жоқ тілдің көрнекті мысалы, ал PHP тек 2014 жылы, 20 жыл бойы қолданылғаннан кейін ғана нақтыланды. Тіл іске асырылуы және кейін нақтылануы, немесе нақтылануы және кейін іске асырылуы мүмкін, немесе олар бірге дамуы мүмкін, бұл бүгінгі таңда әдеттегі тәжірибе. Себебі, іске асырулар мен ерекшеліктер бір-бірін тексеруді қамтамасыз етеді: ерекшелікті жазу үшін іске асырудың мінез-құлқын дәл көрсету қажет, ал іске асыру ерекшеліктің мүмкіндігін, практикалық және дәйектілігін тексереді. ALGOL 68 (1968) -ден бастап іске асыру алдында спецификация жазудан аулақ болды, себебі іске асыру кейінге қалдырылған кезде іске асырудағы күтпеген қиындықтар туындады. Алайда, тілдер кейде іске асырылып, ресми спецификациясыз танымал болады: қолдану үшін іске асыру қажет, ал спецификация қажет, бірақ маңызды емес ("кодтық сөйлесулер"). ALGOL 68 - ол іске асырылғанға дейін толық ресми анықтамасы жасалған алғашқы (және, мүмкін, соңғылардың бірі) негізгі тіл болды.

Табиғи тіл

Ең көп қолданылатын тілдер олардың семантикасының табиғи тілдік сипаттамаларын пайдалана отырып, нақтыланады. Бұл сипаттама әдетте тілдің анықтамалық нұсқаулығы түрінде беріледі. Бұл нұсқаулықтар жүздеген беттерге жетуі мүмкін, мысалы, Java Language Specification, 3rd Ed. 596 бетті құрайды. Табиғи тілдің бағдарламалау тілінің семантикасын сипаттау құралы ретінде дәл болмауы спецификацияны түсіндіруде қиындықтарға әкелуі мүмкін. Мысалы, Java желілерінің семантикасы ағылшын тілінде көрсетілген, ал кейіннен бұл спецификация іске асырушыларға жеткілікті басшылық бермегені анықталды.

Анықтамалық іске асыру

Анықтамалық іске асыру - бұл авторитет ретінде белгіленген бағдарламалау тілінің бір іске асырылуы. Бұл іске асырудың мінез-құлқы тілінде жазылған бағдарламаның дұрыс мінез-құлқын анықтау үшін қолданылады. Бұл әдістің бірнеше қызықты қасиеттері бар. Біріншіден, ол дәл және адамның түсіндіруін қажет етпейді: бағдарламаның мағынасына қатысты дауларды бағдарламаны эталондық іске асыруда орындау арқылы шешуге болады (әгәрде іске асыру сол бағдарлама үшін детерминистік түрде әрекет етсе). Екінші жағынан, тіл семантикасын анықтамалық іске асыру арқылы анықтаудың да бірнеше ықтимал кемшіліктері бар. Олардың бастысы - бұл тілдің қасиеттерімен эталондық іске асырудың шектеулерін біріктіреді. Мысалы, егер сілтемелік іске асырылуында қате болса, онда бұл қате ауторитеттік мінез-құлық ретінде қарастырылуы керек. Тағы бір кемшілігі - бұл тілде жазылған бағдарламалар сілтемелік іске асырылудағы ерекшеліктерге сүйенуі мүмкін, бұл әртүрлі іске асырылулардағы тасымалдауға кедергі келтіреді. Дегенмен, бірнеше тілдер эталондық іске асыру әдісін сәтті қолданды. Мысалы, Perl интерпретаторы Perl бағдарламаларының авторитетті мінез-құлқын анықтайды деп саналады. Perl жағдайында бағдарламалық қамтамасыз етуді таратудың ашық бастапқы кодты моделі ешкімнің тілдің басқа бір іске асырылуын жасамауына ықпал етті, сондықтан тіл семантикасын анықтау үшін анықтамалық іске асыруды пайдалану мәселесі талқыға салынбайды.

Сынақ жиынтығы

Бағдарламалау тілінің семантикасын тесттік жиынтықпен анықтау тілінде бірқатар үлгі бағдарламаларды жазуды, содан кейін сол бағдарламалардың қалай әрекет етуі керектігін сипаттауды қамтиды - мүмкін олардың дұрыс шығыстарын жазып алу арқылы. Бағдарламалар, олардың шығыстары тілдің "сынақ жиынтығы" деп аталады. Кез келген дұрыс тілдің іске асырылуы тесттік жиынтық бағдарламаларында дәл дұрыс шығыстарды шығаруы керек. Семантикалық сипаттамаға осы тәсілдің басты артықшылығы - тілдің іске асырылуы тесттер жиынтығын өткізетінін анықтау оңай. Пайдаланушы тек тест жиынтығындағы барлық бағдарламаларды орындап, шығыстарды қажетті шығыстармен салыстыра алады. Алайда, өздігінен қолданылғанда, тест жиынтығының тәсілінің де үлкен кемшіліктері бар. Мысалы, пайдаланушылар өздерінің бағдарламаларын, олар тест жиынтығының бөлігі емес, орындағысы келеді; шын мәнінде, тек өзінің тест жиынтығындағы бағдарламаларды орындай алатын тілдің іске асырылуы негізінен пайдасыз болар еді. Бірақ тест жиынтығы өздігінен тілдің іске асырылуы тест жиынтығында жоқ кез-келген бағдарламада қалай әрекет етуі керектігін сипаттай алмайды; бұл мінез-құлықты анықтау үшін іске асырушының кейбір экстраполяциясын қажет етеді, ал әртүрлі іске асырушылар келіспеуі мүмкін. Сонымен қатар, тестілеу жиынтығын детерминистік емес болу үшін арналған немесе рұқсат етілген мінез-құлықты сынау үшін пайдалану қиын. Сондықтан, әдетте, тест жиынтықтары тек басқа тілдік сипаттама әдістерінің бірімен, мысалы, табиғи тілдік сипаттама немесе эталондық іске асырумен бірге қолданылады.