Кіріспе

Guarded Command Language (GCL) - Эдсгер Дайкстраның EWD472 еңбегінде предикат түрлендіргіш семантикасы үшін анықтаған бағдарламалау тілі. Ол бағдарламалау ұғымдарын ықшам түрде үйлестіреді. Бұл бағдарламаны және оның дұрыстығын бірдей дамытуды жеңілдетеді, мұнда дұрыстық идеялары бағыт береді; сонымен қатар, бағдарламаның бөліктерін есептеп табуға болады. GCL-дің маңызды қасиеті – бұл беймәлімдік. Мысалы, егер операторында бірнеше шарттар орындалуы мүмкін, ал қайсысын таңдау осы оператор орындалған кезде жүріс кезінде анықталады. Бұл бағдарламалаушыны қажетсіз шешімдер қабылдаудан босатады және бағдарламаларды формалды дамытуға көмектеседі. GCL бірнеше мәндерді тағайындау операторын қамтиды. Мысалы, оператордың орындалуы оң жақтағы мәндерді есептеу арқылы, содан кейін оларды сол жақтағы айнымалыларға сақтау арқылы жүзеге асырылады. Осылайша, бұл оператор мен айнымалыларының мәнін ауыстырады. GCL-ді қолдануды талқылайтын келесі кітаптар:

Қадағалаумен басқару

Күзетілетін команда – күзетілетін командалар тілінің ең маңызды элементе. Күзетілетін командада, атынан көрініп тұрғандай, команда "күзетпен" қамтамасыз етілген. Күзет – бұл тұжырым, ол осы оператор орындалуы алдында рас болуы тиіс. Оператордың орындалу басында, күзеттің рас екенін қарастыруға болады. Сондай-ақ, егер күзет жалған болса, оператор орындалмайды. Күзетілетін командаларды қолдану бағдарламаның талаптарға сәйкес келетінін дәлелдеуді жеңілдетеді. Оператор көбінесе тағы бір күзетілетін команда болып табылады.

өткізіп тастау

skip және abort – күзетілген командалар тіліндегі маңызды операторлар. abort – бұл анықталмаған команда: ештеңе істемеуге болады. Оны тоқтатудың қажеті жоқ. Ол дәлелдеуді құрастыру кезінде бағдарламаны сипаттау үшін қолданылады, мұндай жағдайда дәлелдеу көбінесе сәтсіз аяқталады. skip – бұл бос команда: ештеңе істемеу. Ол бағдарламаның өзінде қолданылады, егер синтаксис оператор талап еткен кезде, бірақ күй өзгермеуі керек болса.

Тапсырма

Айнымалыларға шамалар тағайындайды.

Таңдау: егер

Таңдау (көбінесе "шартты оператор" немесе "егер оператор" деп аталады) - сақшыланған командалардың тізімі, олардың бірі орындалуға таңдалады. Егер бірнеше сақшы дұрыс болса, сақшысы дұрыс болған бір оператор орындалу үшін кездейсоқ таңдалады. Егер ешбір сақшы дұрыс болмаса, нәтижесі белгісіз. Сақшылардың кем дегенде біреуі дұрыс болуы керек болғандықтан, бос оператор skip жиі қажет болады. if fi операторында сақшыланған командалар жоқ, сондықтан ешқандай дұрыс сақшы болмайды. Осылайша, if fi – тоқтату операторымен тең.

Семантика

Таңдау орындалған кезде барлық күзетшілер тексеріледі. Егер күзетшілердің ешқайсысы да шын мәнді болмаса, таңдау орындалуы тоқтатылады, әйтпесе шын мәнді күзетшілердің бірі кездейсоқ таңдалып, сәйкес келетін оператор орындалады.

Қайталау: орындаңыз

Бұл қайталаудың немесе циклдың орындалуы төменде көрсетілген.

Семантика

Қайталауды орындау 0 немесе одан көп итерацияларды орындаудан тұрады, мұнда итерация (белгісіздікпен) Gi → Si түріндегі сақталған команданы таңдаудан тұрады, оның шартты өрнегі Gi шын мәнді береді және Si командасын орындаудан тұрады. Осылайша, егер барлық шартты өрнектер бастапқыда жалған болса, қайталау дереу аяқталады, ешқандай итерация орындалмайды. Сақталған командалары жоқ do od қайталауы 0 итерация орындайды, сондықтан do od командасы skip командасына тең.

Құрылымы бойынша дұрыс бағдарламалар

Күзетілген командалардың бақылау сәйкестігін торға біріктіру Refinement Calculus-қа алып келді. Бұл B әдісі сияқты формалды әдістерде автоматтандырылған, бұл бағдарламаларды олардың сипаттамаларынан формалды түрде тудыруға мүмкіндік береді.

Үлгілерді тексеру

Сақталған командалар Promela бағдарламалау тілінде қолданылады, ол SPIN модельді тексерушісінде пайдаланылады. SPIN бір уақытта жұмыс істейтін бағдарламалық жасақтаманың дұрыс жұмыс істеуін растайды.

Басқа

Perl модулі Commands::Guarded Дикстраның қорғалған командаларының детерминистік, түзетуге келтіретін түрін іске асырады.